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

如何使用TestNG和Maven在两个环境中并行运行单个测试用例

Running TestNG Tests in Parallel Across Two Environments with Maven

Hey there! Let's break down exactly how to get your TestNG test cases running in parallel across two different environments using Maven. This is a super common use case, and with a few configuration tweaks, you'll be up and running in no time.

Step 1: Create Environment-Specific Configuration Files

First, let's separate your environment settings so your tests can pick up the right values based on where they're running. Create two properties files in src/test/resources/:

  • env1.properties (for your first environment):

    base.url=https://env1.yourdomain.com
    username=test-user-1
    password=test-pass-1
    
  • env2.properties (for your second environment):

    base.url=https://env2.yourdomain.com
    username=test-user-2
    password=test-pass-2
    

Step 2: Configure TestNG for Parallel Execution

Next, we'll set up a TestNG suite XML file to define two separate test runs (one per environment) and tell TestNG to run them in parallel. Create src/test/resources/testng.xml with this content:

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="Parallel Environment Suite" parallel="tests" thread-count="2">
    <!-- Test suite for Environment 1 -->
    <test name="Env1 Tests">
        <parameter name="env" value="env1"/>
        <classes>
            <!-- Replace with your actual test class package and name -->
            <class name="com.yourteam.tests.MyCoreTest"/>
        </classes>
    </test>

    <!-- Test suite for Environment 2 -->
    <test name="Env2 Tests">
        <parameter name="env" value="env2"/>
        <classes>
            <class name="com.yourteam.tests.MyCoreTest"/>
        </classes>
    </test>
</suite>

The parallel="tests" flag tells TestNG to run each <test> block in its own thread, and thread-count="2" ensures we use two threads (one for each environment).

Step 3: Update Your Test Code to Load Environment Configs

Now, modify your test class to accept the env parameter from TestNG and load the corresponding properties file. This way, each test run will use the right environment settings:

package com.yourteam.tests;

import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class MyCoreTest {
    private String baseUrl;
    private String username;
    private String password;

    @Parameters("env")
    @BeforeClass
    public void setUpTestEnvironment(String env) {
        // Load the correct properties file based on the environment parameter
        Properties envProps = new Properties();
        try (InputStream propsStream = getClass().getResourceAsStream("/" + env + ".properties")) {
            if (propsStream == null) {
                throw new IllegalArgumentException("No properties file found for environment: " + env);
            }
            envProps.load(propsStream);
            // Assign config values to class variables
            baseUrl = envProps.getProperty("base.url");
            username = envProps.getProperty("username");
            password = envProps.getProperty("password");
        } catch (IOException e) {
            throw new RuntimeException("Failed to load environment properties", e);
        }
    }

    @Test
    public void testLoginFunctionality() {
        // Use the loaded environment values in your test logic
        System.out.println("Running login test on: " + baseUrl);
        // Your actual test steps go here (e.g., navigate to baseUrl, enter username/password)
    }

    @Test
    public void testFeatureX() {
        System.out.println("Testing Feature X on: " + baseUrl);
        // Your test logic for Feature X
    }
}

Step 4: Configure Maven Surefire Plugin

Finally, update your pom.xml to tell the Maven Surefire plugin to use our TestNG suite and ensure proper isolation for parallel runs. Add or modify the surefire plugin configuration:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.2.5</version> <!-- Use the latest stable version -->
            <configuration>
                <!-- Point to our TestNG suite file -->
                <suiteXmlFiles>
                    <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
                </suiteXmlFiles>
                <!-- Fork 2 separate JVM processes (one per environment) to avoid shared state issues -->
                <forkCount>2</forkCount>
                <reuseForks>false</reuseForks>
            </configuration>
        </plugin>
    </plugins>
</build>

The forkCount=2 ensures each environment's tests run in a separate JVM, which prevents any accidental shared state between test runs.

Step 5: Run Your Parallel Tests

To execute the tests, simply run this command in your project root:

mvn clean test

You'll see output in your console showing both environments' tests running simultaneously. Check the logs to confirm each test is using the correct base URL and credentials.

Key Notes to Avoid Issues

  • Keep tests stateless: Don't use static variables in your test classes—they'll be shared across threads/environments and cause flaky tests.
  • Isolate environment configs: Make sure each properties file has all the unique settings needed for its environment (no hardcoded values in tests!).
  • Update TestNG/Surefire versions: Stick to the latest stable versions of both libraries to avoid bugs related to parallel execution.

Give this setup a spin—if you hit snags with property loading, thread isolation, or anything else, feel free to share more details and we can troubleshoot together!

内容的提问来源于stack exchange,提问作者sravani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:19:25