如何在量角器中并行运行它?

时间:2018-02-19 19:33:52

标签: npm jasmine protractor

我的规范文件涵盖了针对特定测试场景的50种不同测试用例。每个测试用例都包含在单独的 it 块中。 spec文件需要2小时才能执行。我想以某种方式对 it 块进行分类,以便它们在多个浏览器实例中并行运行。对于例如它应该并行运行(5 it 阻止* 10个浏览器实例)。我不想将 spec 文件分成不同的部分。有没有其他解决方案?

2 个答案:

答案 0 :(得分:3)

当您决定执行测试用例时,请使用下面列出的任何配置。请参阅典型的conf.js文件,然后选择conf.js文件中的任何配置。

exports.config = {

  // The address of a running selenium server.
  seleniumAddress: 'http://localhost:4444/wd/hub',

  // Capabilities to be passed to the webdriver instance.
  capabilities: {
    'browserName': 'chrome'
  },

  specs: ['spec1.js','spec2.js']

};
  

Type-1:单个浏览器实例:在a处启动一个浏览器实例   时间。

conf.js文件中的示例配置。

capabilities: {
     browserName: 'chrome',
 },
specs: ['spec1.js','spec2.js']

以上配置将启动chrome浏览器实例并逐个执行所有规范

sequestial --> [chrome] --> spec1.js --> spec2.js
  

Type-2:不同的浏览器实例将并行启动   在spec:[]标签中调整的规格将在每个标签中执行   浏览器的实例分开。

conf.js文件中的示例配置。

multiCapabilities: [
     { browserName: 'chrome', },
     { browserName: 'firefox', },
 ],
specs: ['spec1.js','spec2.js','spec3.js']

以上配置将启动chrome,firefox浏览器并并行执行每个浏览器实例中的所有规范。

         --> [chrome]  ---|--> spec1.js --> spec2.js --> spec3.js
         |                
       parallel           
         |
         --> [firefox] ---|--> spec1.js --> spec2.js --> spec3.js
  

类型-3:以下配置将帮助您执行不同的操作   不同浏览器实例中的规范集。

conf.js文件中的示例配置。

multiCapabilities: [
    { 
        browserName: 'chrome', 
        specs:['spec1.js']
    },
    { 
        browserName: 'firefox', 
        specs:['spec2.js'] 
    },
],

以上配置将启动chrome,firefox浏览器并在chrome中执行spec1.js并在firefox实例中执行spec2.js

         --> [chrome]  ---|--> spec1.js
         |                
       parallel           
         |
         --> [firefox] ---|--> spec2.js
  

Type-4:使用相同的浏览器并行执行不同的spec文件。

     

考虑你的测试套装中有5个spec文件,你想要   并行执行一切。以下配置将帮助您   这样做。

conf.js文件中的示例配置。

capabilities: {
    browserName: 'chrome',
    specs: [
        'spec1.js', 'spec2.js', 'spec3.js' , 'spec4.js' , 'spec5.js'
    ],
    maxInstances : 5,
    shardTestFiles: true
}

以上配置将启动5个chrome实例,每个规范将在这5个chrome实例中并行执行。

                             |-- [instance 1] --|--> spec1.js
                             |-- [instance 2] --|--> spec2.js
             --> [chrome] ---|-- [instance 3] --|--> spec3.js
                             |-- [instance 4] --|--> spec4.js
                             |-- [instance 5] --|--> spec5.js

maxInstances数字表示允许量角器创建的最大浏览器窗口数量。

例如,当maxInstances设置为10时,200个测试的测试套件将导致Protractor创建10个Chrome实例,每个实例运行20个测试,而没有shardTestFiles,这将是一个运行所有200个测试的Chrome实例。

答案 1 :(得分:1)

你无法运行&#34;它&#34;在同一个spec文件中并行阻止。替代解决方案是划分您的规范文件,例如$sql = " SELECT Clients.Id, Clients.Rate, Clients.Name, Clients.onsite_block_hrs, Clients.remote_block_hrs, Clients.Net, SUM(case WHEN Clients.onsite_block_hrs > 0 then Hours.Hours else 0 end) AS Onsite_Hours, SUM(case WHEN Clients.remote_block_hrs > 0 then Hours.Hours else 0 end) AS Remote_Hours, SUM(case WHEN DAY(Hours.Date) <= 15 && Clients.onsite_block_hrs > 0 then Hours.Hours else 0 end) AS First_Hours, SUM(case WHEN DAY(Hours.Date) >= 16 && Clients.onsite_block_hrs > 0 then Hours.Hours else 0 end) AS Second_Hours, Hours.Customer, Hours.Date FROM Clients LEFT JOIN Hours ON Clients.Id=Hours.Customer WHERE (MONTH(Date) = MONTH(CURRENT_DATE()) AND YEAR(Date) = YEAR(CURRENT_DATE())) OR (onsite_block_hrs != 0 || remote_block_hrs != 0) GROUP BY Id ORDER BY Name"; $result = $conn->query($sql); if ($result->num_rows > 0){ spec1.jsspec2.js

然后将其添加到conf.js文件

spec3.js

specs:['filePath/spec1.js','filePath/spec2.js','filePath/spec3.js'], capabilities: { shardTestFiles: true, maxInstances: 5 //set this to amount you want running at once } param将接受数组,或者你可以使用specs之类的通配符来运行该文件夹中的所有.js文件(确保它们是量角器测试用例)

filePath/*.js将设置为一次运行的金额。我发现在一次运行多个实例时更容易使用无头模式,对于chrome,选项如下所示:

maxInstances