... a little rspec(t) for Qlikview
In the past I've been asked to test a complex Qlikview Project with lots of variables, events and macros.
Manual testing was becoming too complex and boring, so I helped adding a bit of rspec to the mix.
I've been using rspec to test almost everything in the past few years and this was an intriguing new testing challenge.
step 0 - install the tools
- install Qlikview Desktop 11
- install ruby (my swiss-army integration tool of choice)
- install bundler
gem install bundler - create the project folder
mkdir rspec_for_qlik
- create a file named
Gemfileinto the project folder with the following content:
source 'https://rubygems.org'
gem 'ruby-ole'
group :development, :test do
gem 'rspec'
end
- install all the dependencies
cd rspec_for_qlik && bundle install
- create the project directories
mkdir src && mkdir lib && mkdir spec
step 1 - build a small automation lib
Before even starting to build the actual tests, I wrote a small DRY library.
It's very easy to integrate win32 ole api with ruby (and even more easily java libraries with jruby indeed) as you can see in the following example:
# coding: utf-8
require 'win32ole'
class QlikDoc < Object
attr_accessor :qv_app, :qv_doc
public
def init()
@qv_app = WIN32OLE.new("QlikTech.QlikView")
end
def open_doc(file_path)
@qv_doc = qv_app.openDoc(file_path)
end
def close_doc()
@qv_doc.closeDoc()
end
def quit()
@qv_app.quit()
end
def set_variable(variable_name, variable_value)
qv_variable = @qv_doc.Variables(variable_name)
qv_variable.SetContent(variable_value, true)
end
def get_variable(variable_name)
qv_variable = @qv_doc.Variables(variable_name)
qv_variable.GetContent.String
end
def set_selection(field_name, field_value)
@qv_doc.Fields(field_name).Select(field_value)
end
def clear_selection(field_name)
@qv_doc.Fields(field_name).Clear
end
def press_button(object_id)
qv_button=@qv_doc.GetSheetObject(object_id)
qv_button.press
end
end
save the example above in a file called lib\qlik_doc.rb
step 2 - setup a simple test
Let's create our first test.
First of all create or copy the qvw file you want to test in src\testbed.qvw.
n.b. in order to pass the test, the testbed.qvw file must contain a variable named testbed_variable
Next create a rspec test in spec\qlik_spec.rb with the following content:
# coding: utf-8
require './lib/qlik_doc'
RSpec.describe QlikDoc, :type => :model do
before(:all) do
@q = QlikDoc.new
@q.init()
end
before(:each) do
@q.open_doc("#{Dir.pwd}/src/testbed.qvw")
end
it "should set and read a variable named testbed_variable" do
@q.set_variable('testbed_variable','successful')
expect(@q.get_variable('testbed_variable')).to eq('successful')
end
after(:each) do
@q.close_doc()
end
after(:all) do
@q.quit()
end
end
step 3 - run the test!
To run the test and check the result it's a matter of typying rspec.
The output should be
Finished in 2.98 seconds (files took 0.45292 seconds to load)
1 example, 0 failures
post scriptum
All the files above are available in github
In the git project there is no testbed.qvw file. You will find, instead, a folder called testbed-prj, containing the "xml" content of the original file. In order to create the correct testbed.qvw file, just create a new and empty qvw file named testbed.qvw, open it and save it (under the hood, Qlikview will load the content from the testbed-pro folder...).
notes
front image by Mars Hill Church Seattle