提问者:小点点

Testng报告第一节课2个班级的所有测试


   <?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不是逐字的…我取出了类路径详细信息。

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

因此总共执行了24个测试,可发送电子邮件的报告仅包含测试名称的12个测试:Firefox测试。

当我检查surefire文件夹中的Testng-结果. xml时,它为第一个测试名称(Firefox测试)列出了所有24个测试。没有引用“Chrome测试”测试名称。

在此处输入图像描述

对于许多运行,我确实得到了正确的报告。电子邮件报告中的两个部分,一个用于Firefox测试,一个用于Chrome测试。每个包含12个测试。

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

我真正想知道的是这是怎么可能的?当涉及到跟踪套件、测试方法、结果等时,测试的内部工作是什么。

我可以看到报表侦听器从上下文、套件列表/映射和结果中提取这些工件。

我也重写了生成报告方法,但据我所知,只有Firefox测试可以报告。

谁是可能在这个主题上启发我的专家?在可预见的未来,我将支持测试的创建和报告:)所以我真的很好奇测试的许多方面。

非常感谢和热情的问候,

DJ


共1个答案

匿名用户

抱歉反应慢。我离家几天了。

谢谢你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("------------------------------------------------");
}