网站首页 > java教程 正文
测试框架中参数化的一般形式
在Junit4和TestNG框架中实现参数化的形式几乎是一致的。
Junit4定义参数化数据,代码如下:
public static Collection prepareData(){
Object [][]object= {{1,2,3},{0,2,2},{0,3,3}};
return Arrays.asList(object);
}
TestNG定义参数化数据,代码如下:
@DataProvider
public Object[][] dp1() {
return new Object[][] {
new Object[] { 1, 1,0 },
new Object[] { 2, 1,1 },
new Object[] { 2, 1,2 },
};
}
从excel中读取测试驱动数据的实现思路
在前面的文章中,我详细地讲解了,java中数组的应用,以及如何利用api来操控excel文件。接下来我就把在测试框架中读取excel进行接口测试参数化的核心代码以及实现思路讲解给大家。
1.首先我们看到测试数据的参数化返回值是Object [][] object,那么我们就需要写一个读取excel的方法,该方法的返回值是Object [][],方法可以定义为:Object[][] readExcel(String p_file,int p_sheetindex)
2.excel中读取cell的名称是通过行和列确认的,而且不同类型的cell在读取值时用到的api是不同的,我们写一个读取Cell值得方法,代码实现如下:
public static Object getCellVaule(Sheet p_sheet,int p_rowIndex,int p_cellIndex) {
Object value=null;
Row row = p_sheet.getRow(p_rowIndex);
Cell cell = row.getCell(p_cellIndex);
if(cell.getCellType()==CellType.NUMERIC) //判断是数字类型
{
value= cell.getNumericCellValue();
}
else if(cell.getCellType()==CellType.STRING) //判断是String类型
{
value=cell.getStringCellValue();
}
else if(cell.getCellType()==CellType.BOOLEAN) // 判断是BOOLEAN类型
{
value=cell.getStringCellValue();
}
else
{
value=cell.toString(); // 其他类型统一转化成String类型
}
return value;
}
3.结合getCellVaule方法,我们编写一个读取完整excel值的方法,返回值为Object[][] ,代码如下:
public static Object[][] readExcel(String p_file,int p_sheetindex){
Workbook workbook=null;
Object [][] data=null;
try {
workbook = new XSSFWorkbook(new FileInputStream(p_file));
Sheet sheet = workbook.getSheetAt(p_sheetindex); // 获取第一个工作表.0代表第一个sheet页
int iRowNum=sheet.getPhysicalNumberOfRows(); //获取工作表中的行数
int iColumnNum= sheet.getRow(0).getPhysicalNumberOfCells(); //获取工作表中的列数
data=new Object[iRowNum][iColumnNum];//通过行列数,创建一个二维数组来保存cell中的数据
for(int i=0;i<iRowNum;i++) {
for(int j=0;j<iColumnNum;j++) {
data[i][j]= getCellVaule(sheet,i,j); //通过循环以及之前编写好的读取excel单元格值的方法,把cell中的数据保存到二维数组中
}
}
workbook.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return data;
}
4.我们可以把这两个方法作为工具方法,写入到工具类ExcelTool中,方便在测试框架中应用
测试用例中参数化的应用
在测试用例中(以junit4为例),使用该工具方法实现参数化的代码实现如下:
@RunWith(Parameterized.class)
public class ParaDemo {
private Object input1;
private Object input2;
@Parameters
public static Collection prepareData(){
System.out.println("prepareData");
Object [][] object=ExcelTool.readExcel("D:\\TestData2.xlsx",0);
return Arrays.asList(object);
}
public ParaDemo(Object input1,Object input2,Object expected){
System.out.println("ParaDemo");
this.input1 = input1;
this.input2 = input2;
}
@Test
public void testEqual(){
Assert.assertEquals(this.input1,this.input2);
}
}
excel里保存的测试数据如下所示
运行测试用例,发现参数化成功执行,如下图所示
猜你喜欢
- 2024-12-17 松勤软件测试:丢掉Excel,手把手教你用Python操作Excel
- 2024-12-17 Excel数据还可这样来查询:用SQL查询输出工作表指定区域更高效!
- 2024-12-17 Pandas:一个高性能的数据分析Python库
- 2024-12-17 《github精选系列》——数据可视化分析平台DataGear
- 2024-12-17 Python读取与写入Excel模块:openpyxl
- 2024-12-17 基于java的开源BI可视化工具——DataGear使用教程
- 2024-12-17 将Excel表格直接导出成JSON文件格式的一个小工具
- 2024-12-17 java解析doc、docx内容踩坑日记 java解析文本文件
- 2024-12-17 深入解析 EasyExcel 组件原理与应用
- 2024-12-17 数据分析的常用工具有哪些?Excel和BI如何选择
你 发表评论:
欢迎- 最近发表
-
- class版本不兼容错误原因分析(class更新)
- 甲骨文Oracle公司为Java的最新LTS版本做出改进
- 「版本发布」Minecraft Java开发版 1.19.4-pre1 发布
- java svn版本管理工具(svn软件版本管理)
- 我的世界1.8.10钻石在第几层(我的世界1.7.2钻石在哪层)
- Java开发高手必备:在电脑上轻松切换多个JDK版本
- 2022 年 Java 开发报告:Java 8 八年不到,开发者都在用什么?
- 开发java项目,选择哪个版本的JDK比较合适?
- Java版本选型终极指南:8 vs 17 vs 21特性对决!大龄程序员踩坑总结
- POI Excel导入(poi excel导入附件)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)