移动测试基础 安卓自动化测试环境搭建 (CentOS+Python+Appium 篇)

蔡瑞淳 for 君海游戏QA · 2017年10月26日 · 最后由 石头鸟 回复于 2018年05月25日 · 3017 次阅读

环境介绍

服务器 235:存放测试脚本,常改动和增加
服务器 204:存放系统架构脚本,不常改动
服务器 238:执行机,拥有所有环境和脚本,连接手机,可执行测试任务
手机设备:用于执行测试任务
本机电脑 secureCRT:连接执行机,用于调试执行各种操作
自动化测试环境搭建就是指在执行机上搭建测试环境,让其最终可以正常执行任务的前置过程

软件安装

名称 版本号 前置依赖
CentOS 7.4.1708
pyenv 1.1.5
Python 2.7.14 pyenv
OpenCV 3.3.0
opencv-python 3.3.0.10 python、opencv
JDK 8u144
Android SDK platform-tools 26.0.1 JDK
nvm 0.33.5
Node.js 6.7.14(LTS) nvm
Appium 1.7.1 Node.js、JDK

软件的安装排坑过程请参考网址(这教程赞一个)
https://oxygenengine.github.io/%E6%8A%80%E6%9C%AF/2017/10/18/install-auto-test-environment-on-centos-7/

环境部署过程

1、安装自动化测试环境中三大核心工具

①python:脚本语言,用于组织整个自动化测试环境系统及测试脚本
②opencv:图像识别,得到坐标,可以进行点击等操作
③appium:用于执行机连接手机后识别手机应用的控件元素
安装过程分两步走
第一步安装 python、opencv、appium 软件,通过 python、opencv_version、appium -v 命令确定安装成功
第二步安装 python 与 opencv/appium 的连接模块,通过命令 pip install XXX 完成,具体如下:
opencv:pip install opencv-python
appium:pip intall appium-python-client
最后在 python 环境中确认是否可以正常导入模块

[root@localhost ~]# python
import cv2
import appium

2、安装自动化测试环境中其他辅助模块(根据脚本使用模块情况)

pip install pymysql:连接数据库
pip install pillow imagehash:图像处理
pip install requests:如请求某个 url,传输参数,最后得到返回的结果
chmod 777 aapt:aapt 命令是 android SDK 中的一个工具,可用于解析 apk 包
这边因为安装的 sdk 中找不到 aapt 工具,所以自己下载一个 aapt 文件后赋予读写执行权限后就可以了
参考网址:http://www.cnblogs.com/miao-zp/p/5983878.html

3、解决 python 脚本 import 模块时的搜索路径问题

(1)模块分类

标准库的模块:配置 python 的环境变量,然后就可以直接 import 了
自己写的模块:只要放在搜索路径里都可以直接 import

(2)搜索路径及顺序

①当前目录
②shell 变量 PYTHONPATH 下的每个目录
③默认路径,UNIX 下,默认路径一般为/usr/local/lib/python/
模块搜索路径存储在 system 模块的 sys.path 变量中,包含以上三种

(3)添加自定义搜索路径(以/home/work/yuntest/python 为例)

查看 sys.path
[''......, '/root/.pyenv/versions/2.7.14/lib/python2.7/site-packages']
进入目录
cd /root/.pyenv/versions/2.7.14/lib/python2.7/site-packages
创建文件
touch mypath.pth
编辑文件
vi mypath.pth
编辑内容
/home/work/yuntest/python
查看 sys.path
['',...... '/root/.pyenv/versions/2.7.14/lib/python2.7/site-packages', '/home/work/yuntest/python']

4、挂载资源到执行机,准备好环境,试运行脚本

(1)创建相关文件夹

创建 apks、python、task、before_install_pic 等等(如果你的脚本中设置了某些文件夹存储资源,记得提前创建好该文件夹,否则执行报错)

(2)挂载相关脚本文件到执行机上面

(脚本文件之所以放其他服务器是为了管理方便而已,详细看最上面的环境介绍)
[root@localhost yuntest]# mount -t cifs -o username=xxx,password=xxx //192.168.1.xxx/ntfs3/python /home/work/yuntest/python
[root@localhost yuntest]# df -h(查看是否挂载成功)
//192.168.1.xxx/ntfs3/python 391G 341G 50G 88% /home/work/yuntest/python

(3)最后试运行脚本成功,环境搭建完成

附——我遇到的坑坑

1、截图时报错:cannot write mode RGBA as JPEG

原因:执行 img.save(outfile,"JPEG") 时,我截了一个 png 格式的图,然后经过各种转换后要保存成 JPEG 时报错
解决:在保存成 JPEG 前先转换成 RGB 格式(img=img.convert('RGB'))

2、find_elements_by_name() 方法报错

据说这方法被弃用了,appium1.5 和 1.7 版本就不支持,网上找了些方法处理(如下),图个方便我就直接改 webdriver.py 里对应的方法就行啦
处理方法:
①使用 driver.find_elements_by_android_uiautomator("text(\"中文\")") 可代替
②使用 driver.find_elements_by_xpath("//*[@text='退出']") 可代替。
③重写 webdriver.py 里的 by_name 方法,使用以下方法替代

xpath="//[@name='"+name+"']"
#print(xpath)
a=self.find_elements(by=By.XPATH, value=xpath)
if len(a)>0:
return a
xpath="//
[@text='"+name+"']"
a=self.find_elements(by=By.XPATH, value=xpath)
if len(a)>0:
return a

return ""
备注:webdriver.py 位置/root/.pyenv/versions/2.7.14/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py(看你报错提示就知道了)

3、securecrt 连接到执行机,试运行脚本时中文显示乱码

原因:默认设置下,通过 SecureCRT 连接 SSH 服务器可能出现中文乱码的情况,这是由于 SecureCRT 字符编码与服务器的字符编码不一致造成的
解决:(前提是该 Linux 系统中默认的字符编码为 UTF8)
选项——会话选项——外观——窗口和文本外观——字符编码——设置为 UTF-8,点击确定

共收到 1 条回复 时间 点赞

题主有没有详细的步走和文档

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册