同时测试套件执行期间重复的Selenium屏幕截图

时间:2017-02-21 23:09:36

标签: java selenium jenkins testng

考虑以下设置:

1)一个Jenkins节点J来运行测试套件的Java代码 2)两个测试套件a& b
3)两个硒网格A& B
4)一个FTP服务器F将屏幕截图托管在为每次执行唯一命名的单独文件夹中aabb

假设我们同时运行两个套件。 J在网格a上运行套件A,并应在f:\aa中保存屏幕截图。 J在网格b上运行套件B,并应在f:\bb中保存屏幕截图。

实际发生的情况:在只有套件a正在运行的时间内,a的屏幕截图仅保存在f:\aa中。在仅b套件运行期间,屏幕截图仅保存在f:\bb中。但是在两个套件运行期间,套件a的屏幕截图都保存在 f:\aa f:\bb中反之亦然。

代码中没有任何内容可以直接暗示为什么会发生这种情况,但我可能会猜测 - onTestFailure()侦听器在任何给定时间监听J上JVM中发生的所有事件,因此a的听众会发现b中发生的失败,反之亦然。但这并不能完全解答ITestResult未正确识别套件/输出文件夹的原因。

受此问题影响的两个文件夹 (从下午5:04和下午5:06开始):

f:\Smoke_chrome_2017-01-03-17-06-53_rnd_866/Smoke/screenshot
f:\Smoke_chrome_2017-01-03-17-04-37_rnd_444/Smoke/screenshot

有没有办法解决这个问题,以改善同步测试执行的结果?

我们的屏幕截图保存代码的简化版本:

class TestCaseListener {   
    @Override
    public void onTestFailure(ITestResult result) {
        super.onTestFailure(result);
        TakesScreenshot driver = getDriver(~);
        File screenshot = driver.getScreenshotAs(FILE);
        FileUtils.copyFile(screenshot, new File(getFilePath(result)));
    }

    private String getFilePath(ITestResult result) {
        String fileName = foo(result);
        String outputDirectory = result.getTestContext().getOutputDirectory() 
              +sep + SCREENSHOT_FOLDER;
        return outputDirectory  + sep + fileName;
    }
}

编辑:示例测试套件XML文件:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Smoke" parallel="methods" thread-count="28" configfailurepolicy="continue" preserve-order="true">
    <test name="Smoke">
        <groups>
            <run>
                <include name="SMOKE" />
            </run>
        </groups>
        <classes>
            <class name="FooTest"/>
        </classes>
    </test>
    <listeners>
        <listener class-name="~RetryListener"></listener>
        <listener class-name="~TestCaseListener"></listener>
        <listener class-name="~SuiteListener"></listener>
    </listeners>
</suite>

(我认为套件可能都在其XML文件中被命名为“冒烟”。)

0 个答案:

没有答案