如何将动态值传递给Java data.properties中的映射的自定义注释

问题描述 投票:0回答:1

我正在使用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获取数据并将其传递给注释?

java annotations testng selenium-chromedriver
1个回答
0
投票

使用注释时,无法为注释参数指定动态值。但是,因为它是您的自定义注释,所以在处理注释时您可以处理值。例如:

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

替代的是,你可以试试QAF-TestNG extensionmeta-data支持,你可以使用如下参数:

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

}

在上面的例子中,${target.env}property,并将在运行时得到解决。您可以访问元数据,如下所示:

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

© www.soinside.com 2019 - 2024. All rights reserved.