基于Selenium与JMeter的自动化测试构建

此文轉摘,非本人作品 http://lunwen.1kejian.com/jisuanjiyingyong/83641_2.html

摘 要:在软件行业中,软件测试在质量保证方面占据的作用越来越重要,其中自动化测试在软件测试中使用的比例也越来越高。本文主要通过Selenium与JMeter的两个实例,介绍如何用这两种工具进行自动化测试构建的过程。

关键词:自动化测试 Selenium JMeter
引言:
  1991年第一次海湾战争期间,用于拦截飞毛腿导弹的爱国者导弹表现很差,导致多名美军士兵丧生在飞毛腿导弹的轰炸之下。爱国者导弹防御系统属于典型的safety system,如果它不能完成它的功能,说明它失效了(failure)。后来,调查出的原因主要是软件故障,超过了测试时使用时间,导致其range gated area发生漂移,不再精确,系统在跟踪来袭导弹的过程中产生了偏差,而且使用越久偏差越大。另外,该系统最初是设计用于拦截2马赫的导弹,而飞毛腿是速度是5马赫。爱国者导弹防御系统的问题属于安全系统开发过程中的典型问题,需求不能满足实际的要求,在过程中又没有检查出来。出现这种问题的原因是什么呢?没有充分的测试。
1.软件测试
   即使是经验丰富的设计人员,也不能保证永远不出错。软件测试就是为了发现程序中的错误而分析或执行程序的过程。具体地说,软件测试是分析程序或根据软件开发各阶段的规格说明和程序的内部结构而精心设计出一批测试用例,并分析测试用例来运行程序,以发现程序错误的过程【1】。软件测试的目标就是生成用户满意的软件。而让用户的满意的软件主要包括易用性、性能、容量、可扩充性、可维护性、兼容性、可扩展性特征。
  软件测试从动手上分为人工测试和自动化测试。人工测试一般指测试执行有人工完成。自动化测试一般为计算机模拟的人工测试,替代人的测试活动。
2.手工测试的局限性
  任何一个测试都离不开手工测试,基于测试用例,在测试初期我们需要手工测试,但是手工测试也有它的很大局限性,首先不可能覆盖每一条路径,单元测试还不存在重复性问题,一旦到了回归测试,测试工作的工作量将会变的非常大,许多与时序、死锁、资源冲突、多线程等有关的错误,通过手工测试很难捕捉到进行系统负载、性能测试时,需要模拟大量数据或大量并发用户等各种应用场合时,这也是手工测试无法模拟的。如果有大量(几千)的测试用例,需要在短时间内(1天)完成,手工测试几乎不可能做到。
3.用Selenium结合单元测试构建自动化界面测试
  3.1Selenium技术
  目前网络很发达,只要上网都离不开网页,如果您在某购物网站,选中了一件在促销的名牌手包,狂喜之下,果断的在线刷卡进行买单,可是付完钱后,系统给出了白色的空页面,这让您很是忐忑,这买卖到底成功没有?这就是页面问题,页面要求必须直观性、一致性、灵活性、友好性。
  Selenium是ThoughtWorks公司的一个强大的开源Web功能测试工具系列,采用JavaScript来管理整个测试过程,包括读入测试套件、执行测试和记录测试结果。它采用JavaScript单元测试工具JSUnit为核心,模拟真实用户操作,包括浏览页面、点击链接、输入文字、提交表单、触发鼠标事件等等,并且能够对页面结果进行种种验证【4】。
  3.2 Selenium web实例
  以百度网页为例,需要在www.baidu.com 页面中搜索 “163” 字符串 然后点击 “百度一下”按钮,在搜索页面上将会出现“163网易免费邮箱_中文邮箱第一品牌”。需要的软件为Firefox,selenium IDE和firebug插件。过程如下:
(1)输入框中字符串”163”
(2)断言 ”163” 已经被输入
(3)按钮 “百度一下”的功能
(4)断言 ”163网易免费邮箱_中文邮箱第一品牌” 被显示出来
  生成代码如下:

  代码分析(解读):
(1)etup方法需要有2个参数分别的作用:
a. 需要测试的web的
b. 在哪种浏览器下测试(IE和Firefox都可以) “*chrome”使用当前默认的浏览器
  (2) 测试用类
  “selenium. Type(""kw"", ""163"");”  在输入框内自动输入163字符
  “verifyEquals(""163"", selenium.getValue(""kw""));”  断言字符已经被输入成功
  “selenium. click(""su""); ”单击”百度一下”按钮
  “selenium.waitForPageToLoad(""30000"");”  默认等待页面被加载时间
“verifyTrue(selenium.isTextPresent(""163网易免费邮_中文邮箱第一品牌""));”  验证需要的字符显示出来
4.用JMeter构建性能测试
  4.1 JMeter技术
    Apache JMeter是一种开源软件,纯Java的桌面应用程序,被设计用来测试功能及测量性能。JMeter框架如图1-1所示:
  
          图1-1 JMeter框架
  JMeter 的主要测试组件如下:
  (1)测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。
  (2)线程组代表一定数量的并发用户,它可以用来模拟并发用户发送请求。
  (3)监听器负责收集测试结果,同时也被告知了结果显示的方式。
  (4)逻辑控制器可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
  (5) 断言可以用来判断请求响应的结果是否如用户所期望的。
  (6)配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。
  (7)前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。
 (8)定时器负责定义请求之间的延迟间隔[2]。
4.2JMeter实例
需要在1秒内同时发出10个访问www.baidu.com的并发请求。
过程如下:
(1)创建线程组:
  设置迭代数为:每1秒,发送10个请求数,循环1次。
(2)创建请求。
  请求名称:http请求
  服务器名称:www.baidu.com
  方法:GET
(3)系统监控
  根据测试用例,在测试过程中,对响应时间及服务器资源情况进行监控。
 测试压力稳定在MaxVu=10个并发用户, 持续1分钟的登录操作的性能情况。
 图1-2是“summary report”。图中我们可以看到查询操作的事务平均响应时间较小。登录操作的平均响应时间为61毫秒,最小响应时间为30毫秒,最大响应时间为127毫秒;吞吐量为10.8每秒:客户端性能较为正常。
              图1-2  summary report
  针对测试结果的详细分析,10个并发用户下,查询事务均成功执行,访问操作的平均响应时间在61毫秒左右。从客户端资源的监控来看,该场景中CPU利用率均在正常范围,客户端性能正常。
5.结束语
  从上面两个实例来看,看起来第一实例运用手工测试可以很简单的完成,但是我们知道一个页面类似的功能在一个网页上很多,如果进入到回归测试,人工来完成所有的功能需要几天或者几十天,但是如果做成自动测试,编码等都设计好,那么半个多小时就可以完成这是省了很多的工作量,而JMeter的实例是10个并发用户,可以改为1000个或者更多,人工同时点击几乎不太可能了。这是自动测试的优点,但是在实际测试中离开不手动测试,当初期功能不稳定时还需要手动测试完成。自动化工具的搭建也需要一定的时间和费用,在实际的测试中要根据项目的大小和要求采用合适的测试。
  参考文献:
  [1]徐芳.软件测试技术[M].北京:机械工业出版社,2007.
  [2]朱少民.软解测试方法和技术[M].北京:清华大学出版社,2010
  [3]温素剑.零成本实现web自动化测试—基于Selenium和Bromine[M].北京:电子工业出版社


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值