一、总体思路

以类为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<String, String>[][] 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<String> list = new ArrayList<String>();
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<String, String> 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<String, String> data) {
//按列名取值
String username = data.get("username");
String password = data.get("password");
loginPage.doLogin(username, password);
assertEquals(loginPage.getNoNameTip(), data.get("expectedNoNameTip"));
}

  

【框架】用excel管理测试用例需要的参数数据(二)的更多相关文章

  1. excel+requests管理测试用例接口自动化框架

    背景: 某项目有多个接口,之前使用的unittest框架来管理测试用例,将每个接口的用例封装成一个py文件,接口有数据或者字段变动后,需要去每个py文件中找出变动的接口测试用例,维护起来不方便,为了便 ...

  2. python_reques接口测试框架,Excel作为案例数据源

    一.框架菜单 1.1 common模块  1.2 其他 二.Excel接口测试案例编写 三.读取Excel测试封装(核心封装) excel_utils.py  读取Excel中的数据 import o ...

  3. Django框架 之 admin管理工具(组件使用)

    Django框架 之 admin管理工具(组件使用) 浏览目录 激活管理工具 使用管理工具 admin的定制 admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理 ...

  4. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据

    转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/index.html Zookeeper 分布式服务框架是 Apa ...

  5. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据(转载)

    本文转载自:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ Zookeeper 分布式服务框架是 Apache Had ...

  6. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据--转载

    原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ Zookeeper 分布式服务框架是 Apache Hadoop ...

  7. MUI框架-08-窗口管理-创建子页面

    MUI框架-08-窗口管理-创建子页面 之前写过这一篇,不知道为什么被删了,我就大概写了,抱歉 创建子页面是为了,页面切换时,外面的页面不动,让 MUI 写出来的页面更接近原生 app 官方文档:ht ...

  8. Spring 框架的事务管理

    1. Spring 框架的事务管理相关的类和API PlateformTransactionManager 接口: 平台事务管理器(真正管理事务的类); TransactionDefinition 接 ...

  9. 【Zookeeper】分布式服务框架 Zookeeper -- 管理分布式环境中的数据

    Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理 ...

随机推荐

  1. ZZNU 正约数之和

    #include<stdio.h> #include<string.h> #include<math.h> #include<time.h> #incl ...

  2. python web py安装与简单使用

    web.py是一个轻量级的python web框架,简单而且功能强大.相对flask和Django,web.py更适合初学者来学习和了解web开发的基础知识.   安装: pip install we ...

  3. vue模拟后端获取数据——json-server与express

    转载自: https://blog.csdn.net/weixin_39728230/article/details/80293892 https://blog.csdn.net/lxkll/arti ...

  4. 定时任务redis锁+自定义lambda优化提取冗余代码

    功能介绍: 我系统中需要跑三个定时任务,由于是多节点部署,为了防止多个节点的定时任务重复执行.所以在定时任务执行时加个锁,抢到锁的节点才能执行定时任务,没有抢到锁的节点就不执行.从而避免了定时任务重复 ...

  5. js插件---bootstrap-datepicker.js是什么

    js插件---bootstrap-datepicker.js是什么 一.总结 一句话总结:选择时间的插件 时间选择插件 1.datepicker如何默认选择当前天? 直接给datepicker对应的i ...

  6. (转)c#中const与readonly区别

    const 的概念就是一个包含不能修改的值的变量.常数表达式是在编译时可被完全计算的表达式.因此不能从一个变量中提取的值来初始化常量.如果 const int a = b+1;b是一个变量,显然不能再 ...

  7. linux: 安装jdk(java)

    作为Java开发人员,在Linux下安装一些开发工具是必备技能,本文以安装jdk为例,详细记录了每一步的操作命令,以供参考. 0.下载jdk8 登录网址:http://www.oracle.com/t ...

  8. JS过渡和变形效果演示(举例:鼠标滑过图片放大) --JS案例

    1.代码: <!DOCTYPE html><html><head> <meta charset="utf-8"> <title ...

  9. CF-721C DAG图拓扑排序+费用DP

    比赛的时候写了个记忆化搜索,超时了. 后来学习了一下,这种题目应该用拓扑排序+DP来做. dp[][]保存走到[第i个节点][走过j个点]时所用的最短时间. pre[][]用前驱节点求路径 然后遍历一 ...

  10. Spring Batch @EnableBatchIntegration 注解

    设置一个远程分块任务需要定义一系列的 beans: 一个连接工程来从消息中间件中获得连接,消息中间件包括有(JMS,AMQP 和其他) 一个 MessagingTemplate  来从主向从发送消息, ...