testNg自动化,读取excel的数据
自己写了一个testng执行excel用例的小程序,主要是运行.xlsx的,需要支持xls可以自己扩展,分享一下。下载地址:http://yun.baidu.com/share/link?shareid=3811093173&uk=925574576&third=0
需要引用的jar包有(demo里面也有这些jar包):
1、读取excel
excel的数据放入List<Map<String, String>>中。这里,不包括excel第一条数据,因为第一条数据要作为map的key值。
excel格式:
package com.milan.utils;import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook;public class ReadExcel {public static List<Map<String, String>> readXlsx(String fileName) {XSSFWorkbook xssfWorkbook=null;try {xssfWorkbook = new XSSFWorkbook(fileName);} catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();}// 循环工作表SheetXSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);List<Map<String, String>> list = new ArrayList<Map<String, String>>();// 循环行RowXSSFRow rowTitleRow =xssfSheet.getRow(0);for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {XSSFRow xssfRow = xssfSheet.getRow(rowNum);if (xssfRow == null) {continue;}Map<String, String> map = new HashMap<String, String>();// 循环列Cellfor (int cellNum = 0; cellNum <rowTitleRow.getLastCellNum(); cellNum++) {XSSFCell xssfCell = xssfRow.getCell(cellNum);XSSFCell xssfCellTitleCell = rowTitleRow.getCell(cellNum);map.put(getValue(xssfCellTitleCell), getValue(xssfCell));}list.add(map);}return list;}@SuppressWarnings("static-access")private static String getValue(XSSFCell xssfCell) {if (xssfCell ==null){return ""; }if (xssfCell.getCellType() == xssfCell.CELL_TYPE_BOOLEAN) {return String.valueOf(xssfCell.getBooleanCellValue());} else if (xssfCell.getCellType() == xssfCell.CELL_TYPE_NUMERIC) {return String.valueOf(xssfCell.getNumericCellValue());} else {return String.valueOf(xssfCell.getStringCellValue());}} }
2、解析excel的数据
excel中,这个字段的值为y表示需要执行测试用例,如果为其他的,则表示不执行。
字段中{$d}开头的表示用例说明。{$p}开头的,表示用例需要的预置参数。比如QQ好友发送消息,但是发送消息需要先登录,所以这里可以放登录的用户名和密码。
package com.milan.utils;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class CaseHelper {//根据excel的map 转换为数组 第一个为 入参 map 第二个为用例说明,第三个参数为执行用例的预置条件public static Object[] getObjArrByMap(Map<String,String> caseExcelMap){Map<String,String> caseParam = new HashMap<String,String>();Map<String,String> caseDesc = new HashMap<String,String>();Map<String,String> casePreset =new HashMap<String,String>();CaseInfo ci = new CaseInfo();for (String key : caseExcelMap.keySet()) {if (key.indexOf("{$d}")== 0){caseDesc.put(key.replace("{$d}", ""), caseExcelMap.get(key));}else if(key.indexOf("{$p}") == 0){casePreset.put(key.replace("{$p}", ""), caseExcelMap.get(key));}else {String strValue = caseExcelMap.get(key);if (!strValue.equals("")){caseParam.put(key, strValue);}} }ci.setCaseDesc(caseDesc);ci.setCaseParam(caseParam);ci.setCasePreset(casePreset);return new Object[]{ci};}///根据excel获取的list转换为 Object[][]public static Object[][] getObjArrByList(List<Map<String,String>> caseExcelList){List<Map<String,String>> caseExcuteList = getExcuteList(caseExcelList);Object[][] objArray = new Object[caseExcuteList.size()][];for(int i = 0;i<caseExcuteList.size();i++){objArray[i]=getObjArrByMap(caseExcuteList.get(i));}return objArray;}///赛选出需要执行的用例private static List<Map<String,String>> getExcuteList(List<Map<String,String>> caseExcelList){List<Map<String,String>> list = new ArrayList<Map<String,String>>();for( Map<String,String> m : caseExcelList){String str = m.get("{$d}isexcute").trim().toLowerCase();if (str.equals("y")){ list.add(m);}}return list;}}
3、用例类
用例类有3个属性,分别是参数,用例说明,预置参数。
package com.milan.utils;import java.util.Map;public class CaseInfo {///{$d}isexcute 为y的时候表示需要执行//用例参数 在excel中知己以字段名开头private Map<String,String> caseParam;//用例说明 在excel中以{$d}开头private Map<String,String> caseDesc;//用例预置条件 在excel中以{$p}开头private Map<String,String> casePreset;public Map<String, String> getCaseParam() {return caseParam;}public void setCaseParam(Map<String, String> caseParam) {this.caseParam = caseParam;}public Map<String, String> getCaseDesc() {return caseDesc;}public void setCaseDesc(Map<String, String> caseDesc) {this.caseDesc = caseDesc;}public Map<String, String> getCasePreset() {return casePreset;}public void setCasePreset(Map<String, String> casePreset) {this.casePreset = casePreset;}}
4、运行
package com.milan.test;import java.io.IOException; import java.util.List; import java.util.Map;import org.testng.annotations.DataProvider; import org.testng.annotations.Test;import com.milan.utils.CaseHelper; import com.milan.utils.CaseInfo; import com.milan.utils.ReadExcel;public class MyTest {protected String caseExcelPath =System.getProperty("user.dir")+"\\excel\\temp.xlsx";@DataProvider(name = "dataInfo")protected Object[][] dataInfo1() throws IOException {Object[][] myObj = null;List<Map<String, String>> list = ReadExcel.readXlsx(caseExcelPath);myObj = CaseHelper.getObjArrByList(list);return myObj;}@Test(dataProvider="dataInfo")public void testByExcel_Body(CaseInfo c) throws IOException{///获取用例说明 System.out.println(c.getCaseDesc());///获取用例需要的参数 System.out.println(c.getCaseParam());//获取执行用例需要的前置条件 System.out.println(c.getCasePreset());}}
5、输出结果:
{caseExpect=1, isexcute=y, caseDesc=发送消息} {sendname=发送者名称, send=发送消息} {login=登录字符串}
读取到excel的值之后,就可以自己加断言,自己去请求数据调方法等等。
testng断言失败,继续执行 http://blog.csdn.net/m1011566442/article/details/52084896
testng代码执行 https://www.cnblogs.com/digod/p/6035177.html
public class Test2 {public static void main(String[] args) {//DefaultTest defaultTest = new DefaultTest();TestNG testNG = new TestNG();testNG.setTestClasses(new Class[]{DefaultTest.class});testNG.run();} }
View Code
转载于:https://www.cnblogs.com/milanmi/p/4636512.html
testNg自动化,读取excel的数据相关推荐
- 怎么用python处理excel文件-Python自动化如何处理excel文件数据
原标题:Python自动化如何处理excel文件数据 在python自动化中,经常会遇到对数据文件的操作,比如添加多名员工,但是直接将员工数据写在python文件中,不但工作量大,要是以后再次遇到类似 ...
- 用python读取excel文件观看节目的总时长_python读取excel所有数据(cmd界面)
python读取excel所有数据(cmd界面) cmd界面显示excel数据 代码 import xlrd import os from prettytable import PrettyTable ...
- python打开excel窗口_简单介绍python在CMD界面读取excel所有数据
这篇文章主要介绍了python在CMD界面读取excel所有数据,帮助大家更好的利用python办公,感兴趣的朋友可以了解下 代码 import xlrd import os from prettyt ...
- python美化excel_简单介绍python在CMD界面读取excel所有数据
这篇文章主要介绍了python在CMD界面读取excel所有数据,帮助大家更好的利用python办公,感兴趣的朋友可以了解下 代码 import xlrd import os from prettyt ...
- python读取excel表格数据
python操作excel主要用到xlrd和xlwt两个库,xlrd读取表格数据,支持xlsx和xls格式的excel表格:xlwt写入excel表格数据 一.python读取excel表格数据 1. ...
- python 如何读取excel表格数据
文章目录 前言 python 读取excel 表格 前言 如何用python读取excel表格数据呢 ? python 读取excel 表格 首先需要配置好环境,需要下载 xlrd 包: # 如果不指 ...
- 读取EXCEL表格数据到MATLAB成为矩阵
读取EXCEL表格数据到MATLAB成为矩阵 data=xlsread('filename','sheet','range') 其中,'filename'为文件路径及文件名,'sheet'为数据表名称 ...
- python怎么从excel获取数据_python如何读取excel表数据
python读取excel表数据的方法:首先安装Excel读取数据的库xlrd:然后获取Excel文件的位置并且读取进来:接着读取指定的行和列的内容,并将内容存储在列表中:最后运行程序即可. pyth ...
- Qt之如何读取Excel表格数据
Qt之如何读取Excel表格数据 概述: 代码示例: .pro: 需要包含的头文件: readExcelData.h: readExcelData.cpp: over: 概述: 大家好我是背锅侠&qu ...
- Matlab中读取excel表格数据
一:Matlab中读取excel表格数据步骤讲解: 第二步: 第三步: 第四步: 第五步: 第六步 第七步: 输入之后按回车键,就会出现相应的波形: 效果图:
最新文章
- 作品[RFileRead/WriteStream 练习] for s60 fp2
- 抽屉开关_技术天地|380伏抽屉开关指示灯更换流程
- poj 1006(中国剩余定理+模板题)
- Apache Lucene基础教程
- 【clickhouse】clickhouse : Suspiciously many broken parts to remove.: Cannot attach table default
- vector容器——构造函数
- 远程连接redis,并设置字符集
- 《微信公众平台入门到精通》Vol.1
- ASEMI快恢复二极管RL257参数,RL257图片,RL257应用
- docker 仓库镜像 替换_Docker如何制作自己镜像并上传dockerhub
- 完整性校验用到常见的算法_文件完整性校验
- 计算机会计学试题,会计电算化模拟题及答案
- docker onlyoffice7.1.1 word excel ppt在线编辑、在线预览_添加中文字体和中文字号_02
- 上海相会 | 冒志鸿与丁磊畅谈ArcBlock未来宏图
- 重新整理秋招准备的思路-9.20
- 【摘记】心:稻盛和夫的一生嘱托
- 【天雪楼】葫芦侠主题美化-幻塔
- VR画面渲染性能是这样提升的
- SharePoint 2013 开发——开发并部署第一个APP
- SQL Server常见问题总结
热门文章
- docker安装最新版Jenkins:拉取镜像/创建容器
- java客户端操作zookeeper:对某个节点进行持续监听代码示例
- Python Django 请求重定向的三种方式
- Python Django 数据缓存存储位置类
- Python Django 自定义Manager实现批量删除(逻辑删除)
- Adapter适配器设计模式
- Java线程的等待与唤醒代码示例
- shiro实现url级别的权限控制(用户登录)配置文件分析
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三)
- QTcpServer / QTcpSocket 简单示例