我将testNG
与Selenium webdriver2.0
一起使用。
在testNG.xml
我有
<suite data-provider-thread-count="2" name="selenium FrontEnd Test" parallel="false" skipfailedinvocationCounts="false" thread-count="2">
<parameter name="config_file" value="src/test/resources/config.properties/"/>
<test annotations="JDK" junit="false" name="CarInsurance Sanity Test" skipfailedinvocationCounts="false" verbose="2">
<parameter name="config-file" value="src/test/resources/config.properties/"/>
<groups>
<run>
<include name="abstract"/>
<include name="Sanity"/>
</run>
</groups>
<classes>
</classes>
</test>
</suite>
在java文件中
@BeforeSuite(groups = { "abstract" } )
@Parameters(value = { "config-file" })
public void initFramework(String configfile) throws Exception
{
Reporter.log("Invoked init Method \n",true);
Properties p = new Properties();
FileInputStream conf = new FileInputStream(configfile);
p.load(conf);
siteurl = p.getProperty("BASEURL");
browser = p.getProperty("BROWSER");
browserloc = p.getProperty("BROWSERLOC");
}
将错误视为
AILED CONFIGURATION:@BeforeSuite initFramework org.testng.TestNGException: 方法initFramework上的@Configuration需要参数'config-file' 但尚未标记为@Optional或在
中定义
如何将@Parameters
用于资源文件?
答案 0 :(得分:9)
您的config-file
参数似乎未在<suite>
级别定义。有几种方法可以解决这个问题:
1.确保<parameter>
元素在<suite>
标记内定义,但在任何<test>
之外:
<suite name="Suite1" >
<parameter name="config-file" value="src/test/resources/config.properties/" />
<test name="Test1" >
<!-- not here -->
</test>
</suite>
2。如果您希望在Java代码中具有参数的默认值,尽管它是在testng.xml
中指定的,您可以在方法参数中添加@Optional
注释:
@BeforeSuite
@Parameters( {"config-file"} )
public void initFramework(@Optional("src/test/resources/config.properties/") String configfile) {
//method implementation here
}
编辑(基于发布的testng.xml):
选项1:
<suite>
<parameter name="config-file" value="src/test/resources/config.properties/"/>
<test >
<groups>
<run>
<include name="abstract"/>
<include name="Sanity"/>
</run>
</groups>
<classes>
<!--put classes here -->
</classes>
</test>
</suite>
选项2:
@BeforeTest
@Parameters( {"config-file"} )
public void initFramework(@Optional("src/test/resources/config.properties/") String configfile) {
//method implementation here
}
在任何情况下,我都建议不要让两个参数具有几乎相同的名称,相同的值和不同的范围。
答案 1 :(得分:1)
您想在@Parameter
中使用@BeforeSuite
。套件开始执行后会解析套件级参数,我相信即使在处理套件之前,TestNG也会调用@BeforeSuite
:
这是一种解决方法:在方法参数中添加ITestContext
以注入
@BeforeSuite(groups = { "abstract" } )
@Parameters({ "configFile" })
public void initFramework(ITestContext context, String configFile) throws Exception {