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

背景介绍

Calabash-android是支持android的UI自动化测试框架。

Gearman是一个分发任务的程序框架,可以用在各种场合,与Hadoop相比,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

linux同步手机,Calabash+Gearman实现多手机同步测试机制相关推荐

  1. 安卓多台手机之间屏幕同步与pc通过adb控制手机

    最近有这样一个需求,多台手机之间,手机B,手机C,手机D全部显示手机A的屏幕或摄像头画面. 一开始为了快速实现,方案为手机A截屏,然后用socket发送给其余手机,效果实现,但是非常卡顿. 后来,想用 ...

  2. Android版同步工具豌豆荚实测 电脑给手机按软件 截图

    Android上的同步软件豌豆荚,很早前就已经听用户提起,并建议笔者进行安装测试.近期终于有机会安装上豌豆荚手机精灵V1.0版,用自己的索尼爱立信X10i进行了实测.总体使用感觉上来说,如果以前使用9 ...

  3. 摩托罗拉为什么要限制自家linux手机,摩托罗拉为何在安卓手机大放异彩的时候,突然开始衰败了呢?...

    摩托罗拉从一开始就走在了安卓的道路上,并且魅力四射,可以说一时间也是风光无比.对比诺基亚坚定的走向WP之路,这一点摩托罗拉没有走错. 安卓当时的热门机中,摩托罗拉的里程碑系列可以算作是经典之作.销量也 ...

  4. android版qq通讯录备份,手机备份首选Android版QQ同步助手的三大理由

    目前,腾讯已发布Android版QQ同步助手,这意味着QQ同步助手已经能够满足S60 V2.V3.V5.iPhone和Android等五大平台手机用户的数据备份需求. 同步助手 本站先以一部S60平台 ...

  5. 基于Linux的socket网络编程项目——游侠手机商城

    基于Linux的socket网络编程项目--游侠手机商城 一.项目说明 二.项目使用的技术 三.客户端搭建 四.服务器端搭建 一.项目说明 本项目是一个仿真手机商城类系统,基本功能: 登录界面功能:用 ...

  6. 小米手机安装linux视频教程,屏幕失灵的小米5手机安装linuxdeploy centos7记录

    几年前使用的小米5手机不知道什么时候屏幕失灵了,触摸任何地方都没有反应,幸好下面三个实体按键还是好的,就拿来安装一下linux系统. 我到华强北去问了一下,修好屏幕至少需要100多块,这个手机卖旧手机 ...

  7. linux如何读取华为手机存储文件夹下,安卓手机文件系统的二次革命,F2FS后再看EROFS...

    原标题:安卓手机文件系统的二次革命,F2FS后再看EROFS 2019年开年,智能手机市场异常热闹,各家厂商都使出浑身解数吸引眼球,各种黑科技简直眼花缭乱.华为P30凭借无可匹敌的摄影效果和逆天颜值成 ...

  8. 【带移动搜索功能】织梦dedecms手机WAP插件专业版 织梦自动建手机WAP站 PC+WAP数据同步更新 访问自动跳转

    安装步数: ( 插件及高清视频教程:QQ  86862635 或www.wlyx158.com 搜索 织梦自动建手机WAP站 PC+WAP数据同步更新) 1. 检查数据表的前缀是不是dede_   ( ...

  9. kali+linux+手机装热点,详解:手机安装Kali Linux

    有小伙伴希望我能写篇关于手机安装 kali 的文章.其实网上有许多这类的教程文章,在几个月前我就在我们团队网站上发布过!为了方便大家阅读,花了点时间将它搬到论坛里和大家分享下.有不足之处望大家多多包涵 ...

最新文章

  1. 【转】你必须了解的Session的本质
  2. 网络加速和优化控制常用管理
  3. get_children 方法里面参数 iv_as_copy 有什么用?
  4. How to test function module CRM_TERRMAN_BUILD_TERRATTRIB_B
  5. 易语言mysql验证_易语言MySql注册登录
  6. android 温度传感器获取温度,Android 温度传感器返回当前的温度
  7. 索纳塔9 2.4L旗舰版 一手原车 诚意出售
  8. 刚接触mybatis,很容易分不清#{id}和#{param1}的使用情况,本篇文章详解了两者的作用以及使用情况
  9. [二分 树形DP] CEOI2017. Mousetrap
  10. MATLAB期末复习
  11. 云杰恒指:7.29恒指期货实盘指导交易复盘
  12. jsoup爬虫发送get、post请求、解析html、获取json
  13. PCB板材的基本分类
  14. Online Generation of Collision-Free Trajectories for Quadrotor Flight in Unknown Cluttered Environme
  15. 程序员有必要参加软考吗?软考有什么用?
  16. 四个步骤教你写好一款产品的运营数据分析报告(转)
  17. 2019 NIPS | Variational graph recurrent neural network
  18. 基于jsp(java)网络教学平台系统的设计与实现
  19. 7-3 计算正弦函数值 (10 分)
  20. Windows 7 旗舰版高效办公 - 任务栏和 开始 菜单属性

热门文章

  1. SpringBoot基础系列-使用日志
  2. 计算机高级职称考试培训,高级职称计算机考试培训
  3. 【Unity 渲染】烘焙渲染出现白色光斑的问题
  4. 十六、串口命令控制LED灯开关
  5. hdmi接口有什么用_一文了解DP接口和HDMI接口分别怎么用?哪个更好?两者的区别?...
  6. Java代码易错问题
  7. oninput、onblur和onchange的区别
  8. LFU -- Javascript实现版本
  9. (智慧商业照明解决方案)未来已来,AIoT时代涂鸦商用照明给予光价值
  10. 计算机网络八股文(2022最新整理),太绝了