测试报告在第一类中报告2个班级的所有测试。

问题描述 投票:0回答:1
   <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="MasterTest" **parallel="tests" thread-count="3"** verbose="1">
    <parameter name="runLocal" value="false" />
    <listeners>
        <listener class-name="SupportReport" />
    </listeners>
    <test name="Firefox Tests">
        <parameter name="browser" value="firefox" />
        <classes>
            <class name="CalculatorTest"/>
        </classes>
    </test>
    <test name="Chrome Tests">
        <parameter name="browser" value="chrome" />
        <classes>
            <class name="CalculatorTest"/>
        </classes>
    </test>
</suite>

上面的testng.xml不是逐字逐句的...... 我去掉了类路径的细节。

CalculatorTest中有12个@tests。 它们在Selenium Grid Hub(2个节点)上远程并行运行,控制台显示它们都运行成功。

所以总共有24个测试执行,可邮件报告只包含testname: Firefox Tests的12个测试。

当我检查surefire文件夹中的Testng-results.xml时,它列出了第一个测试名(Firefox测试)的所有24个测试,没有提到 "Chrome测试 "的测试名。

在这里输入图像描述

这里有一个转折......在许多运行中,我确实得到了正确的报告。 在可发送电子邮件的报告中,有两个部分,一个是Firefox测试,一个是Chrome测试,每个部分包含12个测试。

我很确定这在测试环境和生产环境中不会有问题,因为它们不会像在开发环境中那么多地运行。

我真正想知道的是这是如何实现的? 当涉及到跟踪套件、测试方法、结果等时,Testng的内部运作是什么。

我可以看到报告监听器从上下文、套件和结果的列表图中提取这些工件。

另外,我也重写了生成报告的方法,但就我所见,只有Firefox Test测试的报告是可用的。

谁是专家,可以在这个问题上给我一些启发? 在可预见的未来,我将支持测试的创建和报告:) 所以我对Testng的很多方面都很好奇。

非常感谢和热情的问候。

DJ

java eclipse selenium maven testng
1个回答
0
投票

对不起,反应慢。 我离开家几天了。

谢谢你的答复KM。 我看到你回答了许多,许多问题。 我很感激你可能会代表我在这件事上做出任何努力。

至于繁殖,这不是一个一致的行为。 由于我还在开发阶段,我运行了几次该套件。 起初,我看到所有24项测试都被报告。 一段时间后,只报告了12项测试。 因此,它工作,直到它不工作。

同样,这些测试是在一个远程Selenium Grid Hub上执行的,每个浏览器(Chrome和firefox)都有一个单独的节点。

问题是24个测试被执行,只有12个测试在套件对象中可用。

你知道为什么Testng不能把执行的测试结果放在套件列表中吗?

from CustomEmailableReporter:


protected void generateMethodDetailReport(List<ISuite> suites) {    
    m_methodIndex = 0;
    for (ISuite suite : suites) {
        Map<String, ISuiteResult> r = suite.getResults();
        for (ISuiteResult r2 : r.values()) {
            ITestContext testContext = r2.getTestContext();

...

一个典型的测试。

@Test(priority = 4, dependsOnMethods = { "gettingStartedPage" })
public void childInfoPAge() {

    ChildInfoPage childInfoPage = null;
    stalenessCheck("childGroup");

    // ensure that the page factory is created
    try {
        childInfoPage = new ChildInfoPage(driver);
    } catch (NoSuchElementException e) {
        assertionErrorText = "ERROR:The creation of the ChildInfoPage pagefactory failed";
        Assert.fail(assertionErrorText);
    }

    // ensure that fields are clickable
    assertTrue(isClickable(driver.findElement(By.id("overnightsSpent")), driver));

    // exercise the screen field(s)
    childInfoAPage.overnightSpent.type("78");
    driver.findElement(By.id("ContinueBtn")).click();

    // check for client-side errors
    errorTrap();

    logCalcMessage("childInfoPage", "Test Complete");
    logMessage("------------------------------------------------");
}
© www.soinside.com 2019 - 2024. All rights reserved.