我是这项技术的新手,我正在开发一个自动化框架ruby capybara RSpec。现在我想并行地运行我的测试用例,对于我使用的CI/CD;GitHub操作"对于VM,我使用酱汁实验室,我有两个VM。如果有任何默认/内置功能可以实现,或者有任何特定的宝石可以用来实现,请帮助我。提前感谢。
附言:客户没有具体的要求,所以我可以用我自己的方法来做这件事。
我在Sauce Labs工作,维护了现在不推荐使用的Ruby gem,包括为其添加并行功能。可以肯定地说,我有意见™️.
您必须决定是通过测试(例如,一次在单个浏览器上运行更多测试(还是通过浏览器(一次在多个平台上运行相同的测试(进行并行。
因为RSpec没有并行化支持,所以两者的核心方法都必须包括运行多个RSpec进程;不同的是如何运行这些。
使用Github操作,您可以并行运行多个作业。这适用于在单个平台上串行运行所有测试,但同时并行运行多个完整的测试。也就是说,同时运行(All Tests:Firefox(和(All Tests:Chrome(。您所要做的就是为每个Sauce Labs并发槽设置一个作业,并通过输入或环境变量传入浏览器配置。
如果您想在一个平台上运行所有测试,可以使用Grosser的并行测试库。它将测试分解为(n(个并发组,然后为每个组启动一个单独的RSpec进程。如果你遵循这些指示,每组应该大致在同一时间结束。
我会做什么
我个人会在一个浏览器中使用具有完全并发性的并行测试gem。如果我的代码完全坏了,这将作为一个质量门,让我最快地知道。然后,我会添加一个矩阵作业(每个并发槽一个(,needs
是运行前要通过的第一个质量门。我可以使用矩阵变量来控制哪个平台运行:
quality_gate:
name: Quality Gate, running all tests on Chrome Latest
steps:
prepare_code: #Setup
run_tests:
- run: parallel_rspec specs/
browser_coverage:
name: Concurrency 1
needs: quality_gate
strategy:
max-parallel: 2
fail-fast: true
matrix:
browserName: [Firefox, Chrome]
browserVersion: [latest]
platformName: [Windows 10, Windows 7, MacOS 10.14]
exclude:
- browserName: Chrome
browserVersion: latest
platformName: Windows 10
include:
- browserName: Safari
platformName: MacOS 10.14
steps:
- uses: actions/checkout@v2
- name: Set up Ruby
uses: ruby/setup-ruby@v1.47.0
with:
ruby-version: 2.7.1
- name: Install dependencies
run: bundle install
- name: run tests
env:
browserName: ${{ matrix.browserName }}
browserVersion: ${{ matrix.browserVersion }}
platformName: ${{ matrix.platformName }}
run: rspec
注意事项
- 如果您的组织在多个团队之间共享并发,那么您可能在运行时没有所有的并发可用
- 矩阵由每个值乘以其他值组成,这可能无效。例如,Safari不会在Windows10上运行。您需要检查平台配置程序,以确保排除无效组合
奖励积分
如果添加工作流调度操作,则可以手动启动测试。通过使用输入,您可以手动指定浏览器配置和/或并发性,以便从Github按需执行。
示例
好吧,所以你启发我做一个工作的例子。此操作:
- 包括Sauce Connect
- 在单个浏览器上以全并发运行以确保代码正常工作
- 如果通过,则在所有其他浏览器上运行
- 允许手动触发不同的浏览器