【原创】自动化测试过程中如何使用excel数据驱动(下)

上一篇文章中我分享了如何通过读取csv文件的形式绑定testng中的数据驱动注解,本文进一步分享下把csv文件换成excel多sheet文件后如何解析和绑定。 这里需要用到java jxl库来处理excel文件,返...

上一篇文章中我分享了如何通过读取csv文件的形式绑定testng中的数据驱动注解,本文进一步分享下把csv文件换成excel多sheet文件后如何解析和绑定。

这里需要用到java jxl库来处理excel文件,返回testng接受的object[][]后就可以直接绑定数据驱动了,看下面的代码:

package cn.testfan.testng;

import java.io.File;
import java.io.IOException;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;

public class TestExcelWithDataProvider {

	public static Object[][] readData(String dataFile, String sheetName, int beginRowNum, int rowOffset,
			int beginColumnNum, int columnOffset) {
		return read(dataFile, sheetName, beginRowNum, rowOffset, beginColumnNum, columnOffset);
	}

	
	/**
	 * @param dataFile 文件名
	 * @param sheetName excel中的sheet
	 * @param beginRowNum 开始行
	 * @param rowOffset 行偏移量
	 * @param beginColumnNum 开始列
	 * @param columnOffset 列偏移量
	 * @return
	 */
	private static Object[][] read(String dataFile, String sheetName, int beginRowNum, int rowOffset,
			int beginColumnNum, int columnOffset) {
		File excelFile = new File(dataFile);
		Workbook wb = null;
		Object[][] data = null;
		try {
			wb = Workbook.getWorkbook(excelFile);
			Sheet sheet = wb.getSheet(sheetName);
			if (sheet == null)
				return null;
			int rows = sheet.getRows();
			int cols = sheet.getColumns();
			if (rowOffset == 0) {
				rowOffset = rows - beginRowNum;
			} else if (rows < (beginRowNum + rowOffset)) {
				rowOffset = rows - beginRowNum;
			}
			if (columnOffset == 0) {
				columnOffset = cols - beginColumnNum;
			} else if (cols < (beginColumnNum + columnOffset)) {
				columnOffset = cols - beginColumnNum;
			}
			data = new Object[rowOffset][columnOffset];

			for (int i = beginRowNum; i < beginRowNum + rowOffset; i++) {
				for (int j = beginColumnNum; j < beginColumnNum + columnOffset; j++) {
					// 获取单元格数据 getCell(col,row);
					Cell cell = sheet.getCell(j, i);
					if (cell != null) {
						String celldata = cell.getContents().trim();
						data[i - beginRowNum][j - beginColumnNum] = celldata;
					}
				}
			}

		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		return data;
	}
	
	// 定义数据驱动
		@DataProvider(name = "getData")
		public static Object[][] getData() throws IOException {

			return readData("C:\\test\\testfan_excel.xls", "sheet1", 0, 0, 0, 0);
		}

		// 测试案例绑定DataProvider后自动循环执行
		@Test(dataProvider = "getData")
		public void testSearch(String p1, String p2) {
			System.out.println(p1 + " " + p2);
		}

}

-------------------------------------我是华丽的分割线--------------------------------------------------------
Testfan楼大管家原创Selenium系列学习文章列表,点击阅读
---------------------------------------------------------------------------------------------------------------------

  • 发表于 2016-08-19 12:24
  • 阅读 ( 1239 )

0 条评论

请先 登录 后评论
不写代码的码农
楼大管家

测试达人

23 篇文章

作家榜 »

  1. hey girl 181 文章
  2. 王前前 137 文章
  3. 柠檬 118 文章
  4. lamking 105 文章
  5. 云少 105 文章
  6. 腾讯移动品质中心TMQ 93 文章
  7. humortony 82 文章
  8. 开心的阳光 41 文章