如何简化 testng XML 文件中的参数传递?

Posted

技术标签:

【中文标题】如何简化 testng XML 文件中的参数传递?【英文标题】:How do I simplify the passing of parameters in testng XML file? 【发布时间】:2020-05-20 05:43:35 【问题描述】:

我有一个 testng XML 文件,它在下面的组中运行 Selenium 测试。我想从 JSON 或其他类型的文件中传递 parameter namesvalues 中设置的所有浏览器信息,因此我不必继续复制和粘贴它们如果我为另一个测试添加配置 - 所以代码更少。使用 testng XML 文件可以做到这一点吗?

感谢您的帮助。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite thread-count="2" name="test.java" annotations="JDK" parallel="tests">
    <test name="Test - Chrome Vienna">
        <parameter name="browser" value="chrome"/>
        <parameter name="browserVersion" value="78.0"/>
        <parameter name="os" value="OS X"/>
        <parameter name="osVersion" value="Mojave"/>
        <parameter name="resolution" value="1024x768"/>
        <groups>
            <run>
                <include name="vienna" />
            </run>
        </groups>
        <classes>
            <class name="com.bookinggo.ticketed.uiendtoend.TicketedSingleJourneyTest"/>
        </classes>
    </test>

【问题讨论】:

【参考方案1】:

您可以使用数据提供程序。在您的测试类中注释测试:

@Test(dataProvider="SearchProvider")

你的数据提供者应该是这样的:

@DataProvider(name="SearchProvider")
    public Object[][] getDataFromDataprovider()
    return new Object[][] 
        
             "browser", "chrome" ,
             "browserVersion", "78.0" ,
             "os", "OS X" 
        ;

    

或者,您可以为 dataprovider 创建一个单独的类并使用以下方法读取 json 内容:

@DataProvider
public Object[][] getSearchProvider() throws FileNotFoundException 
    JsonElement jsonData = new JsonParser().parse(new FileReader("<json path>"));
    JsonElement dataSet = jsonData.getAsJsonObject().get("dataSet");
    List<TestData> testData = new Gson().fromJson(dataSet, new TypeToken<List<TestData>>() 
    .getType());
    Object[][] returnVal = new Object[testData.size()][1];
    int i = 0;
    for (Object[] each : returnVal) 
        each[0] = testData.get(i++);
    
    return returnVal;

【讨论】:

以上是关于如何简化 testng XML 文件中的参数传递?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法将 POM 参数/属性传递给 TestNG XML 文件?

testng教程之testng.xml的配置和使用,以及参数传递

Jenkins参数化构建 - Maven Command Line传递TestNG的参数

TestNG 参数在值中声明变量问题

testng教程之testng.xml的配置和使用,以及参数传递(多线程执行)

2.6.2 XML配置:使用testNG进行并发多浏览器测试