如何在 Protractor 中分片测试文件?


分片是一种将数据或任务分布到多台机器上的方法,以提高性能和可扩展性。在测试自动化中,分片是一种将测试用例分布到测试框架的多个实例中的技术,以加快测试执行速度。Protractor 是一个测试框架,它使用 Jasmine 测试框架来促进测试用例的分片。

要在 Protractor 中分片测试文件,必须编写一个配置文件,其中详细说明测试文件的路径和要创建的实例数。为了缩短整体测试执行时间,Protractor 将测试用例分布到多个实例中并并发执行它们。

必须仔细规划和配置分片,以确保测试结果可靠一致。在实现分片时,必须考虑测试速度和准确性之间的权衡,并且必须密切关注测试结果,以发现任何潜在的问题。

使用 Protractor 分片的步骤

要安装和设置 Protractor,您需要执行以下步骤:

  • 从官方网站在您的系统中安装 Node.js

  • 使用以下命令安装 Protractor

npm install -g protractor
  • 使用以下命令检查版本以确保安装成功:

protractor --version
  • 使用以下命令更新 webdriver-manager

webdriver-manager update
  • 更新 conf.js 文件以描述 Protractor 流程

  • 在 conf.js 文件的 capabilities 块中声明两个功能以启用分片:

  • shardTestFiles - 启用多个规范并发运行。如果为 true,则规范将按文件分片(即,此功能集运行的所有文件都将并行运行)。默认值为 false。

    maxInstances - 为此功能集并发运行的浏览器实例数。只有在 shardTestFiles 设置为 true 时才需要此项。默认值为 1。

示例

在这个例子中,我们将看到如何在 Protractor 中测试分片文件。我们需要使用 shardTestFiles 和 maxInstances 配置 conf.js 文件。我们使用 test-file1.js 和 test-file2.js 作为我们的规范来测试 index.html 和 index2.html 文件。所有这些文件的代码如下所示:

conf.js - 这是我们的配置文件

// An example configuration file.
exports.config = {
   directConnect: true,

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

      // Sharding
      'shardTestFiles': true,
      'maxInstances': 1,
   },

   // Framework to use. Jasmine is recommended.
   framework: 'jasmine',

   // Spec patterns are relative to the current working directory when
   
   // protractor is called.
   specs: ['test-file1.js' , 'test-file2.js'],

   SELENIUM_PROMISE_MANAGER: false,

   // Options to be passed to Jasmine.
   jasmineNodeOpts: {
      defaultTimeoutInterval: 30000
   }
};

test-file1.js - 测试文件 1

describe ('Protractor Test App' , function () {
   it ('Test 1' , async function () {

      // Disable Angular render update waiting 
      await browser.waitForAngularEnabled (false);

      // Get the HTML file that must be tested
      await browser.get ('http://127.0.0.1:5500/index.html');

      // Test Element
      let testElement = element (by.id ('test-element'));

      // Allow the fade in process to finish
         await browser.driver.wait ( async function () {
         return await testElement.getCssValue ('opacity') === '1';
      } , 30000, "It is taking more time than expected!");
   });
});

test-file2.js - 测试文件 2

describe ('Protractor Test App' , function () {
   it ('Test 2', async function () {

      // Disable Angular render update waiting 
      await browser.waitForAngularEnabled (false);

      // Get the HTML file that must be tested
      await browser.get ('http://127.0.0.1:5500/index2.html');

      // Test Element
      let testElement = element (by.id ('test-element'));

      expect(testElement.isDisplayed()).toBe(false);
   });
});

index.html - 要测试的文件

<!DOCTYPE html>
<html>
<head>
   <title>Using JavaScript to Implement Fade-In effect</title>
</head>
<body>
   <!-- Test Element -->
   <h4 id="test-element" style="opacity: 0">Some Text</h4>
   <script type="text/javascript">
      let elementOpacity = 0
      let elementInterval = 0

      window.onload = function () {
         elementInterval = setInterval (() => {
            let testElement = document.getElementById ('test-element')
            elementOpacity = Number(
               window.getComputedStyle(testElement).getPropertyValue('opacity')
            )
            if (elementOpacity < 1) {
               elementOpacity = elementOpacity + 0.1
               testElement.style.opacity = elementOpacity
            } else {
               clearInterval(elementInterval)
            }
         }, 200)
      }
   </script>
</body>
</html>

index2.html - 要测试的文件

<!DOCTYPE html>
<html>
<body>
   <!-- Test Element -->
   <div id="test-element" style="display: none"> Some Text </div>
</body>
</html>

运行以下命令:

protractor conf.js

输出

Protractor 是一个方便的自动化测试工具,但我们需要确保步骤正确且按顺序执行。

更新于:2023年4月5日

浏览量:138

开启您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.