在前端自动化测试领域,Cypress 是非常流行的一款工具,因为它具有易用性和可维护性等优点,而且还提供了完整的开发体验。不过,随着测试用例数量不断增加,执行时间也会越来越长,这时采用多线程并发执行就成为一种不错的选择。
为什么需要多线程并发执行?
Cypress 是单进程单线程的运行方式,也就是说每个测试用例依次执行,这样的执行方式是非常稳定可靠的。但是由于测试用例数量变多,执行时间也会变长,这给开发人员带来了很多的麻烦,比如:
- 执行时间长:测试用例间的执行时间会相互累计,从而导致执行时间越来越长。
- 性能测试有风险:单进程单线程的执行方式,无法准确模拟多用户交互或并发请求场景,无法真正测试出系统的性能极限。
- 资源占用大:单进程单线程的执行方式,在运行过程中会占用较多的 CPU 和内存资源,并且在一定程度上限制了可执行的用例数量。
因此,采用多线程并发执行就可以有效地解决以上问题,提高测试执行效率和并发的能力。
如何实现多线程并发执行?
在 Cypress 中实现多线程并发执行,主要有如下三种方式:
1. 使用 Cypress.run()
从 Cypress 3.8.0 版本开始,Cypress 提供了一个 run() 方法,支持多线程并发地运行不同的测试用例,可以通过此方法自己实现多线程并发执行。
具体步骤如下:
- 编写一个命令,用于启动 Cypress 并执行指定的测试用例。
// 启动 Cypress 并执行指定的测试用例 const run = (specPaths, browser) => { const configFile = path.join(process.cwd(), 'cypress.json'); const args = ['--config-file', configFile, '--browser', browser].concat(specPaths); return Cypress.cli.run(args); }
其中,specPaths 表示测试用例的路径,browser 表示浏览器名称。此处采用了 Cypress.cli.run() 方法运行测试用例。
- 在主线程中,使用并发库(如 async)启动多个子线程。
-- -------------------- ---- ------- ----- ----- - ----------------- ----- ---------- - -- -- -------- - ----- ----- - ---------------------------------- --------------------------------- ---------------------------------- ------ -- -- - ----- ---------------------------------- -- -- -- ----------- ----------- ------------ -----
此处启动了 3 个测试用例异步执行,采用 async.parallelLimit() 方法控制最大并发数。可以看出,通过在子线程中运行测试用例,主线程很快就可以结束,从而提高了运行效率。
2. 使用 cypress-parallel
cypress-parallel 是一款开源的 Cypress 并发执行框架,可以很方便地实现多线程并发执行。它提供了多个命令来帮助你快速启动并行测试,比如增强的 run 命令,还有 repeat、split、balance、pmap 等命令。
具体步骤如下:
- 全局安装 cypress-parallel。
npm install -g cypress-parallel
- 编写一个配置文件 cypress-parallel.json,指定要执行的测试用例和线程数等信息。
-- -------------------- ---- ------- - --------- ----- ----------- -- ------------ - ------------------------- ------------------------- ------------------------ -- ---------- ----------- ---------- ---- -
其中,parallel 表示启动的并发线程数,specFiles 表示要执行的测试用例文件路径,browser 表示使用的浏览器。
- 执行 cypress-parallel 命令,即可开始多线程并发执行。
cypress-parallel run -- --reporter mochawesome --reporter-options reportDir=reports/mocha,json=false,html=false
其中,--reporter 表示指定报告生成工具,--reporter-options 表示指定报告生成的路径。
3. 使用 CircleCI(或其他 CI/CD 工具)
借助 CI/CD 工具,可以很方便地实现多线程并发执行测试用例。以 CircleCI 为例,它提供了一个 parallelism(并行度)参数,通过调整这个参数来改变并发运行的线程数。
具体步骤如下:
- 在 cypress.json 文件中,配置如下信息。
-- -------------------- ---- ------- - -------- ------ ----------- ------------------------------- ------------------ - --------- ----- ------------ ------ ------- ----- ------- ----- ------------ ----------------------------- -- -------------------- ------ ----------------------- -- -
其中,chromeWebSecurity 表示禁用 Chrome 的网络安全检查,numTestsKeptInMemory 表示执行测试用例的内测缓存数。
- 在 CircleCI 中,设置并发运行线程数。
-- -------------------- ---- ------- ----- ------ ------- - ------ --------------- ------------------ ----- ------ - -------- - ---- -------- ---- --- - ---- ----- --- ----- -------- ---- --- -------- -- ---------- ---------- ------ --------------------------------- ------------ - ------- ------- ----------- --------- ---------------- --------- - ------- --- --- ---- --- -------- ------- --------- ------------------ ------------------ ---------------------- ---------------------- - -------- ---- -- ---- ------ -- ------ --------------- ----- - ---- ----- ------ -------- ---- --- ---------------
其中,--parallel 表示开启并发模式。
总结
本文介绍了在 Cypress 中实现多线程并发执行的三种方式,可以根据实际需求选择合适的方式来提高测试执行效率和并发的能力。多线程并发执行不仅可以缩短测试执行时间,还可以更好地测试系统的性能极限,提高测试准确性和稳定性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c9fb015ad90b6d0418e3a2