Установка testfailure в testng дает положительный результат

Я хочу установить результат теста метода в testng на отказ, если есть ошибка. Я обнаружил, что эта строка кода должна помочь

Reporter.getCurrentTestResult().setStatus(ITestResult.FAILURE);

Но если я спровоцирую ошибку, я все равно не получу отказ от моего общего тестового прогона.

===============================================
LoginTesten
Total tests run: 4, Failures: 0, Skips: 0
===============================================

В приведенном выше прогоне должно быть 2 сбоя, но ничего нет. Правило для установки результата теста находится в классе, отличном от того, из которого запускается тест. Он установлен в классе, где я размещаю код своей контрольной страницы, чтобы у меня не было напыщенного теста.

Код, где он установлен

public void checkTextOnPage(String text, boolean expected,String errorMessage, ArrayList<WebDriver> browsers, Logger Logger, String map) throws IOException {
        for(WebDriver driver: browsers){
            try {
                Assert.assertEquals(driver.getPageSource().contains(text), expected, errorMessage);
            }catch (AssertionError e){}
            Capabilities dataBrowser = ((RemoteWebDriver)driver).getCapabilities();
            if(driver.getPageSource().contains(text) == expected){
                Logger.info("[" + this.dateFormat.format(this.date) + "]" +" Browser:" + dataBrowser.getBrowserName() + " -- Version:" + dataBrowser.getVersion() + " -- Text : " + text + " => PRESENT");
            }else if (driver.getPageSource().contains(text) != expected){
                Logger.warning("[" + this.dateFormat.format(this.date) + "]" +" Browser:" + dataBrowser.getBrowserName() + " -- Version:" + dataBrowser.getVersion() + " -- Text : " + text + " => NOT PRESENT");
                File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
                FileUtils.copyFile(screenshot, new File(map + "text_" + text + "_NotPresent_" + this.screenshotCount + "_" + dataBrowser.getBrowserName() + ".png"));
                this.screenshotCount++;
                Reporter.getCurrentTestResult().setStatus(ITestResult.FAILURE);
            }
        }
    }

это мой тест, который выполняется

public void loginIMWWelcomeNOT() throws InterruptedException, IOException {
    this.getLogin().goToPage(this.getDriverList(), TestConstants.Test_URL);
    this.getBrowserMovement().typeTextElementXpath(".//*[@name='username']", this.getDriverList(), "intix1");
    this.getBrowserMovement().typeTextElementXpath(".//*[@name='password']", this.getDriverList(), "Jasmine11");
    this.getBrowserMovement().clickElementXpath(".//*[@name='logon']", this.getDriverList());
    this.getCheckPage().checkTextOnPage("grazjfnzeofnez", true, "We komen niet terecht op de welkom pagina", this.getDriverList(), this.getLOGGER(), this.getScreenshotMap());
    System.out.println(Reporter.getCurrentTestResult());
}

Вывод, который я получаю из этого кода,

apr 04, 2016 4:50:37 PM Data.CheckPage checkTextOnPage
WARNING: [2016-04-04 165030] Browser:chrome -- Version:49.0.2623.110 -- Text : grazjfnzeofnez => NOT PRESENT
[TestResult name="" status=FAILURE method=LoginTesten.loginIMWWelcomeNOT()[pri:0, instance:Data.Tests.LoginTesten@1e643faf] output={null}]

Итак, он устанавливается, но ничем не подхватывается. Это проблема, которую я установил в другом классе или что-то еще?


person stevedc    schedule 04.04.2016    source источник


Ответы (2)


@stevedc Перехватите ошибку, а затем в конце теста выведите ее в сообщении об ошибке Assert failure. Что-то типа

public void checkTextOnPage(String text, boolean expected,String errorMessage, ArrayList<WebDriver> browsers, Logger Logger, String map) throws IOException {
    for(WebDriver driver: browsers){
        try {
            Assert.assertEquals(driver.getPageSource().contains(text), expected, errorMessage);
        }catch (AssertionError e){}
        Capabilities dataBrowser = ((RemoteWebDriver)driver).getCapabilities();
        if(driver.getPageSource().contains(text) == expected){
            Logger.info("[" + this.dateFormat.format(this.date) + "]" +" Browser:" + dataBrowser.getBrowserName() + " -- Version:" + dataBrowser.getVersion() + " -- Text : " + text + " => PRESENT");
        }else if (driver.getPageSource().contains(text) != expected){
            Logger.warning("[" + this.dateFormat.format(this.date) + "]" +" Browser:" + dataBrowser.getBrowserName() + " -- Version:" + dataBrowser.getVersion() + " -- Text : " + text + " => NOT PRESENT");
            File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
            FileUtils.copyFile(screenshot, new File(map + "text_" + text + "_NotPresent_" + this.screenshotCount + "_" + dataBrowser.getBrowserName() + ".png"));
            this.screenshotCount++;
            Assert.assertEquals(true, false, e);
        }
    }
}
person Raymond Kelly    schedule 07.04.2016

Ваши тесты не должны напрямую взаимодействовать с вашим отчетом. Чтобы указать на ошибку в JUnit, просто создайте исключение или ресурс в своих тестах.

person Jan Nielsen    schedule 04.04.2016
comment
Но если я рассчитываю на утверждение, оно просто выпадет из теста без регистрации. Я мог бы поймать его и добавить ведение журнала, но это тот же результат, что тест полностью провалится, и я хочу запустить его до конца. - person stevedc; 05.04.2016
comment
Что ответственность вашей системы сборки, например, stackoverflow.com/questions/4174696/. - person Jan Nielsen; 05.04.2016