51Testing软件测试论坛

标题: selenium - 读取excel进行数据驱动测试 [打印本页]

作者: irabbit    时间: 2010-12-7 07:36
标题: selenium - 读取excel进行数据驱动测试
selenium - 读取excel进行数据驱动测试

已经花了好久了,但是还是找不到一种比较理想的模式来进入excel的数据驱动测试,有没有做过类似项目的大牛指导一下。有比较具体的教程更好了。

万分感谢
作者: irabbit    时间: 2010-12-7 09:28
需要一个test case建立一个sheet表吗?
还是什么样的结构比较简单点。
作者: heavy200t    时间: 2010-12-7 09:39
请问你是在什么框架下运行的Selenium?
我们是JUnit+Selenium,数据没有放在Excel,是放在XML。
作者: irabbit    时间: 2010-12-8 01:14
回复 3# heavy200t

恩,我用的是junit+selenium
请问为什么不放在excel里面呢?不是更方便修改data吗?

万分感谢?
作者: wugecat    时间: 2010-12-8 14:50
按你实际项目来定,一个sheet或者一个文件都可以,只要方便重用就好。在编辑和查看上可以用VBA写一些宏配合着来做。因为test case之间可能有业务数据关联。总之一句话随便做吧~
作者: heavy200t    时间: 2010-12-9 18:36
没什么特殊原因,XML方便嘛,我是指XML读写实现起来方便。
作者: irabbit    时间: 2010-12-10 03:38
回复 5# wugecat

heavy200t网友说xml方便,请问就您的实际经验来讲,那个会比较方便呢?我觉得是excel啊。
作者: wugecat    时间: 2010-12-14 14:06
本帖最后由 wugecat 于 2010-12-14 14:10 编辑

我觉得都不方便,我用数据库,再找人开发个系统维护数据,运行脚本时,框架直接读数据库就好了,几个人一起做的时候还能公用数据,多方便。
作者: heavy200t    时间: 2010-12-14 17:13
回复 7# irabbit

可能有点误会,我说的是程序读写用XML方便些。编程读写Excel我用得不多,感觉有点麻烦。
我不反对用Excel,各个项目应用的场景不同吧。
没别的意思,我刚开始用Selenium.既然LZ 提到了,我也很想交流交流。

这是我在最近一个项目中的读取XML的代码。
  1.                 try{
  2.                         File f = new File("TestPlan.xml");
  3.                         SAXReader reader = new SAXReader();
  4.                         Document doc = reader.read(f);
  5.                         Element root = doc.getRootElement();                       
  6.                        
  7.                         Element e = null;
  8.                         e = root.element("TestServer");
  9.                         hTestServer.serverName = e.elementTextTrim("ServerName");
  10.                         hTestServer.port = Integer.parseInt(e.elementTextTrim("Port"));
  11.                         hdefaultTimeOut = e.elementTextTrim("DefaultTimeOut");
  12.                                                
  13.                         for (Iterator i = root.elementIterator("Site"); i.hasNext();){
  14.                                 e = (Element)i.next();
  15.                                 hSiteList.add(new TestSite(e.elementTextTrim("baseURL"), e.elementTextTrim("initPath"), Boolean.parseBoolean(e.elementTextTrim("Enable"))));
  16.                         }
  17.                        
  18.                        
  19.                         for (Iterator i = root.elementIterator("TestCase"); i.hasNext();){
  20.                                 e = (Element)i.next();
  21.                                 hTestCaseList.add(new Case(e.elementTextTrim("Name"), Boolean.parseBoolean(e.elementTextTrim("Enable"))));
  22.                         }                       
  23.                 }
  24.                 catch(Exception e)
  25.                 {
  26.                         e.printStackTrace();
  27.                 }       
复制代码

作者: robin.von    时间: 2010-12-23 14:47
偶在项目中用CSV文件做数据驱动的,感觉比楼主的EXCEL更加方便。

偶是TestNG+Selenium,然后自己写了个CSV文件的读写方法,数据驱动的数据全部从CSV文件中读取,如果楼主有兴趣的话可以和我联系
作者: irabbit    时间: 2011-2-12 03:35
偶在项目中用CSV文件做数据驱动的,感觉比楼主的EXCEL更加方便。

偶是TestNG+Selenium,然后自己写了个C ...
robin.von 发表于 2010-12-23 14:47



    请问如何与你联系呀?
作者: robin.von    时间: 2011-2-14 09:45
本帖最后由 robin.von 于 2011-2-14 09:46 编辑

回复 11# irabbit

TestNG自身支持数据驱动的,我用了OpenCSV这个开源控件,加了一个读取CSV转成TestNG支持的格式的方法,这个方法的源代码如下:

  1. public static Object[][] getFromCSV(String filename) {
  2.   if (!(new File(filename)).exists()){
  3.    return null;
  4.   }
  5.   Object[][] content;
  6.   CSVReader reader;
  7.   try {
  8.    reader = new CSVReader(new FileReader(filename));
  9.    Vector<String[]> vec = new Vector<String[]>();
  10.    String[] nextLine;
  11.    reader.readNext(); //skip title
  12.    while ((nextLine = reader.readNext()) != null) {   
  13.     vec.add(nextLine);   
  14.    }
  15.    content = new Object[vec.size()][];
  16.    for (int i = 0; i < vec.size(); i++){
  17.     content[i] = vec.get(i);
  18.    }
  19.    return content;
  20.   } catch (Exception e) {
  21.    System.out.println("Read CSV File:" + filename + "failed.");
  22.    e.printStackTrace();   
  23.   }
  24.   return null;
  25. }
复制代码


要用到数据驱动的地方,用下面的方法就可以了:

  1. @DataProvider(name="myInput")
  2. public Object[][] inputData(){
  3.   return CSVUtil.getFromCSV(StaticConstant.getProperty("inputfile"));
  4. }
复制代码


这样处理以后,所有的输入数据就放在CSV文件中,一行代表一个输入就可以了。
作者: panluhai    时间: 2011-4-18 14:11
我们的鹰眼项目自动化框架就是利用Excel参数化+Selenium
作者: irabbit    时间: 2011-7-26 04:42
我们的鹰眼项目自动化框架就是利用Excel参数化+Selenium
panluhai 发表于 2011-4-18 14:11



    能够具体一点吗?请问你们是如何执行的
作者: jia8162    时间: 2011-7-26 14:11
数据库比较方便
作者: 散步的SUN    时间: 2011-12-1 11:05
不都是一样的嘛,形式上不同而已
作者: gaha    时间: 2011-12-1 15:25
数据库方便共享,本地文件用起来不能互相同步,我觉得还是推荐到库里读表的办法。
作者: ryugun    时间: 2011-12-21 10:35
用什么外部文件(excel、xml、数据库等等)在思想上都是一样的(数据驱动),只是看个人项目不同选择不同的的数据形式而已,个人觉得无所谓好坏,只要方便个人项目的使用就是好的

我们目前的项目 是这样做的
selenium + testNG + Spring 结合的基于关键字驱动的框架。数据存放采用的是xecel(个人对excel API相对熟悉)

1 在selenium上封装一些适合我们项目用的不含测试逻辑的基本步骤(例如, 输入,打开页面,上传 等操作),且这些步骤分别对应一个关键字
2 将测试数据与逻辑 写在excel文档里(一张excel表示一个测试套,一个sheet代表一个用例,一行数据代表一个测试步骤和它对应的参数,一列数据代表测试逻辑)
3 写一个关键字解析器,解析excel里的关键字,动态调用测试步骤,完成测试
4 利用testNG运行,生成测试报告
5 对于页面元素的locator经常更改,维护起来很困难,因此我们就单独把locator做成xml文件保存,在excel里调用xml文件代号,在解析excel的时候,利用testNG 配合 spring依赖注入,将需要的locator解析出来供用例调用。
如果页面元素有更改,那么我就只需要维护xml文件即可

目前我们是这么做的,这个是我个人写的小框架  希望大家给点意见 一起进步
作者: skyhigh1984    时间: 2012-1-17 11:23
回复 18# ryugun

Hi~ 看了你的思路很受启发。想请教个问题。
操作步骤可以再excel中添加,但是中间步骤的观察点(或期望结果)能不能也通过excel来指定呢?
这些观察点有可能是多种形式(页面元素、数据库、文件状态等)。请问你们的观察点在excel里面是如何指定的?
作者: jia8162    时间: 2012-2-1 09:17
java 读取 excel 有局限性 数据量一大 excel 会有内存溢出问题
作者: ryugun    时间: 2012-2-2 22:27
回复 19# skyhigh1984
其实你仔细想一下,验证点其实也可以看成是一个测试步骤,所以我们就会结合业务封装一些适合自己的验证点步骤
举个例子来说:登录成功后,我需要验证是否成功!
假如登录成功后我们的页面上会出现:您好,XX   
那么我最基本的检查点就是验证这个字符是否出现就可以了,我就将这个验证的操作也封装成一个简单的测试步骤,在excel中调用即可。

不知明白我的意思么?
作者: ryugun    时间: 2012-2-2 22:30
回复 20# jia8162

恩,谢谢~

我个人对java理解其实很肤浅的,仅仅只是在用的阶段,至于性能优化等许多方面可能层次还不够。

我的意思是:用什么做数据并不重要,各个东西都有他的好处和坏处,我想说的仅仅是数据驱动的思想;我只所以采用excel,主要是我对excel的API相对熟悉

希望一起进步
作者: ryugun    时间: 2012-2-2 22:36
回复 21# ryugun

当然,对于复杂的检查点,就不能仅仅只依赖selenium了,类似于你说的药检查文件是否存在等,那么这个时候你就需要用到java的其他知识,去封装一个脱离selenium的步骤,不就行了么?
作者: zdh515    时间: 2012-2-8 18:24
学习了。。。mark
作者: kaidong12    时间: 2012-4-24 10:23
本帖最后由 kaidong12 于 2012-4-24 10:26 编辑

12楼 好方法,谢谢分享
作者: wlzjsj    时间: 2012-4-27 13:02
我这里就是用php对其二次开发后实现读取excel脚本,使用数据参数化
作者: gxjofx93    时间: 2012-5-1 10:09
标题: 真心不错,多谢楼主分享
真心不错,多谢楼主分享
作者: 喜洋洋8902    时间: 2013-10-23 16:54
回复 13# panluhai


    能否发我一份关于selenium+Junit Excel处理测试数据的 框架啊?谢谢哦!82550195@163.com
作者: Cris@Kaka    时间: 2014-1-22 14:03
回复 9# heavy200t


    新手,求webDriver+Eclipse+JUnit数据驱动的详细过程。。      
有个例子最好了,比如最简单的用户登录。。哈哈
有相关的资料么?
作者: Cris@Kaka    时间: 2014-2-8 15:02
回复 28# 喜洋洋8902


    同求啊




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2