我有一个自动化项目,有两个测试类(子类)和一个测试库(父类)。在 TestBase 中,我定义了一个 threadlocal 属性,如下所示。
protected ThreadLocal<ITestContext> iTestContextThreadLocal = new ThreadLocal<>();
在每个子类中,我将一个名为“feature”的属性设置到该 ThreadLocal 属性中。示例 Child 类如下所示。
public class RestTests extends TestBase{
@BeforeClass(alwaysRun = true)
public void init(ITestContext iTestContext) {
iTestContext.setAttribute("feature", "Sample - RestTests1");
iTestContextThreadLocal.set(iTestContext);
String feature = iTestContextThreadLocal.get().getAttribute("feature").toString();
}
@Test
public void testScenario1(){
//Automation Code
}
}
在 TestBase 中,我有一个“AfterMethod”,在其中我尝试访问子类的 before 方法中设置的值。
@AfterMethod(alwaysRun = true)
public void test() {
try {
ITestContext iTestContext = iTestContextThreadLocal.get();
String feature = iTestContext.getAttribute("feature").toString();
System.out.println("***** ThreadLocalAttribute: " + feature);
//Rest of the code
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// Clean up the ThreadLocal variables after method execution
iTestContextThreadLocal.remove();
}
}
我面临的问题是 - 一个类中的并行测试执行(在类和方法中)功能集作为输出提供。 举个例子,如果我将“Sample - RestTests1”和“Sample - RestTests2”设置为子类中的功能,当我尝试使用以下代码在 TestBase afterMethod 中访问它们时,仅给出一个类的功能
iTestContext.getAttribute("feature").toString();
如何解决这个问题并通过 TestBase 的 AfterMethod 获取每个类中的功能集?
我尝试过改变注释的顺序,并尝试了互联网上的解决方案。但目前还没有找到解决办法。
非常感谢任何帮助。 预先感谢。
例如,如果您阅读类似主题的this问题,您会发现 TestNG 的每个测试类仅创建一个实例的策略存在问题,以及如果测试应在以下环境中运行则如何重置状态平行。
我想在你的情况下,你不应该使用
init
方法 @BeforeClass
,而应该使用 @BeforeMethod
,或者也许 @BeforeTest
(不记得确切的名称)。