背景介绍
1.1 Appium是什么
Appium是一个APP的自动化框架,可用于测试APP、网页(web)、混合型应用,而且是跨平台(可以针对不同平台用一套api来编写测试用例)
1.2 Appium的C/S架构
Appium遵守REST设计风格的web服务器,它接受客户端的连接,接客户端的命令,在手机设备上执行命令,通过HTTP的响应收集命令执行的结果,这种架构给使用者提供很好的开放特性,只要某种语言有http客户端的api,我们就可以通过这个语言写我们的测试代码
1.3 Appium优点
l 开源
l 跨架构:NativeApp、Hybird App、Web App
l 跨设备:Android、iOS、Firefox OS
l 不依赖源码
l 使用任何WebDriver 兼容的语言来编写测试用例。比如 Java, Objective-C, JavaScript with Node.js, PHP, Python, Ruby, C#, Clojure, 或者 Perl.
l 不需要重新编译APP
1.4 Appium理念
l 你无需为了自动化,而重新编译或者修改你的应用。
l 你不必局限于某种语言或者框架来写和运行测试脚本。
l 一个移动自动化的框架不应该在接口上重复造轮子。(WebDriver)
l 无论是精神上,还是名义上,都必须开源。
环境搭建
需要用到的软件如下(连接已经全部附上,自行下载安装以及配置环境变量):
- jdk
2.Android-sdk
3.Python
4.pycharm
5.Node.js(如果苹果电脑推荐使用brew安装:brew install node)
6.Appium(如果不需要客户端可以直接安装:npm install -g appium)
7.Appium-doctor(npm install -g appium-doctor)
8.校验ios环境(appium-doctor --ios),校验安卓环境(appium-doctor --android)
9.启动appium
电脑终端输入: appium --session-override ,出现下面返回值则启动成功,可以开始运行代码了
安装完上述软件之后,环境就搭建成功了,下面是一些安装过程中可能遇到的坑,共勉:
2.1 安装appium-doctor可能提示没有权限,如果提示Error: EACCES: permission denied, access ‘/usr/local/lib/node_modules’错误
解决方法:使用sudo npm install -g appium-doctor命令安装,如果提示:operation not permitted,试试2.2的方法
2.2 MAC升级之后电脑启用了SIP(System Integrity Protection),增加了rootless机制,导致即使在root权限下依然无法修改文件,2.1的方法可能就不太好使了,我们需要关闭该保护机制,具体操作附上网上截图一份(一定要长时间按住command+R,时间太短是出不来了)
2.3 校验ios和安卓环境,如果有的没有校验通过,则需要一步一步排查
2.3.1 安卓环境变量配置问题:MAC用户进入.bash_profile里配置环境变量如下:
export ANDROID_HOME=~/Library/Android/sdk
export PATH=/Users/yangfangming/Library/Android/sdk/platform-tools/:PATH export JAVA_HOME=PATHexportJAVAH?OME=(/usr/libexec/java_home)
export PATH={JAVA_HOME}/bin:JAVAH?OME/bin:PATH
安卓元素抓取
1、打开/Users/icourt/Library/Android/sdk/tools/bin/uiautomatorviewer(如果打不开,卸载sdk9,装sdk8即可)
2、连接手机点击左上角的手机图标,即可以抓取当前手机页的元素
appActivity获取
1、打开APP
2、执行 adb logcat>/Users/icourt/Desktop/log.txt、胡乱的对APP做一些操作
3、Ctrl+c 结束adb命令
4、打开log.txt文件,搜索:Displayed
- PO框架搭建及用例书写
框架详解
采用最常见的PO(page object)模型设计,通俗解释一下就是每个页面当成一个对象,给这些页面写一个类,主要就是完成元素定位和业务操作;至于测试脚本要和他区别开来,需要什么就去这些页面类调用即可。PO(page object)模型的好处就是如果页面元素发生变化,你去维护页面类即可,测试类基本不用管。(当然是理想情况,后期的坑还需要慢慢填)
PO模式的框架流程:
PO代码示例:
Base_page
send_email
login_page
test_login_pwd
runtest
邮件示例:
用例维护
各个功能模块的负责人只需要维护这三个文件下的py脚本即可
common:如果涉及到公用方法,eg:页面的切换、滑动、toast检查等,请封装在公共方法里,以便其他模块直接调用
pages:各个模块自己的页面,eg:登陆页面、任务页面等,可以将页面的所有元素封装在一个方法里,模块负责人维护自己模块的页面元素
test_case:用例都放在该文件下面,进行统一管理
源码地址:
https://github.com/Dawnwangxiaoying/auto-test/tree/master/App