当前位置: 首页 > news >正文

手工测试用例就是自动化测试脚本——使用ruby 1.9新特性进行自动化脚本的编写

昨天因为要装watir-webdriver的原因将用了快一年的ruby1.8.6升级到了1.9。由于1.9是原生支持unicode编码,所以我们可以使用中文进行自动化脚本的编写工作。

做了简单的封装后,我们可以实现如下的自动化测试代码。请注意,这些代码是可以正确运行并作为正式的自动化测试用例的。

 测试浏览器 = Watir::Browser.new :firefox测试浏览器.转到 'www.google.com'在(测试浏览器.的.text_field(:name, "q")).中.输入 "qq"点击 测试浏览器.的.button(:name, "btnG")等待(测试浏览器.的.div(:id, "resultStats"))断言 '测试通过' if 测试浏览器.的.text.包含('腾讯QQ')关闭 测试浏览器

这样一来,自动化测试脚本跟手工测试用例就非常相似了,大言不惭的说相似程度可以达到60%。

这样做有什么好处呢?

  • 手工测试用例更加容易“翻译”正自动化测试用例:
    由于加入了符合自然语义的”的”及“在”函数,整个测试用例的自然度得到大大提升,基本可以做到不熟悉自动化代码的人员可以大致猜测到用例的真实用例。让用例自己说话,这比反复释疑和解惑要好上一些;
  • 手工测试人员编写用例的门槛相对降低:
    由于代码的灵活度及兼容性相对较大(ruby语言的特性)及测试api相对简单(watir的特性),手工测试人员应该可以更加方便的理解和编写代码,这样用例编写的门槛降低;
  • 用例维护成本降低:
    中文化的用例代码可以很容易的进行review。大家应该有这样的经验,在有些代码中会出现一些随意的ab, zb之类难以理解的变量或方法名。纠其原因无非是不好的编程习惯或词穷的英文积淀。用上中文之后这些情况会有很大好转。代码本地化这项工作日本这些年一直在做,而且成果丰硕。我们完全可以通过ruby借鉴这一点;
  • webdriver的强大特性
    上面的测试代码是基于watir-webdriver编写的。由于webdriver支持多种浏览器,如ff,chrome,safiri,ie等,代码的扩展性非常强。在配置合理及框架支撑的前提下,基本可以做到一套脚本多浏览器运行,这对回归测试来说应该是一个利好消息;

当然,测试脚本中文化,自然化口语化也会带来一些列的问题,这点我们也必须清楚认识到。

  1. 用例编写会相对费时一些;中英文结合编码在输入速度上确实不如纯英文;
  2. 对程序员来说上面的代码会有些怪异或者是令人难以忍受的;对于完美主义者来说,上面的代码是“不纯粹”且有些难看的;

总结一下,个人的观点如下:

对于产品代码来说,中英文混编的风格目前来说应该是不合时宜的。但对于测试脚本来说,中文越多,用例可读性越高,自动化测试代码越接近手动用例,这反而应该是一件不错的事情。这在里先抛砖引玉,希望有志同道合者可以一起研究,让自动化脚本更加的人性、自然、可读、可维护。也许在不远的将来,手动用例可以直接拿来当自动化用例执行也未尝不可能。

下面是用例的完整代码,由于只是演示兴致,因此只是随意在Module层进行了简单的可视化封装,过于简陋和demo,还望砖家手下留情。

 # encoding: utf-8require 'rubygems'require 'watir-webdriver'module CWrapdef 点击(obj)obj.click rescue obj.class.to_s + '对象无法进行点击'enddef 加载完毕()selfendalias :中 :加载完毕alias :的 :中alias :应该 :的def 在(obj)objenddef 等待(obj)obj.wait_until_present rescue puts('该' + obj.class.to_s + '对象无法进行等待操作')enddef 关闭(obj)obj.close rescue puts('无法关闭这个' + obj.class.to_s + '对象')enddef 输入(text)self.set text rescue puts('这个' + self.class.to_s + '对象无法进行输入')enddef 转到(url)self.goto url rescue puts(self.class.to_s + '对象不是一个浏览器对象')enddef 包含(text)self.include? text rescue puts self.class.to_s + '对象无法进行包含操作'enddef 断言(text)puts textendendinclude CWrap测试浏览器 = Watir::Browser.new :firefox测试浏览器.转到 'www.google.com'在(测试浏览器.的.text_field(:name, "q")).中.输入 "qq"点击 测试浏览器.的.button(:name, "btnG")等待(测试浏览器.的.div(:id, "resultStats"))断言 '测试通过' if 测试浏览器.的.text.包含('腾讯QQ')关闭 测试浏览器

最后:下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】

http://www.lryc.cn/news/17752.html

相关文章:

  • RockerMQ简介和单节点部署
  • SFP光纤笼子 别称 作用 性能要点 工程要素
  • [HarekazeCTF2019]Easy Notes
  • Java学习-IO流-字符流-FileReader
  • python攻陷米哈游《元神》数据?详情请看文章。。
  • 【unity细节】基于unity子对象(如相机)为什么无法进行z轴的拖拽移动和z轴自动归位的问题
  • 如何维护固态继电器?
  • Sprng依赖注入(三):构造方法注入是如何工作的?
  • 「1」指针进阶——详解
  • JS语法让人困惑的点 “==与===”
  • 《狂飙》壁纸大嫂如此惊艳,做成日历壁纸天天看
  • 手机照片删除了怎么恢复
  • maven pom.xml 依赖的scope属性
  • git 的使用方法 (下 - 远程仓库和图形化)
  • Java基础:拼图小游戏
  • 一个跟蘑菇结缘的企业老板
  • 【Leetcode 剑指Offer】第 4 天 查找算法(简单)
  • Jenkins利用docker部署vue项目
  • 【Linux】如何将ntfs硬盘挂载到home目录下并具有读写权限
  • 拖拽删除元素、拖拽排序、拖拽预览图片和拖拽移动元素
  • yarn的global安装命令不生效
  • 如何发布自己的npm包?
  • 达梦数据库 闪回查询
  • java基础学习 day44(多态的优点和劣势)
  • Guna UI WinForms 2.0.4.4 Crack
  • 零售航母沃尔玛公布业绩:喜忧参半
  • Python学习笔记丨while、for、if循环结构基础知识与易错点
  • 【ROS学习笔记1】ROS快速体验输出Hello World
  • 复习git的使用
  • pip命令大全 含换源方法