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

如何参数化TestNG.xml,通过命令行指定运行目标测试套件?

Absolutely, you can parameterize your TestNG suite to control whether you run only Regression 1, only Regression 2, or both via command-line arguments. Here are two practical, easy-to-implement approaches:

Approach 1: Suite-level Parameterization with Beanshell Expressions

This method uses a suite-wide parameter and TestNG's beanshell support to dynamically enable/disable test groups based on your command-line input.

First, update your testng.xml to wrap your tests in a <suite> tag, add a configurable parameter, and use beanshell expressions for the enabled attribute of each test:

<suite name="Regression Test Suite">
    <!-- Default to running both tests if no parameter is passed -->
    <parameter name="runTests" value="both"/>

    <test name="Regression 1" enabled="${
        if (parameters.containsKey('runTests') && 
            (parameters.get('runTests').equalsIgnoreCase('regression1') || 
             parameters.get('runTests').equalsIgnoreCase('both'))) 
            return true; 
        else 
            return false;
    }">
        <parameter name="group" value="regression"/>
        <groups>
            <run>
                <include name="regression"/>
            </run>
        </groups>
        <packages>
            <package name="com.turvo.tests.regressiontests.regression1.*"/>
        </packages>
    </test>

    <test name="Regression 2" enabled="${
        if (parameters.containsKey('runTests') && 
            (parameters.get('runTests').equalsIgnoreCase('regression2') || 
             parameters.get('runTests').equalsIgnoreCase('both'))) 
            return true; 
        else 
            return false;
    }">
        <parameter name="group" value="regression"/>
        <groups>
            <run>
                <include name="regression"/>
            </run>
        </groups>
        <packages>
            <package name="com.turvo.tests.regressiontests.regression2.*"/>
        </packages>
    </test>
</suite>

How to Run via Command Line

Use these commands depending on your build tool:

  • Run only Regression 1:
    # Maven
    mvn test -DrunTests=regression1
    
    # Direct TestNG execution
    java -jar testng.jar testng.xml -DrunTests=regression1
    
  • Run only Regression 2:
    # Maven
    mvn test -DrunTests=regression2
    
    # Direct TestNG execution
    java -jar testng.jar testng.xml -DrunTests=regression2
    
  • Run both tests:
    # Maven (either command works)
    mvn test
    mvn test -DrunTests=both
    
    # Direct TestNG execution
    java -jar testng.jar testng.xml
    

Approach 2: Directly Specify Test Names via Command Line

If you prefer minimal changes to your existing testng.xml, you can use TestNG's built-in support for selecting tests by name via command-line parameters.

Your original testng.xml can stay as-is. Use these commands to control execution:

  • Run only Regression 1:
    # Maven (escape the space or use quotes)
    mvn test -Dtest="Regression 1"
    
    # Direct TestNG execution
    java -jar testng.jar testng.xml -testnames "Regression 1"
    
  • Run only Regression 2:
    # Maven
    mvn test -Dtest="Regression 2"
    
    # Direct TestNG execution
    java -jar testng.jar testng.xml -testnames "Regression 2"
    
  • Run both tests:
    # Maven
    mvn test
    
    # Direct TestNG execution
    java -jar testng.jar testng.xml
    

Notes

  • Approach 1 is more flexible if you need to add more test groups or complex logic later.
  • Approach 2 is simpler for straightforward test selection without modifying your suite configuration.

内容的提问来源于stack exchange,提问作者Shashi Kanth Thummanapalli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:49:37