自动化测试过程中如何使用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);
		}

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值