【问题标题】:Paramerization with TestNG XML to run specific Test suite使用 TestNG XML 进行参数化以运行特定的测试套件
【发布时间】:2015-10-23 22:47:54
【问题描述】:

请原谅,我英语不好,但我会尽量以最好的方式提出这个问题。

要求: 我有一个 HTML 文件,其中包含供测试用户运行 selenium 测试的某些控件。

示例:我们有 4 个模块,例如 CAR、HOTEL、RAIL、FLIGHT 和环境详细信息(DEV、QA、PROD)。如果用户想在 DEV 环境中运行 CAR 模块,他可以从 HTML 页面中选择。

一旦用户选择并单击 RUN 按钮,命令文件应该运行,并且根据用户选择,selenium 测试应该启动并通过 TESTNG.xml 运行

对 selenium 来说是全新的,我不知道如何配置 TESTNG XML 并控制测试类中​​的测试套件。

在我的情况下,如果我想在 PROD 环境中运行 FLIGHT 测试,我需要在 TESTNG XML 上进行哪些配置以及如何调用 FLIGHT 的测试集。

第二种情况,假设如果我想在 PROD 上运行所有 4 个模块,那么 TESTNG XML 和 CAR、FLIGHT、HOTEL、RAIL 测试的测试套件的配置是什么?

所有这些我想在不打开 Eclipse 的情况下在命令提示符下运行。

【问题讨论】:

  • 你想从命令行使用 maven 吗?

标签: selenium-webdriver testng testng-dataprovider


【解决方案1】:
  1. 首先您必须验证 TestNg XML 文件中的参数
  2. 那么你必须在测试之前配置它们,你可以从配置文件阅读器中获取详细信息
  3. 您必须通过属性文件将参数详细信息传递给配置文件阅读器

请看下面的例子

这是你要传递参数的testng xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="false" thread-count="6" verbose="1">
    <!--Values Chrome Firefox HLChrome HLFirefox HTMLUnit phantomJS-->
    <parameter name="browser" value="Chrome"/>

    <!--Values QA_URL DEV_URL PROD_URL-->
    <parameter name="URL" value="QA_URL"/>

    <!--Values QA Dev Uat Prod -->
    <parameter name="Env" value="QA"/>

    <test name="Add Client">
        <classes>
            <class name="tests.client.AddUser_Valid"/>
        </classes>
    </test>
</suite>

这是获取参数详细信息的方式

@BeforeTest
@Parameters({"browser","URL","Env"})
public void setupBrowserAndURL(String browser,String URL,String Env)  {
 if(Env.equalsIgnoreCase("QA")){
            if(URL.equalsIgnoreCase("QA_URL")){
                driver.get(configFileReader.applicationUrl_QA());
                commonOperations.waitUntilPageLoaded(driver);
}

您必须添加配置文件阅读器才能从属性文件中获取详细信息

public String applicationUrl_QA_URL() {
        String applicationUrl = properties.getProperty("applicationUrl_QA");
        if(applicationUrl != null) return applicationUrl;
        else throw new RuntimeException("url not specified in the Configuration.properties file.");
    }

    public String applicationUrl_Dev_URL() {
        String applicationUrl = properties.getProperty("applicationUrl_Demo");
        if(applicationUrl != null) return applicationUrl;
        else throw new RuntimeException("url not specified in the Configuration.properties file.");
    }

你必须在你的属性文件中添加 URL

applicationUrl_QA = http://xxxx.qa.xxxx.cloud applicationUrl__Demo =http://xxxx.demo.xxxx.cloud

【讨论】:

    【解决方案2】:

    假设您想使用 maven,这是一种方法,可能还有其他/更简单的方法:

    您为 testEnv 创建一个变量,以及四个套件文件(每个套件一个),如下所示在您的 pom.xml 中:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.4.2</version>
                <configuration>
                    <systemPropertyVariables>
                        <environment>${testEnv}</environment>
                    </systemPropertyVariables>
                    <suiteXmlFiles>
                        <suiteXmlFile>${suiteFile1}</suiteXmlFile>
                        <suiteXmlFile>${suiteFile2}</suiteXmlFile>
                        <suiteXmlFile>${suiteFile3}</suiteXmlFile>
                        <suiteXmlFile>${suiteFile4}</suiteXmlFile>
                    </suiteXmlFiles>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    然后RUN按钮可以构建/执行命令行参数如下:

    mvn -f pom.xml -DtestEnv=DEV -DsuiteFile1=src/test/testsuite/CAR.xml -DsuiteFile2=src/test/testsuite/HOTEL.xml clean install
    

    【讨论】:

    • 抱歉耽搁了,是的,我计划使用 maven 通过传递环境细节和测试套件来运行我的测试项目。我会尝试您建议的方式并让您输出。感谢您的帮助。我对 pom.xml 有疑问,您定义了所有 4 个套件,但如果我只想运行一个套件,那么忽略它是如何工作的其他套房。
    • 您需要对其进行测试,但我认为未定义的变量应该等同于 pom 文件中的空格。如果没有,则为变量传入空白区域,看看会发生什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 2017-08-19
    相关资源
    最近更新 更多