qlik-stex
Version:
Qlik Sense Scalability Tools extension for testing multi apps scenarions ex. saas
143 lines (128 loc) • 4.76 kB
JavaScript
var https = require('https');
var fs = require('fs');
var log_folder = "..\\Results\\";
//create simple scenario in scalability tool and copy and paste this
var scheduler = `{
"apiVersion": "1.0",
"settings": {
"logFolder": "",
"failureBehavior": "IgnoreNContinue",
"maxDurationHours": 48,
"customOrder": []
},
"scheduledTasks":[]
}`;
var task = {
"id": 1,
"name": "Simple test",
"type": "SDKExerciserTask",
"isEnabled": true,
"settings": {
"scriptFile": "..\\Scenario\\simple.json",
"app": "dbcbea31-6f6a-4c8e-86ab-4fbc7fb14b9b",
"concurrentUsers": 1,
"rampupSeconds": 1.0,
"iterations": 1,
"durationSeconds": -1,
"server": "ec2amaz-29i3dri",
"virtualProxy": "hd",
"header": "Qlik-hd",
"usernamePrefix": "Exerciser",
"instanceNumber": 10,
"ssl": true,
"sdkExerciserPath": "..\\SDKExerciser\\Apr2018\\",
"appMode": "Open",
"newUserForEachIteration": true,
"afterIterationWait": "ConstantWait",
"afterIterationWaitTime": 2,
"maxNumberOfErrors": -1
},
"triggerType": "TimeOffset",
"triggerSettings": {
"hours": 0,
"minutes": 0,
"seconds": 1
}
};
var options = {
hostname: '',
port: 4242,
path: '/qrs/app/hublist/full?xrfkey=abcdefghijklmnop',
method: 'GET',
headers: {
'x-qlik-xrfkey' : 'abcdefghijklmnop',
'X-Qlik-User' : 'UserDirectory= Internal; UserId= sa_repository '
},
key: fs.readFileSync("C:\\ProgramData\\Qlik\\Sense\\Repository\\Exported Certificates\\.Local Certificates\\client_key.pem"),
cert: fs.readFileSync("C:\\ProgramData\\Qlik\\Sense\\Repository\\Exported Certificates\\.Local Certificates\\client.pem"),
ca: fs.readFileSync("C:\\ProgramData\\Qlik\\Sense\\Repository\\Exported Certificates\\.Local Certificates\\root.pem")
};
const optionDefinitions = [
{ name: 'host', alias: 'h', type: String },
{ name: 'scenario', alias: 's', type: String },
{ name: 'certpath', alias: 'c', type: String },
{ name: 'help', alias: 'q', type: Boolean }
]
const commandLineArgs = require('command-line-args')
const cla = commandLineArgs(optionDefinitions)
if(cla.certpath !='' && typeof cla.certpath !=='undefined'){
var lastChar = cla.certpath.substr(cla.certpath.length - 1);
if(lastChar !== '\\'){
cla.certpath += "\\";
}
options.key = fs.readFileSync(cla.certpath + "client_key.pem"),
options.cert= fs.readFileSync(cla.certpath + "client.pem"),
options.ca= fs.readFileSync(cla.certpath + "root.pem")
}
if(cla.help){
console.log('-h Qlik Sense hostname')
console.log('-c Directory where the certificates are stored, if not used the standard Qlik Sense directory will be used (C:\\ProgramData\\Qlik\Sense\\Repository\\Exported Certificates\\.Local Certificates)');
console.log('-s output JSON file name with scenario for Scheduler, ex: scenario.json');
}
else if(cla.host !=='' && typeof cla.host !== 'undefined' && cla.scenario !=='' && typeof cla.scenario !== 'undefined') {
options.hostname = cla.host;
https.get(options, function(res) {
console.log("Got response from Qlik: " + res.statusCode);
var chunks = [];
res.on('data', function(data) {
chunks.push(data);
}).on('end', function(){
var data = Buffer.concat(chunks);
var parsed = JSON.parse(data);
var array = [];
var tags = "";
for(var x in parsed) {
tags = JSON.stringify(parsed[x].tags);
if(tags.indexOf('Scaletest') > 0){
array.push(parsed[x]);
}
}
console.log("Found " + array.length + " apps");
var task_order =[];
var appid = "";
for(var x in array){
task.id = Number(x)+1;
task.name = "STEX";
appid = array[x].id;
task.settings.app = appid.trim();
task.settings.usernamePrefix = 'Exerciser'+x;
task.triggerSettings.seconds = Number(x);
task_order.push(task.id);
var obj = JSON.parse(scheduler);
obj['scheduledTasks'].push(task);
scheduler = JSON.stringify(obj);
}
scheduler = JSON.parse(scheduler);
scheduler.settings.logFolder = log_folder
scheduler.settings.customOrder = task_order;
fs.writeFile(cla.scenario, JSON.stringify(scheduler,null,"\t"), function(err, data) {
console.log("File " + cla.scenario + " created. Validate it at https://jsonlint.com/");
});
});
}).on('error', function(e) {
console.log("Got error: " + e.message);
});
}
else{
console.log('Missing parameters, please use -q option to get help')
}