51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 2338|回复: 0
打印 上一主题 下一主题

[转贴] 如何从头编写你的 Macaca 测试用例

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2017-8-8 11:43:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前置条件
  • 安装环境
  • 新建一个 Macaca 工程目录,macaca-client 会默认跑 macaca-test 文件夹下所有 .test.js 为后缀的文件。
  1. | -- README.md
  2. | -- macaca-test
  3. |     | -- lib
  4. |           | -- webdriver-client.js
  5. |     | -- macaca-pc.test.js
  6. |     | -- macaca-mobile.test.js  
  7. | -- package.json
复制代码
  • 配置你的 package.json 文件, 最重要的是需要配置开发环境的依赖 devDependencies
  1. {
  2.     "name": "macaca-test-sample",
  3.     "version": "0.1.0",
  4.     "description": "macaca-test-sample",
  5.     "keywords": [
  6.         "sample"
  7.     ],
  8.     "dependencies": {
  9.     },
  10.     "devDependencies": {
  11.         "wd-next": "*",
  12.         "macaca-chromedriver": "*",
  13.         "wd": "*"
  14.     },
  15.     "author": "your name",
  16.     "email": "your email",
  17.     "license": "MIT"
  18. }
复制代码
  • 在项目根目录下执行 cnpm i 安装 node 模块

你要测什么?A. PC(跳到1)
B. iOS/Android(跳到2)
1. 桌面浏览器端测试
  • PC 用例 API:wd-next 是我们用 Node.js 对 selenium-webdriver 做了一层封装,接口与 WebDriver 标准统一。
  • 引用 macaca-chromedriver ,这是我们用 Node.js 对 ChromeDriver 进行的封装,ChromeDriver 最终会根据参数实例化一个 WebDriver 实例,你最终看到的就是运行了一个 standalone 的 Chrome 浏览器。
  1. // 文件 macaca-pc.test.js
  2. var path = require('path');
  3. var wd = require('wd-next');  // 引用 wd-next
  4. var macacachromedriver = require('macaca-chromedriver'); // 引用 macaca-chromedriver

  5. module.exports = (options) => {
  6.   var binPath = macacachromedriver.binPath;
  7.   process.env.PATH = `${process.env.PATH}:${path.dirname(binPath)}`;

  8.   return wd;
  9. };
复制代码
  • 查询 wd-next 编写测试用例。编写用例前,一定要先初始化一个 promise wd.initPromiseChain(),之后 it 中的所有用例的方法都是使用 promise 链式调用方法
  1. // 文件 macaca-pc.test.js
  2. var path = require('path');
  3. var wd = require('wd-next');  // 引用 wd-next
  4. var macacachromedriver = require('macaca-chromedriver'); // 引用 macaca-chromedriver

  5. module.exports = (options) => {
  6.   var binPath = macacachromedriver.binPath;
  7.   process.env.PATH = `${process.env.PATH}:${path.dirname(binPath)}`;

  8.   /*
  9.   * 开始编写测试用例
  10.   */
  11.   describe('macaca desktop sample', function () {
  12.     this.timeout(5 * 60 * 1000);

  13.     const driver = wd.initPromiseChain(); // 初始化一个promise
  14.     const initialURL = 'https://www.baidu.com';

  15.     before((done) = > {
  16.       return driver
  17.           .init()
  18.           .setNormalSize()
  19.           .end(done);
  20.     });

  21.     it('#0 should go into macaca', function () {
  22.       return driver
  23.           .get(initialURL)
  24.           .sleep(3000);
  25.     });

  26.     it('#1 should works with macaca', function () {
  27.       return driver
  28.           .elementById('kw')
  29.           .sendKeys('macaca')
  30.           .sleep(3000)
  31.           .elementById('su')
  32.           .click()
  33.           .sleep(5000)
  34.           .source()
  35.           .then(function (html) {
  36.             html.should.containEql('macaca');
  37.           })
  38.           .takeScreenshot();
  39.     });
  40.   });

  41.   return wd;
  42. };
复制代码

  • 在工程根目录下执行命令行 macaca run Bravo! 就可以看到啦~

2. 移动端测试
  • iOS/Android 用例API: 我们推荐使用 wd.js 或者 webdriverio
  • 建议可以根据自己的 APP 封装一层自己的 webdriver-client, 同时适配 iOS 和 Android。在 macaca-test/lib/ 下新建文件 webdriver-client.js,以 login 为例
iOS 代码实现如下:
  1. module.exports = function(username, password) {
  2.   return this
  3.     .waitForElementByXPath('//UIATextField[1]')
  4.     .sendKeys(username)
  5.     .waitForElementByXPath('//UIASecureTextField[1]')
  6.     .sendKeys(password)
  7.     .sleep(1000)
  8.     .sendKeys('\n')
  9.     .waitForElementByName('Login')
  10.     .click()
  11.     .sleep(5000);
  12. };

复制代码
但是由于 Android 下元素名会不同,实现如下:
  1. module.exports = function(username, password) {
  2.   return this
  3.     .waitForElementsByClassName('android.widget.EditText', {}, 120000)
  4.     .then(function(els) {
  5.       return els[0];
  6.     })
  7.     .sendKeys(username)
  8.     .sleep(1000)
  9.     .elementsByClassName('android.widget.EditText')
  10.     .then(function(els) {
  11.       return els[1];
  12.     })
  13.     .sendKeys(password)
  14.     .sleep(1000)
  15.     .waitForElementByName('Login')
  16.     .click()
  17.     .sleep(5000);
  18. };
复制代码

可以查看我们已经写好的例子
注意!这不是通用的 webdriver-client ,你需要根据自己的 APP 封装出自己的 webdriver-client。
  • 引入你的 webdriver-client 模块,查询 wd.js, 开始编写用例。
  1. // 这里是 wd 实例初始化
  2. var wd = require('./lib/webdriver-client')({
  3.   platformName: platform,
  4.   app: 'path/to/your/app'
  5. });

  6. describe('macaca mobile sample', function() {
  7.   this.timeout(5 * 60 * 1000);

  8.   var driver = wd.initPromiseChain();

  9.   before(function() {
  10.     return driver.initDriver();
  11.   });

  12.   after(function() {
  13.     return driver
  14.       .sleep(1000)
  15.       .quit();
  16.   });

  17.   it('#1 should login success', function() {
  18.     return driver
  19.       .login('12345678', '111111')
  20.       .sleep(1000);
  21.   });

  22.   ...

  23. });
复制代码
在工程根目录下执行命令行 macaca run --server 用例就可以跑起来了。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-4-25 14:10 , Processed in 0.064821 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表