Maven 如何使用TestNG运行两次测试
我正在使用TestNG和Maven进行自动化测试。 我需要运行一个测试两次,首先运行一个参数,例如state=1,然后运行同一个参数,但另一个值state=2 我有50多个@Test注释方法。我们的想法是让每个测试调用w次,编写尽可能少的代码 如何使我的测试在这两种状态下运行两次?像这样尝试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
//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;ipublic 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。我该怎么办?