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

简介: 最近做自动化需要从文件读取数据做参数化,网上发现一个不错的解决方案。 准备:新建一个excel文件,文件名为测试类名,sheet名为测试方法名         excel第一行为标题,从第二行开始为测试数据         build path:jxl.
最近做自动化需要从文件读取数据做参数化,网上发现一个不错的解决方案。
准备:新建一个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 }
View Code

查看作者原文请点击这里


img_42a4adae4716d0e15c3eeaabfd040044.png

注:转载需注明出处及作者。

流柯      

目录
相关文章
|
1月前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
121 5
|
16天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
60 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
1月前
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
|
29天前
|
Web App开发 Java
使用java操作浏览器的工具selenium-java和webdriver下载地址
【10月更文挑战第12天】Selenium-java依赖包用于自动化Web测试,版本为3.141.59。ChromeDriver和EdgeDriver分别用于控制Chrome和Edge浏览器,需确保版本与浏览器匹配。示例代码展示了如何使用Selenium-java模拟登录CSDN,包括设置驱动路径、添加Cookies和获取页面源码。
|
27天前
|
机器学习/深度学习 数据采集 人工智能
探索AI驱动的自动化测试新纪元###
本文旨在探讨人工智能如何革新软件测试领域,通过AI技术提升测试效率、精准度和覆盖范围。在智能算法的支持下,自动化测试不再局限于简单的脚本回放,而是能够模拟复杂场景、预测潜在缺陷,并实现自我学习与优化。我们正步入一个测试更加主动、灵活且高效的新时代,本文将深入剖析这一变革的核心驱动力及其对未来软件开发的影响。 ###
|
1月前
|
存储 测试技术 数据库
数据驱动测试和关键词驱动测试的区别
数据驱动测试 数据驱动测试或 DDT 也被称为参数化测试。
|
1月前
|
JavaScript 前端开发 测试技术
精通Selenium:从基础到高级的网页自动化测试策略
【10月更文挑战第6天】随着Web应用变得越来越复杂,手动进行功能和兼容性测试变得既耗时又容易出错。自动化测试因此成为了现代软件开发不可或缺的一部分。Selenium是一个强大的工具集,它支持多种编程语言(包括Python),允许开发者编写脚本来模拟用户与Web页面的交互。本文将带领读者从Selenium的基础知识出发,逐步深入到高级的应用场景,通过丰富的代码示例来展示如何高效地进行网页自动化测试。
316 5
|
1月前
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。
|
20天前
|
Web App开发 设计模式 JavaScript
自动化测试之美:如何利用Selenium实现Web应用的高效测试
【10月更文挑战第29天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将带你了解如何使用Selenium这一强大的自动化测试工具,提高Web应用测试的效率和准确性。通过实际案例,我们将探索Selenium的核心功能及其在现代软件开发中的应用,旨在帮助读者掌握自动化测试的精髓,从而提升软件测试工作的整体效能。
19 0
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
45 4