如何在 JavaScript 接口数据通过接口自动生成和返回?
界面测试经常发生在自动化测试中,或者使用的数据需要从界面返回,那么如何实现这种情况呢?
比如我想通过 generateLicense 生成一种方法 license,然后在后续的自动化测试用例中使用此生成 license 继续下一步,比如注册 license 等。
在 license.js 在文件中创建一个 generateLicense 方法:
generateLicense: function(success, day, capacity, code) { var request = require('request'); var options = { method: 'POST', url: 'https://generate-license/api/licenses', headers: { 'postman-token': 'd849e636-58c9-2705', 'cache-control': 'no-cache', authorization: 'Basic YWRtaW46U', 'content-type': 'application/json' }, body: { company: 'Google', email: '5012962@qq.com', expiration: day, capacity: capacity, phone: '89262518', address: 'Dalian', code: code }, json: true }; request(options, function (error, response) { if (error) { console.log(error); return; } success(response); });},
上面生成的 license 赋值可用于后续测试用例 MVlicense 了。
异步操作将涉及到使用。如何操作异步,请参阅以前的文章。
const license = client.page.license();let MVlicense;license.generateLicense(function(response) { MVlicense = response.body.data.license.license;}, 365, 10, 'MV');等待按钮文本变更
在使用 Nightwatch 在进行自动化测试时,会遇到这样的情况:
需要创建一个 query,等这个 query 的状态从 Wait 变成 Running 最后到 Available 执行后续操作。Nightwatch 没有这样的方法可以通过以下方式解决。
'Wait for text': function waitForText(client) { const query = client.page.query(); query.navigate(); for (let i = 0; i <= 10; i ) { client.getText('status', function (result) { if (result.value.indexOf('Available') == 0) { this.break; } else { client.pause(1000); i ; } }); } // TODO something}测试用例失败继续执行
在自动化测试中,有一个验证点,当测试通过时,以下测试脚本将继续执行;
当出现异常时,您希望标记错误,但不影响以下测试脚本的执行 Nightwatch 中如何做?
下一段代码验证 home 页面的 body 是否显示。如果在这里显示,则将验证点放置为 false,如下:
home.waitForElementVisible('@body', 3000, true, function(result) { if (result.value) { // 测试报告显示失败,但以后的测试脚本将继续执行 client.verify.equal(result.value, false); } else { // 验证点通过 console.log('Pass'); }});
注:如果在这里使用 assert,程序将中断执行。
// 中断执行client.assert.equal(result.value, false);打开多个窗口
如果你想打开两个窗口并控制窗口呢?
var url = process.env.BASE_URL, newWindow;client.execute(function (url, newWindow) { window.open(url, newWindow, 'height=768,width=1024'; [url, newWindow]);client.window_handles(function(result) { this.verify.equal(result.value.length, 2, 'There should be 2 windows open'); newWindow = result.value[1]; this.switchWindow(newWindow);})持续集成问题
自动化测试用例持续集成时会遇到哪些问题?
由于某些错误程序卡住异常处理,运行时间过长通过以下三种方式解决上述三种情况。
运行时间过长, E2E 不可避免地需要时间等待来测试脚本,比如
this.pause(1000);// 尽可能多些 pause 换成 wait,例如:this.element('@columns').to.be.visible.before(2000);// 或this.waitForElementVisible('@columns', 5000);
因为有些错误的程序卡住了, 在 TestCase 例如,在验证中
this.assert.equal(result.value.length, 1);// 如果您只想标记失败并继续执行以下代码,则需要 assert 换成 verifythis.veriry.equal(result.value.length, 1);// 在 waitForElementVisible 中加 abortOnFailure 设置为参数 false,在 wait 加班时,会标记为 false 继续执行this.waitForElementVisible('@columns', 5000, false);//还可以通过在 nightwatch.conf.js 设置全局变量abortOnAssertionFailure: false
异常处理
当程序执行运行一次时,程序运行正常。一旦出现异常,下次执行将出错。
例如:例如,邀请帐户登录系统的操作。管理员添加一个新用户,然后用新用户登录,然后管理员删除该帐户。但是,如果删除该帐户失败,下次执行该程序并邀请该帐户时,将提示该帐户存在。也许此时此程序无法执行。此时,有必要考虑这些异常情况,以确保程序能够很好地执行。
除通过增加 log 之外
console.log('===========')
来调试 Nightwatch 如何通过配置代码 VS code 来 Debug Nightwatch 代码?
Ctrl Shift D 打开 Debug 界面,配置如下:
{ // Use IntelliSense to learn about possible Node.js debug attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://img.efusc.com/gonglue/20230601/wm4nqpgo11y "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "npm test", "program": "${workspaceRoot}/node_modules/nightwatch/bin/runner.js", "args": [ "tests/DQA/DQA-221/login.js" ] } ]}
这样可以打断调试点。