[关闭]
@garygchai 2017-02-17T17:49:17.000000Z 字数 2092 阅读 1836

UI自动化测试开发与使用教程

自动化测试


安装依赖

运营后台项目的ui自动化测试是基于 egg 的单元测试下面开发的,所以只需要额外安装 nightmare 即可,至于 egg-binmocha 直接使用原有就行。

安装 nightmare
$ cd yoda-xiss & npm install nightmare --save-dev

mocha用法简单介绍

文档胜过前言万语:https://mochajs.org/

  1. var assert = require('assert');
  2. describe('Array', function() {
  3. describe('#indexOf()', function() {
  4. it('should return -1 when the value is not present', function() {
  5. assert.equal(-1, [1,2,3].indexOf(4));
  6. });
  7. });
  8. });

describe 用于描述一组或单个测试用例,it 描述单个测试用例,assert 用于做断言。

执行结果

  1. $ ./node_modules/mocha/bin/mocha
  2. Array
  3. #indexOf()
  4. should return -1 when the value is not present
  5. 1 passing (9ms)

上面用到的 assert 就是断言库中的一种,在 mocha 中,我们可以任意选择断言库:

should.js - 行为测试的方式
expect.js - 使用 expect() 的方式
chai - 支持expect(), assert() 和 should 等方式断言

单元测试用例通常也会执行异步的代码,在 mocha 中通过 done() 方法通知 mocha 方法执行结束。

  1. describe('User', function() {
  2. describe('#save()', function() {
  3. it('should save without error', function(done) {
  4. var user = new User('Luna');
  5. user.save(function(err) {
  6. if (err) done(err);
  7. else done();
  8. });
  9. });
  10. });
  11. });
  1. describe('hooks', function() {
  2. before(function() {
  3. // runs before all tests in this block
  4. });
  5. after(function() {
  6. // runs after all tests in this block
  7. });
  8. beforeEach(function() {
  9. // runs before each test in this block
  10. });
  11. afterEach(function() {
  12. // runs after each test in this block
  13. });
  14. // test cases
  15. });

以上是 mocha 常用的功能,更多用法请参考文档

nightmare用法简单介绍

一言不合上文档:https://github.com/segmentio/nightmare

mocha 与 nightmare 结合使用

我们就把 nightmare 当做一个异步执行的方法,在 nightmare 执行结束或者出错调用一下 mocha 的 done() 方法就完成完成 nightmare 的执行。

Example:

  1. var Nightmare = require('nightmare');
  2. var expect = require('chai').expect; // jshint ignore:line
  3. describe('test duckduckgo search results', function() {
  4. it('should find the nightmare github link first', function(done) {
  5. var nightmare = Nightmare()
  6. nightmare
  7. .goto('https://duckduckgo.com')
  8. .type('#search_form_input_homepage', 'github nightmare')
  9. .click('#search_button_homepage')
  10. .wait('#zero_click_wrapper .c-info__title a')
  11. .evaluate(function () {
  12. return document.querySelector('#zero_click_wrapper .c-info__title a').href
  13. })
  14. .end()
  15. .then(function(link) {
  16. expect(link).to.equal('https://github.com/segmentio/nightmare');
  17. done();
  18. })
  19. });
  20. });

运行

$ mocha

运行

查看报告

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注