TestNG使用csv 文件作为数据驱动

上一篇 / 下一篇  2015-06-25 13:19:28 / 个人分类:TestNG

之前在使用Testng时,使用率Excel作为数据驱动,发现eclipse 并不支持查看和编辑excel 
之后查找了相关资料,发现eclipse 可以安装csv 插件,在eclipse 内就可以实现csv 文件的编辑和查看
因此将数据源换成csv 文件,代码如下:

1、读取csv 文件(这段代码就是将读取Excel 文件改成csv 文件)

package util;

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.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.regex.Matcher;

import jxl.Sheet;
import jxl.Workbook;

public class CSVData implements Iterator<Object[]>{


private BufferedReader br =null;
//����
private int rowNum = 0;
//��ǰ��
private int curRowNo = 0;
//����
private int columnNum = 0;
//����
private String[] columnName;
private List<String> csvList;

/*
* 在TestNG中由@DataProvider(dataProvider = "name")修饰的方法
* 取Excel时,调用此类构造方法(此方法会得到列名并将当前行移到下以后)执行后,转发哦
* TestNG自己的方法中去,然后由它们调用此类实现的hasNext()、next()方法
* 得到一行数据,然后返回给由@Test(dataProvider = "name")修饰的方法,如此
* 反复到数据读完为止
* @param filepath Excel文件名
* @param casename 用例名
*/
public CSVData(String fileName, String casename) {
try{
File directory = new File(".");
   String ss = "resources.";
   File csv = new File(directory.getCanonicalFile() + "\\src\\test\\" +
   ss.replaceAll("\\.", Matcher.quoteReplacement("\\")) + fileName +".csv");

       br = new BufferedReader(new FileReader(csv));
csvList = new ArrayList<String>();
while(br.ready()){
csvList.add(br.readLine());
this.rowNum ++;
}
String stringValue[] = csvList.get(0).split(",");
this.columnNum = stringValue.length;
   
columnName = new String[stringValue.length];
   
for(int i = 0; i < stringValue.length; i++){
   
columnName[i] = stringValue[i].toString();
   
     }
   this.curRowNo ++;
}catch(Exception e){
e.printStackTrace();
}
}
@Override
public boolean hasNext() {
if(this.rowNum ==0 || this.curRowNo >= this.rowNum){
try{
br.close();
}catch(Exception e){
e.printStackTrace();
}
return false;
}else{
return true;
}
}

@Override
public Object[] next() {
/*
* 将数据放入map 
*/
Map<String, String> s = new TreeMap<String, String>();
String csvCell[] =  csvList.get(curRowNo).split(",");
for(int i = 0; i< this.columnNum; i++){
String temp = "";
try{
temp = csvCell[i].toString();
}catch(ArrayIndexOutOfBoundsException ex){
temp = "";
}
s.put(this.columnName[i], temp);
}
Object r[] = new Object[1];
r[0] = s;
this.curRowNo ++;
return r;
}

@Override
public void remove() {
throw new UnsupportedOperationException("remove unsupported");
}

}

当前将数据放到了map 内,那么在Test 代码内就可以直接调用啦
package net.tuxun.customer.module.fatch.service.implTest;

import org.testng.annotations.Test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import net.tuxun.customer.module.fatch.service.impl.ClassifyFatchFood;
import net.tuxun.customer.module.fatch.service.impl.ClassifyFatchPersonel;

import org.apache.commons.logging.Log;
import org.apache.log4j.Logger;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.DataProvider;
import org.testng.Assert;







import net.tuxun.component.kitchen.bean.Food;
import net.tuxun.component.kitchen.bean.Personel;
import util.CSVData;
import util.ExcelData;

/*
 * 从业人员信息查询非正向测试用例
 */
public class ClassifyFatchPersonelUNExceptionTest {

 
  
  @Test(dataProvider = "xxx")
  public void testxxx(Map<String, String> data) {
 
 TestClass test = new TestClass();//需要被测试的函数
 List<Personel> personList = new ArrayList<Personel>();
 System.out.println(data.get("isRun"));
 
 //XML**
 if(data.get("isRun").equals("y"))
 {
 String xml="123"
 
 testList = test.parseXML(xml);
 Assert.assertEquals(testList.size(), Integer.parseInt(data.get("expected")),"校验失败");
 
 }else{
 return;
 }
      
 
  }

  @DataProvider(name = "xxx")
  public Iterator<Object[]> data() throws Exception{
 
   
return (Iterator<Object[]>)new CSVData("fileName","SheetName");
  
  }
  
  @BeforeTest
  public void beforeTest() {
  }

  @AfterTest
  public void afterTest() {
  }

}


TAG:

 

评分:0

我来说两句

Open Toolbar