原创:testng 参数化(3)- 使用 csv文件
简介
前篇提到,使用@DataProvider来管理和维护测试数据,已经实现数据和逻辑分离
但是,当一行数据列比较多的时候,管理起来比较费眼睛,不容易知道每一个列字段的含义,维护较难。
如果能够列数据和列名称对应起来,则极大的的改善测试数据的维护成本
使用csv文件来管理测试数据,然后将csv中的数据转化为Object[][], 是一个非常好的选择
csv文件
主流的开发工具,例如Idea支持csv文件的编辑,并且界面十分友好,编辑测试数据煞是方便快捷,参考下图:

一行数据代表一个用例,大致有描述信息数据,测试数据,验证数据三块
每一个字段都有对应的列名称,易于维护
读取csv文件数据数据
package common.util.csvutils;
import java.nio.charset.Charset;
import java.util.Map;
import java.util.TreeMap;
import com.csvreader.CsvReader;
public class CSVUtils {
/**
* 读取csv文件的内容
* @param strFileName
* @return
*/
public static Map<Integer,Map<String,Object>> readFile(String strFileName){
Map<Integer, Map<String,Object>> mapLine = new TreeMap<Integer, Map<String, Object>>();
String filePath =System.getProperty("user.dir")+"/src/main/resources/testdata/"+strFileName;
try{
//需要增加对中文字符的处理
CsvReader csvReader = new CsvReader(filePath,',',Charset.forName("UTF-8"));
csvReader.readHeaders();
int nRow = 0;
while(csvReader.readRecord()){
Map<String,Object> map = new TreeMap<String, Object>();
for(int i=0; i<csvReader.getColumnCount(); i++){
map.put(csvReader.getHeader(i), csvReader.get(i));
}
mapLine.put(++nRow,map);
}
}catch (Exception e){
e.printStackTrace();
}
return mapLine;
}
}
csv文件数据转化为Object[][]
package train.testng;
import common.util.csvutils.CSVUtils;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.util.Map;
public class Liang6DemoCsv {
@DataProvider(name = "csvData")
public Object[][] readCsvData(){
String fileName = "liang6demo.csv";
//读入csv文件数据并转化为Object[][]
Map<Integer, Map<String,Object>> map = CSVUtils.readFile(fileName);
Object[][] objects = new Object[map.size()][1];
for(int i=0; i<map.size(); i++){
Object[] temp = new Object[1];
temp[0] = map.get(i+1);
objects[i][0]=temp;
}
return objects;
}
@Test(dataProvider = "csvData")
public void csvDataDemo(Object[] obj){
Map<String, Object> mapLine = (Map<String, Object>)obj[0];
System.out.println(obj[0]);
System.out.println(mapLine.get("msg"));
}
}
运行结果
{age=1, city=BJ, code=0, data=good cat, describe=冒烟测试, id=1, msg=success, name=tom}
success
{age=100, city=TOKYO, code=1, data=, describe=异常测试, id=2, msg=doesn't exist, name=jerry}
doesn't exist
===============================================
liang6Demo
Total tests run: 2, Failures: 0, Skips: 0
===============================================
版权所有,本文为原创文章,转载请注明出处
https://www.cnblogs.com/liang6/p/14395828.html
总结
使用csv管理测试数据,更加符合数据和逻辑相分离的原则
使用csv管理测试数据,灵活且更加易于维护
但是,仍然需要在DataProvider中来处理数据,有些繁琐
浙公网安备 33010602011771号