Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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
Maven 如何使用TestNG运行两次测试_Maven_Automation_Testng - Fatal编程技术网

Maven 如何使用TestNG运行两次测试

Maven 如何使用TestNG运行两次测试,maven,automation,testng,Maven,Automation,Testng,我正在使用TestNG和Maven进行自动化测试。 我需要运行一个测试两次,首先运行一个参数,例如state=1,然后运行同一个参数,但另一个值state=2 我有50多个@Test注释方法。我们的想法是让每个测试调用w次,编写尽可能少的代码 如何使我的测试在这两种状态下运行两次?像这样尝试 //This method will provide data to any test method that declares that its Data Provider //is named "tes

我正在使用TestNG和Maven进行自动化测试。 我需要运行一个测试两次,首先运行一个参数,例如state=1,然后运行同一个参数,但另一个值state=2

我有50多个@Test注释方法。我们的想法是让每个测试调用w次,编写尽可能少的代码

如何使我的测试在这两种状态下运行两次?

像这样尝试

//This method will provide data to any test method that declares that its Data Provider
//is named "test1"
@DataProvider(name = "test1")
public Object[][] createData1() {
return new Object[][] {
  { "Cedric", new Integer(36) },
  { "Anne", new Integer(37)},
 };
}

 //This test method declares that its data should be supplied by the Data Provider
 //named "test1"
 @Test(dataProvider = "test1")
public void verifyData1(String n1, Integer n2) {
 System.out.println(n1 + " " + n2);
}
看这里

像这样试试

//This method will provide data to any test method that declares that its Data Provider
//is named "test1"
@DataProvider(name = "test1")
public Object[][] createData1() {
return new Object[][] {
  { "Cedric", new Integer(36) },
  { "Anne", new Integer(37)},
 };
}

 //This test method declares that its data should be supplied by the Data Provider
 //named "test1"
 @Test(dataProvider = "test1")
public void verifyData1(String n1, Integer n2) {
 System.out.println(n1 + " " + n2);
}

请看这里,这里有一种方法。请随意将此解决方案扩展到您的实际问题陈述

确保您使用的是TestNG 7.0.0-beta1最新发布的版本,从今天开始 在套件xml文件中,添加一个套件级参数,该参数捕获所有需要重复测试的状态值,并将它们分开, 构建org.testng.IAlterSuiteListener实现,该实现基本上将套件级参数拆分为多个参数,在套件中重试测试,克隆测试,并将拆分的参数添加到每个测试中。 下面的示例应该说明这是如何工作的

测试类看起来像这样

//This method will provide data to any test method that declares that its Data Provider
//is named "test1"
@DataProvider(name = "test1")
public Object[][] createData1() {
return new Object[][] {
  { "Cedric", new Integer(36) },
  { "Anne", new Integer(37)},
 };
}

 //This test method declares that its data should be supplied by the Data Provider
 //named "test1"
 @Test(dataProvider = "test1")
public void verifyData1(String n1, Integer n2) {
 System.out.println(n1 + " " + n2);
}
包com.rationaliemotions.stackoverflow.qn53803675; 导入org.testng.ITestResult; 导入org.testng.Reporter; 导入org.testng.annotations.Parameters; 导入org.testng.annotations.Test; 公共类SampleTestClass{ @试验 @参数状态 公共无效testMethodOneint状态{ 印刷国家; } @试验 @参数状态 公共void testMethodTwoint状态{ 印刷国家; } 私有无效打印机状态{ ITestResult result=Reporter.getCurrentTestResult; String methodname=result.getMethod.getMethodName; 字符串testname=result.getTestContext.getName; 串味精= 字符串。格式化%s,从运行状态[%d]、methodname、testname、state; System.err.printlnmg; } } 下面是更改套件的侦听器的外观

