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

ale*_*cxe 19 javascript testing selenium end-to-end protractor

问题:

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

问题:

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

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


灵感来自Ned Batchelder的"Finding test coupling"博文和Python nose测试跑步者的nose-randomly插件:

测试中的随机性非常强大,可以发现测试本身的隐藏缺陷,并为您的系统提供更多的覆盖.

通过随机排序测试,降低了令人惊讶的测试间依赖性的风险 - 这是一种在许多地方使用的技术,例如Google的C++测试运行者googletest.

Bri*_*ine 12

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

/**
 * If true, run specs in semi-random order
 */
random?: boolean,
/**
 * Set the randomization seed if randomization is turned on
 */
seed?: string,
Run Code Online (Sandbox Code Playgroud)

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


Vis*_*wal 5

您是否尝试过洗涤下面的"它"块:

var shuffle = function (items) {
  var item, randomIndex;      
  for(var i = 0; i < items.length; i++){
    randomIndex= (Math.random() * items.length) | 0;
    item = items[i];
    items[i] = items[randomIndex];
    items[randomIndex] = item;
  }
}

describe('Suite', function() {

  it("should a", function () {
      console.log("execute a");
  });

  it("should b", function () {
      console.log("execute b");
  });

  it("should c", function () {
      console.log("execute c");
  });

  shuffle(this.children);    // shuffle the 'it' blocks

});
Run Code Online (Sandbox Code Playgroud)

来源:量角器测试可以随机顺序运行吗?