lf知识星球banner

APP自动化示例

2019-12-10 17:26:40
陈铁跃
20619
最后编辑:陈铁跃 于 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,导入文件

评论列表
虎子 2021-09-27 11:07:34 回复
你好。目前是想做到在一台客户端上,连接多台手机跑同一个测试用例。平台能做到嘛?
子薰 2021-04-29 16:25:19 回复
请问一下xpath=*//android.widget.TextView[@@text='xxx']的时候appium显示text是乱码无法定位怎么解决呢,客户端启动时名称也是乱码
Laughing 2020-10-16 16:22:40 回复
exadbshell怎么用,能否截图
Seagull 2020-10-23 14:05:57 回复
LF平台在报错的情况下,会自动截图的
alice 2020-09-17 16:47:38 回复
ios的需要mac环境吗,windows平台可以直接执行吗?
Seagull 2020-09-21 17:53:31 回复
IOS需要MAC环境,windows只能使用安卓的系统
alice 2020-08-11 17:17:31 回复
这个平台支持ios吗?
Seagull 2020-08-20 17:51:48 回复
支持的
莫先生 2020-07-23 15:24:29 回复
你好,请问下真机的IOS和安卓,appium应该怎么配置呢,多谢!
Seagull 2020-07-27 15:45:38 回复
一样的配置
HarryClinton 2020-07-22 23:45:02 回复
想问一下目前平台支不支持使用真机测试呀?
Seagull 2020-07-27 15:45:52 回复
支持
tian 2020-06-30 15:30:15 回复
能出一个iOS的示例么
张sir 2020-03-30 23:09:31 回复
有个疑惑:
目前该平台是通过client端存放包,假如要测试多个客户端是否需要部署多个client,并且文档说包是放在根目录,更没办法的是只有一个appium_config的配置项,测试多个app时,是不是只能部多台client,个人觉得有点繁琐
第二,如果要同时执行多台设备,是不是也得要多个client,没法用一个来完成,感觉不太灵活的样子,或者还有啥隐藏功能,这文档没有描述
Seagull 2020-03-31 10:00:09 回复
目前一个客户端,只支持同时测试一个APP
1/1
发表评论
评论通过审核后显示。
付费知识圈