包com.rationaliemotions.stackoverflow.qn53803675; 导入java.util.ArrayList; 导入java.util.List; 导入java.util.stream.collector; 导入org.testng.IAlterSuiteListener; 导入org.testng.xml.XmlSuite; 导入org.testng.xml.XmlTest; 公共类SimpleSuite实现了IAlterSuiteListener{ @凌驾 公共套房{ XmlSuite=suites.get0; //获取名为states的套件级参数,并用逗号将其拆分 //我们将得到所有我们需要竞选的州。 String[]states=suite.getParameterState.split,; //我们假设只有那些以dynamic开头的标记 //以他们的名义将被考虑多次执行。 列出动态测试= 一套 .getTests 流动 .filterxmlTest->xmlTest.getName.StartWithDynamic .toList; List clonedTests=新的ArrayList; 对于XmlTest each:dynamictests{ 对于int i=1;i 下面是输出的样子


这里有一种方法。请随意将此解决方案扩展到您的实际问题陈述

确保您使用的是TestNG 7.0.0-beta1最新发布的版本,从今天开始 在套件xml文件中,添加一个套件级参数,该参数捕获所有需要重复测试的状态值,并将它们分开, 构建org.testng.IAlterSuiteListener实现,该实现基本上将套件级参数拆分为多个参数,在套件中重试测试,克隆测试,并将拆分的参数添加到每个测试中。 下面的示例应该说明这是如何工作的

测试类看起来像这样

//This method will provide data to any test method that declares that its Data Provider
//is named "test1"
@DataProvider(name = "test1")
public Object[][] createData1() {
return new Object[][] {
  { "Cedric", new Integer(36) },
  { "Anne", new Integer(37)},
 };
}

 //This test method declares that its data should be supplied by the Data Provider
 //named "test1"
 @Test(dataProvider = "test1")
public void verifyData1(String n1, Integer n2) {
 System.out.println(n1 + " " + n2);
}
包com.rationaliemotions.stackoverflow.qn53803675; 导入org.testng.ITestResult; 导入org.testng.Reporter; 导入org.testng.annotations.Parameters; 导入org.testng.annotations.Test; 公共类SampleTestClass{ @试验 @参数状态 公共无效testMethodOneint状态{ 印刷国家; } @试验 @参数状态 公共void testMethodTwoint状态{ 印刷国家; } 私有无效打印机状态{ ITestResult result=Reporter.getCurrentTestResult; String methodname=result.getMethod.getMethodName; 字符串testname=result.getTestContext.getName; 串味精= 字符串。格式化%s,从运行状态[%d]、methodname、testname、state; System.err.printlnmg; } } 下面是更改套件的侦听器的外观

包com.rationaliemotions.stackoverflow.qn53803675; 导入java.util.ArrayList; 导入java.util.Li st; 导入java.util.stream.collector; 导入org.testng.IAlterSuiteListener; 导入org.testng.xml.XmlSuite; 导入org.testng.xml.XmlTest; 公共类SimpleSuite实现了IAlterSuiteListener{ @凌驾 公共套房{ XmlSuite=suites.get0; //获取名为states的套件级参数,并用逗号将其拆分 //我们将得到所有我们需要竞选的州。 String[]states=suite.getParameterState.split,; //我们假设只有那些以dynamic开头的标记 //以他们的名义将被考虑多次执行。 列出动态测试= 一套 .getTests 流动 .filterxmlTest->xmlTest.getName.StartWithDynamic .toList; List clonedTests=新的ArrayList; 对于XmlTest each:dynamictests{ 对于int i=1;i 下面是输出的样子

使用调用计数-

上述测试将执行2次

如果适用于所有测试,则可以将invocationCount设置为全局

public class InvocationCount implements IAnnotationTransformer {

@SuppressWarnings("rawtypes")
@Override
public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) {
    annotation.setInvocationCount(Integer.parseInt(number_of_times_to_execute)));
}
使用调用计数-

上述测试将执行2次

如果适用于所有测试,则可以将invocationCount设置为全局

public class InvocationCount implements IAnnotationTransformer {

@SuppressWarnings("rawtypes")
@Override
public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) {
    annotation.setInvocationCount(Integer.parseInt(number_of_times_to_execute)));
}

我更喜欢Krishnan Mahadevan提供的答案,但若您认为需要避免编码,那个么可以在testng.xml文件中使用两个

<test name="Test1" preserve-order="true">
    <parameter name="State" value="State1"></parameter>

    <classes>

        <class  name="class.here" />
 </classes>

</test> <!-- Test -->


 <test name="Test2" preserve-order="true">
    <parameter name="State" value="State2"></parameter>

    <classes>

        <class  name="class.here" />
 </classes>

</test> <!-- Test -->
因此,Test1使用一种状态运行,Test2使用另一种状态运行


使用@TestinvocationCount=2重复相同的测试

我更喜欢Krishnan Mahadevan提供的答案,但如果您认为需要避免编码,那么可以在testng.xml文件中使用两个

<test name="Test1" preserve-order="true">
    <parameter name="State" value="State1"></parameter>

    <classes>

        <class  name="class.here" />
 </classes>

</test> <!-- Test -->


 <test name="Test2" preserve-order="true">
    <parameter name="State" value="State2"></parameter>

    <classes>

        <class  name="class.here" />
 </classes>

</test> <!-- Test -->
因此,Test1使用一种状态运行,Test2使用另一种状态运行



使用@TestinvocationCount=2重复相同的测试

您能显示测试的代码吗?抱歉,不能。请解释如何运行测试两次,因为maven我正在使用clean install并通过maven运行excel。使用数据提供程序您能举个例子吗?您能显示测试的代码吗?抱歉,不能。请解释如何运行测试两次,因为maven我正在使用clean安装并通过maven运行excel。使用数据提供程序你能举个例子吗?我的文件中有很多测试。如何使每个测试运行两次?@talangle这两种状态对所有测试都是一样的,我的意思是说state1->运行所有测试用例,state2->运行所有测试用例?或者不同的测试用例不同?我的文件中有很多测试。如何使每个测试运行两次?@talangle这两种状态对所有测试都是一样的,我的意思是说state1->运行所有测试用例,state2->运行所有测试用例?或者不同的测试用例会有所不同?谢谢你的回答。所以,现在我需要将@Parametersstate添加到我希望运行两次的每个测试中?除了其他的变化。您需要向测试中添加@Parameters注释,并向测试方法中添加所需的参数。如果我的回答对你的问题有帮助,请接受。你的代码看起来不错,但你试过了吗?我一直在获取java.lang.NumberFormatException:对于输入字符串:1,2我在帖子中共享的输出是我自己代码的输出。所以我不确定你说的是什么意思,你试过了吗?我正在通过测试套件运行测试,我没有运行一个测试XML。我该怎么办?谢谢你的回答。所以,现在我需要将@Parametersstate添加到我希望运行两次的每个测试中?除了其他的变化。您需要向测试中添加@Parameters注释,并向测试方法中添加所需的参数。如果我的回答对你的问题有帮助,请接受。你的代码看起来不错,但你试过了吗?我一直在获取java.lang.NumberFormatException:对于输入字符串:1,2我在帖子中共享的输出是我自己代码的输出。所以我不确定你说的是什么意思,你试过了吗?我正在通过测试套件运行测试,我没有运行一个测试XML。我该怎么办?