预先感谢您的帮助。
我是js新手开发人员,试图将我们的nightwatchjs框架连接到testrails api上,以正确记录我们的结果。
作为测试运行的一部分,我从globals.js文件的before
函数中的testrails中检索了一个runId(我确认这是可行的)
我的目标是将其作为全局变量存储在globals.js文件中,以便每个测试都可以访问它,并将其测试结果通过after_each方法传递给TR。
为此,我遵循了守夜人文档,并在nightwatch.js文件夹中添加了“ persist_globals” = true。
"test_settings" : {
"default" : {
"persist_globals": true,
"desiredCapabilities": {
"test_card" : "4111111111111111"
},
"launch_url" : "REDACTED",
"selenium_port" : 4444,
"selenium_host" : "localhost",
"silent": true,
"medium_Time_Out": 6000,
"screenshots" : {
"enabled" : false,
"path" : ""
}
},
然后,在我的before函数中,我检索并保存变量:
runId: undefined,
before: function(done) { //Asynchronous before calls take browser, then done function
var request = require('request');
console.log("setting up test run");
// here we need to create a new test run
var options = {
url: self.urlRoot + "add_run/6",
headers: {
"Content-Type": "application/json",
},
auth: {
'user':self.username,
'password':self.apiKey
},
body: {
'description':'this is a sample test run for debugging purposes',
'include_all':true,
// this is an array of all cases to be included in the test run
'cases':[]
},
json:true
}
// function to output results
function callback (error, response, body) {
if(error != null) {
console.log(error);
} else {
console.log(response.statusCode);
console.log("run id created " + body.id)
self.runId = body.id;
done();
}
}
request.post(options, callback);
},
完成此操作后,如果我运行单个套件(文件)或多个套件(文件),则会得到不同的结果。如果我运行一个套件,可以按预期工作,则该变量将被保存,并由我的afterEach
函数正确选择。
但是,如果运行中有多个测试文件,则所有这些文件(即使是第一个)都会以未定义的形式通过。在以下代码段中的afterEach中读取变量
afterEach: function(browser, done) {
var request = require('request');
var name = browser.currentTest.module;
console.log(name);
console.log("run Id is " + self.runId)
看来,无论是否存在persist_globals
参数,都会为每个测试文件重建globals.js对象。我正在使用0.9.16版的守夜人