#java #testng #testng.xml
Вопрос:
Я использую параметры в своем testng.xml файл, подобный этому
<parameter name="name" value="value" />
Но я хочу, чтобы этот параметр получал значение аргумента командной строки из моего основного метода.
public static void main(String[] args) {
TestNG runner = new TestNG();
List<String> suitefiles = new ArrayList<String>();
suitefiles.add(args[0]);
runner.setTestSuites(suitefiles);
runner.run();
}
Как я могу это сделать?
Ответ №1:
Вы можете добавить параметры из кода, используя @BeforeSuite
метод вместе с ITestContext
аргументом(который будет автоматически введен testng). Нет необходимости менять main
метод.
До того, как метод набора будет запущен до выполнения любого метода тестирования.
@BeforeSuite
public void beforeSuite(ITestContext ctx) {
Map<String, String> paramMap = ctx.getSuite().getXmlSuite().getParameters();
// put all parameters.
map.put("name","value");
}
ИЗМЕНИТЬ: Когда аргументы командной строки будут использоваться в качестве параметров
public class MyTest {
// use this map to store the parsed params from command line.
private static Map<String, String> paramMap = new HashMap<>();
public static void main(String[] args) {
// parse args and put to paramMap
paramMap.put(args[1],args[2]);
TestNG runner = new TestNG();
List<String> suitefiles = new ArrayList<String>();
suitefiles.add(args[0]);
runner.setTestSuites(suitefiles);
runner.run();
}
}
Теперь обновите beforeMethod
как:
@BeforeSuite
public void beforeSuite(ITestContext ctx) {
Map<String, String> paramMap = ctx.getSuite().getXmlSuite().getParameters();
// put all parameters.
map.putAll(paramMap);
}
Комментарии:
1. Мне нужно, чтобы он был в основном классе, так как мне нужно использовать аргументы командной строки. И @BeforeSuite не запускается в такой ситуации.
2. @mr_olaznog вы все еще можете использовать его с
beforesuite
я обновлю ответ3. @mr_olaznog Надеюсь, что обновленный ответ решит проблему.
4.
beforeSuite
метод не выполняется. Он запускается только тогда, когда находится в одном из тестовых классов.5. @mr_olaznog вы можете сделать карту как
public
и получить к ней доступ, используяMyTest.paramMap
свой BeforeSuite, если она находится в другом тестовом классе