一、总体思路

以类为excel名,测试方法名为sheet名,建立excel文件。用jxl包里的方法去读取excel文件里的内容,然后用testng里的dataprovider,将数据传递给测试用例

二、代码实现

  1. package com.jxl.excel;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.util.ArrayList;
  6. import java.util.HashMap;
  7. import java.util.List;
  8.  
  9. import jxl.Sheet;
  10. import jxl.Workbook;
  11. import jxl.read.biff.BiffException;
  12.  
  13. public class ExcelData {
  14. String classname;
  15. String casename;
  16.  
  17. /**
  18. * @param classname
  19. * excel文件名
  20. * @param casename
  21. * sheet名
  22. */
  23. public ExcelData(String classname, String casename) {
  24. this.classname = classname;
  25. this.casename = casename;
  26. }
  27.  
  28. /**
  29. * 获取excel文件的路径
  30. *
  31. * @return
  32. */
  33. public String getPath() {
  34. String path = "./testdata/" + classname + ".xls";
  35. return path;
  36. }
  37.  
  38. /**
  39. * 获取excel对应sheet中的数据
  40. *
  41. * @return
  42. * @throws IOException
  43. */
  44. public Object[][] getExcelData() {
  45. File file = new File(getPath());
  46. Workbook book = null;
  47. Sheet sheet = null;
  48. try {
  49. book = Workbook.getWorkbook(file);
  50. sheet = book.getSheet(casename);
  51. } catch (Exception e) {
  52. System.out.println(classname + ".xls文件读取失败");
  53. }
  54. int rows = sheet.getRows();
  55. int cols = sheet.getColumns();
  56. // 如果行数少于2,则没有必要再继续运行下去了,不会返回数据,直接退出程序
  57. if (rows <= 1) {
  58. System.out.println(classname + ".xls的" + casename + " sheet没有数据");
  59. System.exit(0);
  60. }
  61. // 为了返回值是Object[][]类型,定义一个多行单列的二维数组
  62. HashMap<String, String>[][] arrMap = new HashMap[rows - 1][1];
  63. // 对数组中的所有元素初始化
  64. for (int i = 0; i < rows - 1; i++) {
  65. arrMap[i][0] = new HashMap<>();
  66. }
  67. // 定义一个list,存储第一行的标题,作为key用
  68. // 需要注意的是,getCell(col,row),第一个纵坐标,第二个位横坐标
  69. List<String> list = new ArrayList<String>();
  70. for (int c = 0; c < cols; c++) {
  71. list.add(sheet.getCell(c, 0).getContents());
  72. }
  73. // 以行为单位,将一行的数据,以键值对的形式,存进一个哈希表里
  74. for (int r = 1; r < rows; r++) {
  75. for (int c = 0; c < cols; c++) {
  76. arrMap[r - 1][0].put(list.get(c), sheet.getCell(c, r).getContents());
  77. }
  78. }
  79. book.close();
  80. return arrMap;
  81. }
  82. }

 

testng的测试用例里,这样传递数据 

  1. @DataProvider(name = "noNameTip")
  2. public Object[][] noNameData() {
  3. //excel的文件名和类名一致,为LoginTest,测试方法和sheet名一致,为testNoNameLogin
  4. ExcelData e = new ExcelData("LoginTest", "testNoNameLogin");
  5. return e.getExcelData();
  6. }
  7.  
  8. /**
  9. * 测试登录没有输入用户名
  10. */
  11. @Test(dataProvider = "noNameTip")
  12. public void testNoNameLogin(HashMap<String, String> data) {
  13. //按列名取值
  14. String username = data.get("username");
  15. String password = data.get("password");
  16. loginPage.doLogin(username, password);
  17. assertEquals(loginPage.getNoNameTip(), data.get("expectedNoNameTip"));
  18. }

testng中当有多个方法,需要传递数据的时候,将method传递给dataprovider

  1. @DataProvider(name = "loginData")
  2. public Object[][] testData(Method method) {
  3. ExcelData e = new ExcelData("LoginTest", method.getName());
  4. return e.getExcelData();
  5. }
  6.  
  7. /**
  8. * 测试登录没有输入用户名
  9. */
  10. @Test(dataProvider = "loginData")
  11. public void testNoNameLogin(HashMap<String, String> data) {
  12. //按列名取值
  13. String username = data.get("username");
  14. String password = data.get("password");
  15. loginPage.doLogin(username, password);
  16. assertEquals(loginPage.getNoNameTip(), data.get("expectedNoNameTip"));
  17. }

  

【框架】用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. MVC路由 路由的三种扩展 替换MVC内置的Handler

    Global.asax 是 程序入口文件 路由配置   为什么localhost:8088/Home/Index/1 能返问到我们写的 会去掉前缀跟端口号  变成Home/Index/1 用这个跟路由 ...

  2. Springboot:没有src/main/resources目录(引入图片时(或静态资源时)发现没有该目录)

    今天想在Springboot项目想引进静态资源时,发现自己的项目里没有教程里面的 src/main/resources这个目录,目录如下 我的项目目录结构是这样的,但是还不是很清楚下面的那个src目录 ...

  3. jq ‘’操作‘’伪元素

    1. 伪元素非 dom 元素,jq无法操作,但可以间接影响. 2. 操作方式 2.1 修改类 <!DOCTYPE html> <html lang="en"> ...

  4. cocos2dx lua 绑定之一:自动绑定自定义类中的函数

    cococs2dx 3.13.1 + vs2013 + win10 1.首先定义C++类Student 在cocos2d-x\cocos文件夹下新建一个user_define的文件夹放置两个文件. 注 ...

  5. 安卓自动化测试——rf

    ${a} Get Text //android.widget.TextView[contains(@text,"历史位置")]/../../../android.widget.Li ...

  6. 关于怎么在CSDN中修改代码行中字体的颜色

    先吐槽一下自己的心路历程吧,自己现在也是在CSDN中发表了自己好几篇的原创博文,但每一篇博文自己总感觉怪怪的,就是说不出自己哪里有毛病呢,知道今天恍然大悟,原来自己的代码行真心丑的要死,没有呈现出在编 ...

  7. python中的面向对象学习以及类的继承和继承顺序

    继承 首先编写一串关于类的代码行: __author__ = "Yanfeixu" # class People: 经典类不用加(object) class People(obje ...

  8. SSD: ReLU6

    1.在src\caffe\proto\caffe.proto中搜索message LayerParameter,在optional ReLUParameter relu_param = 123之后添加 ...

  9. HTML 弹出遮罩层二(遮罩层和内容标签分开)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 5月13 jquery的一些应用

    首先对于JavaScript的一些复习:操作内容,操作属性,操作样式 <title>无标题文档</title> <style> #aa { width:200px; ...