A lot of customers were requesting performance tests for BI 4.x. and so I want to share with you the experience i gathered. As a tool I used the JMeter tool as it is freely available and quite powerful. The basics on load testing are already covered very well in this article Performance Testing in BI 4.1. It is focussing on WebI as a frontend tool. What i would like to add is the specific parameters you need to set for the other frontend tools.
First a few words about the JMeter tool: JMeter is a open source software that can perform load test, performance-oriented business (functional) test, regression test, etc., on different protocols or technologies. (http://jmeter.apache.org/). JMeter is a Java desktop application with a graphical interface that uses the Swing graphical API. It can therefore run on any environment / workstation that accepts a Java virtual machine, for example − Windows, Linux, Mac, etc. It does not act like a browser and hence does no rendering on the frontend (I.e. JS will not be executed)!The protocols supported by JMeter are:
- Web – HTTP, HTTPS
- SOAP / REST
- Database via JDBC
- Message-oriented middleware (MOM) via JMS
- Mail – SMTP(S), POP3(S) and IMAP(S)
- MongoDB (NoSQL)
- Native commands or shell scripts
The main components are as follows (source: http://jmeter.apache.org/):
Samplers perform the actual work of JMeter. Each sampler (except Test Action) generates one or more sample results. The sample results have various attributes (success/fail, elapsed time, data size etc.) and can be viewed in the various listeners. Example: HTTP-Request.
Logic Controllers determine the order in which Samplers are processed. E.g. Loop Controller.
Listeners perform several roles in addition to “listening” to the test results. They also provide means to view, save, and read saved test results. E.g. Response Time Chart
Configuration elements can be used to set up defaults and variables for later use by samplers. Note that these elements are processed at the start of the scope in which they are found, i.e. before any samplers in the same scope. E.g. CSV Data Set Config, HTTP Cookie Manager
Assertions are used to perform additional checks on samplers, and are processed after every sampler in the same scope. To ensure that an Assertion is applied only to a particular sampler, add it as a child of the sampler.
Preprocessors are used to modify the Samplers in their scope. E.g. BeanShell PreProcessor
Post-Processors are applied after samplers. Note that they are applied to all the samplers in the same scope, so to ensure that a post-processor is applied only to a particular sampler, add it as a child of the sampler. E.g. Regular Expression Extractor
Timers, Test Plan
A Thread Group defines a pool of users that will execute a particular test case against your server. In the Thread Group GUI, you can control the number of users simulated (number of threads), the ramp up time (how long it takes to start all the threads), the number of times to perform the test, and optionally, a start and stop time for the test.
The HTTP(S) Test Script Recorder allows JMeter to intercept and record your actions while you browse your web application with your normal browser.
The Debug Sampler generates a sample containing the values of all JMeter variables and/or properties.
In order to script a load test the requests have to be recorded first with the HTTP(S) Test Script Recorder. You can then run the recorded requests in Jmeter. However you need to extract the relevant dynamic parameters (e.g. session ids) write them into variables and reuse them. So you need to create a extractor which writes the parameter into a variable using regular expressions and replace the session id with the newly created variable everywhere in the script. You can open the JMeter file in an editor and use copy paste in order to do that. How to do this is very well explained in this SCN article: Performance Testing in BI 4.1.
For the BI Platform the following parameters are relevant:
- bttoken (session token)
For the Lumira Designer however a few additional parameters need to be taken care of:
- sap-ext-sid (esid)
- page_id (sapbi_page.m_pageIdValue)
- session_resource_id (sapbi_page.sessionResourceId) – relevant for Planning Applications
For the page_id the extractor looks as follows:
As the suffix of the page_id is the character “=” you need to add a preprocessor to the following call to add this to the page_id variable which you just created in the regular expression extractor before:
To analyze any possible missing parameters you can run the load test script and see the results for each of the requests in the Results Tree View component. In case of errors you can analyze the responses and the request parameters.