【发布时间】:2016-04-18 09:01:12
【问题描述】:
我目前面临一个我无法识别的问题。
我正在尝试使用 testNG 并行运行测试。并行运行不同的测试没有问题,但是当我尝试在不同的线程中多次运行单个测试时,我有一个奇怪的行为。
所以,我尝试调试以找出问题所在。当我尝试从 TestNG XML 配置文件中获取值时发生错误:
public class LocalWebDriverListener implements IInvokedMethodListener {
static Logger log = Logger.getLogger(LocalWebDriverListener.class);
public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
log.debug("BEGINNING: LocalWebDriverListener.beforeInvocation");
if (method.isTestMethod()) {
//Error on this line
String browserName = method.getTestMethod().getXmlTest().getLocalParameters().get("browserName");
//getXmlTest() returns null
WebDriver driver = LocalDriverFactory.createInstance(browserName);
DriverManager.setWebDriver(driver);
} else {
log.warn("Not a TestNG test");
}
log.debug("END: LocalWebDriverListener.beforeInvocation");
}
}
我不明白为什么 getXmlTest() 只有在 @Test 参数中的 threadPoolSize > 1 时才返回 null。
public class TestClass {
static Logger log = Logger.getLogger(TestClass.class);
@Test(invocationCount = 5, threadPoolSize = 5)
public void testMethod1() {
invokeBrowser("http://www.google.com/");
}
}
XML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Test executed using WebDriver" parallel="tests" thread-count="5">
<listeners>
<listener class-name="my.organization.WebDriverListener" />
</listeners>
<test name="Tests run in Chrome">
<parameter name="browserName" value="chrome" />
<packages>
<package name="my.organization.tests" />
</packages>
</test>
</suite>
你能帮我解决这个问题吗?
谢谢
【问题讨论】:
-
嗯...不能使用TestNG的@Test注解提供的内置机制吗?还是你已经在用了?
-
我编辑了这个问题。我正在使用内置机制,但我必须从 TestNG XML 配置中获取一个值(如果我的 TheadPoolSize 没有大于 1,那么它就可以工作)
-
您不能使用
@BeforeClass来设置参数,并在您的测试方法中使用它吗? -
我不太确定如何轻松做到这一点。我使用了 getXmlTest().getLocalParameters().get("browserName");避免自己写这个。用不上的话,我就换个方式获取这些参数
-
好吧,老实说,我从不使用 XML 来配置我的测试,所以... :)