文档章节

Calabash+Gearman实现多手机同步测试机制

超爱fitnesse
 超爱fitnesse
发布于 2015/01/09 17:19
字数 891
阅读 1883
收藏 68

摘要:

Calabash-android是支持android的UI自动化测试框架,但不支持多手机同步测试。本文介绍如何利用任务分发系统Gearman的消息同步机制,配合Gearman实现多手机同步测试机制。

背景介绍

Calabash-android是支持android的UI自动化测试框架。 http://www.oschina.net/p/calabash-android

Gearman是一个分发任务的程序框架,可以用在各种场合,与Hadoop相比,Gearman更偏向于任务分发功能。它的 任务分布非常 简单,简单得可以只需要用脚本即可完成。 http://www.oschina.net/p/gearman gearman

Ubuntu上安装Gearman

$ sudo apt-get install gearman-job-server
$ gearmand -V

gearmand 1.0.6 - https://bugs.launchpad.net/gearmand 

$ sudo apt-get install gearman-tools
$ gearman -H

启动gearman job server,作为后台服务运行:

$ sudo gearmand -d

多手机同步测试举例

假设要测试微信的发送消息功能,calabash的测试用例可以按如下方式撰写:

AA-send-message-to-BB--role-AA.feature:

Feature: 微信测试发送消息给好友-角色A
 
  Scenario: 微信测试发送消息给好友
    ...打开微信软件,作为帐号A登录,进入与好友B的聊天窗口
    When I send weixin message "A说,你好!"   # 微信聊天窗口中发送消息
    And  I send sync message "A说,你好!" to role "BB"
    Then I see "A说,你好!"  #我能看到自己说的话

    When I wait sync message $AA_sync_1 as role "AA"
    Then I see $AA_sync_1 #我能看到对方说的话
    ...

AA-send-message-to-BB--role-BB.feature:

Feature: 微信测试发送消息给好友-角色B
 
  Scenario: 微信测试发送消息给好友
    ...打开微信软件,作为帐号B登录,进入与好友A的聊天窗口
    When I wait sync message $BB_sync_1 as role "BB"
    Then I see $BB_sync_1  #我能看到对方说的话

    When I send weixin message "B说,你好!"   # 微信聊天窗口中发送消息
    And  I send sync message "B说,你好!" to role "AA"
    Then I see "B说,你好!"  #我能看到自己说的话
    ...

命令行终端1中运行AA-send-message-to-BB--role-AA.feature

$ export ADB_DEVICE_ARG=HTC-G9
$ export GEARMAN_JOB_SERVER=localhost

$ calabash-android run weixin.apk -r features/ features/AA-send-message-to-BB--role-AA.feature

命令行终端2中运行AA-send-message-to-BB--role-BB.feature

$ export ADB_DEVICE_ARG=HWAWEI-P7
$ export GEARMAN_JOB_SERVER=localhost

$ calabash-android run weixin.apk -r features/ features/AA-send-message-to-BB--role-BB.feature

calabash中封装gearman命令实现同步机制

sync_step.rb:

# encoding: utf-8
require 'calabash-android/calabash_steps'

When /^I wait sync message \$([^\$]*) as role "([^\"]*)"$/ do |msg_ev, role|
  gearman_job_server=ENV["GEARMAN_JOB_SERVER"]
  fail "环境变量::GEARMAN_JOB_SERVER::未定义! 设置方法: export GEARMAN_JOB_SERVER=localhost" if ( gearman_job_server == nil)
  uuid=`uuidgen`.strip  
  cmd="gearman -h #{gearman_job_server} -t 30000 -w -c 1 -f receiver_#{role} -- tee /tmp/#{role}-#{uuid}; cat /tmp/#{role}-#{uuid}"
  puts "角色#{role}准备执行命令:#{cmd}"

  message=`#{cmd}`.strip
  fail "未收到同步消息" if ( message == "" )
  ENV[msg_ev]=message
  puts "角色#{role}接收到同步消息: #{ENV[msg_ev]}"
end

When /^I send sync message "([^\"]*)" to role "([^\"]*)"$/ do |msg, role|
  gearman_job_server=ENV["GEARMAN_JOB_SERVER"]
  fail "环境变量::GEARMAN_JOB_SERVER::未定义! 设置方法: export GEARMAN_JOB_SERVER=localhost" if ( gearman_job_server == nil)
  fail "sync message 为空" if ( msg == "" )
  cmd="echo '#{msg}' | gearman -h #{gearman_job_server} -t 30000 -f receiver_#{role}"
  puts "角色#{role}准备执行命令:#{cmd}"

  response=`#{cmd}`.strip
  fail "发送同步消息失败" if ( response != msg )
  puts "发送同步消息给角色#{role}: #{msg}"
end

When /^I send sync message \$([^\$]*) to role "([^\"]*)"$/ do |msg_ev, role|
  gearman_job_server=ENV["GEARMAN_JOB_SERVER"]
  fail "环境变量::GEARMAN_JOB_SERVER::未定义! 设置方法: export GEARMAN_JOB_SERVER=localhost" if ( gearman_job_server == nil)
  msg=ENV[msg_ev]
  response=`echo "${msg}" | gearman -h #{gearman_job_server} -f receiver_#{role}`
  fail "发送同步消息失败" if ( response != msg )
  puts "发送同步消息给角色#{role}: #{msg}"
end

calabash_steps.rb:

# encoding: utf-8
require 'calabash-android/calabash_steps'

Then /^I see \$([^\$]*)$/ do |text_ev|
  text = ENV[text_ev]
  steps %{
   Then I see "#{text}"
  }
end    

© 著作权归作者所有

超爱fitnesse
粉丝 28
博文 33
码字总数 44160
作品 0
浦东
QA/测试工程师
私信 提问
OSChina 技术周刊第十七期 —— Go 1.5 计划启动

每周技术抢先看,总有你想要的! 移动开发 【软件】移动应用开发框架 Agile 【博客】Calabash+Gearman实现多手机同步 【博客】IOS UIScrollView详解 & 图片缩放功能 前端开发 【翻译】Scite...

OSC编辑部
2015/01/11
2.7K
1
转:手机软件自动化测试研究报告

看到Vince的文章感到很兴奋,他提出的实现思路跟我们如出一辙,我们已经实现,并能将平台用于Symbian、Android、Windows Mobile以及电视平台。 跟Vince简单交流了一下,他很欣赏我们的研究方...

鉴客
2012/02/17
860
2
2亿QQ用户大调度背后的架构设计和高效运营(下)

作者介绍 周小军 腾讯高级运维工程师,目前在腾讯社交负责社交业务海量NoSQL集群运维和团队管理。曾在天涯社区任运维副总监。对互联网网站架构、数据中心、云计算及自动化运维等领域有深入研...

luoahong
2018/06/26
0
0
iphone手机备忘录怎么在电脑同步?

iPhone手机备忘录怎么在电脑同步? 小编给出的解决方案是,通过第三方备忘软件敬业签来解决这个问题。 因为敬业签是一款能够多端同步的便签软件,能够通过在不同的设备上登录同一个敬业签的账...

wangzhen1219
2018/10/08
0
0
mysql多主多从架构与mysql-proxy读写分离

mysql多主多从架构与mysql-proxy读写分离 最近心血来潮想要部署几台mysql的服务器,实现一个多主多从的服务器架构,并且要在这个架构上利用mysql-proxy实现读写分离操作,之前只是搭建过一主...

烟头网管
2015/01/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部