Могу ли я динамически прокинуть из теста в рантайме value для параметра этого теста ?
Т.е. в каком-то из классов className1,2,3 подставить в эту xml-ку для параметра PARAM своё значение value ?
То что вы хотите сделать, это грязный хак. Вы либо используете просто параметры, либо создайте переменную и её используйте.
Но я сделал, стреляйте себе в ногу:
for (Field ff:this.getClass().getFields()){
if (ff.getName().contains("user3_pass")){ // здесь мы ищем наш parameter name
ff.setAccessible(true);
ff.set(this, "new password from test"); // здесь задаём новое value
}
}
опишите пожалуйста
1 . юз кейс когда информация не была известна до но стала известна во время теста
почему вдруг не подходят другие методы передачи переменных через свойства какого нибудь класса (по простому или с геттерами сеттерами и проч наворотами) или через внешний файл
Помню, нужно было для чего-то. Сейчас не могу уже точно вспомнить для чего, но:
представим что у нас есть 2 теста идентичных, которым подсовываем параметр PARM.
Логично, что для второго теста нужно значение параметра поменять, иначе второй будет выполнен так же как и первый. Вот вам и юзкейс.
Сейчас не говорим про DataProvider, т.к. он действует в пределах кода, а не в пределах xml-ки.
Но тогда это мало отличается от того, как если бы у нас имелась отдельная мапка для параметров и мы бы ее дергали из разных тестов.
Потому что, если переписать на:
public class TestB
{
@Test
@Parameters("PARAM")
public void testB(String PARAM, ITestContext context)
{
System.out.println("PARAM in TestB: " + PARAM);
System.out.println("PARAM in TestB: " + context.getSuite().getXmlSuite().getParameter("PARAM"));
}
}
То получим всё равно:
PARAM before = PARAM_VAL
PARAM after in TestA: AlteredVal123
PARAM in TestB: PARAM_VAL
PARAM in TestB: AlteredVal123
То есть в первой строке PARAM всё равно остается PARAM_VAL, не изменившись.
Понимаете, к чему я клоню ?