TestNG系列:
TestNG和Junit4的參數化測試對比
TestNG運行指定測試套件
TestNG整合ReportNG
TestNG參數化測試實戰(zhàn)
TestNG+Spring/Spring Boot整合
使用TestNG的參數化測試特性實現測試數據和用例的分離杀怠,測試參數保存在數據文件中(csv,json等格式)嫌褪,本次范例使用json格式
- 一捐腿、封裝BaseTest作為所有測試類的基類宪躯,定義并實現DataProvider方法
這里DataProvider方法使用測試方法對象(Method Object)作為參數
@ContextConfiguration(locations = "classpath:oms-ci-spring.xml")
public class BaseTest extends AbstractTestNGSpringContextTests {
@DataProvider(name = "readTestData")
public Object[][] testData(Method testMethod) {
if (testMethod.getName().equals("testChooseShift")) {
return new Object[][]{new Object[]{135001}};
}
String className = testMethod.getDeclaringClass().getSimpleName();
JSONObject paramJson = readParam(className);
JSONArray paramArr = paramJson.getJSONArray("data");
Object[][] param = new Object[paramArr.size()][];
for (int i = 0; i < paramArr.size(); i++) {
JSONArray childArr = paramArr.getJSONArray(i);
param[i] = new Object[childArr.size()];
for (int j = 0; j < childArr.size(); j++) {
param[i][j] = childArr.get(j).toString();
}
}
return param;
}
/**
*
* @param className
* @return
*/
public JSONObject readParam(String className) {
String paramText = this.readParamFile(className);
JSONObject paramJson = null;
try {
paramJson = (JSONObject) JSONObject.parse(paramText);
} catch (Exception ex) {
ex.printStackTrace();
}
return paramJson;
}
/**
*
* @param fileName
* @return
*/
public String readParamFile(String fileName) {
String fileUrl = String.join("/", "param", fileName + ".json");
return this.readFile(fileUrl);
}
/**
*
* @param fileUrl
* @return
*/
public String readFile(String fileUrl) {
InputStream fi = null;
BufferedReader bo = null;
try {
fi = this.getClass().getClassLoader().getResourceAsStream(fileUrl);
bo = new BufferedReader(new InputStreamReader(fi, "utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
StringBuilder stB = new StringBuilder();
try {
String lineRead = "";
while ((lineRead = bo.readLine()) != null) {
stB.append(lineRead);
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
fi.close();
bo.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return stB.toString();
}
}
- 二、測試方法通過DataProvider引用參數讀取的方法
/**
* @param calDate indicator的date_Str
* @param targetId xspace的servicerId
* @param expect expectValue
*/
@Test(dataProvider = "readTestData")
public void calIndicatorTest(String calDate, String targetId, String expect) {
......
}
}
- 三膳汪、在test/resources/目錄下創(chuàng)建數據文件唯蝶,要求文件名稱和測試類名稱一致:
這里可以按照用例目錄的結構來組織數據文件
數據文件格式如下,param1~3對應用例需要參數
{
"data": [
[
param1,
param2,
param3
]
]
}
舉例:第二步中public void calIndicatorTest(String calDate, String targetId, String expect)
的實際參數如下:
{
"data": [
[
"20170831",
98000337284,
{
"1": "82.74",
"2": "55.35",
"3": "85.59",
"4": "77.76",
"5": "84.21",
"6": "46.43",
"7": "87.32",
"8": "75.913",
"10": "10.94",
"12": "58.26",
"14": "11.31",
"15": "10.53"
}
]
]
}
通過以上三步,就可以實現數據和用例分離原型