首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动态生成TestCafe测试脚本,其中测试用例的数量将等于服务调用返回的项数

如何动态生成TestCafe测试脚本,其中测试用例的数量将等于服务调用返回的项数
EN

Stack Overflow用户
提问于 2022-10-28 09:00:18
回答 1查看 38关注 0票数 0
代码语言:javascript
复制
import { Selector } from 'testcafe';

let appList;
let username = '';
let password = '';

// Start - service call to get JSON Data in appList variable
var requestNode = require('request');
var options = {
   'method': 'GET',
   'url': 'https://********.com/_layouts/15/cors/testcafeapps.ashx',
    'headers': {
    'Authorization': '*****w=='
    }
};
requestNode(options, function (error, response) {

if (error) throw new Error(error);
appList = JSON.parse(response.body);    
});
// End -service call to get JSON Data in appList variable

fixtureValidate
.httpAuth({
username: username,
password: password
})

// iterate through JSON items and create tests for each JSON dataitems
for (const app in appList) {
    test('SSO test for ' + appList[app], async t => {
        console.log('Checking login for ' + appList[app])
        await t
        .navigateTo(appList[app])
    });
}

我已经写了上面的代码,我试图对服务调用返回的每个应用程序执行一些测试步骤。我得到一个错误,因为“源文件不包含有效的‘夹具’和‘测试’声明”

如果我使用硬编码的JSON并遍历JSON项,那么我的代码就不会使用服务调用,但我的实际要求是不要使用硬编码的JSON数据,而是从服务调用中获取数据。请让我知道我如何能做到这一点。

EN

回答 1

Stack Overflow用户

发布于 2022-10-31 07:52:00

当文件不包含任何测试时会出现此错误,这就是您的情况。request是一个异步函数,您不会等到它完成后再尝试运行对appList的测试,但是appList在那一刻是空的。要只在执行request之后运行测试,可以promisify请求并使用await等待结果。但是,我建议使用request来执行axios请求,而不是对API进行编程。

代码语言:javascript
复制
//runner.js
function DoRequest() {
  return new Promise(function (resolve) {
    setTimeout(() => {
      resolve([
        'test1',
        'test2',
      ])
    }, 2000)
  });
}
(async () => {
    global.appList = await DoRequest();
    const createTestCafe = require('testcafe');
    const testcafe = await createTestCafe();
    await testcafe
        .createRunner()
        .src('test.js')
        .browsers('chrome')
        .run();
    await testcafe.close();
})();
代码语言:javascript
复制
//test.js
fixture('Getting Started')
    .page('https://devexpress.github.io/testcafe/example');
for (const app in global.appList) {
  test('SSO test for ' + app, async t => {
    await t
      .typeText('#developer-name', 'John Smith')
      .click('#submit-button');
  });
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74232936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档