基于TestNG 与Selenium 的自动化测试设计与实施-2

上一篇 / 下一篇  2012-08-06 10:56:35 / 个人分类:自动化测试

51Testing软件测试网,M_zE_` n#k j

  DBUnit,它通过有效地管理测试场景中的数据简化了使用数据库工作。其设计理念就是在测试之前,备份数据库,然后给对象数据库植入我们需 要的准备数据,最后,在测试完毕后,读入备份数据库,回溯到测试前的状态,通过DBUnit还可以辅助数据持久层的测试工作,如验证一个实体通过被测试程 序(DAO)进行持久化的操作是否正确,验证数据实体是否按照预期写入数据库,并且提供了将数据从数据库与XML文件存储中互相转换的功能。51Testing软件测试网 N+whW3Y

]9X:?1a/Qn0

  上图是从客户表中导出的一条数据,如果测试过程中需要这条数据,那可以通过DBUnit将此条数据初始化到数据库中。

X"}ply7~/bz-{0}0

  还有一种情况,如果是新增一个客户,那这个文件里的数据可以用来做断言预期的依据,DBUnit可以将xml转换为DataSet甚至 JavaBean,你可以直接通过数据集进行比较而不是每个字段都要比较一次。51Testing软件测试网;C!sd2e{y

bH(x"Y;tb ^NR }M0

  不过DBUnit也有自己的缺陷,如上图所示,当通过DBUnit与数据库交互时需要检查表的主键,如果某张表没有设置主键就没有办法使用DBUnit的API,只能通过其它方式实现。

0j4D j"cf L F']?0

  Fitnesse,业务驱动测试的工具代表,FIT是一种通用的开放框架,将测试人员编写的测试方法转换成表格的形 式展现给客户,常用于自动化验收测试,在页面上以表格形式记录测试用例输入、预期输出内容,自动运行并显示测试执行结果。但是增加了开发人员一些工作量, 要想让fit与你的软件通信,需要自己编写Fit fixture来实现业务与程序逻辑的转换。51Testing软件测试网M-`G gu/I+oP

