【问题标题】:Run tests from dynamic data从动态数据运行测试
【发布时间】:2024-04-22 11:55:01
【问题描述】:

我正在尝试基于动态数据运行 WebdriverIO 测试。

到目前为止,我有这样的事情:

JSON 文件:

{
  "items": [
    {
      "name": "Item 1",
      "value": 5000
    },    {
      "name": "Item 2",
      "value": 6000
    },
    {
      "name": "Item 3",
      "value": 7000
    }
  ]
} 

规范文件

import * as data from './items.data.json';
describe('Desc', () => {
    data.items.forEach((item: any) => {

        // Driver runs all these first...
        // before(async () => {
        //     await MainPage.registerItem(item.name, item.value);
        // });

        // Need to have this rather than the before
        it('Set up', async () => {
            await MainPage.registerItem(item.name, item.value);
        });

        it('Should test something', async () => {
            await OtherPage.doSomething(item.name, item.value);
        });
    });
});

这可行,但before 的行为与预期不符,需要it。有更好的方法吗?

【问题讨论】:

  • 如果每个测试用例的设置应该是唯一的,那么整个describe 应该在forEach 内。您应该依赖于在实际测试用例之前运行的'Set up'“测试用例”。或者为什么不把设置移到测试用例中,因为它只有一行?
  • 啊,是的,当然,你的建议是正确的,现在一切都好,谢谢

标签: selenium-webdriver webdriver-io


【解决方案1】:
import * as data from './items.data.json';

data.items.forEach((item: any) => {

describe('Desc', () => {

        // Driver runs all these first...
        // before(async () => {
        //     await MainPage.registerItem(item.name, item.value);
        // });

        // Need to have this rather than the before
        it('Set up', async () => {
            await MainPage.registerItem(item.name, item.value);
        });

        it('Should test something', async () => {
            await OtherPage.doSomething(item.name, item.value);
        });
    });
});

只需像之前一样为每个 describe 获取带有 describe 的 forloop,否则使用 beforeEach

【讨论】:

    最近更新 更多