java - 有没有办法控制配置方法在 TestNG 中使用哪个线程?
问题描述
我最近切换到在我的测试套件中使用 ThreadLocal,虽然它在并行测试中效果很好,但它现在已经破坏了非并行测试。我有 @BeforeClass/@BeforeMethod 方法来处理基于测试类的驱动程序实例策略创建 WebDriver 的新实例。但是,当他们创建 WebDriver 的新实例时,它与“Test Worker”的线程相关联,该线程仅用于配置方法,如@BeforeClass 和@BeforeMethod。在启用并行化的情况下运行时不会发生这种情况。这是一个非常简化的示例:
public class DriverWrapper () {
private static ThreadLocal<WebDriver> driver = new ThreadLocal<>();
public DriverWrapper() {}
public void newInstance(){
driver.set(new ChromeDriver());
}
public WebDriver getDriverInstance(){
return driver.get();
}
}
abstract public class AbstractTest {
DriverPolicy policy;
DriverWrapper driver;
public AbstractTest(DriverPolicy policy){
this.policy = policy;
}
@BeforeClass
public void setUpClass() {
if (policy == DriverPolicy.NEW_INSTANCE_PER_CLASS) {
driver = new DriverWrapper();
driver.newInstance();
}
}
@BeforeMethod
public void setUp() {
if (policy == DriverPolicy.NEW_INSTANCE_PER_METHOD) {
driver = new DriverWrapper();
driver.newInstance();
}
}
}
public class SomeTest {
public SomeTest() {
super(DriverPolicy.NEW_INSTANCE_PER_CLASS);
}
@Test
public void doSomeThings() {
SomePageFactoryClass somePageFactoryClass = new SomePageFactoryClass(driver.getDriverInstance());
// it does some pagefactory stuff
somePageFactoryClass.login();
// login() tries to do some WebDrivery stuff
// It's here that I hit the NPE because the thread ID that got assigned to the WebDriver in
// DriverWrapper is different from the thread ID in @Test, so it's just null.
}
}
运行这些测试的我的 testng.xml 仅在禁用并行时遇到此问题。一旦我启用了并行,@BeforeClass 和@BeforeMethod 方法就会与它们的类的@Test 方法在同一个线程上运行。
我想出了一个混乱的工作,我只是在每个单独的@Test 方法中创建 DriverWrapper 的新实例,但是当我已经将代码放在 AbstractTest 中时感觉很浪费。
我有什么明显的遗漏吗?也许我不应该将 ThreadLocal 用于非并行测试?
解决方案
推荐阅读
- python - 将数据从 Pandas 存储到 Snowflake 的最佳方式
- angular - 使用 Angular 在路由之间传递数据
- python - html标签后获取值
- windows - 如何在 Windows 2008 服务器上使用批处理脚本仅捕获文件夹的所有者值?
- vue.js - 无法从 Vue 模板访问全局变量
- sql - 如何在 6 类 SCD 维度表上强制执行参照完整性?
- vue.js - 在 HTML 页面中插入 VueJS 组件模板不起作用
- apache-kafka - Kafka 代理不同步随机分区
- python - 如何在 Python 中对这个数组进行排序?
- python - 蟒蛇 | 计算 3 行中 False 语句的数量