您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
创建基于Appium + Cucumber的手机端自动化测试
 
作者昵称:快客侠
   次浏览      
 2019-12-9
 
编辑推荐:
本文详细介绍如何使用在github上开源项目语言JavaScript创建app自动化脚本的方法,希望对您的学习有所帮助。
本文来自于公众号-聆播微布 ,由火龙果软件Alice编辑、推荐。

前言

现在自动化手机应用用的最多的工具的就是Appium,Appium作为流行的移动设备自动化工具,可以对Android和iOS应用进行自动化测试。Appium作为自动化测试的服务器,需要客户端脚本使用自动化框架和自动化库来驱动,客户端脚本可以使用多种语言包括JavaScript、Python、Java、.NET等等。我们这里使用时下在github上开源项目最流行语言JavaScript编写自动化脚本。JavaScript也是全栈工程师开发用的最适合的语言。

本文选用了流行的行为驱动(BDD)框架Cucumber.js以及自动化库webdriverio作为框架,来开发自动化脚本。它们是完全开源的,有完善的文档和社区支持。开发工具选用了Cucumber.js专用的开发工具CukeTest。

这几个框架和工具可在下面的链接免费获得:

Cucumber.js: https://github.com/cucumber/cucumber-js

webdriverio: https://www.npmjs.com/package/webdriverio

CukeTest: http://cuketest.com

步骤

1.创建项目

打开CukeTest,新建项目,项目模板选择 Mobile,填写项目路径,点击创建,即可完成项目创建。

模板提供了缺省的代码,只要稍作修改即可适用您的移动设备自动化测试。

2.修改设备参数

创建好的项目代码中,feature文件即用例的定义,以及代码都放在features目录下。这也是Cucumber的规范。

在 features/support/get_driver.js文件中,默认的代码如下。它创建了驱动Appium的driver对象,并导出给其它的调用文件:

const webdriverio = require('webdriverio');
//设置被测应用参数
let options = {
desiredCapabilities: {
platformName: "Android",
deviceName: "xxxxxxxx", //设备序列串号
platformVersion: "5.1", //系统平台版本
appPackage: "cn.com.xxx", //package 名字
appActivity: "cn.com.xxx", //启动activity 名字
resetKeyboard: true,
noReset: true,
unicodeKeyboard: true
},
host: "127.0.0.1",
port: 4723
}
//根据参数配置创建WebDriverIO实例;
function createDriver() {
const client = webdriverio.remote(options);
return client;
} exports.driver = createDriver();

根据你的设备以及相关信息输入修改对应内容。可以参考 Appium 官方文档中关于 Desired Capabilities的具体描述进行相关配置修改。 http://appium.io/docs/en/writing-running-appium/caps/

需要注意的是,安卓应用的自动化测试请配置好Android SDK环境;测试iOS应用请在Mac上操作,并下载CukeTest的Mac版本。

3.项目运行

创建项目时依赖包已经配置在package.json中。使用 npm install 安装项目运行依赖包即可。启动Appium,将设备连接到电脑,点击CukeTest 运行项目按钮即可进行项目运行。

4.编码

Cucumber.js本身就是一个自动化测试的框架,基于行为驱动意味着根据被测应用的外部行为描述被测应用。*.feature文件包含了测试用例,脚本代码放在step_definitions目录下。按照Cucumber.js的推荐的方法先写下测试用例,然后再实现测试用例,会让自动化脚本变得非常清晰明了。下面我们就按照这一流程开发自动化脚本。

1. 编辑feature文件

以之前介绍的iOS Demo应用为例开发自动化,具体请参考文章“构建行为驱动的iOS自动化测试”。首先在feature1.feature文件中编辑脚本:

# language: zh-CN
功能: iOS Demo 操作
常见的增删改查操作
场景: 添加一个新的记录
假如点击添加按钮
当meal name 中输入"abcdefg"
同时点击图片从相册中选择一张图片
并且选择4颗星
当点击保存按钮
那么首页应该会有4个列表

