为啥我的自动化测试在一起运行时会失败,但单独通过?

Posted

技术标签:

【中文标题】为啥我的自动化测试在一起运行时会失败,但单独通过?【英文标题】:Why do my automated tests fail when run together, but pass individually?为什么我的自动化测试在一起运行时会失败,但单独通过? 【发布时间】:2021-08-27 18:44:19 【问题描述】:

我是使用 Java 和 TestNG 进行并行测试的新手。

这是我的 testng.xml 文件的 syxtax 的样子...

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="TestNG" parallel="methods" thread-count="2">
    <listeners>
        <listener class-name="framework.adapters.AutomationTestListener"/>
        <listener class-name="framework.adapters.AppiumListener"></listener>
    </listeners>
    <test name="Test Suite">
        <packages>
            <package name="org.abc.tests"/>
        </packages>
    </test>
</suite>

这是我试图运行的两个@Test,但是当它们运行时,其中一个测试的步骤会侵入另一个。因此,基本上,它们在单独运行时会通过,但是当我尝试并行运行它们时,它们从每个测试的步骤将交叉到另一个。

这是两个测试...

@Test(groups = "Regression", "TC_111", description = "TC_111")
    public void padTestSubmission() 
        SubmissionTestData testData = new SubmissionTestData();
        SummaryScreen summaryScreen = onStartScreen()
                .clickLoginButton()
                .loginWithUser(UserCache.MAIN_USER)
                .clickSkipOnandroid()
                .clickOnBottomIcon(BottomMenu.NEW_TEST, MaterialTypeScreen.class)
                .clickOnMaterialType("Pad")
                .fillTestInfoAndSubmit(testData)
                .fillClaimInfoAndSubmit(testData, UserCache.MAIN_USER)
                .addPhotoAndVerifyMetaData("Top of Sample")
                .submitWithPeriod(SAME_DAY_PERIOD);
        verifySubmissionSuccessful(summaryScreen, testData.getClaimNumber(), testData.getDamageLocation());
    

    @Test(groups = "Regression", "TC_222", description = "TC_222")
    public void carpetTestSubmission() 
        SubmissionTestData testData = new SubmissionTestData();
        SummaryScreen summaryScreen = onStartScreen()
                .clickLoginButton()
                .loginWithUser(UserCache.MAIN_USER)
                .addPhotoAndVerifyMetaData("Side 1 of Carpet")
                .addLastPhotoAndGoToReviewScreenAndVerifyMetaData("Side 2 of Carpet")
                .verifyMetaData("Side 3")
                .submitWithPeriod(SAME_DAY_PERIOD);
        verifySubmissionSuccessful(summaryScreen, testData.getClaimNumber(), testData.getDamageLocation());
    

【问题讨论】:

【参考方案1】:

这仅在两个线程之间共享 webdriver 时发生。将每个驱动程序放在一个线程本地对象中就可以了。

【讨论】:

感谢您回复@niharika_neo。但是,我正在使用 TestNG 和 Browserstack,我不认为 ThreadLocal 对象可以使用它。你对此有什么想法吗?

以上是关于为啥我的自动化测试在一起运行时会失败,但单独通过?的主要内容,如果未能解决你的问题,请参考以下文章

当所有单独的测试都通过时,为啥我的 Bazel 测试报告失败?

RSpec capybara:涉及 Ajax 的测试单独通过,但一起运行时失败

为啥水豚功能规格一起运行时会失败,仅对我而言。但分开时通过?

我的摩卡测试单独工作,但一次运行时失败

如果单独运行 MSTest 测试成功,如果与其他测试一起运行则失败

Jest Puppeteer 测试在一起运行时失败(同步)