首页 > 解决方案 > 如何将 TestCafé 测试组织成多个步骤?

问题描述

我正在测试一个具有长场景的大型项目(有些与网页的交互超过 100 次)。我想将它们分解为按顺序运行的较短步骤(例如在 Mocha 中),但我不知道该怎么做。

示例:在单个测试中,我想运行

fixture('test1')

test('test1', async (t) => {
  ...login
  ...createSubAccount
  ...modifySubAccount
  ...activateSubAccount
})

每个步骤都将显示在控制台和报告中。现在,我唯一知道如何做的就是将每个步骤放入自己的test()上下文中,但这意味着如果例如createSubAccount失败,modifySubAccount并且activateSubAccount仍然会运行(即使工作流已经失败)。此外,每个人都会test()清除浏览器的不愉快部分(但我可以处理)。

fixture简而言之:如果单个子步骤失败,整个测试将立即失败,我该如何拆分测试fixture?或类似的事情,但对于test()?

此外,我不希望整个管道在第一次测试失败时结束,就像--stopOnFirstFailflag 会发生的那样 - 我想运行所有测试,找出哪些失败了。

标签: testingautomationautomated-testse2e-testingtestcafe

解决方案


test()是最小的单位。这个想法是它是一段独立的测试代码,即一堆测试步骤。无论您使用什么工具(TestCafe、Playwright、Puppeteer、Cypress、mocha、Jest,......),这都不会改变。

所以:

现在,我唯一知道如何做的就是将每个步骤放入自己的 test() 上下文中,但这意味着如果 createSubAccount 失败, modifySubAccount 和 activateSubAccount 仍将运行(即使工作流已经失败)。

似乎打破了测试的主要原则之一,即它们是独立的。不要在不同的测试之间拆分属于一起的测试步骤。

如果现在唯一的缺点是测试的长度,为什么不像示例中暗示的那样做:

test('test1', async (t) => {
    login();
    createSubAccount();
    modifySubAccount();
    activateSubAccount();
});

您可以为 login、createAccount 等创建函数,然后在您的测试中只使用这些函数,这将使它们变得如此简短。您还可以轻松创建各种场景:

test('activate account without modification', async (t) => {
    login();
    createSubAccount();    
    activateSubAccount();
});

test('create account', async (t) => {
    login();
    createSubAccount();   
});

test('create account without login', async (t) => {    
    createSubAccount();   
});

// and so on

它甚至看起来都不长。


推荐阅读