You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:32:11