如何在同一Jenkins构建中同时在Dev与QA环境分执Selenium Cucumber测试用例
实现同一Jenkins构建中并行执行Selenium-Cucumber多环境测试
1. 给测试用例打标签分组
先给100个回归用例按环境做分组标记,用Cucumber原生标签区分:
- 给50个QA环境用例打上
@qa-regression标签 - 给50个Dev环境用例打上
@dev-regression标签
示例feature文件片段:
Feature: 用户核心操作验证 @qa-regression Scenario: QA环境下提交订单 Given 进入QA环境商品页 When 选择商品并提交订单 Then 订单提交成功 @dev-regression Scenario: Dev环境下提交订单 Given 进入Dev环境商品页 When 选择商品并提交订单 Then 订单提交成功
2. 框架支持环境参数驱动配置加载
基于你已有的dev.properties和qa.properties,通过JVM参数动态加载对应环境的配置。编写配置加载类:
public class EnvConfig { private static Properties configProps; static { // 从JVM参数获取环境标识,默认值设为qa String env = System.getProperty("test.env", "qa"); try (InputStream input = EnvConfig.class.getClassLoader().getResourceAsStream(env + ".properties")) { configProps = new Properties(); configProps.load(input); } catch (IOException e) { throw new RuntimeException("加载" + env + "配置文件失败", e); } } public static String get(String key) { return configProps.getProperty(key); } }
在步骤定义中调用配置,比如获取测试环境地址:
@Given("进入{string}环境商品页") public void openProductPage(String env) { driver.get(EnvConfig.get("base.url")); }
3. Jenkins配置并行执行
使用Jenkins Pipeline实现两个环境测试任务的并行运行,确保同一构建内同时执行两组用例。
Pipeline脚本示例(Maven项目)
pipeline { agent any tools { maven 'Maven-3.9.0' // 替换为你Jenkins中配置的Maven名称 } stages { stage('并行执行多环境回归测试') { parallel { stage('QA环境测试') { steps { // 执行带@qa-regression标签的用例,指定加载qa配置 sh 'mvn clean test -Dcucumber.filter.tags="@qa-regression" -Dtest.env=qa' } post { always { // 收集QA环境测试报告 cucumber buildStatus: 'UNSTABLE', fileIncludePattern: '**/qa-test-results/cucumber.json' } } } stage('Dev环境测试') { steps { // 执行带@dev-regression标签的用例,指定加载dev配置 sh 'mvn clean test -Dcucumber.filter.tags="@dev-regression" -Dtest.env=dev' } post { always { // 收集Dev环境测试报告 cucumber buildStatus: 'UNSTABLE', fileIncludePattern: '**/dev-test-results/cucumber.json' } } } } } } }
关键配置补充
- 为避免报告覆盖,在测试类的
@CucumberOptions中指定动态报告路径:
@CucumberOptions( features = "src/test/resources/features", glue = "com.example.stepdefs", plugin = [ "json:target/${test.env}-test-results/cucumber.json", "html:target/${test.env}-test-results/cucumber.html" ] ) public class RegressionTestRunner {}
- 若为Gradle项目,将
sh命令替换为./gradlew clean test -Dcucumber.filter.tags="@xxx-regression" -Dtest.env=xxx
4. 资源隔离与优化
- 使用Selenium Grid管理浏览器实例,让两个并行任务分别连接Grid的不同节点,避免资源冲突
- 开启浏览器Headless模式,降低服务器资源占用
- 确保测试用例无状态、独立运行,避免并行执行时的依赖问题
内容的提问来源于stack exchange,提问作者NoNoNo
相关产品推荐
相关产品推荐