对应的可视化界面为:

2. 生成框架代码

打开step_definitons/definitions1.js ,点击操作步骤后面的灰色按钮,会自动生成Node.js的框架代码。后面要做的就是实现这些框架函数。Node.js文档请参考(https://nodejs.org/dist/latest-v8.x/docs/api/)

const { Given, When, Then } = require('cucumber');
const { driver } = require('../support/get_driver');
const assert = require('assert');
//// 你的步骤定义 /////
Given(/^点击添加按钮$/, async function () {
return 'pending';
});

When(/^meal name 中输入"([^"]*)"$/, async function (arg1) {
return 'pending';
});
When(/^点击图片从相册中选择一张图片$/, async function () {
return 'pending';
});
When(/^选择(\d+)颗星$/, async function (arg1) {
return 'pending';
});
When(/^点击保存按钮$/, async function () {
return 'pending';
});
Then(/^首页应该会有(\d+)个列表$/, async function (arg1) {
return 'pending';
});

3. 完善自动化代码

使用webdriverio 的API实现步骤定义的操作。

const { Given, When, Then } = require('cucumber');
const {driver} = require('../support/get_driver');
const assert = require('assert');
//// 你的步骤定义 /////
Given(/^点击添加按钮$/, async function () {
let add = await driver.element('~Add')
await driver.click('~Add');
});
When(/^meal name 中输入"([^"]*)"$/, async function
(text) {
await driver.setValue('//*[@name="FoodTracker"]
/XCUIElementTypeWindow
[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther
[1]/XCUIElementTypeOther
[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther
[1]/XCUIElementTypeOther
[1]/XCUIElementTypeTextField[1]',text)
await driver.hideDeviceKeyboard();
});
When(/^点击图片从相册中选择一张图片$/, async
function () {
await driver.click('~defaultPhoto');
await driver.pause(2000);

await driver.click('~Moments')
await driver.pause(2000);
let ele = await driver.element('//XCUIElementTypeCell
[@name="Photo, Landscape, August 09, 2012, 2:52 AM"]')
await driver.click('//XCUIElementTypeCell[@name="Photo,
Landscape, August 09, 2012, 2:52 AM"]')
});
When(/^选择(\d+)颗星$/, async function (arg1) {
await driver.click('//XCUIElementTypeButton[@name="
Set 4 star rating"]');
});
When(/^点击保存按钮$/, async function () {
await driver.click('#Save');
});
Then(/^首页应该会有(\d+)个列表$/, async function
(num) { let itemlist = await driver.elements('//XCUIElementTypeApplication[@name=
"FoodTracker"]
/XCUIElementTypeWindow[1]/XCUIElementTypeOther
/XCUIElement
TypeOther
/XCUIElementTypeOther/XCUIElementTypeTable
/XCUIElementTypeCell')
return assert.equal(num,itemlist.value.length)
});

可以看到,元素的操作使用了webdriverio的API。而元素的XPath的查找主要使用Appium desktop 版的元素查找器,具体可以查阅Appium相关文档。

4.运行

在CukeTest中运行项目,既可看到整个UI自动化的运行情况,运行结束后自动生成测试报告。

总结

我们为大家展示了使用Appium + webdriverio 开发一个iOS Demo应用自动化的脚本,同样的,Android 应用自动化也是类似方式进行。

 
   
次浏览       
相关文章

微服务测试之单元测试
一篇图文带你了解白盒测试用例设计方法
全面的质量保障体系之回归测试策略
人工智能自动化测试探索
相关文档

自动化接口测试实践之路
jenkins持续集成测试
性能测试诊断分析与优化
性能测试实例
相关课程

持续集成测试最佳实践
自动化测试体系建设与最佳实践
测试架构的构建与应用实践
DevOps时代的测试技术与最佳实践