2

Localhost で Java、Gradle、TestNG、Selenium Hub、および Node を使用しており、5 つのテストを並行して実行しようとしています。以下はサンプル コードです。

これは基本クラスです:

package tests.temp;

import java.net.MalformedURLException;
import java.net.URL;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;

public class TestBase
{

protected ThreadLocal<RemoteWebDriver> threadDriver = null;

@BeforeMethod
public void setUp() throws MalformedURLException {

    threadDriver = new ThreadLocal<RemoteWebDriver>();
    DesiredCapabilities dc = new DesiredCapabilities();
    FirefoxProfile fp = new FirefoxProfile();
    dc.setCapability(FirefoxDriver.PROFILE, fp);
    dc.setBrowserName(DesiredCapabilities.firefox().getBrowserName());
    threadDriver.set(new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), dc));
}

public WebDriver getDriver() {
    return threadDriver.get();
}

@AfterMethod
public void closeBrowser() {
    getDriver().quit();

}

}

1 テストの例を次に示します。その他のテストは、名前と番号を除いて同じです。

package tests.temp;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.testng.annotations.Test;

public class Test01 extends TestBase
{

@Test
public void testLink()throws Exception
{

    getDriver().get("http://www.yandex.ru");
    WebElement textBox = getDriver().findElement(By.name("text"));
    textBox.sendKeys("First test");
    System.out.println("First test thread-count=\"1\"");

}

}

この 5 つのテストすべてを含む、スイートを含む XML ファイル:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Parallel test runs" parallel="tests" thread-count="1">

<test name="Test_01">
    <classes>
        <class name="tests.temp.Test01" ></class>
    </classes>
</test>

 ...

<test name="Test_05">
    <classes>
        <class name="tests.temp.Test05" ></class>
    </classes>
</test>

</suite>

そして最後の - Suite runner を含む XML ファイル:

<suite name="Parallel Test Suite">
<suite-files>
    <suite-file path="./testRunner.xml" />
</suite-files>
</suite>

問題は、thread-count="1" を使用した場合、TeamCity のビルド ログは正常に見えますが、もちろんテストは順番に実行されます。 TeamCity スレッド = 1

thread-count="2" またはその他の値の場合 - ビルド ログがわかりにくく、Tests カウンターの値が正しくありません。しかし、IDEAでは、すべてがクールで正しいです! TeamCity スレッド = 2

誰もこの問題を解決する方法を知っていますか??

4

1 に答える 1

4

並行して実行されているテストを報告する場合は、TeamCity がどのメッセージがどのテストに属しているかを理解できるように、それらにflowIdを割り当てる必要があります。flowId がないと、ビルド ログだけでなく、テストの統計も不正確になります。flowId がないと、この失敗が他のテストによって報告された場合でも、TeamCity は誤ってテストを失敗としてマークする可能性があります。ビルド ログに並列テストを適切に表示する方法については、TeamCity トラッカーのリクエストを参照してください: https://youtrack.jetbrains.com/issue/TW-8249。投票してください。

于 2016-06-17T14:41:39.707 に答える