2013-11-16 3 views
4

У меня не так много опыта с аннотациями TestNG, однако я пытаюсь создать тестовый набор с использованием структуры TestNG и шаблона POM для розничного веб-сайта. Я планирую использовать подход, основанный на данных. Мой план состоит в том, чтобы управлять моими тестовыми сценариями с помощью excel и не использовать testng.xml.Условное пропускание тестов TestNG

Например, у меня будет количество тестов, которые будут представлять собой ничего, кроме различных файлов классов под именем пакета TestSuite. Имена TestSuite будут перечислены в excel, и пользователю будет разрешено установить режим запуска testuite, изменив режим запуска на TRUE/FALSE. Здесь я планирую выполнить проверку состояния, чтобы проверить, является ли режим запуска FALSE и, соответственно, пропускает testuite, то есть класс testuite.

Есть ли у нас какой-либо прямой метод для достижения того же результата с помощью TestNG или, пожалуйста, предложите любое решение для этого же с небольшим примером.

ответ

6

Вы можете использовать TestNG's annotation transformer, чтобы установить свойство disabled аннотации @Test в true или false.

Пример:

public class MyTransformer implements IAnnotationTransformer { 
    public void transform(ITest annotation, Class testClass, 
     Constructor testConstructor, Method testMethod){ 

     if (isTestDisabled(testMethod.getName()))) { 
      annotation.setEnabled(false); 
     } 
    } 

    public boolean isTestDisabled(String testName){ 
     // Do whatever you like here to determine if test is disabled or not 
    } 
} 
+0

Спасибо за быстрый ответ, но я думаю, что вы пытаетесь пропустить тест здесь.Однако мой мотив состоит в том, чтобы пропустить сам тест-класс. Вот как моя структура папок выглядит следующим образом: com.core > framework.java com.pages com.util TestSuite > testsuite1.java > testsuite2.java > testsuite3.java > testsuite4.java – user3000021

+0

Вы получаете аннотация, класс, конструктор и testMethod в качестве аргумента. Вы можете использовать то, что вам нравится/нужно пропустить тест. Пропуск всего класса аналогичен пропуску всех тестов в этом классе. –

+0

Хорошо, я попробую то же самое. Не могли бы вы рассказать мне, есть ли у всех этих тестовых классов какие-либо аннотации или самость или методы. Я имею в виду, что мне нужно сделать класс с @Test, а также с методами. – user3000021

13

Пожалуйста, добавьте ниже строки кода в начале теста, который пропустит ваш тест

throw new SkipException("Skipping the test case"); 
-1
throw new skipException("skipping the test case") 

Это будет просто пропустить тестовый случай не полный пакет. Вместо проверки режима запуска пакета проверьте режим запуска тестового примера как Y/N в методе @beforeTest. Затем, если вы нашли режим запуска как N, выполните исключение.

throw new skipException("skipping test case as run mode is y"). 

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

Примера является, как указано ниже

package com.qtpselenium.suiteC; 

import org.testng.SkipException; 
import org.testng.annotations.BeforeTest; 
import org.testng.annotations.DataProvider; 
import org.testng.annotations.Test; 

import com.qtpselenium.util.TestUtil; 

public class TestCaseC1 extends TestSuiteBase{ 


    //Checking runMode of the Test case in Suite 
     @BeforeTest 
     public void checkTestcaseskip(){ 

      //this.getclass().getSimpleName() method returns the name of the class 
      App_Logs.debug("checking run mode of " +this.getClass().getSimpleName() + " testcase"); 
      if(!TestUtil.IsTestCaseRunnable(suiteCxlsx, this.getClass().getSimpleName())){ 
       App_Logs.debug("Run mode of testcase " + this.getClass().getSimpleName() + " is N"); 
       throw new SkipException("Run mode of testcase " + this.getClass().getSimpleName() + " is N"); 

      }else 

      App_Logs.debug("Run mode of testcase " + this.getClass().getSimpleName() + " is Y"); 
     } 

     @Test(dataProvider="getTestData") 
     public void TestcaseC1(

           String col1, 
           String col2, 
           String col3, 
           String col4 

          ){ 


      App_Logs.debug("Test data of testcase : " + this.getClass().getSimpleName()); 
      App_Logs.debug(col1+"--"+col2+"--"+col3+"--"+col4); 


    } 

    //Data provide to TestcaseC1 
      @DataProvider 
      public Object[][] getTestData(){ 


       return TestUtil.getdata(suiteCxlsx, this.getClass().getSimpleName()); 


      } 

} 
+0

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

-1

Лучшим решением, которое я нашел, мы можем проверить режим запуска из Сюиты в методе @BeforeTest аннотаций, если он нашел N, затем проливаем новый пропуск исключение, это будет пропустите весь тестовый пример этого пакета, я ошибался, чтобы поймать Exception в блоке catch catch, поэтому он должен проверить все тестовые примеры после исключения исключения броска.

Ниже приведен правильный пример того, как пропустить все тестовые примеры в наборе, если режим ожидания пакета найден как N в наборе Excel. пробегая это через testng.xml

0

С 6,13 throw new SkipException("Skipping the test case"); не будет работать. Я должен установить статус, прежде чем выбросить исключение, в противном случае статус тест будет провал, а не пропущено:

iTestResult.setStatus(TestResult.SKIP); throw new SkipException("Skipping the test case");

Возможно, это будет исправлено/изменено в следующих версиях, пожалуйста, см https://github.com/cbeust/testng/issues/1632 подробности.

Смежные вопросы