有什么方法可以使用不同的配置从 2 个不同的 类 两次 运行 相同的测试集而无需重复代码
Is there any way to run same set of tests from 2 different classes twice with different configurations without duplicating code
public class JavaFile1 extends frameworkClass {
@BeforeClass(alwaysRun=true)
public void setup(){
setMailServer1();
//setMailServer2();
}
@Test(priority = 0, groups = { "webdriver", "UI","helloTest"})
public void test1(){}
@Test(priority = 1, groups = { "webdriver", "UI","helloTest"})
public void test2(){}
@Test(priority = 2, groups = { "webdriver", "UI","helloTest"})
public void test3(){}
@Test(priority = 3, groups = { "webdriver", "UI","helloTest"})
public void test4(){}
@Test(priority = 4, groups = { "webdriver", "UI","helloTest"})
public void test5(){}
}
public class JavaFile2 extends frameworkClass{
@Test(priority = 0, groups = { "webdriver", "UI","helloTest1"})
public void test1(){}
@Test(priority = 1, groups = { "webdriver", "UI","helloTest1"})
public void test2(){}
@Test(priority = 2, groups = { "webdriver", "UI","helloTest1"})
public void test3(){}
@Test(priority = 3, groups = { "webdriver", "UI","helloTest1"})
public void test4(){}
@Test(priority = 4, groups = { "webdriver", "UI","helloTest1"})
public void test5(){}
}
`我正在尝试按以下顺序从 2 个 java 文件中 运行 testng 测试。
配置1
运行 来自 java 文件 1 的所有测试
运行 来自 java 文件 2 的所有测试
配置2
运行 来自 java 文件 1 的同一组测试
运行 来自 java file2
的同一组测试
在不重复代码的情况下,如何将测试按上述顺序调整为 运行?
注意:class 2 不能扩展 class 1,因为它已经扩展了一些其他框架 class
如果将测试 class 与 @Factory
相结合,就可以做到这一点。
这是您的操作方法[我使用的是 TestNG 7.0.0-beta7
,这是发布此答案时发布的最新版本]
- 定义一个抽象出
setup
和 teardown
的接口
- 构建 (1) 中定义的接口的一个或多个实现
- 使用
@Factory
实现来生成一个或多个测试 class 实例,其中每个实例都注入了 (2) 中定义的每个实现。
这是一个完整的示例。
定义设置和拆卸功能的接口
public interface ITestCaseConfiguration {
void setup();
void tearDown();
}
接口的实现
public class VariantOne implements ITestCaseConfiguration {
@Override
public void setup() {
System.err.println("setup() from VariantOne");
}
@Override
public void tearDown() {
System.err.println("tearDown() from VariantOne");
}
}
public class VariantOne implements ITestCaseConfiguration {
@Override
public void setup() {
System.err.println("setup() from VariantOne");
}
@Override
public void tearDown() {
System.err.println("tearDown() from VariantOne");
}
}
这是工厂的样子
import org.testng.annotations.Factory;
public class MyTestClassFactory {
@Factory
public static Object[] createTestClassInstances() {
return new Object[] {
new SampleTestClass(new VariantOne()), new SampleTestClass(new VariantTwo())
};
}
}
您可以在 Framework class 中使用 @BeforClass 方法并将其参数化为 运行 配置 1 和 2。我猜您的 setMailServer1() 和 setMailServer2() 方法执行除了数据集不同外,其他都是一样的。
代码如下所示:
public class Frameworkclass
{
@Parameters({"data1","data2"})
@BeforeClass
public void setup(String data1, String data2)
{
setMailServer();
System.out.println(data1+" "+data2);
}
}
测试类 1 :
public class JavaFile1 extends FrameworkClass
{
@Test(priority = 0, groups = { "webdriver", "UI","helloTest"})
public void test1(){}
@Test(priority = 1, groups = { "webdriver", "UI","helloTest"})
public void test2(){}
@Test(priority = 2, groups = { "webdriver", "UI","helloTest"})
public void test3(){}
@Test(priority = 3, groups = { "webdriver", "UI","helloTest"})
public void test4(){}
@Test(priority = 4, groups = { "webdriver", "UI","helloTest"})
public void test5(){}
}
测试类 2 :
public class JavaFile2 extends FrameworkClass
{
@Test(priority = 0, groups = { "webdriver", "UI","helloTest1"})
public void test1(){}
@Test(priority = 1, groups = { "webdriver", "UI","helloTest1"})
public void test2(){}
@Test(priority = 2, groups = { "webdriver", "UI","helloTest1"})
public void test3(){}
@Test(priority = 3, groups = { "webdriver", "UI","helloTest1"})
public void test4(){}
@Test(priority = 4, groups = { "webdriver", "UI","helloTest1"})
public void test5(){}
}
套件文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="testsuit" parallel="false" verbose="2">
<test name="test1" parallel="false" preserve-order="true">
<classes>
<class name="TestProject.test.JavaFile1"/>
<parameter name="data1" value="value1"/>
<parameter name="data2" value="value2"/>
</classes>
</test>
<test name="test2" parallel="false" preserve-order="true">
<classes>
<class name="TestProject.test.JavaFile2"/>
<parameter name="data1" value="value3"/>
<parameter name="data2" value="value4"/>
</classes>
</test>
</suite>
输出:
[RemoteTestNG] detected TestNG version 6.14.3
...
... TestNG 6.14.3 by Cédric Beust (cedric@beust.com)
...
value1 value2
PASSED: test1
PASSED: test2
PASSED: test3
PASSED: test4
PASSED: test5
===============================================
test1
Tests run: 5, Failures: 0, Skips: 0
===============================================
value3 value4
PASSED: test6
PASSED: test7
PASSED: test8
PASSED: test9
PASSED: test10
===============================================
test2
Tests run: 5, Failures: 0, Skips: 0
===============================================
===============================================
testsuit
Total tests run: 10, Failures: 0, Skips: 0
===============================================
public class JavaFile1 extends frameworkClass {
@BeforeClass(alwaysRun=true)
public void setup(){
setMailServer1();
//setMailServer2();
}
@Test(priority = 0, groups = { "webdriver", "UI","helloTest"})
public void test1(){}
@Test(priority = 1, groups = { "webdriver", "UI","helloTest"})
public void test2(){}
@Test(priority = 2, groups = { "webdriver", "UI","helloTest"})
public void test3(){}
@Test(priority = 3, groups = { "webdriver", "UI","helloTest"})
public void test4(){}
@Test(priority = 4, groups = { "webdriver", "UI","helloTest"})
public void test5(){}
}
public class JavaFile2 extends frameworkClass{
@Test(priority = 0, groups = { "webdriver", "UI","helloTest1"})
public void test1(){}
@Test(priority = 1, groups = { "webdriver", "UI","helloTest1"})
public void test2(){}
@Test(priority = 2, groups = { "webdriver", "UI","helloTest1"})
public void test3(){}
@Test(priority = 3, groups = { "webdriver", "UI","helloTest1"})
public void test4(){}
@Test(priority = 4, groups = { "webdriver", "UI","helloTest1"})
public void test5(){}
}
`我正在尝试按以下顺序从 2 个 java 文件中 运行 testng 测试。
配置1 运行 来自 java 文件 1 的所有测试 运行 来自 java 文件 2 的所有测试 配置2 运行 来自 java 文件 1 的同一组测试 运行 来自 java file2
的同一组测试在不重复代码的情况下,如何将测试按上述顺序调整为 运行? 注意:class 2 不能扩展 class 1,因为它已经扩展了一些其他框架 class
如果将测试 class 与 @Factory
相结合,就可以做到这一点。
这是您的操作方法[我使用的是 TestNG 7.0.0-beta7
,这是发布此答案时发布的最新版本]
- 定义一个抽象出
setup
和teardown
的接口
- 构建 (1) 中定义的接口的一个或多个实现
- 使用
@Factory
实现来生成一个或多个测试 class 实例,其中每个实例都注入了 (2) 中定义的每个实现。
这是一个完整的示例。
定义设置和拆卸功能的接口
public interface ITestCaseConfiguration {
void setup();
void tearDown();
}
接口的实现
public class VariantOne implements ITestCaseConfiguration {
@Override
public void setup() {
System.err.println("setup() from VariantOne");
}
@Override
public void tearDown() {
System.err.println("tearDown() from VariantOne");
}
}
public class VariantOne implements ITestCaseConfiguration {
@Override
public void setup() {
System.err.println("setup() from VariantOne");
}
@Override
public void tearDown() {
System.err.println("tearDown() from VariantOne");
}
}
这是工厂的样子
import org.testng.annotations.Factory;
public class MyTestClassFactory {
@Factory
public static Object[] createTestClassInstances() {
return new Object[] {
new SampleTestClass(new VariantOne()), new SampleTestClass(new VariantTwo())
};
}
}
您可以在 Framework class 中使用 @BeforClass 方法并将其参数化为 运行 配置 1 和 2。我猜您的 setMailServer1() 和 setMailServer2() 方法执行除了数据集不同外,其他都是一样的。
代码如下所示:
public class Frameworkclass
{
@Parameters({"data1","data2"})
@BeforeClass
public void setup(String data1, String data2)
{
setMailServer();
System.out.println(data1+" "+data2);
}
}
测试类 1 :
public class JavaFile1 extends FrameworkClass
{
@Test(priority = 0, groups = { "webdriver", "UI","helloTest"})
public void test1(){}
@Test(priority = 1, groups = { "webdriver", "UI","helloTest"})
public void test2(){}
@Test(priority = 2, groups = { "webdriver", "UI","helloTest"})
public void test3(){}
@Test(priority = 3, groups = { "webdriver", "UI","helloTest"})
public void test4(){}
@Test(priority = 4, groups = { "webdriver", "UI","helloTest"})
public void test5(){}
}
测试类 2 :
public class JavaFile2 extends FrameworkClass
{
@Test(priority = 0, groups = { "webdriver", "UI","helloTest1"})
public void test1(){}
@Test(priority = 1, groups = { "webdriver", "UI","helloTest1"})
public void test2(){}
@Test(priority = 2, groups = { "webdriver", "UI","helloTest1"})
public void test3(){}
@Test(priority = 3, groups = { "webdriver", "UI","helloTest1"})
public void test4(){}
@Test(priority = 4, groups = { "webdriver", "UI","helloTest1"})
public void test5(){}
}
套件文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="testsuit" parallel="false" verbose="2">
<test name="test1" parallel="false" preserve-order="true">
<classes>
<class name="TestProject.test.JavaFile1"/>
<parameter name="data1" value="value1"/>
<parameter name="data2" value="value2"/>
</classes>
</test>
<test name="test2" parallel="false" preserve-order="true">
<classes>
<class name="TestProject.test.JavaFile2"/>
<parameter name="data1" value="value3"/>
<parameter name="data2" value="value4"/>
</classes>
</test>
</suite>
输出:
[RemoteTestNG] detected TestNG version 6.14.3
...
... TestNG 6.14.3 by Cédric Beust (cedric@beust.com)
...
value1 value2
PASSED: test1
PASSED: test2
PASSED: test3
PASSED: test4
PASSED: test5
===============================================
test1
Tests run: 5, Failures: 0, Skips: 0
===============================================
value3 value4
PASSED: test6
PASSED: test7
PASSED: test8
PASSED: test9
PASSED: test10
===============================================
test2
Tests run: 5, Failures: 0, Skips: 0
===============================================
===============================================
testsuit
Total tests run: 10, Failures: 0, Skips: 0
===============================================