赵佳乐SMILE 发表于 2015-3-3 16:00:47

【佳乐Selenium】DAY-6 参数化Excel

转自:http://www.51testing.com/html/87/300987-832117.html

三、使用excel表格读取测试数据
1. 首先我们要用到的readExcel()这个方法,由于此方法中涉及到一些操作Excel 表格的API方法引用自jxl.jar这个包,所以大家需要确保在项目的Java Build Path里边需要添加testng.jar这个包。
注:jxl.jar这个jar包可以在网上搜索到的,下载下来就可以用了,这次试验用到的是这个jar包。当然我们也可以通过java的poi技术读取和导入Excel,感觉poi技术比使用jxl.jar 包难一些,但是poi的功能很强大。


我把readExcel()这个方法放在一个单独的类里边,类名为ExcelReader,如下
package com.test.com.test.java;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
/**
* 读取excle公共方法
* @author Rob
*
*/
public class ExcelReader {
    /**
    *
    * @param excelFile 读取文件对象
    * @param rowNum 从第几行开始读,如果有一行标头则从第二行开始读
    *
    * @return
    * @throws BiffException
    * @throws IOException
    */
   public static String[] readExcel(File excelFile, int rowNum) throws BiffException,IOException
   {

      // 创建一个list用来存储读取的内容
      List<String[]> list = new ArrayList<String[]>();

      Workbook rwb = null;
      Cell cell = null;
      // 创建输入流
      InputStream stream = new FileInputStream(excelFile);
      // 获取Excel文件对象
      rwb = Workbook.getWorkbook(stream);
      // 获取文件的指定工作表默认的第一个
      Sheet sheet = rwb.getSheet(0);
      // 行数(标头的目录不需要,从1开始)

      for (int i = rowNum-1; i < sheet.getRows(); i++)
      {
          // 创建一个数组用来存储每一列的值

          String[] str = new String;

          // 列数
          for (int j = 0; j < sheet.getColumns(); j++)

          {

             // 获取第i行,第j列的值

             cell = sheet.getCell(j, i);
             str = cell.getContents();
          }
          // 把刚获取的列存入list

          list.add(str);         

      }
      return list.get(rowNum);

   }

}





测试方法如下:

package com.test.com.test.java;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
/**
* 读取excle公共方法
* @author Rob
*
*/
public class ExcelReader {
    /**
    *
    * @param excelFile 读取文件对象
    * @param rowNum 从第几行开始读,如果有一行标头则从第二行开始读
    *
    * @return
    * @throws BiffException
    * @throws IOException
    */
   public static String[] readExcel(File excelFile, int rowNum) throws BiffException,IOException
   {

      // 创建一个list用来存储读取的内容
      List<String[]> list = new ArrayList<String[]>();

      Workbook rwb = null;
      Cell cell = null;
      // 创建输入流
      InputStream stream = new FileInputStream(excelFile);
      // 获取Excel文件对象
      rwb = Workbook.getWorkbook(stream);
      // 获取文件的指定工作表默认的第一个
      Sheet sheet = rwb.getSheet(0);
      // 行数(标头的目录不需要,从1开始)

      for (int i = rowNum-1; i < sheet.getRows(); i++)
      {
          // 创建一个数组用来存储每一列的值

          String[] str = new String;

          // 列数
          for (int j = 0; j < sheet.getColumns(); j++)

          {

             // 获取第i行,第j列的值

             cell = sheet.getCell(j, i);
             str = cell.getContents();
          }
          // 把刚获取的列存入list

          list.add(str);         

      }
      return list.get(rowNum);

   }

}


abc.xls文件的内容为:
username password
justForYourTestingXLS 135135

andyclock 发表于 2015-3-6 15:18:27

参数化利用Feed4JUnit貌似更简单,只需将组件的lib包里jar文件导入项目,然后创建测试类并在接收数据的测试方法上声明数据源为 @Source("Data.xls"),Excel 中的数据在传递过程中会自动按照列与测试方法的参数的位置顺序进行匹配,并以行作为一个单位读取并传递给测试方法体。这样可以省去读取excel的代码,要方便很多,详细见http://www.ibm.com/developerworks/cn/java/j-lo-feed4junit/
页: [1]
查看完整版本: 【佳乐Selenium】DAY-6 参数化Excel