如何在 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 是一个方便的自动化测试工具,但我们需要确保步骤正确且按顺序执行。
数据结构
网络
关系型数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP