51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 16522|回复: 29
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-12-7 07:36:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
selenium - 读取excel进行数据驱动测试

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

万分感谢
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2010-12-7 09:28:49 | 只看该作者
需要一个test case建立一个sheet表吗?
还是什么样的结构比较简单点。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2010-12-7 09:39:05 | 只看该作者
请问你是在什么框架下运行的Selenium?
我们是JUnit+Selenium,数据没有放在Excel,是放在XML。
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2010-12-8 01:14:14 | 只看该作者
回复 3# heavy200t

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

万分感谢?
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2010-12-8 14:50:22 | 只看该作者
按你实际项目来定,一个sheet或者一个文件都可以,只要方便重用就好。在编辑和查看上可以用VBA写一些宏配合着来做。因为test case之间可能有业务数据关联。总之一句话随便做吧~
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2010-12-9 18:36:26 | 只看该作者
没什么特殊原因,XML方便嘛,我是指XML读写实现起来方便。
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2010-12-10 03:38:12 | 只看该作者
回复 5# wugecat

heavy200t网友说xml方便,请问就您的实际经验来讲,那个会比较方便呢?我觉得是excel啊。
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2010-12-14 14:06:37 | 只看该作者
本帖最后由 wugecat 于 2010-12-14 14:10 编辑

我觉得都不方便,我用数据库,再找人开发个系统维护数据,运行脚本时,框架直接读数据库就好了,几个人一起做的时候还能公用数据,多方便。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2010-12-14 17:13: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.                 }       
复制代码
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2010-12-23 14:47:23 | 只看该作者
偶在项目中用CSV文件做数据驱动的,感觉比楼主的EXCEL更加方便。

偶是TestNG+Selenium,然后自己写了个CSV文件的读写方法,数据驱动的数据全部从CSV文件中读取,如果楼主有兴趣的话可以和我联系
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2011-2-12 03:35:36 | 只看该作者
偶在项目中用CSV文件做数据驱动的,感觉比楼主的EXCEL更加方便。

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



    请问如何与你联系呀?
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2011-2-14 09:45:24 | 只看该作者
本帖最后由 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文件中,一行代表一个输入就可以了。
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2011-4-18 14:11:05 | 只看该作者
我们的鹰眼项目自动化框架就是利用Excel参数化+Selenium
回复 支持 反对

使用道具 举报

该用户从未签到

14#
 楼主| 发表于 2011-7-26 04:42:18 | 只看该作者
我们的鹰眼项目自动化框架就是利用Excel参数化+Selenium
panluhai 发表于 2011-4-18 14:11



    能够具体一点吗?请问你们是如何执行的
回复 支持 反对

使用道具 举报

  • TA的每日心情

    2015-4-9 17:10
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    15#
    发表于 2011-7-26 14:11:51 | 只看该作者
    数据库比较方便
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2011-12-1 11:05:13 | 只看该作者
    不都是一样的嘛,形式上不同而已
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
    发表于 2011-12-1 15:25:01 | 只看该作者
    数据库方便共享,本地文件用起来不能互相同步,我觉得还是推荐到库里读表的办法。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
    发表于 2011-12-21 10:35:32 | 只看该作者
    用什么外部文件(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文件即可

    目前我们是这么做的,这个是我个人写的小框架  希望大家给点意见 一起进步
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
    发表于 2012-1-17 11:23:49 | 只看该作者
    回复 18# ryugun

    Hi~ 看了你的思路很受启发。想请教个问题。
    操作步骤可以再excel中添加,但是中间步骤的观察点(或期望结果)能不能也通过excel来指定呢?
    这些观察点有可能是多种形式(页面元素、数据库、文件状态等)。请问你们的观察点在excel里面是如何指定的?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2015-4-9 17:10
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    20#
    发表于 2012-2-1 09:17:38 | 只看该作者
    java 读取 excel 有局限性 数据量一大 excel 会有内存溢出问题
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-27 19:51 , Processed in 0.076940 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表