TestNG 并行执行行为与预期不匹配

TestNG parallel execution behavior doesn't match the expected one

我目前遇到了一个我无法确定的问题。

我正在尝试 运行 使用 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() returns 只有当 @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>

你能帮我解决这个问题吗?

谢谢

问题是 IInvokedMethod 不知道 testng.xml 代替 String browserName = method.getTestMethod().getXmlTest().getLocalParameters().get("browserName");String browserName = testResult.getTestContext().getCurrentXmlTest().getLocalParameters().get("browserName");