自己写了一个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的数据相关推荐

  1. 怎么用python处理excel文件-Python自动化如何处理excel文件数据

    原标题:Python自动化如何处理excel文件数据 在python自动化中,经常会遇到对数据文件的操作,比如添加多名员工,但是直接将员工数据写在python文件中,不但工作量大,要是以后再次遇到类似 ...

  2. 用python读取excel文件观看节目的总时长_python读取excel所有数据(cmd界面)

    python读取excel所有数据(cmd界面) cmd界面显示excel数据 代码 import xlrd import os from prettytable import PrettyTable ...

  3. python打开excel窗口_简单介绍python在CMD界面读取excel所有数据

    这篇文章主要介绍了python在CMD界面读取excel所有数据,帮助大家更好的利用python办公,感兴趣的朋友可以了解下 代码 import xlrd import os from prettyt ...

  4. python美化excel_简单介绍python在CMD界面读取excel所有数据

    这篇文章主要介绍了python在CMD界面读取excel所有数据,帮助大家更好的利用python办公,感兴趣的朋友可以了解下 代码 import xlrd import os from prettyt ...

  5. python读取excel表格数据

    python操作excel主要用到xlrd和xlwt两个库,xlrd读取表格数据,支持xlsx和xls格式的excel表格:xlwt写入excel表格数据 一.python读取excel表格数据 1. ...

  6. python 如何读取excel表格数据

    文章目录 前言 python 读取excel 表格 前言 如何用python读取excel表格数据呢 ? python 读取excel 表格 首先需要配置好环境,需要下载 xlrd 包: # 如果不指 ...

  7. 读取EXCEL表格数据到MATLAB成为矩阵

    读取EXCEL表格数据到MATLAB成为矩阵 data=xlsread('filename','sheet','range') 其中,'filename'为文件路径及文件名,'sheet'为数据表名称 ...

  8. python怎么从excel获取数据_python如何读取excel表数据

    python读取excel表数据的方法:首先安装Excel读取数据的库xlrd:然后获取Excel文件的位置并且读取进来:接着读取指定的行和列的内容,并将内容存储在列表中:最后运行程序即可. pyth ...

  9. Qt之如何读取Excel表格数据

    Qt之如何读取Excel表格数据 概述: 代码示例: .pro: 需要包含的头文件: readExcelData.h: readExcelData.cpp: over: 概述: 大家好我是背锅侠&qu ...

  10. Matlab中读取excel表格数据

    一:Matlab中读取excel表格数据步骤讲解: 第二步:  第三步:  第四步:  第五步:  第六步    第七步:  输入之后按回车键,就会出现相应的波形: 效果图:

最新文章

  1. 作品[RFileRead/WriteStream 练习] for s60 fp2
  2. 抽屉开关_技术天地|380伏抽屉开关指示灯更换流程
  3. poj 1006(中国剩余定理+模板题)
  4. Apache Lucene基础教程
  5. 【clickhouse】clickhouse : Suspiciously many broken parts to remove.: Cannot attach table default
  6. vector容器——构造函数
  7. 远程连接redis,并设置字符集
  8. 《微信公众平台入门到精通》Vol.1
  9. ASEMI快恢复二极管RL257参数,RL257图片,RL257应用
  10. docker 仓库镜像 替换_Docker如何制作自己镜像并上传dockerhub
  11. 完整性校验用到常见的算法_文件完整性校验
  12. 计算机会计学试题,会计电算化模拟题及答案
  13. docker onlyoffice7.1.1 word excel ppt在线编辑、在线预览_添加中文字体和中文字号_02
  14. 上海相会 | 冒志鸿与丁磊畅谈ArcBlock未来宏图
  15. 重新整理秋招准备的思路-9.20
  16. 【摘记】心:稻盛和夫的一生嘱托
  17. 【天雪楼】葫芦侠主题美化-幻塔
  18. VR画面渲染性能是这样提升的
  19. SharePoint 2013 开发——开发并部署第一个APP
  20. SQL Server常见问题总结

热门文章

  1. docker安装最新版Jenkins:拉取镜像/创建容器
  2. java客户端操作zookeeper:对某个节点进行持续监听代码示例
  3. Python Django 请求重定向的三种方式
  4. Python Django 数据缓存存储位置类
  5. Python Django 自定义Manager实现批量删除(逻辑删除)
  6. Adapter适配器设计模式
  7. Java线程的等待与唤醒代码示例
  8. shiro实现url级别的权限控制(用户登录)配置文件分析
  9. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三)
  10. QTcpServer / QTcpSocket 简单示例