从属性文件导入值以进行自动化测试



我必须编写一个测试,该测试可以使用TestNG中的数据提供程序从属性文件打印值。我不确定从哪里开始。我已经使用硬编码值完成了任务,但无法使用该文件来完成。以下是我目前所拥有的:

public class ConfigurationProvider {
@DataProvider(name = "browserProvider")
public FileInputStream getFile() throws IOException {

FileInputStream fis = new FileInputStream(
"C:\Users\user\git\practice\automation\src\test\resources\config.properties");
Properties p = new Properties();
p.load(fis);
p.getProperty("BrowserType");

return fis;
}

@Test(dataProvider = "browserProvider")
public void canPrintBrowser(String browserType) {
System.out.println("The browser type is: " + browserType); 
}
}

属性文件如下所示:

Url=http://the-internet.herokuapp.com
BrowserType=chrome
ImplicitTimeout=5000
ScriptTimeout=5000

运行测试失败,因为它希望我使用Object[][]。但我不确定如何适应它。到目前为止,我所做的所有研究都只是使用网络驱动程序等过于复杂的东西……这应该是基本的,但我是新手,这真的很折磨我的大脑。

DataProvider需要一个Object[][],因为它将是二维数组,具有使用该DataProvider@Test的所有执行的参数。

例如,如果返回的Object[][]是这样的:

data[0][0] = "Peter"; 
data[0][1] = "18"; 
data[1][0] = "Ross"; 
data[1][1] = "45"; 
data[2][0] = "Diana"; 
data[2][1] = "11";

@Test方法将被执行3次,然后必须用2个参数来定义。第一个具有参数Peter18,第二个具有Ross45,依此类推

DataProvider就是这样工作的。因此,您必须手动解析properties文件,并使用ots内容构建将为@Test方法提供服务的Object[][]

因此,你的DataProvider方法,就像你的问题中一样,简单地针对单个样本,应该是这样的:

@DataProvider(name = "browserProvider")
public Object[][] getData() throws IOException {

FileInputStream fis = new FileInputStream(
"C:\Users\user\git\Quntrix-Training\automation\src\test\resources\config.properties");
Properties p = new Properties();
p.load(fis);
Object[][] data = new Object[1][1];
data[0][0] = p.getProperty("BrowserType");
return data;
}

如果properties中有更多的数据,只需根据需要进行迭代或检索,并不断填充Object[][]

尽管您标记为正确的答案解决了您的特定问题,但我想提供一些见解,因为我认为您误解了数据提供商的概念。

为什么返回Object[][]

数据提供程序是一种允许将单个测试相乘的机制,这样,如果有了该单个测试和N条输入数据,就可以进行N测试。

这就是Object[][]的来源。基本上CCD_ 23是CCD_;外部阵列";保持用于不同测试的参数序列,并且每个序列由"0"表示;内部阵列";。

例如,您有一种方法:

public void testMyStuff(String a, String b){
...
}

此方法采用两个参数,因此;"水平";Object[][]的大小将是2

现在,如果你想把这个单独的测试分成三个不同的测试,你需要有";垂直的";Object[][]的大小等于3

Object[][] test = {
{"A1", "B1"},
{"A2", "B2"},
{"A3", "B3"}
};

因此,您将拥有以下执行序列:

testMyStuff("A1", "B1");
testMyStuff("A2", "B2");
testMyStuff("A3", "B3");

那为什么不是你的情况呢

您有一个属性文件,其中您的属性有一个值。这不是数据提供者的模式。最好直接从测试中轮询属性值。

最新更新