我接触了当前市场上大多数的android端的自动化测试架构,也研究了一些偏门左道的一些测试工具,而当我见到calabash这套框架时,内心还是小小的开心了一下。
优势
先说一下calabash的优点,这样大家可能更有兴趣看下去:
1.calabash是BDD驱动开发,编写自动化测试脚本比Robotium提高100%
2.calabash是脚本与TC分离设计,在业务变化的情况下,只要功能存在基本只需要修改TC,在业务不变,功能变化的情况下,基本只需要修改脚本
3.calabash既支持android也支持ios,真正实现了套脚本跨平台设备运行,小试了一把很酷
4.calabash是支持扩展的,而且非常容易扩,当前也支持webview的脚本编写
运行原理
calabash-android架构其实与IOS是相同的,不过本篇只讲android,编写calabash架构的脚本,其实内部使用的是cucumber(cucumber是一种BDD测试框架,有兴趣的可以看看)这种核心为cucumber的calabash的脚本在运行测试的时候会在虚拟机/真机上预装一个web服务器,这个web服务器就是解释calabash的脚本,将其解释为robotium的脚本,然后这个web服务器会想测试app发送robotium的脚本,测试app拿到robotium脚本后,将其解释为instumentation命令向被测试的app发送这些命令,被测试的app执行这些命令,然后将结果返回给测试app,然后一级一级返得到最后的测试结果。
结构框架
calabash完全采用了cucumber的结构模式,给大家展示一下在命令行中展示出来的结构模式
feature为主件夹,step_definitions内是你封装的脚本,my_first.feature文件就是你的TC逻辑。再看一下其中的内容:
my_first.feature
Feature: 登陆
Scenario: 输入正确的用户名密码能够正常登陆
When 打开登陆页面
And 输入用户名XXX输入密码XXX
And 点击登陆
Then 验证登陆成功
看起来很简单吧,想要验证其他功能也是类似的语言描述即可。如果你没有用过cucumber或者calabash那么你肯定现在有一个疑问,计算机怎么能识别汉字来进行测试的呢,那么看一下step_definition:
以输入用户名XXX输入密码XXX为例:
When /^ 输入用户名\"([^\\\"]*)\" 输入密码\"([^\\\"]*)\" $/ do |username,password| performAction('enter_text_into_numbered_field',username,1) performAction('enter_text_into_numbered_field',password,2) end |
现在应该能明白为什么你需要写汉字的脚本就可以了吧。在这里解释一下为什么如果业务存在功能修改这种情况,自动化脚本的修改量会小,还是以这个登录脚本为例,加入现在输入用户名和密码的输入框顺序变了,在你的页面显示上,可能是从左下角移到中间了,这种变化,那么feature文件你不用改,只需要改step_definition脚本就好了。
运行报告
calabash-android支持很多报告生成模式,支持html,json,junit等等报告模式,只需要你在run的时候添加-f参数-o参数就可以了。
例如 calabash-android run xxxx.apk -f html -o report.html,上图展示一下强大html报告