gpt4 book ai didi

testing - TestNG DataProvider 从 testng.xml 配置文件读取测试数据?

转载 作者:行者123 更新时间:2023-11-28 19:51:24 25 4
gpt4 key购买 nike

TestNG DataProvider 是否可以从 testng.xml 配置文件中读取测试数据?或者出于某种原因这是不现实的?我希望能够在套件级别和类级别从该文件读取测试数据。

那么,给定一个这样的 testing.xml 文件(我不确定这是否现实),我该怎么做?我之前使用 XStream(或 Jackson)编写过 DataProvider,因此我非常精通自己的自定义 .xml 格式,但坚持严格的 testing.xml 格式是我担心的地方。

下面的 testing.xml 显然无效,但我只是想展示我想做的事情:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 
<suite name="TestAll">
<parameter name="hubUrl" value="http://localhost:4444/wd/hub"/>
<parameter name="reportFile" value="CustomReport.html"/>
<test name="etsy">
<parameter name="reportFile" value="CustomReport.html"/>
<classes>
<class name="qa.examples.suite.TestSearch">
<parameter name="appUrl" value="http://etsy.com" type="java.lang.String"/>
<parameter name="browser" value="Firefox" type="java.lang.String"/>
<parameter name="testEnabled" value="true" type="java.lang.Boolean"/>
<methods>
<include name="testEtsySearch"/>
<tests>
<test>
<parameter name="testNum" value="1" type="java.lang.Integer"/>
<parameter name="searchTerm" value="cell phone" type="java.lang.String"/>
<parameter name="searchTerm" value="batteries" type="java.lang.String"/>
</test>
<test>
<parameter name="testNum" value="2" type="java.lang.Integer"/>
<parameter name="searchTerm" value="buttons" type="java.lang.String"/>
<parameter name="searchTerm" value="metal" type="java.lang.String"/>
</test>
</tests>
</include>
</methods>
</class>
<class name="qa.examples.suite.TestFilters" />
</classes>
</test>
</suite>

那么,这样的事情可能吗?如果是这样,你会怎么做?

最佳答案

尝试将 ITestContext 作为数据提供者参数传递。像这样的东西:

@DataProvider(name = "DataProvider")
public static Object[][] Provider(ITestContext context) throws Exception
{
String dataFile = context.getCurrentXmlTest().getParameter("dataFile");
}

套件 xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 
<suite name="suite">
<parameter name="param1" value="val1"/>
<test name="test">
<parameter name="param2" value="val2"/>
<classes>
<class name="test.TestClass1" />
</classes>
</test>
</suite>

测试类

package test;
import java.util.Map;
import org.testng.ITestContext;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestClass1 {

@DataProvider(name="Provider")
public Object[][] provider(ITestContext context)
{
Map<String, String> testParams = context.getCurrentXmlTest().getLocalParameters();
Map<String, String> suiteParams=context.getCurrentXmlTest().getSuite().getParameters();

return new Object[][]{{suiteParams.get("param1"), testParams.get("param2")}};
}

@Test(dataProvider="Provider")
public void test1(String param1, String param2)
{
System.out.println("Param1: " + param1);
System.out.println("Param2: " + param2);
}

输出

[TestNG] Running:
/home/nightmare/workspace/test/suite.xml

Param1: val1
Param2: val2

===============================================
suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================

关于testing - TestNG DataProvider 从 testng.xml 配置文件读取测试数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21290122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com