📜  如何在量角器中对测试文件进行分片?

📅  最后修改于: 2022-05-13 01:56:49.795000             🧑  作者: Mango

如何在量角器中对测试文件进行分片?

Protractor是为 Angular 和 AngularJS 应用程序开发的端到端测试框架。它像真实用户一样对与之交互的应用程序运行测试,在真实浏览器中运行。在本文中,我们将讨论如何在量角器中对测试套件进行分片。

先决条件:Protractor的安装和设置

测试套件的分片意味着并行运行测试套件。假设有两个测试套件,因此这两个测试套件的并行分片意味着将创建两个 chrome 实例,并且两个测试套件将分别在两个不同的 chrome 实例上运行(即,它们将独立运行其他)而如果两个测试套件将串联运行,则只会创建一个 chrome 实例,然后第二个测试套件必须等待第一个测试套件完成才能运行(即它们不能独立运行) .现在,由于分片有助于测试套件并行运行,它将减少执行时间并提高测试效率。

下面是上述解释的流程图表示:

并行运行测试

连续运行测试

方法:

  • 我们将创建一个基本的测试程序,我们将在其中看到我们如何对测试套件进行分片
  • 所有Protractor测试都会有一个包含配置的文件,这将是启动测试的初始文件。
  • 让我们创建这个名为 conf.js 的文件。
  • 对于分片,在 conf.js 文件的功能块中声明两个功能。
    • shardTestFiles – 允许不同的规范并行运行。如果设置为 true,则规范将按文件分片(即由这组功能运行的所有文件将并行运行)。默认为假。
    • maxInstances – 对于这组功能,可以并行运行的浏览器实例的最大数量。仅当 shardTestFiles 为 true 时才需要这样做。默认值为 1。

第 1 步:我们必须首先创建一个 conf.js 文件,其中包含要与Protractor一起使用的配置。

conf.js
// An example configuration file to
// illustrate sharding
exports.config = {
  directConnect: true,
  
  // Capabilities to be passed to the 
  // webdriver instance for sharding
  capabilities: {
    'browserName': 'chrome',
  
    // Sharding
    'shardTestFiles': true,
    'maxInstances': 2, 
  },
  
  // Framework to use. Jasmine is
  // recommended
  framework: 'jasmine',
  
  // Spec patterns are relative to the
  // current working directory when
  // protractor is called.
  specs: ['test1.js','test2.js'],
  SELENIUM_PROMISE_MANAGER: false,
  // Options to be passed to Jasmine.
  jasmineNodeOpts: {
    defaultTimeoutInterval: 30000
  }
};


index1.html


  

    
        fade-in effect on page load using JavaScript
    
  
    

  

      
    
    
        Inner text     
  


index2.html


  

    
    

  


test1.js
describe('Protractor Demo App', function () {
  it('should have a title', async function () {
  
    // Disable waiting for Angular render update
    await browser.waitForAngularEnabled(false)
  
    // Get the HTML file that has to be tested
    await browser.get('index1.html');
      
    // Get the fade in element
    let fadeIn = element(by.id('fade-in'));
      
    // Wait for the fade in process to complete
    await browser.driver.wait(async function() {
      return await fadeIn.getCssValue('opacity') === '1';
    }, 30000, "Taking too long to fade in");
  });
});


test2.js
describe('Protractor Demo App', function () {
  it('should have a title', async function () {
    
      // Disable waiting for Angular render update
      await browser.waitForAngularEnabled(false)
    
      // Get the HTML file that has to be tested
      await browser.get('index2.html');
    
      // Test if the element is hidden
      let hiddenDiv = element(by.id('hidden-div'));
    
      // This test will pass only when
      // element is hidden
      expect(hiddenDiv.isDisplayed()).toBe(false);
  });
});


第 2 步:我们将创建名为index1.htmlindex2.html 的两个 HTML 文件。

index1.html



  

    
        fade-in effect on page load using JavaScript
    
  
    

  

      
    
    
        Inner text     
  

index2.html



  

    
    

  

第 3 步:我们将创建 test1.js 文件。在这个文件中,我们将访问 index1.html 文件,然后等待元素完全淡入。浏览器是由Protractor创建的全局,用于浏览器级别的命令,例如使用 browser.get 导航() 方法。 describe 和 it 语法来自 Jasmine 框架,其中 describe 是对测试的描述,同时定义了测试的步骤。

test1.js

describe('Protractor Demo App', function () {
  it('should have a title', async function () {
  
    // Disable waiting for Angular render update
    await browser.waitForAngularEnabled(false)
  
    // Get the HTML file that has to be tested
    await browser.get('index1.html');
      
    // Get the fade in element
    let fadeIn = element(by.id('fade-in'));
      
    // Wait for the fade in process to complete
    await browser.driver.wait(async function() {
      return await fadeIn.getCssValue('opacity') === '1';
    }, 30000, "Taking too long to fade in");
  });
});

同样,我们将创建 test2.js 文件。在这个文件中,我们将访问 index2.html 文件,然后检查该元素是否隐藏。 browser 是Protractor创建的全局变量,用于浏览器级别的命令,例如使用 browser.get() 方法进行导航。 describe 及其语法来自 Jasmine 框架,其中 describe 是对您的测试的描述,同时它定义了测试的步骤。

test2.js

describe('Protractor Demo App', function () {
  it('should have a title', async function () {
    
      // Disable waiting for Angular render update
      await browser.waitForAngularEnabled(false)
    
      // Get the HTML file that has to be tested
      await browser.get('index2.html');
    
      // Test if the element is hidden
      let hiddenDiv = element(by.id('hidden-div'));
    
      // This test will pass only when
      // element is hidden
      expect(hiddenDiv.isDisplayed()).toBe(false);
  });
});

第 4 步:最后,我们将使用下面给出的命令运行配置文件。这将运行配置文件并运行测试,如下面的输出所示。

protractor conf.js

输出: