0

我在 selenium webdriver 中编写测试,在 java 中,我使用 TestNG 将它与 testlink 集成。因此,当我运行测试并且运行正确时,它会正确保存在 testlink 中。但是当测试失败时,测试中会出现以下错误:

testlink.api.java.client.TestLinkAPIException:调用者未提供所需的参数状态。

这是我的测试方法:

@Parameters({"nombreBuild", "nombrePlan", "nomTL_validacionCantidadMensajes"})
    @Test
    public void validarMensajes(String nombreBuild, String nombrePlan, String nomTL_validacionCantidadMensajes) throws Exception {
        String resultado = null;
        String nota = null;
        boolean test;
        try{
            homePage = new HomePageAcquirer(driver);
            homePage.navigateToFraudMonitor();
            fraud = new FraudMonitorPageAcquirer(driver);
            test = fraud.validarCantidadMensajes();
            Assert.assertTrue(test);
            if(test){
                resultado = TestLinkAPIResults.TEST_PASSED;
            }else {
                nota = fraud.getError();
                System.out.println(nota);
                resultado = TestLinkAPIResults.TEST_FAILED;
            }
        }catch (Exception e){
            resultado = TestLinkAPIResults.TEST_FAILED;
            nota = fraud.getError();
            e.printStackTrace();
        }finally{
            ResultadoExecucao.reportTestCaseResult(PROJETO, nombrePlan, nomTL_validacionCantidadMensajes, nombreBuild, nota, resultado);
        }
    }

xml 很好,因为当测试通过时它可以工作。

以及设置值的 testlink 方法。

 public static void reportTestCaseResult(String projetoTeste, String planoTeste, String casoTeste, String nomeBuild, String nota, String resultado) throws TestLinkAPIException {
    TestLinkAPIClient testlinkAPIClient = new TestLinkAPIClient(DEVKEY, URL);
    testlinkAPIClient.reportTestCaseResult(projetoTeste, planoTeste, casoTeste, nomeBuild, nota, resultado);

}
4

1 回答 1

1

我认为原因是你永远不会到达这个条件的 else 块

Assert.assertTrue(test);
if(test){
    resultado = TestLinkAPIResults.TEST_PASSED;
} else {
    //
}

当 Asser 失败时,AssertionError会出现新的,因此即使是 if 条件也不会出现。您也无法捕获此错误,因为也Exception源自Throwableand Error。所以你基本上可以删除条件并尝试捕捉Error- 这不是真正的最佳实践,但它会起作用。在这些情况下最好使用listener,但我不确定它是如何工作的@Parameters。但是,您总是可以这样做

try{
    Assert.assertTrue(test);
    resultado = TestLinkAPIResults.TEST_PASSED;
} catch (AsertionError e){
     resultado = TestLinkAPIResults.TEST_FAILED;
     nota = fraud.getError();
     e.printStackTrace();
 }finally{
     ResultadoExecucao.reportTestCaseResult(PROJETO, nombrePlan, nomTL_validacionCantidadMensajes, nombreBuild, nota, resultado);
 }
于 2013-09-26T20:50:02.750 回答