Appium

- 背景介绍 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 无论是精神上,还是名义上,都必须开源。
- 环境搭建 需要用到的软件如下(连接已经全部附上,自行下载安装以及配置环境变量):

  1. 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 ,出现下面返回值则启动成功,可以开始运行代码了
Appium
文章图片

安装完上述软件之后,环境就搭建成功了,下面是一些安装过程中可能遇到的坑,共勉:
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,时间太短是出不来了)
Appium
文章图片

2.3 校验ios和安卓环境,如果有的没有校验通过,则需要一步一步排查
Appium
文章图片

2.3.1 安卓环境变量配置问题:MAC用户进入.bash_profile里配置环境变量如下:
export ANDROID_HOME=~/Library/Android/sdk
export PATH=/Users/yangfangming/Library/Android/sdk/platform-tools/: P A T H e x p o r t J A V A H O M E = PATH export JAVA_HOME= PATHexportJAVAH?OME=(/usr/libexec/java_home)
export PATH= J A V A H O M E / b i n : {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做一些操作
Appium
文章图片

3、Ctrl+c 结束adb命令
4、打开log.txt文件,搜索:Displayed

- PO框架搭建及用例书写 框架详解
采用最常见的PO(page object)模型设计,通俗解释一下就是每个页面当成一个对象,给这些页面写一个类,主要就是完成元素定位和业务操作;至于测试脚本要和他区别开来,需要什么就去这些页面类调用即可。PO(page object)模型的好处就是如果页面元素发生变化,你去维护页面类即可,测试类基本不用管。(当然是理想情况,后期的坑还需要慢慢填)

PO模式的框架流程:
Appium
文章图片

PO代码示例:
GitLab源码地址:https://code.alphalawyer.cn/test/automation.git
Appium
文章图片

Base_page
Appium
文章图片

send_email
Appium
文章图片

login_page
Appium
文章图片

test_login_pwd
Appium
文章图片

runtest
Appium
文章图片

邮件示例:
Appium
文章图片

【Appium】用例维护
各个功能模块的负责人只需要维护这三个文件下的py脚本即可
common:如果涉及到公用方法,eg:页面的切换、滑动、toast检查等,请封装在公共方法里,以便其他模块直接调用
pages:各个模块自己的页面,eg:登陆页面、任务页面等,可以将页面的所有元素封装在一个方法里,模块负责人维护自己模块的页面元素
test_case:用例都放在该文件下面,进行统一管理
Appium
文章图片

    推荐阅读