博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【框架】用excel管理测试用例需要的参数数据(二)
阅读量:5267 次
发布时间:2019-06-14

本文共 3062 字,大约阅读时间需要 10 分钟。

一、总体思路

以类为excel名,测试方法名为sheet名,建立excel文件。用jxl包里的方法去读取excel文件里的内容,然后用testng里的dataprovider,将数据传递给测试用例

 

二、代码实现

package com.jxl.excel;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import jxl.Sheet;import jxl.Workbook;import jxl.read.biff.BiffException;public class ExcelData {	String classname;	String casename;	/**	 * @param classname	 *            excel文件名	 * @param casename	 *            sheet名	 */	public ExcelData(String classname, String casename) {		this.classname = classname;		this.casename = casename;	}	/**	 * 获取excel文件的路径	 * 	 * @return	 */	public String getPath() {		String path = "./testdata/" + classname + ".xls";		return path;	}	/**	 * 获取excel对应sheet中的数据	 * 	 * @return	 * @throws IOException	 */	public Object[][] getExcelData() {		File file = new File(getPath());		Workbook book = null;		Sheet sheet = null;		try {			book = Workbook.getWorkbook(file);			sheet = book.getSheet(casename);		} catch (Exception e) {			System.out.println(classname + ".xls文件读取失败");		}		int rows = sheet.getRows();		int cols = sheet.getColumns();		// 如果行数少于2,则没有必要再继续运行下去了,不会返回数据,直接退出程序		if (rows <= 1) {			System.out.println(classname + ".xls的" + casename + " sheet没有数据");			System.exit(0);		}		// 为了返回值是Object[][]类型,定义一个多行单列的二维数组		HashMap
[][] arrMap = new HashMap[rows - 1][1]; // 对数组中的所有元素初始化 for (int i = 0; i < rows - 1; i++) { arrMap[i][0] = new HashMap<>(); } // 定义一个list,存储第一行的标题,作为key用 // 需要注意的是,getCell(col,row),第一个纵坐标,第二个位横坐标 List
list = new ArrayList
(); for (int c = 0; c < cols; c++) { list.add(sheet.getCell(c, 0).getContents()); } // 以行为单位,将一行的数据,以键值对的形式,存进一个哈希表里 for (int r = 1; r < rows; r++) { for (int c = 0; c < cols; c++) { arrMap[r - 1][0].put(list.get(c), sheet.getCell(c, r).getContents()); } } book.close(); return arrMap; }}

 

testng的测试用例里,这样传递数据 

@DataProvider(name = "noNameTip")	public Object[][] noNameData() {    //excel的文件名和类名一致,为LoginTest,测试方法和sheet名一致,为testNoNameLogin		ExcelData e = new ExcelData("LoginTest", "testNoNameLogin");		return e.getExcelData();	}	/**	 * 测试登录没有输入用户名	 */	@Test(dataProvider = "noNameTip")	public void testNoNameLogin(HashMap
data) { //按列名取值 String username = data.get("username"); String password = data.get("password"); loginPage.doLogin(username, password); assertEquals(loginPage.getNoNameTip(), data.get("expectedNoNameTip")); }

 testng中当有多个方法,需要传递数据的时候,将method传递给dataprovider

@DataProvider(name = "loginData")	public Object[][] testData(Method method)  {				ExcelData e = new ExcelData("LoginTest", method.getName());		return e.getExcelData();	}	/**	 * 测试登录没有输入用户名	 */	@Test(dataProvider = "loginData")	public void testNoNameLogin(HashMap
data) { //按列名取值 String username = data.get("username"); String password = data.get("password"); loginPage.doLogin(username, password); assertEquals(loginPage.getNoNameTip(), data.get("expectedNoNameTip")); }

  

 

转载于:https://www.cnblogs.com/Jourly/p/7000003.html

你可能感兴趣的文章
响应式布局
查看>>
从此以后,我不再使用百度空间了。
查看>>
LintCode 字符串(二)
查看>>
ASP.NET Web API基于OData的增删改查,以及处理实体间关系
查看>>
2014编程之美初赛第二场
查看>>
js-轮播图
查看>>
小猫钓鱼游戏(c++实现)
查看>>
bzoj1598: [Usaco2008 Mar]牛跑步
查看>>
DirectAccess
查看>>
作用域对象
查看>>
全局设置 Composer 使用中国镜像
查看>>
bzoj 4319: Suffix reconstruction 后缀数组+构造
查看>>
zju 校队选拔 被虐记
查看>>
java 实现多种排序
查看>>
IO流的练习4 —— 键盘录入学生成绩信息,进行排序后存入文本中
查看>>
Go 初体验 - 错误与异常处理 - recover和panic
查看>>
TAT,我的LCT转双旋了
查看>>
spring学习(一)
查看>>
python基础整理笔记(七)
查看>>
List与IList的区别
查看>>