开发者社区> 玄学酱> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

使用macaca进行移动端hybird自动化测试(一)

简介:
+关注继续查看

部分基本概念及内容:

单元测试:

以模块为单元,测试你代码的本身,确保你编写的模块还有逻辑正确。只要输入的值不变,输出的值也应该不发生改变

前端自动化测试:

  • 界面回归测试 测试界面是否正常,包括文案,图片等。
  • 功能测试 包括交互逻辑和功能模块是否符合预期。
  • 性能测试 页面性能越来越受到关注,并且性能需要在开发过程中持续关注,否则很容易随着业务迭代而下降。

本文主要的内容集中在界面回归测试和功能测试。这2部分的测试工作是通过模拟用户进行页面操作,通过查看页面状态的变化,从而检测功能是否运行正常:它的测试流程是:

  1. DOM元素选取
  2. 触发DOM元素绑定事件
  3. 查看绑定事件结果是否符号预期

如何去做前端UI自动化测试

要完成前端UI自动化测试至少需要测试框架,断言库。

工具的选择

Headless无界面:

  1. PhantomJS.包含了WebKit浏览器引擎和JavaScript API的脚本解释器,因此可以去运行js代码。只不过不提供图形界面,其他的功能都和浏览器一样。比如一些爬虫爬了网站,这个网站并不是静态的,那么需要执行Js才行。因此PhantomJS提供了执行页面中的代码功能。
  2. casperjs.基于PhantomJS进行开发,提供的功能也和PhantomJS,不过语法更加简练。不像PhantomJS callback hell那样恶心。同时和PhantomJS不同的地方还在于它直接提供了测试的功能,比如对远程DOM的断言测试,还能编写功能测试套件。具体的API文档参见casperjs的官网。

  1. casper.start('http://www.google.fr/'function() {                                          //打开谷歌主页,添加页面加载完成时的回调函数 
  2.     this.test.assertTitle('Google''google homepage title is the one expected');           //检测页面标题是否是'Google',如果是,输出第二个参数指定的字符串 
  3.     this.test.assertExists('form[action="/search"]''main form is found');                 //检测页面中是否存在选择器指定的元素,如果存在输出第二个参数指定的字符串 
  4.     this.fill('form[action="/search"]', {                                                   //填充表单并提交,执行搜索操作 
  5.         q: 'foo' 
  6.     }, true); 
  7. }); 
  8.  
  9. casper.then(function() { 
  10.     this.test.assertTitle('foo - Recherche Google''google title is ok');                  //检测搜索结果页的页面标题是否正确     
  11.     this.test.assertUrlMatch(/q=foo/, 'search term has been submitted');                    //检测搜索结果页的网址是否匹配指定的正则表达式 
  12.     this.test.assertEval(function() { 
  13.         return __utils__.findAll('h3.r').length >= 10;                                      //自定义一个检测函数 
  14.     }, 'google search for "foo" retrieves 10 or more results'); 
  15. }); 
  16.  
  17. casper.run(function() { 
  18.     this.test.renderResults(true);                                                          //输出检测结果 
  19. });  

UI测试

