如何使用Cucumber +量角器按顺序运行多个功能文件

时间:2018-03-12 14:34:14

标签: protractor cucumber bdd ui-automation feature-file

我想以所需的顺序或顺序运行要素文件,例如:

 tags:"`@ProtractorScenario` or @CucumberScenario" 

但黄瓜方案首先被执行。有人可以指导我吗?

  

注意:Cucumber正在执行基于文件夹

中特征文件的字母顺序的场景

此外,在超过50个特征文件的情况下,定义黄瓜特征文件排序的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

为了进行可靠的测试,您的测试应该是独立的,而不是依赖于它们运行的​​顺序。原因是您的测试不应该依赖于系统处于某种状态,因为这将导致片状测试。每个测试都应该设置预期的状态(和拆解!),这样它们就可以独立运行。

答案 1 :(得分:0)

以下是量角器执行黄瓜特征文件的方式:

  1. 量角器找出specs中指定的所有要素文件,将绝对文件路径保存到数组中,让我们称之为feature_list
  2. 量角器启动会话(启动浏览器实例)
  3. 量角器生成如下的Cucumber CLI,并执行CLI以移交正在运行的控制黄瓜:
    ./node_modules/bin/cucumber --require xxx --format xxx feature1,feature2,....featureN

    feature1,feature2,.... featureN由feature_list.join(',')

  4. 计算

    从上面,我们可以学习改变秩序的唯一机会 向量角器feature_list发出订单specs

      

    注意:feature_list的每个成员都应该是绝对的/相对的   单个特征文件的路径。建议不要在路径中显示folderwildcard

    您可以从我的github获取解决方案代码:spec.filter.js,它实现:

    1. 过滤器功能文件来自cucumberOpts.tags
    2. 按优先顺序排列上述步骤1的结果
    3. 使用指南spec.filter.js

      // protractor conf file
      const specFilter = require('./spec.filter.js');
      
      var config = {
          seleniumAddress: 'xxxxx',
          capabilities:'xxxx',
      
          framework: 'custom',
          frameworkPath: require.resolve('protractor-cucumber-framework'),
          ignoreUncaughtExceptions: true,
      
          specs: [
              './aa/**/*.feature',
              './bb/**/*.feature'
          ],
      
          cucumberOpts: {
              require: [
                  'xxx'
              ],
              priorities: {
                   // feature has tag @SPGC-21542 or @SPGC-21944 or @SPGC-21946
                   // will has priority 1
                  '1': ['@SPGC-21542 or @SPGC-21944', '@SPGC-21946'], 
                   // feature has tag @SPGC-22055 will has priority 2, 
                   // feature has heighest priority will put ahead at 
                   // the `specs` list and get executed firstly.
                  '2': ['@SPGC-22055']
              }
              tags: ""
          }
      
          ....
      };
      
      exports.config = specFilter(config);