Как передать динамические значения в пользовательскую аннотацию для сопоставлений из Java data.properties - PullRequest
0 голосов
/ 29 марта 2019

Я внедряю автоматизированный тест с Selenium / TestNG и Im, используя инструмент, который предоставляет пользовательскую аннотацию, которая принимает строки. Я пытался передать динамические значения из data.properties, и я пытался по-другому, но я постоянно получаю эту ошибку: значение аннотации должно быть постоянным выражением

public class MapData {

       // fetch value from data.properties and store it as string   
      public static final String TESTNAME = LoadProps.INSTANCE.loadProps().getProperty("TestName1");
      public static final String ABC = "ABC";

}

и это мой тестовый образец:

@Custom(name = "login")
@Test(priority = 1)
public void login() throws InterruptedException, IOException {...}

Примечание

@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@Target(value={METHOD})
public abstract @interface Custom extends java.lang.annotation.Annotation 
{

    public abstract java.lang.String name();

}

Я попытался передать динамическое значение, считываемое из data.properties, следующим образом:

@Custom(name = MapData.TESTNAME)

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

@Custom(name = MapData.ABC)

хорошо, и у меня нет ошибок! какая разница? в обе стороны проходят строки. Есть ли способ получить данные из data.properties и передать их в аннотации?

1 Ответ

0 голосов
/ 30 марта 2019

Когда вы используете аннотацию, вы не можете присвоить динамическое значение параметру аннотации. Однако, поскольку это ваша пользовательская аннотация, то при обработке аннотации вы можете обрабатывать значение. Например:

 String tValue = custom.name();
 String value = data.getProperty(tValue,tValue);

Альтернативно, вы можете попробовать с QAF-TestNG расширение имеет метаданные поддержка, где вы можете использовать параметры, как показано ниже:

@Test(description="This is example scenario in BDD",groups={"grp1","grp2"})
@MetaData("{'env':'${target.env}','TestID':'12345'}"
public void example(){

}

в приведенном выше примере ${target.env} является свойством и будет разрешено во время выполнения. Вы можете получить доступ к метаданным, как показано ниже:

ITestNGMethod testMethod = testResult.getMethod()
TestNGScenario scenario = (TestNGScenario) testMethod;  
Map<String, Object> metadata = scenario.getMetaData();

...