Maven, testng - включить и исключить тесты - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть сценарий, в котором мне нужно запускать свои тесты, включая и исключая определенные группы тестов.

Рассмотрим сценарий ниже

import org.testng.annotations.Test;

public class GroupingTest {

@Test(groups = {"bat"})
public void batTest(){
    System.out.println("Am bat");
}
@Test(groups = {"p1"})
public void p1Test(){
    System.out.println("Am p1");
}
@Test(groups = {"p2"})
public void p2Test(){
    System.out.println("Am p2");
}
@Test(groups = {"bat","p3"})
public void batp3Test(){
    System.out.println("Am bat p3 ");
}
}

Здесь я могу запустить только «bat»испытательная группа, и она НЕ должна запускать тест "летучая мышь", который также является "33".В приведенном выше случае, когда я бегу .. он должен печатать только "Am bat" Как я могу этого добиться?Любые рекомендации?

1 Ответ

0 голосов
/ 17 декабря 2018

Существует два основных способа сделать это.

Подход № 1. Использование селектора бобов

  1. Убедитесь, что вы используете последнюю выпущенную версиюверсия TestNG.Его 7.0.0-beta1 на сегодняшний день.
  2. Добавить зависимость от beanshell (ниже показано, как вы бы это сделали, если бы использовали maven)
<dependency>
  <groupId>org.apache-extras.beanshell</groupId>
  <artifactId>bsh</artifactId>
  <version>2.0b6</version>
</dependency>
Измените xml вашего TestNG-комплекта следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="53799427_suite" parallel="false" verbose="2">
  <method-selectors>
    <method-selector>
      <script language="beanshell">
        <![CDATA[
                whatGroup = System.getProperty("group");
                shouldRun = Arrays.equals(new String[]{whatGroup}, testngMethod.getGroups());
                return shouldRun;
        ]]>
      </script>
    </method-selector>
  </method-selectors>
  <test name="53799427_test">
    <classes>
      <class name="com.rationaleemotions.stackoverflow.qn53799427.TestClassSample"/>
    </classes>
  </test>
</suite>

Здесь тестовый класс com.rationaleemotions.stackoverflow.qn53799427.TestClassSample выглядит точно так же, как пример, которым вы поделились.

Теперь, когда вы запускаетев этом XML-файле пакета, передав аргумент JVM -Dgroup=bat, вы увидите вывод, который выглядит следующим образом (то есть после)

...
... TestNG 7.0.0-beta1 by Cédric Beust (cedric@beust.com)
...
Am bat
PASSED: batTest

===============================================
    53799427_test
    Tests run: 1, Failures: 0, Skips: 0
===============================================

===============================================
53799427_suite
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
===============================================

Подход № 2. Использование пользовательского селектора метода

  1. Убедитесь, что вы зависите от TestNG 7.0.0-SNAPSHOT (Причина, по которой я так говорю, заключается в том, что в TestNG была ошибка, из-за которой эта функция не работала должным образом. Я пошел дальше и исправил еекак часть GITHUB-1985 . Но он еще не выпущен на сегодняшний день)
<dependency>
  <groupId>org.testng</groupId>
  <artifactId>testng</artifactId>
  <version>7.0.0-SNAPSHOT</version>
</dependency>

Чтобы использовать версию снимка, вам может потребоваться добавить <repository>пометьте, как показано ниже, в вашем файле pom.

<repositories>
    <repository>
      <id>sonatype-nexus-snapshots</id>
      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    </repository>
</repositories>
Теперь создайте пользовательскую реализацию org.testng.IMethodSelector, которая выглядит следующим образом:
import java.util.Arrays;
import java.util.List;
import org.testng.IMethodSelector;
import org.testng.IMethodSelectorContext;
import org.testng.ITestNGMethod;

public class FilteringMethodSelector implements IMethodSelector {

  @Override
  public boolean includeMethod(
      IMethodSelectorContext context, ITestNGMethod method, boolean isTestMethod) {
    String whichGroup = System.getProperty("group", "all");
    if ("all".equalsIgnoreCase(whichGroup)) {
      return true;
    }
    boolean isEqual = Arrays.equals(new String[]{whichGroup}, method.getGroups());
    if (context != null) {
      context.setStopped(true);
    }

    return isEqual;
  }

  @Override
  public void setTestMethods(List<ITestNGMethod> testMethods) {}
}
Создайте xml-файл testng suite, который выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="53799427_suite" parallel="false" verbose="2">
  <method-selectors>
    <method-selector>
      <selector-class
        name="com.rationaleemotions.stackoverflow.qn53799427.FilteringMethodSelector" priority="0"/>
    </method-selector>
  </method-selectors>
  <test name="53799427_test">
    <classes>
      <class name="com.rationaleemotions.stackoverflow.qn53799427.TestClassSample"/>
    </classes>
  </test>
</suite>

Здесь тестовый класс com.rationaleemotions.stackoverflow.qn53799427.TestClassSample выглядит в точности как пример, которым вы поделились.

Теперь, когда вызапустите этот xml-файл пакета, передав аргумент JVM -Dgroup=bat, вы увидите вывод, который выглядит следующим образом (то, что после)

...
... TestNG 7.0.0-SNAPSHOT by Cédric Beust (cedric@beust.com)
...
Am bat
PASSED: batTest

===============================================
    53799427_test
    Tests run: 1, Failures: 0, Skips: 0
===============================================

===============================================
53799427_suite
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
===============================================
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...