TestNG - как принудительно завершить весь набор тестов из аннотации BeforeSuite, если выполняется условие

Есть ли способ выйти из всего набора тестов, если соблюдается условие в аннотации @BeforeSuite? Может быть, способ вызвать @AfterSuite и обойти весь тест?

Я делаю вызов базы данных в @BeforeSuite. Если запрос возвращает какие-либо результаты, я отправляю электронное письмо и теперь хочу убить весь набор тестов.

Я пробовал System.exit(1); и org.testng.Assert.fail("There are unpaid invoices");, но ни один из них не прерывает работу всего пакета. Мои сценарии настроены для параллельного запуска классов, и когда я запускаю тест из файла test.xml, каждый класс пытается запуститься и открывает окно, а затем немедленно закрывает его.

К вашему сведению, драйверы не создаются до @BeforeClass или @BeforeMethod (в зависимости от переключателя, который я создал для параллельных методов или классов). Так что на самом деле никогда не должно быть даже попыток открыть окно браузера.


person Dustin N.    schedule 03.11.2016    source источник
comment
попробуйте новое исключение SkipException (сообщение); это пропустит тесты, если предоставленное условие не истинно.   -  person Shek    schedule 03.11.2016
comment
Верно! Я действительно использовал это где-то еще в другом тесте и забыл об этом. Спасибо   -  person Dustin N.    schedule 03.11.2016


Ответы (2)


попробуйте new SkipException("message"); это пропустит тесты, если предоставленное условие не истинно.

person Shek    schedule 03.11.2016

Попробуйте приведенный ниже код в методе аннотации перед набором, проверьте, установлен ли режим выполнения вашего набора Y / N. если это N, то выбросить исключение

throw new skipException ("желаемое сообщение")

Имейте в виду, что не перехватывайте исключение пропуска в блоке try и catch. в противном случае он пойдет на выполнение тестовых случаев в этом наборе после выброса исключения пропуска

package com.qtpselenium.suiteA;

import org.testng.SkipException;
import org.testng.annotations.BeforeSuite;

import com.qtpselenium.base.TestBase;
import com.qtpselenium.util.TestUtil;

public class TestSuiteBase extends TestBase{


    @BeforeSuite
    public void checksuiteskip(){ 


            //Initialize method of Test BASE Class to Initialize the logs and all the excel files
            try {
                Initialize();
            } catch (Exception e) {
                e.printStackTrace();
            }
             App_Logs.debug("checking run mode of SuiteA");
            if( !TestUtil.isSuiterunnable(suitexlsx, "suiteA")){

               App_Logs.debug("Run mode for SuiteA is N");
               throw new SkipException("Run mode for suiiteA is N");


           }else

               App_Logs.debug("Run mode for SuiteA is Y");


        } 


    }
person Arpan Saini    schedule 22.01.2017