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)
相关文章推荐
- mysql load data 导出、导入 csv
- C#导出数据到CSV文件的通用类实例
- C#实现导入CSV文件到Excel工作簿的方法
- php操作csv文件代码实例汇总
- php读取csv文件并输出的方法
- C#操作CSV文件类实例
- php使用指定编码导出mysql数据到csv文件的方法
- C#中csv文件与DataTable互相导入处理实例解析
- javascript实现客户端兼容各浏览器创建csv并下载的方法
- 解析csv数据导入mysql的方法
- php导出csv数据在浏览器中输出提供下载或保存到文件的示例
- 如何在symfony中导出为CSV文件中的数据
- Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
- MySQL 导出数据为csv格式的方法
- mysql使用SQLyog导入csv数据不成功的解决方法
- MySQL如何导入csv格式数据文件解决方案
- php将文本文件转换csv输出的方法
- php实现CSV文件导入和导出
- thinkPHP导出csv文件及用表格输出excel的方法
- php读取csv数据保存到数组的方法