nightwatch (简单的语法,可以快速上手使用强大的 Selenium WebDriver API 来在 DOM 元素上执行命令和断言)


  1. module.exports = { 
  2.   'Demo test Google' : function (client) { 
  3.     client 
  4.       .url('http://www.google.com'
  5.       .waitForElementVisible('body', 1000) 
  6.       .assert.title('Google'
  7.       .assert.visible('input[type=text]'
  8.       .setValue('input[type=text]''rembrandt van rijn'
  9.       .waitForElementVisible('button[name=btnG]', 1000) 
  10.       .click('button[name=btnG]'
  11.       .pause(1000) 
  12.       .assert.containsText('ol#rso li:first-child'
  13.         'Rembrandt - Wikipedia'
  14.       .end(); 
  15.   } 
  16. };  

nightmare.js 基于phatomJS为测试封装的的一套High level Api(非常的语义化:click, refresh, goto...).同时nightmare还基于electron,那么它也提供了GUI的界面工具,当你使用nightmare.js进行自动化测试的时候就可以看到所有的模拟用户动作了。


  1. yield Nightmare() 
  2.   .goto('http://yahoo.com'
  3.   .type('input[title="Search"]''github nightmare'
  4.   .click('.searchsubmit');  
  1. protractor angular的亲儿子,angular团队自己开发的e2e测试工具。同样提供模拟用户的操作的API,来验证Angular运行状况。
  2. selenium 暂时还没用过,网上有大量的关于它的资料
  3. macaca 本系列要讲的重点
  4. Appium 支持ios/android/firefoxos多种平台的测试,native、h5、hybrid都支持,以及所有支持jsonWireProtocal协议的脚本语言:python,java,nodejs ruby都可以用来书写用例.它实际上包含了: a. 基于express的server用于发送/接收client端的协议命令;
  5. 作为bootstrap客户端用于将命令传递给对应的UIAutomator/UIAutomation/Google’s Instrumentation

测试框架

测试框架的作用就是运行测试开发人员编写的脚本工具,测试框架会抓取到代码抛出的AssertionError,并在控制台或者网页中输出。测试框架提供了特定的测试语法,一般分为两类TDD(测试驱动开发)和BDD(行为驱动开发)。测试框架通常提供TDD(测试驱动开发)或BDD(行为驱动开发)的测试语法来编写测试用例。

TDD:是指先写好测试代码,然后再根据测试来写代码。它的步骤一般是:

  1. 写个测试
  2. 写出最少数量的代码,使其保持测试通过
  3. 优化代码
  4. 重复前面的工作

BDD:不去针对代码细节,而是针对行为进行测试

现在用的比较多的测试框架是:

  1. mocha
  2. jasmine

断言库

断言的作用就是判断源码的实际执行结果与预期结果是否相同,如果不一致就抛出一个错误。

  • chai

chai.js提供了assert, expect, should三种风格的断言。可根据自己的喜好去选择断言风格。具体API请查阅相关的文档。

利用上面的工具基本上就可以开始进行测试脚本的测试工作了。

下面一篇文章就会介绍如何使用macaca来对hybird应用进行测试。




作者:苹果小萝卜
来源:51CTO

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用fuser查询文件、目录、socket端口的占用进程
fuser可用于查询文件、目录、socket端口和文件系统的使用进程 1.查询文件和目录使用者 fuser最基本的用法是查询某个文件或目录被哪个进程使用: # fuser -v .
780 0
SAP的标准移动类型说明(From SAP Help)(ZZ Kanterwang)
Below you will find a short description of the standard movement types. The reversal movement type is the movement type + 1 (reversal of 101 = 102).
1133 0
proguard 使用说明
引用:http://wenku.baidu.com/view/31ca66d380eb6294dd886cdd.html http://blog.163.com/lizhe_163/blog/static/6733560820114132150197/ 我们做java开发的一般都会遇到如何保护我们开发的代码问题。
854 0
[前端优化]使用Microsoft Ajax Minifier对资源文件进行压缩优化
在前端优化中,js、css等文件的优化一般都是压缩的优化,进行合并、减小体积以达到减小请求的目的。 今天发现了一个集成在VS中的压缩插件,使得压缩变得比较快捷。 配置方法 首先需要去下载Microsoft Ajax Minifier,一路安装就可以,如果VS正在使用,需要重启。
624 0
Maximum Awesome:移动支付 Square 团队开源的 Vim 配置文件
Xcode 和 Vim 都是非常流行的软件。很久以来,Square Vim 的狂热者已经把 Vim 的设置、快捷方式、插件等编译到一个单独的仓库里面,我们热爱地把这仓库称为:Maximum Awesome。而今天(译者注:文章写于 2013.8.28 ),我们把这个仓库开源了!我们希望任何使用 OS X 的人都能在几分钟内上手 Vim!(译者注:配置文件稍作修改就可以用于其他系统)
0 0
Docker+Jenkins+Gitee+Maven构建自动化部署
Docker+Jenkins+Gitee+Maven构建自动化部署
0 0
+关注
玄学酱
这个时候,玄酱是不是应该说点什么...
文章
问答
文章排行榜
最热
最新
相关电子书
更多
使用TensorFlow搭建智能开发系统自劢生成App UI代码
立即下载
使用TensorFlow搭建智能开发系统自动生成App UI
立即下载
PWA:移动Web的现在与未来
立即下载