Где инициализировать TestNG TestContext - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть класс TestRunner, который запускает мой TestNG следующим образом:

TestRunConfigs configs = TestRunConfigs.parseCommandLine(args);

TestNG testRunner=new TestNG();
testRunner.setXmlSuites(getXmlSuites(configs.TestSuites));
testRunner.run();

Мне нужно предоставить некоторые значения для всех тестов во всех моих пакетах.Я думаю, что ITestContext - это способ написать это.Я просто не знаю, где это сделать.Есть направления?

1 Ответ

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

Примечание: убедитесь, что вы используете TestNG 7.0.0-бета1, который является последней выпущенной на сегодняшний день версией

Самый простой способ сделать это - ввести эти параметры черезслушатель.

Вы в основном реализуете интерфейс org.testng.ITestListener, используя класс.Вы создаете экземпляр этого слушателя, передавая требуемую карту пользовательских объектов, которые требуются вашему тесту.В методе onStart(ITestContext ctx) слушателей вы передаете эти атрибуты объекту ITestContext.

Ниже приведен полноценный пример, демонстрирующий это в действии.

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.Reporter;
import org.testng.TestNG;
import org.testng.annotations.Test;

public class Example {
  public static void main(String[] args) {
    TestNG testng = new TestNG();
    testng.setTestClasses(new Class[] {MyTestClass.class});
    Map<String, Data> attributes = new HashMap<>();
    attributes.put("data1", new Data("TestNG"));
    attributes.put("data2", new Data("Selenium"));
    attributes.put("data3", new Data("Maven"));
    LocalListener listener = new LocalListener(attributes);
    testng.addListener(listener);
    testng.setVerbose(2);
    testng.run();
  }

  public static class LocalListener implements ITestListener {
    private Map<String, Data> attributes;

    public LocalListener(Map<String, Data> attributes) {
      this.attributes = attributes;
    }

    @Override
    public void onStart(ITestContext context) {
      attributes.forEach(context::setAttribute);
    }
  }

  public static class MyTestClass {

    @Test
    public void testMethod() {
      ITestContext ctx = Reporter.getCurrentTestResult().getTestContext();
      Set<String> attributeNames = ctx.getAttributeNames();
      attributeNames.forEach(
          attributeName -> {
            System.err.println("===>" + ctx.getAttribute(attributeName).toString());
          });
    }
  }

  public static class Data {
    private String name;

    public Data(String name) {
      this.name = name;
    }

    @Override
    public String toString() {
      return "Data[" + name + "]";
    }
  }
}

Выводкак показано ниже

===>Data[Maven]
===>Data[Selenium]
===>Data[TestNG]
PASSED: testMethod

===============================================
    Command line test
    Tests run: 1, Failures: 0, Skips: 0
===============================================


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