您的位置:首页 > 其它

TestNg参数化测试之读取csv文件

2016-07-06 20:35 323 查看

1、新建csv文档,准备好测试数据

在当前工程的resources目录下,新建文件名为add的csv文档



打开csv文件,构造n1、n2、r1三个参数数据



2、新建一个CSVData类用来获取csv文件中的数据

package com.mcj.testng;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
import java.util.regex.Matcher;

public class CSVData implements Iterator<Object[]> {
BufferedReader in;
ArrayList<String> csvList=new ArrayList<String>();
int rowNum=0;     //行数
int columnNum=0;  //列数
int curRowNo=0;   //当前行数
String columnName[];  //列名
/**
* 在TestNG中由@DataProvider(dataProvider = "name")修饰的方法
* 取csv文件数据时时,调用此类构造方法(此方法会得到列名并将当前行移到下以后)执行后,转发到
* TestNG自己的方法中去,然后由它们调用此类实现的hasNext()、next()方法
* 得到一行数据,然后返回给由@Test(dataProvider = "name")修饰的方法,如此
* 反复到数据读完为止
* @param fileName
* @throws IOException
*/
public CSVData(String fileName) throws IOException{
File directory=new File(".");
String path=".src.resources.";
String absolutePath=directory.getCanonicalPath()+path.replaceAll("\\.", Matcher.quoteReplacement("\\"))+fileName;
System.out.println(absolutePath);
File csv=new File(absolutePath);
in=new BufferedReader(new FileReader(csv));
while (in.ready()) {
csvList.add(in.readLine());
this.rowNum++;
}
String[] str=csvList.get(0).split(",");
this.columnNum=str.length;
columnName=new String[columnNum];
//获取列名
for (int i = 0; i < columnNum; i++) {
columnName[i]=str[i];
}
this.curRowNo++;
}
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
if(rowNum==0||curRowNo>=rowNum){
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}else{
return true;
}
}
/**
* 获取一组参数,即一行数据
*/
@Override
public Object[] next() {
// TODO Auto-generated method stub
Map<String,String> s=new TreeMap<String,String>();
String csvCell[]=csvList.get(curRowNo).split(",");
for(int i=0;i<this.columnNum;i++){
s.put(columnName[i], csvCell[i]);
}
Object[] d=new Object[1];
d[0]=s;
this.curRowNo++;
return d;
}

@Override
public void remove() {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("remove unsupported");
}

}


3、创建TestNg测试类CalculatorCSV

package com.mcj.testng;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class CalculatorCSV {
Calculator cal=new Calculator();

@DataProvider(name="num")
public Iterator<Object[]> Numbers() throws IOException{
return (Iterator<Object[]>)new CSVData("add.csv");
}
@Test(dataProvider="num")
public void testAdd(Map<String, String> data){
float num1=Float.parseFloat(data.get("n1"));
float num2=Float.parseFloat(data.get("n2"));
float expectedResult=Float.parseFloat(data.get("r1"));
Float actual=cal.add(num1, num2);
Assert.assertEquals(actual, expectedResult);
}
}


4、运行结果

PASSED: testAdd({n1=3, n2=2, r1=5})

PASSED: testAdd({n1=-3, n2=8, r1=5})

FAILED: testAdd({n1=5.4, n2=6.6, r1=11.9})

java.lang.AssertionError: expected [11.9] but found [12.0]

at org.testng.Assert.fail(Assert.java:94)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  csv testng-参数化