Java 有没有办法在不重复代码的情况下,从两个不同的类中两次运行相同的测试集
} `我正在尝试按照以下顺序从2个java文件运行testng测试 配置1 从java文件1运行所有测试 从java文件2运行所有测试 配置2 从java文件1运行相同的测试集 从java文件2运行相同的测试集 在不重复代码的情况下,如何调整测试以按上述顺序运行?Java 有没有办法在不重复代码的情况下,从两个不同的类中两次运行相同的测试集,java,junit,interface,configuration,testng,Java,Junit,Interface,Configuration,Testng,} `我正在尝试按照以下顺序从2个java文件运行testng测试 配置1 从java文件1运行所有测试 从java文件2运行所有测试 配置2 从java文件1运行相同的测试集 从java文件2运行相同的测试集 在不重复代码的情况下,如何调整测试以按上述顺序运行? 注意:类2不能扩展类1,因为它已经扩展了其他一些框架类如果您将测试类与一个@Factory耦合,则可以这样做 下面是您的操作方法[我正在使用TestNG7.0.0-beta7,这是发布此答案时的最新版本] 定义一个抽象出设置和拆卸 构
注意:类2不能扩展类1,因为它已经扩展了其他一些框架类如果您将测试类与一个
@Factory
耦合,则可以这样做
下面是您的操作方法[我正在使用TestNG7.0.0-beta7
,这是发布此答案时的最新版本]
设置
和拆卸
@Factory
实现生成一个或多个测试类实例,其中每个实例都注入了(2)中定义的每个实现公共接口ITestCase配置{
无效设置();
void tearDown();
}
接口的实现
public类VariantOne实现ITestCaseConfiguration{
@凌驾
公共作废设置(){
System.err.println(“来自VariantOne的setup());
}
@凌驾
公共无效拆卸(){
System.err.println(“从VariantOne中删除());
}
}
public类VariantOne实现ITestCaseConfiguration{
@凌驾
公共作废设置(){
System.err.println(“来自VariantOne的setup());
}
@凌驾
公共无效拆卸(){
System.err.println(“从VariantOne中删除());
}
}
这是工厂的样子
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(){}
}
您可以在框架类中使用@BeforClass方法,并将其参数化,以便为配置1和2运行它。我猜您的setMailServer1()和setMailServer2()方法除了使用不同的数据集之外,做了相同的事情 代码如下所示:
import org.testng.annotations.Factory;
public class MyTestClassFactory {
@Factory
public static Object[] createTestClassInstances() {
return new Object[] {
new SampleTestClass(new VariantOne()), new SampleTestClass(new VariantTwo())
};
}
}
测试类别1:
public class Frameworkclass
{
@Parameters({"data1","data2"})
@BeforeClass
public void setup(String data1, String data2)
{
setMailServer();
System.out.println(data1+" "+data2);
}
}
TestClass2:
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(){}
}
套件文件:
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(){}
}
您正在使用哪个测试框架--JUnit?testng.In setup()我正在尝试处理这两个配置。这可以通过testng?@ArthiVigneshwari实现——不清楚你想要什么。请编辑您的问题并添加您试图实现的示例。@KrishnanMahadevan我的目标是使用不同的配置多次运行测试。@KrishnanMahadevan请查看下面的示例。我想使用setMailServer1()运行test1到test5,然后使用第二个配置setMailServer2()再次运行位于不同JAVA文件中的同一组测试。如何使第一个配置最初运行,运行5个测试,执行第二个配置,再次运行相同的5个测试而不复制代码?testng或接口概念能帮助我实现这一点吗?@ArthiVigneshwari请不要忘记接受答案,这样问题就解决了。当然……尝试一下……肯定可以@Krishnan MahadevanAm不理解构造函数的工厂类实现。对于同一个测试类(SampleTestClass),我们是否创建了两个实例,其中包含两个实现(VariantOne()和VariantTwo())?是的。这是正确的。这只是为了演示。您可以自由更改MyTestClassFactory。createTestClassInstances()(工厂类)来实例化不同的测试类实例,如果需要的话。@factory公共静态对象[]createTestClassInstances(){返回新对象[]{新测试类1(新VariantOne()),新测试类2(新VariantWO())};}感谢Nitish提供的数据提供程序示例。@ArthiVigneshwari很乐意提供帮助:)我正在寻找类级实现,因为类中有许多测试(大约50个测试),并且无法使用@dataProvider annotation对每个测试进行注释。所以我认为工厂的概念是解决这个特殊问题的最好办法。不过,这个例子很好理解。我们将在以后的案例中使用它。谢谢当然@工厂看起来更适合您的案例,因为它在类级别而不是方法级别上工作
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
===============================================