什么是正确的配置设置以使用量角器并行自动进行测试?

时间:2019-06-18 00:20:36

标签: selenium automation protractor

这是我的设置。平行的角度/非角度应用测试是否有正确的设置?有时,我的Firefox或chrome挂起,而另一个正在运行。是否将 ignoreSynchronization 设置为 true ,将 waitForAngular 设置为 false ?我觉得同步时间过多,导致其中一个浏览器挂起?

exports.config = {
    seleniumAddress: 'http://localhost:4444/wd/hub',
    getPageTimeout: 600000,
    allScriptsTimeout: 500000,
    defaultTimeoutInterval: 30000,
    framework: 'custom',
    // path relative to the current config file
    frameworkPath: require.resolve('protractor-cucumber-framework'),
    multiCapabilities:
    [{
      'browserName': 'firefox',
      specs: 'features/firefox/*.feature',
    },
    {
      'browserName': 'chrome',
      specs: 'features/chrome/*.feature',
    }],
    maxSessions: 2,
    baseUrl: 'https://localhost:8080',
    cucumberOpts: {
      strict: true,
      require: [
        'hooks/hooks.js',
        'specs/*Spec.js'
      ],
      tags: [
        "@runThis", 
        "~@ignoreThis"
      ],
      profile: false,
      format: 'json:./e2e/reports/cucumber-report.json',
      resultJsonOutputFile: './e2e/reports/cucumber-report.json'
    },
    beforeLaunch: function() {
      const fs = require('fs');
      const path = require('path');

      const directory = './e2e/reports';

      //cleans up the json results from the previous build when using node flake
      fs.readdir(directory, (err, files) => {
        if (err) throw err;

        for (const file of files) {
          fs.unlink(path.join(directory, file), err => {
            if (err) throw err;
          });
        }
      });
    },
    onPrepare: function() {
      var chai = require('chai');
      chai.use(require('chai-as-promised'));
      global.expect = chai.expect;
      browser.ignoreSynchronization = true;
      browser.manage().window().maximize();
      browser.waitForAngular(false);           
      browser.manage().timeouts().implicitlyWait(30000); 

    },
    ghostMode:false
}

2 个答案:

答案 0 :(得分:0)

browser.ignoreSynchronization已过时,因此您无需进行设置。但是,您确实需要像配置文件中那样设置browser.waitForAngularEnabled(false)而不是browser.waitForAngular(false)。当waitForAngularEnabled为true时,在每个动作之前都会调用waitForAngular。

设置喜欢的onPrepare

onPrepare: function() {
  var chai = require('chai');
  chai.use(require('chai-as-promised'));
  global.expect = chai.expect;
  browser.manage().window().maximize();
  browser.waitForAngularEnabled(false);           
  browser.manage().timeouts().implicitlyWait(30000); 
},

您的具体情况将取决于您要通过并行执行实现的目标。

此设置会将您的测试划分为chrome和firefox 2种浏览器,并并行执行测试。它将同时支持3个chrome和2个Firefox浏览器。根据先完成的测试对测试进行划分

multiCapabilities: [
    { browserName: "chrome", shardTestFiles: true, maxInstances: 3 },
    { browserName: "firefox", shardTestFiles: true, maxInstances: 2 },
],
maxSessions: 10, //controls the total number of instances, won't be relevant in this case 

此设置将同时在chrome和firefox浏览器上执行所有测试。如果您运行5个规格,将有10个结果。

multiCapabilities: [
    { browserName: "firefox" },
    { browserName: "chrome" },
],

答案 1 :(得分:0)

上面给出了添加shardTestFiles的答案:true,并且maxInstances数量应该起作用。但是,我仍然要强调一下,如果您使用webdriver-manager开始启动硒服务器(我认为您是基于配置文件中提供的硒地址),那么不要指望它会像硒网格解决方案一样顺利在不同的浏览器上并行运行测试。 Webdriver-manager被设计为启动Selenium服务器的最快解决方案,而不是Selenium-grid的替代品。