lf知识星球banner

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-toolsbuild-toolsAndroid API(选择最新版本即可),还有扩展插件Google USB Driver,其他根据实际情况自行选择。

第二步:配置环境变量

1.    新建一个环境变量

变量名ANDROID_HOME

变量值C:\Users\xujp\AppData\Local\Android\android-sdk (以你安装目录为准,确认里面有toolsadd-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

第二步:启动设备,statusOn

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

Ø  appPackageappActivity获取方法直接百度,我使用的是aapt dump badging  app-release.apk

package:name 就是appPackage

launchable-activity: name 就是appActivity

Ø  将待测APK包放置LuckyFrameClient目录下(appname=app-release.apk


Ø  模拟器运行的设备名称,statusOn


    #设备名称 备注:如果您使用的模拟器,就是模拟器中虚拟机的名称

deviceName=TestApp

2.1.2  检查LF是否能调用appium成功

注:执行调度任务前需启动客户端、appium及模拟器

1.  WEB端创建测试计划(可不添加用例)--创建调度任务(APP测试)确定

2. 手动执行调度任务,若模拟器中自动安装APK包成功,则表示LF成功调用APPIUM

3  APP自动化测试执行

3.1 添加用例

创建项目、用例模块此处不再说明,添加用例:

3.2  用例步骤

|定位路径语法结构:属性=对应值 

示例:xpath=.//*[@id='username']

元素在页面中的定位路径,定位属性支持(idnamexpathlinktexttagnamecssselectorandroiduiautomatorclassnamepartiallinktextaccessibilityidiosclasschainiosnspredicateiosuiautomation),如果操作不涉及页面元素,此栏为空

方法|操作:自动联想出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

获取指定contexthandle,带参,指定第几个窗口

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
    发表评论
    评论通过审核后显示。
    付费知识圈