- 1 LuckyFrame使用手册
- 2 环境搭建
- 2.1 环境准备
- 2.2 数据库安装配置
- 2.3 基础数据初始化(升级)
- 2.4 Gitee&Github使用说明
- 2.5 导入项目
- 2.6 项目配置
- 2.7 项目部署
- 3 使用说明
- 3.1 系统介绍
- 3.2 语法手册
- 3.2.1 测试驱动(接口)自动化语法说明
- 3.2.2 Web UI自动化语法说明
- 3.2.3 移动端自动化语法说明
- 3.2.4 HTTP&Socket模板自动化语法说明
- 3.2.5 步骤动作关键字
- 4 示例手册
- 4.1 API接口自动化示例
- 4.2 APP自动化示例
- 5 常见问题&解决办法
- 5.1 服务端Web常见问题
- 5.2 客户端常见问题
APP自动化示例
- 2019-12-10 17:26:40
- 陈铁跃
- 20690
- 最后编辑:陈铁跃 于 2020-02-28 16:23:41
APP自动化使用手册
本章节内容:应用LUCKYFRAME来实现APP(安卓)自动化测试的过程。
实现原理:调用appium实现APP自动化,LuckyFrame测试平台将自动化用例进行管理、调度任务执行并将结果发送邮件
1 搭建APPIUM环境
1.1 安装node.js
Appium是使用nodejs实现的,所以node是解释器,需要第一步安装好
node.js的安装包下载地址: https://nodejs.org/en/download/
注意:node.js的安装包的下载在官网有两种版本,建议大家下载LTS版本,按照官方的意思,这个版本应该算是稳定版本。页面会根据你的OS有推荐版本,选择版本LTS 12.13.1(已经包含npm 6.12.1的版本,npm是node.js的包管理工具)
安装完成后检查一下版本有没有问题,如下图:
1.2 安装安卓的SDK
安卓SDK下载地址: http://tools.android-studio.org/index.php/sdk
第一步:安装
在安装目录下有一个SDK Manager.exe的文件,双击打开,可以下载你想要的SDK。
主要安装工具Platform-tools、build-tools、Android API(选择最新版本即可),还有扩展插件Google USB Driver,其他根据实际情况自行选择。
第二步:配置环境变量
1. 新建一个环境变量
变量名:ANDROID_HOME,
变量值:C:\Users\xujp\AppData\Local\Android\android-sdk (以你安装目录为准,确认里面有tools和add-ons等多个文件夹),点击确认
2. 在用户变量PATH后面加上变量值;%ANDROID_HOME%\platform-tools;
3. 在系统变量path中添加; C:\Users\xujp\AppData\Local\Android\android-sdk\tools
4. Android SDK配置完成,接下来验证配置是否成功
5. 点击运行——输入cmd回车——输入adb回车,如显示ADB版本号,如下图所示,即表示配置成功,在输入Android,启动Android SDK Manager
1.3 安卓模拟器
个人觉得安卓SDK自带的模拟器不是太好,建议可以使用Genymotion这个模拟器
先注册一个账号,注册完就能下载了。
Genymotion下载链接在此: https://www.genymotion.com/download/
最好直接下载第一个,直接内置了VirtualBox,否则还得另外安装。
第一步:登录后选择一个机型,如:三星Galaxy S10,将设备名称设置为TestApp
第二步:启动设备,status为On
1.4 安装appium
推荐npm的安装方式,简单方便,它是可以直接取到最新的版本安装的。
因为前面安装node.js的时候,已经安装了npm,所以这里我们不再需要单独安装npm,直接使用此命令就可以了。
你如果要安装最新的版本可以直接使用以下命令
npm install -g appium
如果你要安装指定的版本可以全用以下命令,appium的版本必须在1.8.1-1.7之间,否则与luckyframe3.1存在兼容问题
npm install -g appium@1.8.0
注意: 自动安装完后,机器会自动重启,我的win10就在我猝不及防的情况重启了,提醒大家提前保存好重要的东西。
重启完成后,就可以检查一下appium版本了。
1.5 启动APPIUM服务
注意:直接使用appium启动服务,这里监听的IP跟端口都是默认的,也就是0.0.0.0:4723,启动完成APPIUM环境搭建完成
如果你要指定IP跟端口,可以采取以下方式
2 配置
2.1 appium_config配置
2.1.1 配置说明
Ø 配置文件位置:E:\LuckyFrame\LuckyFrameClient\appium_config
Ø appPackage、appActivity获取方法直接百度,我使用的是aapt dump badging app-release.apk
package:name 就是appPackage
launchable-activity: name 就是appActivity
Ø 将待测APK包放置LuckyFrameClient目录下(appname=app-release.apk)
Ø 模拟器运行的设备名称,status为On
#设备名称 备注:如果您使用的模拟器,就是模拟器中虚拟机的名称
deviceName=TestApp
2.1.2 检查LF是否能调用appium成功
注:执行调度任务前需启动客户端、appium及模拟器
1. WEB端创建测试计划(可不添加用例)--创建调度任务(APP测试)确定
2. 手动执行调度任务,若模拟器中自动安装APK包成功,则表示LF成功调用APPIUM
3 APP自动化测试执行
3.1 添加用例
创建项目、用例模块此处不再说明,添加用例:
3.2 用例步骤
包|定位路径语法结构:属性=对应值
示例:xpath=.//*[@id='username']
元素在页面中的定位路径,定位属性支持(id、name、xpath、linktext、tagname、cssselector、androiduiautomator、classname、partiallinktext、accessibilityid、iosclasschain、iosnspredicate、iosuiautomation),如果操作不涉及页面元素,此栏为空
方法|操作:自动联想出Appium封装好的操作语法
预期结果:语法结构 check(属性=对应值) 示例:check(xpath=.//*[@id='username']) 此方法用来检查步骤动作执行完成后,检查对应的元素是否存在。
3.3 例子:登录用例
登录用例分为7个步骤,如下图:
Ø 步骤一、二:安装完进入引导页,左滑动两次引导页,进入主页
包|定位路径:空
方法|操作:moveto
参数:x1,y1|x2,y1
步骤动作:空、5#wait(等待5秒)
预期结果:空
类型:移动端
说明:参数表示坐标,从x1,y1的位置移动到x2,y1位置
Ø 步骤三、四:进入我的页面--登录页面
通过uiautomatorviewer获取xpath,注意如果有@,需要加一个@进行转义
包|定位路径:xpath=//android.widget.LinearLayout[@@resource-id='com.hhsurong.app:id/bottom_navigation_bar_item_container']/android.widget.FrameLayout[4]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.ImageView[1]
方法|操作:click
参数:空
步骤动作:空
预期结果:空
类型:移动端
Ø 步骤五、六:输入用户名、密码
包|定位路径:xpath=//android.widget.EditText[@@text='请输入手机号码']
方法|操作:sendkeys
参数:用户名/密码
步骤动作:空
预期结果:空
类型:移动端
Ø 步骤七:点击登录,进入登录页面
包|定位路径:xpath=//android.widget.Button[@@text='登录']
方法|操作:click
参数:空
步骤动作:2#wait
预期结果:check(xpath=//android.widget.RelativeLayout/android.widget.ImageView[1])
类型:移动端
说明:预期结果通过check(属性=对应值)来检查元素是否存在,以此判断登录是否成功
3.4 任务调度执行
执行原理:先初始化--安装APK(每次任务调度都会覆盖安装),再执行测试计划中的用例
3.4.1 添加测试计划
3.4.2 计划用例
选定用例保存用例到计划
3.4.3 添加调度任务
3.4.4 执行调度任务
点击执行即开始进行自动化测试执行,可打开模拟器查看执行情况
3.4.5 查看执行结果
1.点击任务执行,查看执行结果
2.点击任务名称,可以看到详细的用例执行情况
4 用例--方法|操作说明
语法结构:动作(方法|操作) 操作值(参数)
示例:sendKeys(方法|操作) username(参数)
4.1下拉框类
selectbyvisibletext |
通过下拉框的文本 |
selectbyvalue |
通过下拉框的 VALUE 属 |
selectbyindex |
通过下拉框的 index 属性,从 0 开始计数 |
isselect |
判断是否已经被选择,同用于单选、复选框 |
4.2 获取对象属性值类
gettext |
获取文本属性 |
gettagname |
获取标签类型 |
getattribute |
获取指定属性值 |
getcssvalue |
获取CSS属性值 |
4.3 对象动作类
click |
点击 |
sendkeys |
输入 |
clear |
清除输入框 |
longpresselement |
长按页面指定元素,带参,单位:秒 |
isenabled |
是否可用 |
isdisplayed |
是否可见 |
exjsob |
针对对象执行JS脚本 |
4.4 主对象类(无定位属性)
getcontexthandles |
获取指定context的handle,带参,指定第几个窗口 |
exjs |
执行js脚本 |
keycode |
安卓模拟手机键盘发送,带参,按键代码 |
hidekeyboard |
安卓隐藏手机键盘 |
gotocontext |
跳转窗口(句柄),使用getcontexthandles传参值 |
getcontext |
获取当前页面context |
gettitle |
获取当前页面title |
swipeup |
拖动页面向上滑动 参数格式: 持续时间(秒)|次 |
swipedown |
拖动页面向下滑动 参数格式: 持续时间(秒)|次数 |
swipleft |
拖动页面向左滑动 参数格式: 持续时间(秒)|次 |
swipright |
拖动页面向右滑动 参数格式: 持续时间(秒)|次数 |
longpressxy |
长按指定坐标 参数格式: X坐标|Y坐标|持续时间(秒 |
pressxy |
点击指定坐标 参数格式: X坐标|Y坐标 |
Tapxy |
轻击指定坐标 参数格式: X坐标|Y坐 |
jspressxy |
JS实现方式点击指定坐标 参数格式: X坐标|Y坐标 |
moveto |
在屏幕指定坐标之间滑动 参数格式: X1,Y1| X2,Y2| X3,Y3| |
timeout |
设置全局页面加载&元素出现最大等待时间 参数单位:秒 |
screenshot |
对当前屏幕进行截图 |
exAdbShell |
执行安卓adb命令 |
4.5 弹出框类
alertaccept |
点击 OK |
alertdismiss |
点击取消 |
alertgettext |
获取弹出框 TEXT |
5 FAQ
5.1 uiautomatorviewer获取元素
问题1:
uiautomatorviewer打开报错
解决方案:手动导入页面获取元素
1.在D盘根目录下创建app.png文本文件
2.在D盘根目录下创建app.uix文本文件
3.执行以下adb命名:
adb shell uiautomator dump /sdcard/app.uix
adb pull /sdcard/app.uix D:/app.uix
adb shell screencap -p /sdcard/app.png
adb pull /sdcard/app.png D:/app.png
4.运行uiautomatorviewer.bat,导入文件
目前该平台是通过client端存放包,假如要测试多个客户端是否需要部署多个client,并且文档说包是放在根目录,更没办法的是只有一个appium_config的配置项,测试多个app时,是不是只能部多台client,个人觉得有点繁琐
第二,如果要同时执行多台设备,是不是也得要多个client,没法用一个来完成,感觉不太灵活的样子,或者还有啥隐藏功能,这文档没有描述