selenium - 读取excel进行数据驱动测试
selenium - 读取excel进行数据驱动测试已经花了好久了,但是还是找不到一种比较理想的模式来进入excel的数据驱动测试,有没有做过类似项目的大牛指导一下。有比较具体的教程更好了。
万分感谢 需要一个test case建立一个sheet表吗?
还是什么样的结构比较简单点。 请问你是在什么框架下运行的Selenium?
我们是JUnit+Selenium,数据没有放在Excel,是放在XML。 回复 3# heavy200t
恩,我用的是junit+selenium
请问为什么不放在excel里面呢?不是更方便修改data吗?
万分感谢? 按你实际项目来定,一个sheet或者一个文件都可以,只要方便重用就好。在编辑和查看上可以用VBA写一些宏配合着来做。因为test case之间可能有业务数据关联。总之一句话随便做吧~ 没什么特殊原因,XML方便嘛,我是指XML读写实现起来方便。 回复 5# wugecat
heavy200t网友说xml方便,请问就您的实际经验来讲,那个会比较方便呢?我觉得是excel啊。 本帖最后由 wugecat 于 2010-12-14 14:10 编辑
我觉得都不方便;P,我用数据库,再找人开发个系统维护数据,运行脚本时,框架直接读数据库就好了,几个人一起做的时候还能公用数据,多方便。 回复 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();
} 偶在项目中用CSV文件做数据驱动的,感觉比楼主的EXCEL更加方便。
偶是TestNG+Selenium,然后自己写了个CSV文件的读写方法,数据驱动的数据全部从CSV文件中读取,如果楼主有兴趣的话可以和我联系 偶在项目中用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: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文件中,一行代表一个输入就可以了。 我们的鹰眼项目自动化框架就是利用Excel参数化+Selenium 我们的鹰眼项目自动化框架就是利用Excel参数化+Selenium
panluhai 发表于 2011-4-18 14:11 http://bbs.51testing.com/images/common/back.gif
能够具体一点吗?请问你们是如何执行的 数据库比较方便 不都是一样的嘛,形式上不同而已 数据库方便共享,本地文件用起来不能互相同步,我觉得还是推荐到库里读表的办法。 用什么外部文件(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文件即可
目前我们是这么做的,这个是我个人写的小框架希望大家给点意见 一起进步 回复 18# ryugun
Hi~ 看了你的思路很受启发。想请教个问题。
操作步骤可以再excel中添加,但是中间步骤的观察点(或期望结果)能不能也通过excel来指定呢?
这些观察点有可能是多种形式(页面元素、数据库、文件状态等)。请问你们的观察点在excel里面是如何指定的? java 读取 excel 有局限性 数据量一大 excel 会有内存溢出问题
页:
[1]
2