在Protractor中自动检测测试耦合(随机化测试执行顺序)

时间:2016-12-25 01:19:06

标签: javascript selenium testing protractor end-to-end

问题:

我们有一个相当大的测试代码库。我们不时地执行所有测试,而不是执行所有测试。但是,有时,我们会看到意外的测试失败,因为测试是相互连接的。例如,一个测试假设前一个测试创建了一些数据 - 单独运行这种测试将失败。

问题:

是否可以自动检测哪些Protractor测试在项目中耦合?

我们目前的想法是以某种方式随机化测试执行顺序或从所有可用测试中随机选取一组测试并检查是否没有失败。因此,另一个问题:是否可以更改/随机化Protractor测试发现并更改测试执行的顺序?

受到Ned Batchelder的"Finding test coupling"博文和Python nose测试运行员nose-randomly plugin的启发:

  

测试中的随机性对于发现隐藏的缺陷非常有用   在测试中,以及给予更多的报道   你的系统。

     

通过随机排序测试,相互间测试的风险令人惊讶   减少了依赖性 - 例如,在许多地方使用的技术   Google的C ++测试运行器googletest

3 个答案:

答案 0 :(得分:12)

您可以通过设置random属性in your config随机(在文件级别)运行测试。您还可以设置盐/种子,使其可重复随机。

/**
 * If true, run specs in semi-random order
 */
random?: boolean,
/**
 * Set the randomization seed if randomization is turned on
 */
seed?: string,

你也可以打开shardTestFiles(并行测试运行),这也应该是你的测试如何耦合的非常有用的。

答案 1 :(得分:5)

你有没有试过洗牌"它"下面的块:

{{1}}

来源:this image

答案 2 :(得分:4)

一个问题是你可能不知道如何耦合测试。如果一个测试引用了另一个测试中的某些变量,那么您可能能够自动找到这些变量,但只有一种方式测试可能是耦合的,可能不是可能的情况。

我的第一个想法是单独运行它们,看看哪些失败了。问题是,如果您在测试之间没有清理状态,您可能会更改顺序(按照您的建议随机化它们),但如果测试50期望测试20的数据设置但是按新顺序排列,则测试20仍然在测试50之前运行...测试50仍将通过。你会发现一些但可能不是全部,直到你以随机顺序多次运行它们。

您没有描述您的应用程序,但我的第二个想法是,如果有一种方法可以在测试之间恢复清晰,您应该能够找到依赖其他测试来设置数据的测试。我有点惊讶你已经没有这样做但是如果有一个漫长的设置过程必须运行以安装一个干净的平板等可能是一个问题。根据您的系统,您可以在干净安装后对VM进行快照,然后快速将其恢复到"回到清理或者你可以回滚SQL表等。这实际上取决于你的系统,如果没有关于系统的更多细节,很难提供建议。

另一种选择是去那些编写或维护测试的人,让他们自我识别他们拥有的测试,并将其修复。这可能不会找到它们,但它可能是一个半快速的开始。

哦......我只想到了一件事。如果你能反向测试执行的顺序,那应该比随机执行更好。对于相反的顺序,NO测试将在它的前任之后运行,你应该能够一次性找到它们。