Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将动态参数传递给testNG.xml运行多个测试_Java_Testng_Testng.xml - Fatal编程技术网

Java 如何将动态参数传递给testNG.xml运行多个测试

Java 如何将动态参数传递给testNG.xml运行多个测试,java,testng,testng.xml,Java,Testng,Testng.xml,我有一个xml套件,它可以发送多个测试和多个参数 例如: <test name="Create"> <classes> <class name="TestClass"> <methods> <parameter name="offerId" value="1234"/> &l

我有一个xml套件,它可以发送多个测试和多个参数

例如:

        <test name="Create">       
        <classes>       
        <class name="TestClass">
            <methods>
                <parameter name="offerId" value="1234"/>
                <include name="testmethod"/>
            </methods>
        </class>                                          
      </classes>
      </test>
        <test name="Add">       
        <classes>       
        <class name="TestClass2">
            <methods>
                <include name="testmethod2"/>
            </methods>
        </class>                                          
      </classes>
      </test>

在这种情况下,您可以使用dataprovider,也可以从excel中读取值,并对dataprovider/excel表中的每个值运行测试。
为您提供一个关于如何在测试用例中使用dataprovider的示例

@DataProvider(name = "offerId")
public static Object[][] voiceSearchTestData() {
    return new Object[][]{
            {1234},
            {2345},
            {4567}
    };
}

@Test(dataProvider = "offerId")
public void testmethod(int offerId, ITestContext context) throws Exception {
    Reporter.log("offer ID is = " + offerId, true);
}
因此,上面的测试将运行3次,数据提供程序中存在的每个值一次,并且您不需要对testng xml中的任何内容进行参数化。您只需提及类名,所有测试都将自动运行。testng.xml应该类似于:

<test name="SampleTest">
    <classes>
        <class name="packageName.className" />
    </classes>
</test>

在这种情况下,您可以使用dataprovider,也可以从excel中读取值,并对dataprovider/excel表中的每个值运行测试。
为您提供一个关于如何在测试用例中使用dataprovider的示例

@DataProvider(name = "offerId")
public static Object[][] voiceSearchTestData() {
    return new Object[][]{
            {1234},
            {2345},
            {4567}
    };
}

@Test(dataProvider = "offerId")
public void testmethod(int offerId, ITestContext context) throws Exception {
    Reporter.log("offer ID is = " + offerId, true);
}
因此,上面的测试将运行3次,数据提供程序中存在的每个值一次,并且您不需要对testng xml中的任何内容进行参数化。您只需提及类名,所有测试都将自动运行。testng.xml应该类似于:

<test name="SampleTest">
    <classes>
        <class name="packageName.className" />
    </classes>
</test>

以下代码的作用: 我想在运行时为每个参数添加一个参数列表。这些参数作为maven运行时参数传递。使用如下所示的
System.getProperty()
方法读取它们。然后将这些参数添加到
内部的
中,并成功运行testng。这在其他场景中也非常有用

下面的代码读取testng.xml文件并将参数添加到

List<String> parameters = new ArrayList<>();
parameters = Arrays.asList(System.getProperty("parameters").split(",");

TestNG tng = new TestNG();
File initialFile = new File("testng.xml");
InputStream inputStream = FileUtils.openInputStream(initialFile);
Parser p = new Parser(inputStream);
List<XmlSuite> suites = p.parseToList();
for(XmlSuite suite:suites){
    List<XmlTest> tests = suite.getTests();
    for (XmlTest test : tests) {
         for (int i = 0; i < parameters.size(); i++) {
            HashMap<String, String> parametersMap = new HashMap<>();
            parametersMap.put("parameter",parameters.get(i));
            test.setParameters(parametersMap);
        }
    }
}
tng.setXmlSuites(suites);
tng.run();
List parameters=new ArrayList();
parameters=Arrays.asList(System.getProperty(“参数”).split(“,”);
TestNG tng=新的TestNG();
File initialFile=新文件(“testng.xml”);
InputStream InputStream=FileUtils.openInputStream(初始文件);
Parser p=新的解析器(inputStream);
List suites=p.parsetList();
用于(XmlSuite:suites){
List tests=suite.getTests();
for(XmlTest测试:测试){
对于(int i=0;i
以下代码的作用: 我想在运行时为每个参数添加一个参数列表。这些参数作为maven运行时参数传递。它们使用
System.getProperty()读取
方法,如下所示。然后将这些参数添加到
内部
,并成功运行testng。这在其他场景中也非常有用

下面的代码读取testng.xml文件并将参数添加到

List<String> parameters = new ArrayList<>();
parameters = Arrays.asList(System.getProperty("parameters").split(",");

TestNG tng = new TestNG();
File initialFile = new File("testng.xml");
InputStream inputStream = FileUtils.openInputStream(initialFile);
Parser p = new Parser(inputStream);
List<XmlSuite> suites = p.parseToList();
for(XmlSuite suite:suites){
    List<XmlTest> tests = suite.getTests();
    for (XmlTest test : tests) {
         for (int i = 0; i < parameters.size(); i++) {
            HashMap<String, String> parametersMap = new HashMap<>();
            parametersMap.put("parameter",parameters.get(i));
            test.setParameters(parametersMap);
        }
    }
}
tng.setXmlSuites(suites);
tng.run();
List parameters=new ArrayList();
parameters=Arrays.asList(System.getProperty(“参数”).split(“,”);
TestNG tng=新的TestNG();
File initialFile=新文件(“testng.xml”);
InputStream InputStream=FileUtils.openInputStream(初始文件);
Parser p=新的解析器(inputStream);
List suites=p.parsetList();
用于(XmlSuite:suites){
List tests=suite.getTests();
for(XmlTest测试:测试){
对于(int i=0;i
能否添加使用offerId参数的testMethod代码?添加了java测试@SameerArorap请参考此内容并遵循@IdanShabat让我知道答案是否对您有帮助:)hi@SameerArora-感谢您的输入,但这没有帮助。它确实从属性文件运行了测试,但我需要在同一参数上多次运行同一测试。当我向同一参数添加不同的值时,它使用了最新的值,并且没有运行两次。您可以在其中添加使用offerId参数的testMethod代码吗?添加了java测试@Sameerrorap请参考并遵循@IdanShabat让我知道答案是否对您有帮助:)嗨@Sameerrora-感谢您的输入,但这没有帮助。它确实从属性文件运行了测试,但我需要在同一参数上多次运行同一测试。当我向同一个参数添加不同的值时,它使用了最新的值,并且没有运行两次。谢谢你的回答。这样我就可以多次运行同一个测试,但是有没有一种方法可以运行整个测试,运行整个测试,而不仅仅是参数?我在同一套衣服上有多个测试,所以我希望它:1.开始运行衣服-运行一些测试。2.当它到达desire类(test)时,使用第一个参数。3.继续穿西装,运行更多参数。4.返回第一步,再次运行它——直到listHi@Sameer-Arora上没有更多的参数。谢谢你的回答。这样我就可以多次运行同一个测试,但是有没有一种方法可以运行整个测试,运行整个测试,而不仅仅是参数?我在同一套衣服上有多个测试,所以我希望它:1.开始运行衣服-运行一些测试。2.当它到达desire类(test)时,使用第一个参数。3.继续穿西装,运行更多参数。4.返回第一步并再次运行它——直到列表上没有更多的参数