java结合testng,利用excel做数据源的数据驱动实例
数据驱动部分,是自动化测试常用部分,也是参数化设计的重要环节,前面分享了,mysql、yaml做数据源,那么再来分享下excel做数据驱动
思路:
先用POI读取excel。解析读取数据,返回list,返回Object[][]即可
工具类文件:
读取excel,返回map对象list集合
ReadExcelUtil.java
- import org.apache.poi.hssf.usermodel.HSSFWorkbook;
- import org.apache.poi.ss.usermodel.*;
- import org.apache.poi.xssf.usermodel.XSSFWorkbook;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.ArrayList;
- import java.util.LinkedHashMap;
- import java.util.List;
- import java.util.Map;
- /**
- * 读取excel,返回map对象list集合
- *
- * @author longrong.lang
- */
- public class ReadExcelUtil {
- /**
- * 读取excel操作
- *
- * @param filePath
- * @return:读取excel,返回map对象集合
- */
- public static List<Map<String, String>> getExcuteList(String filePath) {
- Workbook wb = null;
- Sheet sheet = null;
- Row row = null;
- List<Map<String, String>> list = null;
- String cellData = null;
- String columns[] = {"name", "method", "value","备注"};
- wb = readExcel(filePath);
- if (wb != null) {
- //用来存放表中数据
- list = new ArrayList<Map<String, String>>();
- //获取第一个sheet
- sheet = wb.getSheetAt();
- //获取最大行数
- int rownum = sheet.getPhysicalNumberOfRows();
- //获取第一行
- row = sheet.getRow();
- //获取最大列数
- int colnum = row.getPhysicalNumberOfCells();
- for (int i = ; i < rownum; i++) {
- Map<String, String> map = new LinkedHashMap<String, String>();
- row = sheet.getRow(i);
- if (row != null) {
- for (int j = ; j < colnum; j++) {
- cellData = (String) getCellFormatValue(row.getCell(j));
- map.put(columns[j], cellData);
- }
- } else {
- break;
- }
- list.add(map);
- }
- }
- return list;
- }
- /**
- * 判断excel文件的类型
- *
- * @param filePath
- * @return
- */
- public static Workbook readExcel(String filePath) {
- Workbook wb = null;
- if (filePath == null) {
- return null;
- }
- String extString = filePath.substring(filePath.lastIndexOf("."));
- InputStream is = null;
- try {
- is = new FileInputStream(filePath);
- if (".xls".equals(extString)) {
- return wb = new HSSFWorkbook(is);
- } else if (".xlsx".equals(extString)) {
- return wb = new XSSFWorkbook(is);
- } else {
- return wb = null;
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return wb;
- }
- public static Object getCellFormatValue(Cell cell) {
- Object cellValue = null;
- if (cell != null) {
- //判断cell类型
- switch (cell.getCellType()) {
- case Cell.CELL_TYPE_NUMERIC: {
- cellValue = String.valueOf(cell.getNumericCellValue());
- break;
- }
- case Cell.CELL_TYPE_FORMULA: {
- //判断cell是否为日期格式
- if (DateUtil.isCellDateFormatted(cell)) {
- //转换为日期格式YYYY-mm-dd
- cellValue = cell.getDateCellValue();
- } else {
- //数字
- cellValue = String.valueOf(cell.getNumericCellValue());
- }
- break;
- }
- case Cell.CELL_TYPE_STRING: {
- cellValue = cell.getRichStringCellValue().getString();
- break;
- }
- default:
- cellValue = "";
- }
- } else {
- cellValue = "";
- }
- return cellValue;
- }
- }
然后把解析出来的list转换成Object[][]类型的数据,且结合在@DataProvider中。
- import org.testng.annotations.DataProvider;
- import java.util.List;
- import java.util.Map;
- public class ExcelDataHeleper {
- @DataProvider
- public Object[][] dataMethod(){
- List<Map<String, String>> result = ReadExcelUtil.getExcuteList("D:\\data.xls");
- Object[][] files = new Object[result.size()][];
- for(int i=; i<result.size(); i++){
- files[i] = new Object[]{result.get(i)};
- }
- return files;
- }
- }
再通过测试文件来测试一下:
- import org.testng.annotations.Test;
- import java.util.Map;
- public class TestDataUtil extends ExcelDataHeleper {
- @Test(dataProvider="dataMethod")
- public void testmethod1(Map<?, ?> param){
- System.out.println(param.get("name")+"\t"+param.get("method")+"\t"+param.get("value"));
- }
- }
运行结果:
- [TestNG] Running:
- C:\Users\Administrator\.IntelliJIdea2018.2\system\temp-testng-customsuite.xml
- 输入框 id kw
- 百度一下 id su
- 退出 name tj_logout
- 2018年11月15日14点41分 2018/11/15 14:42:31 脚本
- 退出 name tj_logout
- ===============================================
- Default Suite
- Total tests run: 5, Failures: 0, Skips: 0
- ===============================================
- Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
- Process finished with exit code 0
java结合testng,利用excel做数据源的数据驱动实例的更多相关文章
- java结合testng,利用yaml做数据源的数据驱动实例
testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本.在这以yaml为例: 备注:@DataProvider的返回 ...
- java结合testng,利用txt做数据源的数据驱动实例
import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import java.io.Buffe ...
- java分享第十八天-02( java结合testng,利用XML做数据源的数据驱动)
testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本.在这以XML为例:备注:@DataProvider的返回值类 ...
- java结合testng,利用XML做数据源的数据驱动示例
testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本.在这以XML为例: 备注:@DataProvider的返回值 ...
- java结合testng,利用mysql数据库做数据源的数据驱动实例
上一篇我们介绍用如何用yaml结合testng做数据驱动,就又想来个数据库的参数化 备注:@DataProvider的返回值类型只能是Object[][]与Iterator<Object> ...
- 利用Excel做一些简单的数据分析
先来几个原始数据的截图,如下所示: 示例图就举一个吧,因为这些数据量还挺大的,大概的总结了一下,这下列这几栏中不合规范的数据占比很大: (1)民族(经分析,在此表中所涉及到的民族分别为:汉族,满族,蒙 ...
- Java基础-继承 利用接口做参数,写个计算器,能完成+-*/运算
38.利用接口做参数,写个计算器,能完成+-*/运算 (1)定义一个接口Compute含有一个方法int computer(int n,int m); (2)设计四个类分别实现此接口,完成+-*/运算 ...
- java 接口测试,使用excel做数据驱动(二)
承接上篇. 改变我们的测试驱动方式,灵活设置测试用例. 数据驱动测试 数据驱动测试的核心是: 测试数据与测试脚本分离,实现测试脚本参数化, 提高测试脚本的可重用性.在自动化功能测试中如果灵活使用数据源 ...
- 无插件,无com组件,利用EXCEL、WORD模板做数据导出(一)
本次随笔主要讲述着工作中是如何解决数据导出的,对于数据导出到excel在日常工作中大家还是比较常用的,那导出到word呢,改如何处理呢,简单的页面导出问题应该不大,但是如果是标准的公文导出呢,要保证其 ...
随机推荐
- 细说java系列之反射
什么是反射 反射机制允许在Java代码中获取被JVM加载的类信息,如:成员变量,方法,构造函数等. 在Java包java.lang.reflect下提供了获取类和对象反射信息的相关工具类和接口,如:F ...
- 'DataVisualization' does not exist in the namespace 'System.Web.UI'一例解决办法
之前项目是vs2010 aspx项目,用vs2017打开后,非运行状态下有一行错误:CS0234 C# The type or namespace name 'DataVisualization' d ...
- SpringBoot入门笔记(二)、使用fastjson
1.添加fastjson配置 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastj ...
- mssql 创建存储过程简单实例
CREATE procedure [dbo].[cp_User_Increment] @channelId int, @currentPage int, @pageSize int, @userId ...
- dbms_redefinition在线重定义表结构
dbms_redefinition在线重定义表结构 (2013-08-29 22:52:58) 转载▼ 标签: dbms_redefinition 非分区表转换成分区表 王显伟 在线重定义表结构 在线 ...
- ue4配置分析记录
相关代码 UObject::CallFunctionByNameWithArguments ExecuteConsoleCommand << 配置.ini[???.类名] //要先 ...
- Linux命令之-ps & kill
1.ps:将某个进程显示出来: 常用命令 :ps -ef |grep Java 1)如下为加不加-e参数的区别 2.一般我们查找某个进程的目的就是把它杀掉,使用kill 命令. kill -9 564 ...
- 如何解压RPM包
有时我们需要RPM包中的某个文件,如何解压RPM包呢? RPM包括是使用cpio格式打包的,因此可以先转成cpio然后解压,如下所示: rpm2cpio xxx.rpm | cpio -div 解压了 ...
- vue工具知识
1.访问数据自动格式化 Google jsonview插件(已用) 2.字体图标库. https://icomoon.io/ 上传svg可生成字体图标
- 51nod 1294 修改数组
若a[i]-i(i从1开始)的值小于0,那么a[i]必须改变 若a[i]-i的值大于等于0,将a[i]-i存入新的数组中,求出新数组的最长非严格上升子序列,所得即最多的,不用改变的数. #includ ...