我有一个测试套件的测试类,我正在通过一个testng.xml文件运行。这个很好用。所有的测试都是连续运行的,所以没有并行执行障碍.
我现在的目标是获取一个测试类中的测试方法生成的状态(例如,由数据库插入生成的customerId
主键值),并将其传递给另一个测试类,以便该第二类中的测试方法能够根据该共享状态采取进一步的操作(例如,使用来自第一类的customerId
值查找刚刚插入的客户)。
当然,通过类成员变量在单个类中的测试方法之间共享状态很容易,但我不知道如何在测试类之间共享它。
发布于 2014-07-15 19:14:58
使用工厂创建存储库。存储库存储“有趣的测试状态”属性。
TestRepository tr = TestRepositoryFactory.getInstance();
...
tr.store("test13.PKID", pkid.toString());
然后在后续代码中,重复对工厂的调用,然后获取值:
String spkid = tr.get("test13.PKID");
发布于 2016-08-05 14:45:15
要做到这一点,真正的测试方法是用所需的值设置ITestContext属性,然后从其他测试类获得它。
设定值:
@Test
public void setvaluetest(ITestContext context) {
String customerId = "GDFg34fDF";
context.setAttribute("customerId", customerId);
}
获得价值:
@Test
public void getvaluetest(ITestContext context) {
String id = context.getAttribute("customerId");
}
发布于 2018-03-20 13:35:56
另一种方法是使用面向对象编程的方法。
例如,测试的共同结构:
TestBase.java
(所有其他测试类的父类,有类似于@parent、@AfterSuite等) 方法。RegistrationTests.java
(扩展TestBase,)ShoppingTests.java
(扩展TestBase)WhateverElseTests.java
(扩展TestBase)
因此,TestBase
将所有共享数据作为静态字段,例如Customer
对象:
public class TestBase {
protected static final BrowserManager bw = new BrowserManager();
protected static Customer customer;
@BeforeSuite
public void initBrowser() {
bw.init();
}
@AfterSuite
public void terminateBrowser() {
bw.terminate();
}
}
以及在测试中访问customer
,例如ShoppingTests.java
public class ShoppingTests extends TestBase {
@Test
public void doSomethingTest() {
bw.navigateTo().shoppingPage();
bw.shoppingPreparationHelper().checkDisplayedName(customer.name);
...
N.B.:共享对象的测试应该按照严格的顺序进行(首先测试init对象,然后- test使用对象的数据),所以使用@Test(dependsOnMethods = "someMethodTest")
。否则,您将面临NullPointerException的customer
风险。
P.S.:面向对象方式比ITestContext
有很大的优势,因为您可以将任何对象从一个测试传递到另一个测试(也可以在类之间传递),而不仅仅是字符串属性。
https://stackoverflow.com/questions/24766147
复制相似问题