多进程启动设备和appium实现自动化测试
前言
测试过程中,难免遇到多机型兼容测试。如果拿很多手机轮流做手工测试,耗费时间长,重复工作量大,占用人工多。网上已有较多手机测试的文章,基本会根据多个手机参数在配置文件中写死。这样的方式不够灵活,本篇文章动态获取手机信息,形成多份desired_caps,便于多手机启动读取不同参数。同时通过代码维护appium服务,检测端口,释放端口等。本篇文章致力于一键启动,但仍有很多功能不尽人意,后期尽力维护。
安装环境
测试环境:
- Windows
安装工具:
- Node.js安装
- Python安装
- Appium安装
- Appium-Python-Clinet安装
- Jdk安装
- Android Sdk安装
- appium-doctor 安装
具体流程
多进程启动多设备
1. Appium配置
创建yaml文件:此处的yaml文件中,只需要将常用的参数罗列出即可,后续会根据不同的手机参数,动态修改其中的值。
初始化appium:该方法需要在调用时,根据不同手机动态传入所需参数。
2.多进程启动多手机
需要根据当前连接的手机数量,创建对应个数的进程。首先,获取当前手机个数。此方法会获取当前系统中在线手机的系统版本号、手机名称、唯一序列号,封装到PhoneInfo类中, 并循环添加到列表中。例如,此时有三台手机,可据此创建三个进程启动手机。
根据手机数量创建多个进程,此处需要注意两点:
- 端口号会根据手机数量,逐步累加。例如,有三台手机,则启动端口号为:4725,4727,4729;
- 传入的参数为上一步封装的系统版本号、手机名称、唯一序列号,以此在多进程中匹配并启动不同的手机;
3.启动多进程测试
多进程启动多服务
想要进行多手机测试,需要启动对应手机数量的多个服务。
Appium原理如下:
根据appium原理可知,appium服务端口号默认为4723,想启动多个appium服务,只需要增加端口号,便可启动多个服务。同时,多个appium需要对应多个手机,因此多个手机端也需要指定多个端口号,即形成:
Server client
4723 4724
4725 4726
1.启动服务的命令。
appium -a 127.0.0.1 -p 4723 --bootstrap-port 4724
2.封装单进程启动服务的方法
3.多进程启动服务
需要根据当前手机数量,启动多少进程(前面已经看过如何获取手机数量,现在可直接使用)
4.检测端口、释放端口
检测端口:通过socket连接,如果连接通过,则说明当前端口被占用,如果连接失败,会抛异常,则说明当前端口未占用,可以在该端口下启动appium服务。
释放端口:该命令可杀掉所有appium服务。
5.启动多进程测试
- 列表选择Spinner
- 巧用CSS3 :target 伪类制作Dropdown下拉菜单(无JS)
- 开源的虚拟机软件 VirtualBox v1.5.2
- Farseer:一个用于Silverlight和XNA的开源物理引擎
- Visual Studio 2008 debug的时候发生郁闷的错误ContextSwitchDeadlock was detected
- LINQ TO XML
- 不被未来折叠掉:AI时代下的思考
- Google 分析的基准化测试
- WebFont 三宗罪之一:WebFont 与 FOUT
- 探究基于声明的身份标识
- 深化“互联网+先进制造业”发展工业互联网的系列解读二:打造平台体系
- WebFont 三宗罪之二:吹毛求疵的WebFont 渲染差异
- IDC发布IT转型报告,现代化、自动化、转型三要素必不可少
- 存储过程和触发器的应用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- mybatis缓存之一级缓存
- 剑指offer(41-50)题解
- 剑指offer(19-24)题解
- mybatis缓存之整合第三方缓存工具ehcache
- 剑指offer(51-60)题解
- mybatis逆向工程
- ssm之spring+springmvc+mybatis整合初探
- mybatis插件开发小例子
- java之如何在eclipse中新建对象时自动补全
- mybatis文件映射之当输入的参数不只一个时
- mybatis插件开发初探
- 剑指offer(25-30)题解
- 如何实时迁移MySQL到TcaplusDB
- 如何利用Terraform工具编排管理TcaplusDB
- 如何实时迁移AWS DynamoDB到TcaplusDB