Передача динамического значения в параметр метода тестирования с использованием класса TestNG

Я автоматизирую веб-страницу, которая работает в многопоточной среде, поэтому я экспортирую каждый результат теста в файловую систему и хотел сохранить каждый результат теста уникальным для использования в будущем. Итак, есть ли способ передать имя файла в качестве параметра в метод тестирования динамически при его вызове из класса TestNG.

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

Тестовый класс будет вызываться из основного метода, как показано ниже.

public class Test  {

    public static void main(String[] args) throws ParseException {

        try
        {
            TestNG testng = new TestNG();
            testng.setTestClasses(new Class[] { Testing.class });
            testng.run(); 
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

    }
}

Нижний код - это мой метод тестирования

public class Testing {

@Test
@Parameters("filename")
public void testMethod(String fileName){

    System.out.println("filename is: "+fileName);

   // ---- remaining test logic -----
}

}

Или мы можем использовать метод TestListenerAdapter onStart () для ввода значений параметров ...?.


person Rajesh Hatwar    schedule 04.07.2017    source источник


Ответы (3)


Если вам нужно уникальное имя файла, вы можете просто добавить ему отметку времени

Date date = new Date();
Format formatter = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
String timeStamp = formatter.format(date);

String fileName = "TestResults-" + timeStamp;
person Guy    schedule 04.07.2017
comment
Да, я мог бы это сделать, но даже запущенные тестовые примеры запланированы и автоматизированы! :-). После выполнения тестовых примеров я должен отслеживать сгенерированные отчеты относительно запланированного времени. Если я полагаюсь на метку времени, это не может быть код без ошибок. Если возможно, я хочу создать слушателя, который будет передавать необходимые данные во время выполнения теста. - person Rajesh Hatwar; 05.07.2017

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

Вы можете установить значения в методе конфигурации (например, @BeforeSuite) или в слушателе.

person juherr    schedule 04.07.2017
comment
да, вы правы, я пытался использовать тот же способ прослушивания TestListenerAdapter, но этого не произошло. Если возможно, вы можете опубликовать пример ..! - person Rajesh Hatwar; 05.07.2017

Передача динамических параметров в набор TestNG во время выполнения

Что делает приведенный ниже код: Я хочу добавить список параметров к каждому тесту во время выполнения. Эти параметры передаются как аргументы среды выполнения maven. Они читаются с помощью метода System.getProperty (), как показано ниже. Затем эти параметры добавляются в тест внутри пакета, и testng успешно запускается. Это может быть действительно полезно и в других сценариях.

Приведенный ниже код считывает файл testng.xml и добавляет параметр в

List<String> parameters = new ArrayList<>();
parameters = Arrays.asList(System.getProperty("parameters").split(",");

TestNG tng = new TestNG();
File initialFile = new File("testng.xml");
InputStream inputStream = FileUtils.openInputStream(initialFile);
Parser p = new Parser(inputStream);
List<XmlSuite> suites = p.parseToList();
for(XmlSuite suite:suites){
    List<XmlTest> tests = suite.getTests();
    for (XmlTest test : tests) {
         for (int i = 0; i < parameters.size(); i++) {
            HashMap<String, String> parametersMap = new HashMap<>();
            parametersMap.put("parameter",parameters.get(i));
            test.setParameters(parametersMap);
        }
    }
}
tng.setXmlSuites(suites);
tng.run();
person Kishore Mohanavelu    schedule 17.04.2020