专栏首页流柯技术学院selenium webdriver读取excel进行数据驱动测试

selenium webdriver读取excel进行数据驱动测试

最近做自动化需要从文件读取数据做参数化,网上发现一个不错的解决方案。

准备:新建一个excel文件,文件名为测试类名,sheet名为测试方法名

        excel第一行为标题,从第二行开始为测试数据

        build path:jxl.jar

code:

  1 import java.io.FileInputStream;
  2 import java.io.InputStream;
  3 import java.util.HashMap;
  4 import java.util.Iterator;
  5 import java.util.Map;
  6 
  7 import org.testng.Assert;
  8 
  9 import jxl.*;
 10 
 11 /**
 12  * Excel放在Data文件夹下</p>
 13  * Excel命名方式:测试类名.xls</p>
 14  * Excel的sheet命名方式:测试方法名</p>
 15  * Excel第一行为Map键值</p>
 16  * 代码参考郑鸿志的Blog
 17  * {@link www.zhenghongzhi.cn/post/42.html}
 18  * @ClassName: ExcelDataProvider
 19  * @Description: TODO(读取Excel数据)
 20  */
 21 public class ExcelDataProvider implements Iterator<Object[]> {
 22 
 23     private Workbook book         = null;
 24     private Sheet    sheet        = null;
 25     private int      rowNum       = 0;
 26     private int      currentRowNo = 0;
 27     private int      columnNum    = 0;
 28     private String[] columnnName;
 29 
 30     public ExcelDataProvider(String classname, String methodname) {
 31 
 32         try {
 33 
 34             int dotNum = classname.indexOf(".");
 35 
 36             if (dotNum > 0) {
 37                 classname = classname.substring(classname.lastIndexOf(".") + 1,
 38                         classname.length());
 39             }
 40             //从/data文件夹下读取以类名命名的excel文件
 41             String path = "data/" + classname + ".xls";
 42             InputStream inputStream = new FileInputStream(path);
 43 
 44             book = Workbook.getWorkbook(inputStream);
 45             //取sheet
 46             sheet = book.getSheet(methodname);
 47             rowNum = sheet.getRows();
 48             Cell[] cell = sheet.getRow(0);
 49             columnNum = cell.length;
 50             columnnName = new String[cell.length];
 51 
 52             for (int i = 0; i < cell.length; i++) {
 53                 columnnName[i] = cell[i].getContents().toString();
 54             }
 55             this.currentRowNo++;
 56 
 57         } catch (Exception e) {
 58             e.printStackTrace();
 59             Assert.fail("unable to read Excel data");
 60         }
 61     }
 62 
 63     public boolean hasNext() {
 64 
 65         if (this.rowNum == 0 || this.currentRowNo >= this.rowNum) {
 66 
 67             try {
 68                 book.close();
 69             } catch (Exception e) {
 70                 e.printStackTrace();
 71             }
 72             return false;
 73         } else {
 74             // sheet下一行内容为空判定结束
 75             if ((sheet.getRow(currentRowNo))[0].getContents().equals(""))
 76                 return false;
 77             return true;
 78         }
 79     }
 80 
 81     public Object[] next() {
 82 
 83         Cell[] c = sheet.getRow(this.currentRowNo);
 84         Map<String, String> data = new HashMap<String, String>();
 85         // List<String> list = new ArrayList<String>();
 86 
 87         for (int i = 0; i < this.columnNum; i++) {
 88 
 89             String temp = "";
 90 
 91             try {
 92                 temp = c[i].getContents().toString();
 93             } catch (ArrayIndexOutOfBoundsException ex) {
 94                 temp = "";
 95             }
 96 
 97             // if(temp != null&& !temp.equals(""))
 98             // list.add(temp);
 99             data.put(this.columnnName[i], temp);
100         }
101         Object object[] = new Object[1];
102         object[0] = data;
103         this.currentRowNo++;
104         return object;
105     }
106 
107     public void remove() {
108         throw new UnsupportedOperationException("remove unsupported.");
109     }
110 }

查看作者原文请点击这里

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JMeter-java.lang.OutOfMemoryError: PermGen space错误

    PermGen space的全称是Permanent Generation space,是指内存的永久保存区域, 这块内存主要是被JVM存放Class和Meta...

    流柯
  • Visual GC提示"不受此JVM支持“解决方案(配置jstatd)

    Visual GC提示"不受此JVM支持“,如果想使用这个插件,就需要配置jstatd连接方式,下面来看jstatd的配置;

    流柯
  • jmeter使用Beanshell预处理器从指定列表中获取随机值

    流柯
  • AndroidStudio制作“我”的界面,设置,修改密码,设置密保和找回密码

    大家好,我是 Vic,今天给大家带来AndroidStudio制作“我”的界面,设置,修改密码,设置密保和找回密码的概述,希望你们喜欢

    达达前端
  • cas-client单点登录客户端拦截请求和忽略/排除不需要拦截的请求URL的问题

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    eguid
  • 微信公众号开发之如何实现消息交互

    总所周知Jfinal 开发中配置非常简单只要在web.xml中添加如下代码就可以将所有的请求交由Jfianl处理

    Javen
  • [CodeIgniter4]phpspreadsheet的使用

    https://phpspreadsheet.readthedocs.io/en/latest/

    landv
  • SpringBoot 应用整合JWT详解

    Spring Boot、OAuth 2.0、JWT、Spring Security、SSO、UAA

    JAVA葵花宝典
  • 采用一个自创的"验证框架"实现对数据实体的验证[扩展篇]

    关于“验证框架”,先后推出了《编程篇》、《设计篇》和《改进篇》,本不打算再写《XXX篇》的。但是今天收到两个园友的短消息,想了解一下如何定义自己的验证规则。这实...

    蒋金楠
  • 一群极其注重隐私的人士,开发了一款超级安全的Android系统

    根据国外媒体报道,Tor项目的开发人员已经设计出了一种安全的Android手机原型,这个基于Tor网络的Android手机使用了CopperheadOS、Orb...

    FB客服

扫码关注云+社区

领取腾讯云代金券