在TestNG中自定义故障报告

时间:2013-01-16 07:50:23

标签: webdriver automated-tests testng selenium-webdriver

背景:

我创建了一个基本的游乐场项目,其中包含:

  1. 包含以下内容的testLogin.java文件:
      一个。 testng包导入(org.testng。*)
      湾selenium webdriver进口(org.openqa.selenium。*)
      C。 5个带有testng注释的测试方法:
  2.   
        
    1. @Test(组= {"初始化"})               public void openURL()
                    包含用于启动webdriver并使用给定URL打开chrome>实例的webdriver代码。

    2.   
    3. @Test(dependsOnGroups = {"初始化"})               public void testLogin()
                    包含webdriver代码:
                        1.找到用户名密码文本输入元素,从属性文件中输入用户名密码                   2.找到"登录"按钮并单击按钮登录
                        3.如果其他人已使用凭据登录,则管理强制登录方案。

    4.   
    5. @Test(dependsOnMethods = {" TESTLOGIN"})                public void testPatientsScheduleList()
                     包含webdriver代码以检查是否已安排任何患者。如果是,则获取名称并在控制台中显示。

    6.   
    7. @Test()               public void testLogout()
                    包含用于查找注销按钮的webdriver代码,然后单击按钮以注销应用程序。

    8.   
    9. @AfterTest()               public void closeConnection()
                    包含webdriver代码以处理webdriver对象并关闭chrome实例。

    10.   

    目前我只是运行从ANT包装为testng方法的测试脚本,并生成testng-xslt报告。

    的问题:

    1。在测试方法中对webdriver脚本的每行代码执行验证:

    我知道:
     1. Selenium webdriver脚本包含API方法(findElement()和其他。),这些方法由于它们执行的默认断言/验证而抛出异常。当测试方法失败时,这些异常会出现在生成的报告中  2. TestNG提供了具有许多断言方法的Assert类,但我还没弄明白如何使用它们对webdriver脚本的每一行代码执行验证/断言。我尝试在每行webdriver脚本代码之后添加断言方法。输出中出现的只是测试方法的AssertionError异常。

    2。由于try .. catch阻止而导致某个测试方法失败。
    如果我在一组2个或更多的测试驱动器脚本步骤中使用try catch块,并且如果测试用例在任何步骤(脚本行)中失败,则try..catch块处理它,从而显示测试方法as"通过"在执行报告中,实际上失败了。

    第3。创建一个自定义报告,显示所需的测试执行结果,而不是堆栈跟踪!
    当我执行上面的脚本时,会生成一个testng-xslt报告,其中包含测试套件中每个测试方法的通过/失败状态(在testng.xml中配置)。 测试结果只能告诉我测试方法是通过还是失败,并提供了异常的堆栈跟踪,它实际上并没有提供任何有用的信息。 我不想要这样的抽象级别的测试执行结果,但是类似于:

      

    姓名|开始|持续时间|什么是真的错了(失败)


    任何人都可以建议/给出一些指示:
    1. 如何在测试方法中对每一行webdriver脚本代码执行验证/断言,而不必在每个脚本行后写入断言?
    2. 如何通过try catch块传递某个测试方法失败? 3。如何自定义故障报告,以便我可以发送失败结果,例如"预期元素"按钮" id" bnt12"但没有找到测试方法步骤3中的元素" to testng的报告工具?
    4. 在testng-xslt报告中,我想显示测试方法中发生故障的确切位置。因此,例如,如果我的测试方法由于测试方法第3行的webelement = driver.findElement()而失败,我想在测试报告中显示这个问题" What-really-went -wrong"柱。我已经阅读了关于testng testlisteners TestListenerAdapter / ITestListener / IReporter的内容,但是在检查了testng的javadoc之后我不明白如何使用它们。
    5. 此外,完成自定义测试报告后,我必须实现PageObject模式。在页面对象模式中执行断言的正确位置在哪里?断言是应该在页面对象测试方法中还是在使用PageObject类的更高级别测试方法中编写?

    P.S:我对testng框架和webdriver脚本完全陌生。如果在帖子中有任何技术错误或观察错误,请承担。

2 个答案:

答案 0 :(得分:1)

  

如何在测试方法中对webdriver脚本的每行代码执行验证/断言,而无需在写入后执行断言   每个脚本行?

我不这么认为。进行比较的是断言。所以你需要它。

  

如何通过try catch块传递某个测试方法失败?

try-catch将掩盖断言失败。(因为在断言失败时,会抛出一个断言异常,所以如果你的catch块就像(catch(Exception e))断言失败不会逃脱catch块。

  

如何自定义故障报告,以便我可以发送失败结果,例如"预期元素"按钮" id" bnt12"但是做到了   在测试方法的第3步找不到元素" to testng的报道   效用

您需要使用测试侦听器。 TestNG TestListenerAdapter是一个好的开始

  

另外,一旦完成,我必须实现PageObject模式   自定义测试报告。哪里是正确的表演地点   页面对象模式中的断言?是否应该写入断言   页面对象测试方法或在更高级别的测试方法中   将使用PageObject类?

我个人的选择是在测试方法中使用断言,因为它是我们进行实际测试的地方。页面对象包含用于在网页内导航的脚本。

答案 1 :(得分:0)

如何自定义故障报告,以便发送故障 结果类似于ID为“ bnt12”的“预期元素”按钮”,但没有 找到测试方法第3步中的元素” 实用程序?

您可以使用范围报告和testng侦听器类(在该类中,使用onTestFailure方法来自定义故障报告)。