UNPKG

qlik-stex

Version:

Qlik Sense Scalability Tools extension for testing multi apps scenarions ex. saas

143 lines (128 loc) 4.76 kB
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') }