windows7 + Appium + 夜游安卓模拟器 + Python
像Selenium可以操控Web浏览器,手机APP平台也有类似的自动化测试工具:Appium;
全文分基础介绍、环境搭建和案例演示三部分介绍Appium,以帮助Learner快速的上手。
基础介绍
详细原理介绍请点击
Appium是一个开源的自动化测试框架,用于原生,混合和移动Web应用程序。 它使用WebDriver协议驱动iOS,Android和Windows应用程序。关于它的运作流程,用图来介绍会更加生动形象一些:
在上图中,左边这部分是Appium-Client,通俗点来说,是用于间接驱动最右边的设备执行预定的自动化测试流程,支持使用多种主流的编程语言进行编写,这也是测试开发人员需要关注的核心部分;中间的Appium-Server是衔接左边客户端以及右边APP设备端的重要桥梁,一般仅需要配置好环境及启动运行;右边这块,当然就是实际执行自动化测试的终端,如IOS真机、Android真机,或者是模拟器。
工具:
1.使用Java开发时才需要下载 JDK
2. node.js
3. Android SDK
4.Appium-Server:下载appium-desktop即可
5.Appium-Python-Client (编写测试脚本用)
6.终端:下载夜神安卓模拟器
7.实例:(1)模拟机安卓应用自动化测试(2)真机自动化化测试
1.安装JDK
(1) 官网下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html
(2) 选择Java SE 8u201/ 8u201,点击JDK下载
(3) 安装下载的JDK
(4)配置系统环境变量
在“系统变量”一栏中,进行新建或编辑操作
(1)新建JAVA_HOME变量
变量名:JAVA_HOME
变量值:填写JDK安装目录(我的是 D:\Program Files (x86)\Java\jdk1.8.0_181)
(2)找到Path变量进行编辑,没有的话就新建一个
变量名:Path
变量值: ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
(原有变量值不要删除,直接在末尾添加)
//注意前面有个英文的分号,不要漏掉,这是为了跟前面的变量值间隔开的
(3)新建CLASSPATH变量
变量名:CLASSPATH
变量值: .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
//可以直接复制这句话到变量值那一栏,注意前面有个“.”不要漏掉
点击确定,保存设置,回到桌面“win+R”,输入“cmd”
输入命令:java -version
详细内容见 https://www.jianshu.com/p/c9cb3185b221
2.安装node.js
1. 由于Appium的server端是node.js编写的所以需要先安装node.js。安装node.js后,也可以直接按照官方教程通过npm安装Appium,不推荐这种方式。(注:npm类似于Python的pip,一个非官方包管理器)
2. 官方下载地址:点击下载 ,根据自己的操作系统下载不同版本的node.js
3. node.js的安装一路傻瓜式next就可以了,注意一点,将路径改下,安装成功后会自动添加环境变量。也就是在cmd下任意目录都可以使用npm命令。
4. 检查是否安装成功
cmd下输入:npm
3.安装Android SDK(安卓软件开发包)
1. 安装Android SDK(安卓软件开发包),测试Android手机必然是要安装Android SDK。(只看1.4.5即可)
下载地址:https://www.androiddevtools.cn/ 在sdk下下载(直接下载对应版本,解压至任意目录即可,注意路径不能包含中文,否则安装 SDK Manager.exe 时不能出来工具包)
安装后,解压后包含以下文件:
1)自带add-ons、platforms、tools、AVA Mnager.exe、SDK Manager.exe、SDK Readme.txt
2)新增文件夹build-tools、extras、platform-tools
3)点击SDK Manager.exe进入SDK工具下载,自带tools(自带AndroidSDK Tools)和extras文件夹
4)手动下载:下载Android SDK Platform-tools解压后为platform-tools放到 platform-tools 文件下 下载 Android SDK Build-tools解压后为21.0.0放到build-tools 下(多下载几个版本) Extras文件夹下的 Google USB Driver
2. 在系统变量中,新建变量名:ANDROID_HOME,变量值写解压后的文件夹路径。(不建议这么做)
变量:ANDROID_HOME
值:D:\android-sdk-windows
3. 双击android-sdk-windows文件夹下的 SDK Manager.exe,选装工具。必装:Tools 文件夹下Android SDK Platform-tools 和 Android SDK Build-tools,Android SDK Tools,Extras文件夹下的 Google USB Driver
选择了以上四个安装包之后,点击“Install 4 Packages...”,在License页面,选择Accept License,最后点击 “Install” 开始安装。
4. 在系统变量 Path 中添加ANDROID_HOME、tools、platform-tools、build-tools目录。保存修改。
变量Path,值:%ANDROID_HOME%;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\build-tools\28.0.0
建议如下写法:D:\android-sdk-windows;D:\android-sdk-windows\tools;D:\android-sdk-windows\platform-tools;D:\android-sdk-windows\build-tools\28.0.0
5. 检查环境变量是否配置成功
cmd下分别输入:
adb
andoid
android -h
或者
monkeyrunner 验证tools环境配置是否成功
adb 验证配置platform-tools环境变量是否成功
aapt 验证build-tools的路径环境变量是否配置成功
4.安装Appium-Server
使用appium-desktop来搭建Appium-Server环境;appium-desktop是连接appium服务的桌面应用,可以方便测试人员进行连接手机,录制脚本等工作。
点击进入下载Appium-desktop进行下载,选择对应的版本进行下载,下载完成后直接进行安装就可以了。
5.Appium-Python-Client
选择python作为自动化测试脚本语言:
注:appium-desktop 和 模拟机 连接时,可以通过录制,进行操作模拟机,然后,把录制脚本转化为正式python脚本,可以复制到pycharm编辑器中,通过appium-python-client这个驱动来自动化模拟机。脚本在pycharm中运行,通过appium-server来操作模拟机。
方法一:直接用命令 pip install Appium-Python-Client
方法二(内网下):
2. cd python-client-master
3. python setup.py install
由于 运行 python setup.py install 时,提示有错误,找不到urllib3等等,(原因为公司内网,不能下载依赖)!!!!!!
故,
1. 离线 下载urllib3
2. cd urllib3-master
3. python setup.py install
4. 检测是否成功
import urllib3
此时,再次运行 pip install Appium-Python-Client 仍有报错提示
故,离线 下载 selenium
(2)下载后解压
(3)进入命令行,切换到安装包路径,输入python setup.py install指令执行setup.py文件安装selenium
看到下图中的Finished processing dependencies for selenium==3.6.0即安装成功
当然,你也可以用pip show selenium指令查看selenium安装情况
再次在python-master文件中运行 pip install Appium-Python-Client 无报错信息即可
命令运行后,可以发现python27下的site-packages下已加载了
appium_python_client-0.46-py2.7.egg
selenium-3.141.0-py2.7.egg<from Appium-pYthon-Client>
urllib3-1.25.3-py2.7.egg<from selenium<4,>=3.14.1—>Appium-pYthon-Client>
6.安装夜神安卓模拟器
点击下载夜神模拟器,选择磁盘进行安装,安装完成后找到 nox_adb的所在位置,复制文件路径,将其添加到环境变量中,变量名为nox_adb,变量值为其文件路径。
7.实例
(1)安卓应用自动化测试
(1)使用adb连接
首先,对SDK中platform-tools里adb版本,模拟器nox中bin里adb和 nox_adb的版本进行匹配;
如果出现三个版本不一致,将SDK中的adb.exe复制二份,一份命名为nox_adb.exe;另一份为adb.exe;然后粘贴到nox中bin里,更替掉原本的哪两个版本即可。
现在开始,找到Android SDK的文件夹,点开platform-tools,
shift + 右键 进入CMD,输入adb devices,会显示目前处于5037端口,并且进程成功启动的说明。(运行前需要后台结束adb.exe进程)
打开夜神模拟器(一定要打开)之后找到夜神的安装路径,点开bin文件夹,shift + 右键 进入CMD,输入nox_adb.exe connect 127.0.0.1:62001
之后在输入 adb devices
打开夜神模拟器(一定要打开)之后找到夜神的安装路径,点开bin文件夹,shift + 右键 进入CMD,输入nox_adb.exe devices
之后在输入 adb devices
之后一直打开模拟器,打开platform-tools,并进入cmd,输入adb devices,如下图所示就表示SDK与模拟器成功连接了
(2)打开appium-desktop连接模拟器
修改 Host: 127.0.0.1
Post 保持默认
点击开始服务
继续点击如图所示
在desired capabilities中输入对应参数:
切记:
1)左边框内输入
2)app filepath F:\Appium\app-debug.apk
3) autoAcceptAlerts boolean true
4) 我加载automationName时,会报错“could not find a driver for automationName'appium' and platformName 'Android'.”
之后保存,并点击start session即可(保持模拟器打开状态)
注:点击 获得appPackage和appActivity
方法二:把apk放到android-sdk下build-tools,使用命令 aapt dump badging F:\Appium\app-debug.apk
之后点击start session即可(保持模拟器打开状态)
连接成功后,appium上自动调整到App页面,如下
(2)真机自动化测试
下面演示在安卓真机上的自动登录Keep(APP)。
获取设备名称。操作流程:开启手机的开发和调试模式,连接电脑授权认证,Window + R输入并运行cmd,用adb devices -l查看:
启动Appium Server进行调试:
从上图可以看到,启动App Session需要有以下几个参数(点击了解更详细的Appium Desired Capabilities):
platformName,如Android、iOS等
deviceName,参考前面是如何获取的
注:点击这里获得appPackage和appActivity
综上所述,这里对应Keep的信息如下:
{"platformName":"Android","deviceName":"WAS_AL00","appPackage":"com.gotokeep.keep","appActivity":"com.gotokeep.keep.splash.SplashActivity"}
点击Start Session,之后可以看到手机端启动了Keep,并且在Appium Server端中同步展示:
上述的操作通常只是用来方便获取控件id及定位的,下面基于Python编写完整的Appium-Client以实现自动登录操作:
from appium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
server = 'http://localhost:4723/wd/hub' # Appium Server, 端口默认为4723desired_capabilities = {
'platformName': 'Android',
'deviceName': 'WAS_AL00', # 需替换成你的deviceName
'appPackage': 'com.gotokeep.keep',
'appActivity': 'com.gotokeep.keep.splash.SplashActivity'
}
driver = webdriver.Remote(server, desired_capabilities)
wait = WebDriverWait(driver, 10) # 最大查找等待超时时间:10s
def get_permission():
"""允许APP获取的某些权限"""
try:
ask = wait.until(EC.presence_of_element_located((By.ID, 'com.android.packageinstaller:id/do_not_ask_checkbox')))
ask.click()
allow = wait.until( EC.presence_of_element_located((By.ID, 'com.android.packageinstaller:id/permission_allow_button')))
allow.click()
except:
pass
# 允许两项授权
get_permission()
get_permission()
# 点击“立即使用”
welcome = wait.until(EC.presence_of_element_located((By.ID, 'com.gotokeep.keep:id/btn_bottom_in_video_welcome')))
welcome.click()
# 切换“密码登录”(同样可以使用第三方进行授权登录)
driver.tap([(900, 110)])
# 输入“手机号”
phone = driver.find_element_by_accessibility_id('Phone Number In Login')phone.send_keys('13988888888') # 替换成实际的账号
# 输入“密码”
password = driver.find_element_by_accessibility_id('Password In Login')password.send_keys('123456') # 替换成实际的密码
# 点击“登录”
login = driver.find_element_by_id('com.gotokeep.keep:id/btn_action')
login.click()
最后,附上运行效果图:
参考资料如下:
https://www.cnblogs.com/Caiyilong/p/8559394.html
https://www.cnblogs.com/my-blogs-for-everone/p/7751596.html
https://jingyan.baidu.com/article/7f766daffb88334101e1d084.html