51Testing软件测试网hc{&t5^#r#hl

51Testing软件测试网o+xp5j.i;jr l5~

  3、自动化测试实施过程51Testing软件测试网^0Q$v`/C

51Testing软件测试网4pD8n~Lt'D

  通过上面几种工具的组合,灵活使用,就可以搭建出一套适合自己的自动化测试平台。51Testing软件测试网P vxR}*B3k,\:R

51Testing软件测试网GC{(~$ZR}@

  下面我来介绍一下,这些工具在不同测试场景下的使用情况:

oHN"o$Zgvh/i v/L051Testing软件测试网\/k;u\(o6E

  1)接口测试

4Vf T3X%FO0

FT;t8o"O'S"t0  (TestNG+DBUnit)接口自动化测试可以通过单元测试来完成,利用TestNG对每一个接口编写单元测试代码,通过DBUnit初始化数据库,将一个或多个测试并被定义为<suite>标签,批量执行测试代码并生成测试报告。

^ ^T)?@a0

51Testing软件测试网Kk-B Iz

  2)Webservice接口自动化测试51Testing软件测试网G^\7I ^+gKB$M"n

  目前大多数互联网公司都采用SOA架构,因此对于webservice接口类型的测试显得更加重要。通常测试工程师 可能会借助SoapUI等工具进行web service的测试,不可否认SoapUI在进行单一webservice接口测试中具有非常好的效果,但是在接口组合测试,以及在测试结果需要进行数 据库校验的情况下就显得不是那么的自动化,总是需要人工干预,这在一定程度上导致测试效率偏低,因此我们在这里介绍如何使用Fitnesse这块开源产品 实现接口测试自动化(未完待有时间补充)51Testing软件测试网 eM]8s@ h ]il

  3)WEB应用系统的自动化(Selenium +  TestNG + DBUnit)

x)uJ|bsB,@'v2c0

  TestNG 尤其适合与Selenium结合使用,可以实现其他测试框架无法实现的测试,例如使用依赖项进行测试,重新运行失败了的测试,以及使用单独文件中定义的参数进行参数化测试。所有这些特性结合在一起,使它在众多 Web应用程序测试框架中脱颖而出。

f(\0TE6XkxBByC0

  在测试自动化中,测试代码不仅仅包含测试逻辑,还包含许多其他的代码,比如URL拼接、Html/xml解析、访问 UI控件,等等。若把测试逻辑与这些无关的代码混在一起,测试逻辑将很难理解,也不容易维护。而采用分层结构可以解决这一问题。在分层的测试框架中,其三 层结构为:51Testing软件测试网!n0I|3t+~1|q;PJy

51Testing软件测试网m[ mc$dmx\0Y*FZ

  (1)数据层,包含UI数据和测试数据;UI数据是指在页面中需要输入的数据,如,普通客户新装,你需要在页面里输入三户信息,包括订购的产品及资源数据。这些通过页面注入的数据我们统称为UI数据,需要在执行测试前提前整理到Excel中,如图所示:51Testing软件测试网6]1~e4t*s

51Testing软件测试网?1e%u*W Z9vEh \

51Testing软件测试网b(~9_i vyW n

  实现起来比较容易,使用TestNG注释功能,就可以将这些数据作为页面的输入。而测试数据是指数据库中基础数据,这些数据是用来支撑整个系统 运作的,比如操作员及组织权限,新装订购的套餐,套餐与产品的关系数据等等,没有这些数据,系统就没有办法正常运行,所以执行测试脚本之前要对这些基础数 据进行初始化;还有一种情况当执行完一次测试脚本时产生的新数据会影响测试脚本的二次运行,这意味着运行任何测试之前,都希望数据库具有一组干净的数据, 使用 DBUnit 的 CLEAN_INSERT 命令确保在先前运行的测试中创建的行被删除掉,因此我可以重新运行测试,该测试可以不断创建数据并且不用考虑数据库约束。将测试数据提前整理到xml文 件,也可以从数据库直接导出到xml文件里,如图所示:51Testing软件测试网iu#EPtZSZ h

51Testing软件测试网 c`R~HmP

  在执行测试脚本前,通过DBUnit将这些文件里的数据提前初始到数据库里,这样一来数据库就是程序所期望的样子。51Testing软件测试网J-a(T#B-@

  (2)测试用例层,包含业务逻辑和控制逻辑。驱动程序WebDriver(Selenium2.0)负责UI数据的 载入,在页面回放时将UI数据输入到页面中。前台页面回放完成后,数据进入持久阶段,这时需要比对后台业务处理逻辑,比如客户数据是否正确写入数据库,产 品订购是否正确。由于输入的不同,场景的不同,业务逻辑比对也会不同,所以这块脚本的编写是整个环节中比较重要的部分。为了能够区分这些分支,需要将整个 新装流程拆分多个模块进行管理,使用TestNG将测试用例分组,形成多个Test Suite进行控制。51Testing软件测试网:?Xb)x0Z&CO)|

  (3)待测系统层,与测试端完全分离,被测系统只需要提供URL通过HTTP协议就可以被测试脚本调用执行。51Testing软件测试网6@Bu,e2jqs

  4、自动化测试的持续集成

+qj&}e.E+N.`0

  持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础,持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,也能尽快将测试脚本投入生产使用。51Testing软件测试网S^,H R$I u't(Q&t

  通过SVN统一代码管理,在Ant或Maven脚本增加测试组件配置,当例行编译结束后即可以使用Hudson定时启动测试脚本的运行工作。运行结束后返回测试报告给测试人员。整个迭代周期如下图所示:51Testing软件测试网:L-z9D,Wy

51Testing软件测试网^-bMR#~ N

  5、结语

y,|&@ ^0n ~0

  软件自动化测试弥补了手工测试时重复劳动的缺陷,而且能在软件开发过程中尽早发现缺陷,因此实施自动化测试是非常有 必要的。本文中介绍了几种自动化测试工具,通过不同的工具组合成适用自己的自动化测试框架,不仅使自动化测试在产品测试中发挥其独特的作用,而且还节约了 资源成本,包括测试工具购买的成本以及人力资源成本等。51Testing软件测试网e Q-o%@qY1y


TAG:

 

评分:0

我来说两句

Open Toolbar