演练:创建Android自动化测试
目标
- 掌握如何定位手机应用控件
- 掌握Android手机自动化测试流程
环境
- 前提条件
- 配置Android SDK环境
- 配置JDK环境
- 安装Appium
- 准备Android手机或者模拟器
- 被测应用:Appium自带的应用API Demo
下面为具体步骤
新建项目
打开CukeTest,【文件】--【新建项目】 项目模板选择【mobile】,分别输入【项目名】和【项目路径】,点击【创建】。
CukeTest会自动创建一个手机自动化测试脚本。要成功运行这个项目,请在项目目录下执行 npm install
命令安装项目依赖。
准备被测应用
下载样例应用,并安装到测试设备:https://github.com/appium-boneyard/sample-code/blob/master/sample-code/apps/ApiDemos/bin/ApiDemos-debug.apk
编辑用例
打开文件,在【可视】界面中输入如下内容
对应的【文本】视图内容为:
# language: zh-CN
功能: appium demo
使用CukeTest以BDD的方式来做手机端的自动化测试样例。
场景: API Demo 页面跳转
假如点击App跳转到App页面
当在App页面中点击Action Bar
那么页面应该跳转到Action Bar页面,页面中应该包含"Action Bar Mechanics"
完善自动化测试代码
获取设备串号
adb devices List of devices attached Y15QKCPH278J4 device
获取应用package并启动activity 命令行输入
adb logcat | findstr START
手动打开 Demo API 应用,从日志中获取。11-02 14:03:24.049 1581 1646 I ActivityTaskManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=io.appium.android.apis/.ApiDemos bnds=[789,1182][1038,1500]} from uid 10210
取到app的 package 为
io.appium.android.apis
,activity 为.ApiDemos
。修改driver定义代码
打开
support\get_driver.js
,分别修改devicesName
,appPackage,appActivity的内容。修改完成后为:JavaScriptconst webdriverio = require('webdriverio'); //设置被测应用参数 let options = { hostname: "127.0.0.1", port: 4723, path: '/wd/hub', logLevel: "info", capabilities: { automationName: "uiautomator2", platformName: "Android", deviceName: "Y15QKCPH278J4", //设备序列串号 platformVersion: "11.0",//系统平台版本 appPackage: "io.appium.android.apis", //package 名字 appActivity: ".ApiDemos", //启动activity 名字 resetKeyboard: true, noReset: true, unicodeKeyboard: true }, } //根据参数配置创建WebDriverIO实例; let client; async function createDriver() { client = await webdriverio.remote(options); return client; } function getDriver() { return client; } exports.createDriver = createDriver; exports.getDriver = getDriver;
自动化测试代码 打开
features/feature1.feature
文件,点击 step 后面的灰色按钮,生成自动化脚本样例。使用uiautomatorviewer 工具定位到客户端元素
根据元素定位信息,完成对相关操作的代码实现"step_definitons/definitoins.js":
JavaScriptconst { Given, When, Then } = require('cucumber') const assert = require('assert'); const { getDriver } = require('../support/get_driver'); //// 你的步骤定义 ///// Given("点击App跳转到App页面", async function () { let ele = await getDriver().$('android=new UiSelector().text("App").index(2)'); this.attach(await ele.saveScreenshot("reports/App.png"), 'image/png'); await ele.click(); }); When("在App页面中点击Action Bar", async function () { await getDriver().$('android=new UiSelector().text("Action Bar").index(0)').click(); }); Then("页面应该跳转到Action Bar页面,页面中应该包含{string}", async function (text) { let texts = await getDriver().$('android=new UiSelector().textStartsWith("Action")').getText(); return assert.ok(texts.includes(text)); });
运行
启动appium
appium [Appium] Welcome to Appium v1.22.3 [Appium] Appium REST http interface listener started on 0.0.0.0:4723
运行项目 点击运行项目按钮,可以看到手机自动化运行。