- 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
- 陈铁跃
- 19858
- 最后编辑:陈铁跃 于 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 ( 已经包含npm6.12.1的版本,npm是node.js的包管理工具)
安装完成后检查一下版本有没有问题,如下图:
1.2 安装安卓的SDK
安卓SDK下载地址: http://tools.android-studio.org/index.php/sdk
第一步:安装
在安装目录下有一个SDKManager.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. AndroidSDK配置完成,接下来验证配置是否成功
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,没法用一个来完成,感觉不太灵活的样子,或者还有啥隐藏功能,这文档没有描述