irabbit 发表于 2010-12-7 07:36:51

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

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

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

万分感谢

irabbit 发表于 2010-12-7 09:28:49

需要一个test case建立一个sheet表吗?
还是什么样的结构比较简单点。

heavy200t 发表于 2010-12-7 09:39:05

请问你是在什么框架下运行的Selenium?
我们是JUnit+Selenium,数据没有放在Excel,是放在XML。

irabbit 发表于 2010-12-8 01:14:14

回复 3# heavy200t

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

万分感谢?

wugecat 发表于 2010-12-8 14:50:22

按你实际项目来定,一个sheet或者一个文件都可以,只要方便重用就好。在编辑和查看上可以用VBA写一些宏配合着来做。因为test case之间可能有业务数据关联。总之一句话随便做吧~

heavy200t 发表于 2010-12-9 18:36:26

没什么特殊原因,XML方便嘛,我是指XML读写实现起来方便。

irabbit 发表于 2010-12-10 03:38:12

回复 5# wugecat

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

wugecat 发表于 2010-12-14 14:06:37

本帖最后由 wugecat 于 2010-12-14 14:10 编辑

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

heavy200t 发表于 2010-12-14 17:13:13

回复 7# irabbit

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

这是我在最近一个项目中的读取XML的代码。                try{
                        File f = new File("TestPlan.xml");
                        SAXReader reader = new SAXReader();
                        Document doc = reader.read(f);
                        Element root = doc.getRootElement();                       
                       
                        Element e = null;
                        e = root.element("TestServer");
                        hTestServer.serverName = e.elementTextTrim("ServerName");
                        hTestServer.port = Integer.parseInt(e.elementTextTrim("Port"));
                        hdefaultTimeOut = e.elementTextTrim("DefaultTimeOut");
                                               
                        for (Iterator i = root.elementIterator("Site"); i.hasNext();){
                                e = (Element)i.next();
                                hSiteList.add(new TestSite(e.elementTextTrim("baseURL"), e.elementTextTrim("initPath"), Boolean.parseBoolean(e.elementTextTrim("Enable"))));
                        }
                       
                       
                        for (Iterator i = root.elementIterator("TestCase"); i.hasNext();){
                                e = (Element)i.next();
                                hTestCaseList.add(new Case(e.elementTextTrim("Name"), Boolean.parseBoolean(e.elementTextTrim("Enable"))));
                        }                       
                }
                catch(Exception e)
                {
                        e.printStackTrace();
                }       

robin.von 发表于 2010-12-23 14:47:23

偶在项目中用CSV文件做数据驱动的,感觉比楼主的EXCEL更加方便。

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

irabbit 发表于 2011-2-12 03:35:36

偶在项目中用CSV文件做数据驱动的,感觉比楼主的EXCEL更加方便。

偶是TestNG+Selenium,然后自己写了个C ...
robin.von 发表于 2010-12-23 14:47 http://bbs.51testing.com/images/common/back.gif


    请问如何与你联系呀?

robin.von 发表于 2011-2-14 09:45:24

本帖最后由 robin.von 于 2011-2-14 09:46 编辑

回复 11# irabbit

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

public static Object[][] getFromCSV(String filename) {
if (!(new File(filename)).exists()){
   return null;
}
Object[][] content;
CSVReader reader;
try {
   reader = new CSVReader(new FileReader(filename));
   Vector<String[]> vec = new Vector<String[]>();
   String[] nextLine;
   reader.readNext(); //skip title
   while ((nextLine = reader.readNext()) != null) {   
    vec.add(nextLine);   
   }
   content = new Object[];
   for (int i = 0; i < vec.size(); i++){
    content = vec.get(i);
   }
   return content;
} catch (Exception e) {
   System.out.println("Read CSV File:" + filename + "failed.");
   e.printStackTrace();   
}
return null;
}


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

@DataProvider(name="myInput")
public Object[][] inputData(){
return CSVUtil.getFromCSV(StaticConstant.getProperty("inputfile"));
}


这样处理以后,所有的输入数据就放在CSV文件中,一行代表一个输入就可以了。

panluhai 发表于 2011-4-18 14:11:05

我们的鹰眼项目自动化框架就是利用Excel参数化+Selenium

irabbit 发表于 2011-7-26 04:42:18

我们的鹰眼项目自动化框架就是利用Excel参数化+Selenium
panluhai 发表于 2011-4-18 14:11 http://bbs.51testing.com/images/common/back.gif


    能够具体一点吗?请问你们是如何执行的

jia8162 发表于 2011-7-26 14:11:51

数据库比较方便

散步的SUN 发表于 2011-12-1 11:05:13

不都是一样的嘛,形式上不同而已

gaha 发表于 2011-12-1 15:25:01

数据库方便共享,本地文件用起来不能互相同步,我觉得还是推荐到库里读表的办法。

ryugun 发表于 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文件即可

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

skyhigh1984 发表于 2012-1-17 11:23:49

回复 18# ryugun

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

jia8162 发表于 2012-2-1 09:17:38

java 读取 excel 有局限性 数据量一大 excel 会有内存溢出问题
页: [1] 2
查看完整版本: selenium - 读取excel进行数据驱动测试