? ? ? ? app自动化测试,主要借助的是appium移动端自动化测试工具,移动端的测试相对来说,稳定性会差一点,同样,环境的安装也比较复杂,接下来简单介绍下APP自动化测试的环境安装,和其他相关介绍。
一、APP自动化测试环境安装
== 1、appium安装
- appium 服务等同于selenium 的 webdriver
- 有两种使用方式:
1)通过桌面程序,通过下载程序使用,会更直观,
下载地址:http://appium.io/
注意事项:
A:下载比较稳定的版本。1.13版本,
B:安装给用户,不要安装至all user,并记住安装位置(比较隐蔽,通过勾选隐藏文件可查看)
C:端口号:只要没占用,都可任意设置,常用端口号有:4723、4444
D:日志级别,大多为欸debug级别,上线了可为info级别
2)可通过命令行形式使用appium(appium command line命令)
A:安装node js(可不需要浏览器,可运行js代码)
B:cmd命令行,运行npm
npm install -g appium --ignore-webdriver-install
-p +指定端口(4444、4723)
== 2、appium-python-client
- 相当于pip install selenium
在python中安装为:pip install appium-python-client
== 3、手机(真机、模拟器都可)
手机 ==》 要开启开发者模式,usb调试模式(多点两次版本号)
模拟器 ==> 默认已开启开发者模式和usb调试
验证是否连接上:cmd ==》 adb devices
== 4、java安装
注意:
1)1.8版本以上,64位,尽量高版本,
2)配置JAVA_HOME和PATH路径;
3)配置后需重启才会生效,
验证方法: cmd ==》 java -version
== 5、andriod sdk环境安装
1) 安卓开发新手集成包:adt-bundle
2) 双击解压,配置ANDRIOD_HOME,
3) 配置adb环境变量、aapt环境变量
验证方法: cmd ==》 adb 、aapt(出现一长串文本)
二、启动应用程序,简单运行流程
== > 简单流程(得到一个driver)
1、cmd ==》 adb devices 确定手机在线,获取deviceName(设备名称)
2、启动appium服务,如appium启动为4444端口,可直接访问,因为此为默remote默认参数
- 方法一:
platformName:连接的系统平台
deviceName:设备名称 cmd ==》 adb devices 确定手机在线,获取deviceName
app:电脑上app的路径位置
以上三个为固定参数
from appium.webdriver import Remote
# 方法一:
caps = {'platformName':'Android','deviceName':'E3LBB20708105277',
'app':r'C:\Users\lalanala\Desktop\xxxx-2018.apk'}
driver = Remote(command_executor = 'http://127.0.0.1:4723/wd/hub',desired_capabilities = caps)
- 方法二:
可不提供app路径,可通过提供app的 包名 和 activity,得到一个driver
查找:cmd == 》 aapt dump badging + 电脑上app安装包路径
获取 包名:package、入口:lauchable-activity
from appium.webdriver import Remote
# 方法二:
caps = {'platformName':'Android','deviceName':'E3LBB20708105277',
'appPackage':'com.xxzb.fenwoo','appActivity':'com.xxzb.fenwoo.activity.addition.WelcomeActivity'}
driver = Remote(command_executor = 'http://127.0.0.1:4723/wd/hub',desired_capabilities = caps)
===> 夜神模拟器
注意事项:
当出现无法获取设备信息时,是因为夜神模拟器和jdk中,都有adb.exe,重复冲突了,
解决方法: 可将jdk中的adb.exe,复制到夜神模拟器的bin目录下,改为nox_adb.exe,之前那个可当为备份保存
三、Appium日志分析
===> 启动appium的参数
除了上面所讲的:platformName、deviceName、app(appPackge、appActivity)外,还有:
1)platformVersion ==> 手机系统版本,校验作用
2)automationName ==> 自动化框架,(UiAutomator1、UiAutomator2)
3)noReset (不重启),True ==> 会使用缓存数据,False ==> 不使用缓存数据 (主要区别为:是否重启应用)
4)browserName ==> 直接测web用的(Chrome)
5)ChromedriverExecutable ==> 手机浏览器驱动
6)unicodeKeyboard ==> 支持unicode键盘 ==》True
7)resetKeyboard ==> 重启键盘 ==》True ,与unicodeKeyboard,捆绑使用
8)autoGrantPermissions ==> 自动授权 ==》 True
另外需添加的参数,直接传到caps后面去即可;
== 》 appium日志分析:
1)appium服务端口信息,连接信息
2)python代码访问appium服务的 /wd/hub/session 这个接口,创建一个会话 (HTTP请求)
3)响应结果,之前W3C ==》 检验参数 BaseDriver 创建一个新会话
4)appium === 》 appium运行,框架运行,接收数据,
5)appium adb ===》 服务启动adb程序,获取电脑上设备,如参数不通过则返回给客户端,
6)手动通过adb启动app ===>
[ADB] Running 'D:\adt-bundle-windows-x86_64-20140702\sdk\platform-tools\adb.exe
-P 5037 -s E3LBB20708105277 shell getprop ro.build.version.release'
[ADB] Current device property 'ro.build.version.release': 10
appium优势:
开源、跨平台、多语言
运行原理:
python代码,通过http向appium发送请求,appium再向手机端进行操作(Android和ios系统自带自动化框架的api)
四、adb的常用指令
1、adb == 》Android Debug Bridge 安卓调试桥
用于操作手机系统,类似于windows的cmd ; linux的bash
如无发现,可手动连接,adb devices === > adb connect 127.0.0.1:62001
- adb shell ==> 进入手机的shell,android de linux系统发行版 deepin、ubuntucentos
查看前台应用activity应用名称: adb shell dumpsys activity | find 'mFocusedActivity'
- 安装app:(app不要有中文)
adb install 电脑|appname.apk
adb pull ==》 手机文件名,电脑路径、从手机获取
adb shell 。。。
adb push ==》 电脑文件名路径、手机文件路径、从电脑推文件
adb connect。。。
adb install ==》 装软件
adb shell pm list packages ==>列举所有安装的
adb devices ==》设备是否连接
五、元素布局和控件
===> appium inspect 元素定位
点击搜索,加载后,在所需功能,填入参数即可(在python中caps信息)
安卓标签,安卓组件 ===》 类似于html的标签
===》 元素布局和控件
1)元素布局: 框架布局、线性布局、绝对布局、相对布局、表格布局
2)元素控件: imageview tagname(图片标签)
textview ==》 文件标签, layout == > 退出, button ==》 按键
checkbox ==》 多选, switch == > 开关, ratingbar ==> 评分条
seekbar ==> 拖动条 toast == > 弹出 webview ==> 显示网页 (iframe在网页中嵌套另一网页)
3)属性
text 文本 区别:Android 中的text 和 html中的text
html的text ==》 不是元素属性,//*[text()=' ']
app 的text ==》 是元素属性 , //*[@text()=' ']
class html中的class ==> 主要用于排版
app 中的class ==> 元素属性名,vs tag_name
content-desc ==> 无障碍描述
resource_id ==> 等同于id, 优先使用定位
from appium.webdriver import Remote
from selenium.webdriver.common.by import By
caps = {'platformName':'Android','deviceName':'E3LBB20708105277',
'appPackage':'com.xxzb.fenwoo','appActivity':'com.xxzb.fenwoo.activity.addition.WelcomeActivity','noReset':True}
driver = Remote(command_executor = 'http://127.0.0.1:4723/wd/hub',desired_capabilities = caps)
driver.implicitly_wait(10) # 等待
driver.find_element(By.ID,'com.xxzb.fenwoo:id/iv_tab').click() # 元素定位并点击
driver.quit()
总结
先简单记录至此,方便之后的复习和查看。
再逼自己一把吧,相信自己可以再进一层的,fighting~!!
|