Macaca [基于 Node.js 的自动化测试] - 如何测试命令行工具

达峰的夏天 · 2016年09月26日 · 最后由 达峰的夏天 回复于 2016年10月26日 · 1407 次阅读

上一篇 - Macaca 支持 Node.js, Java 和 Python

介绍一下如何测试命令行工具,注意:这里说的是命令行的单元测试,不是 UI 单元测试

介绍一款工具

command-line-test 是刚出炉的一款专门测试命令行工具,她只提供进程操作最初级的封装,其余你的测试框架、风格、断言库等都可以与她相兼容使用。

开源地址: command-line-test

举个例子

Macaca 命令行客户端做为例子,我们需要知道本次改动是否影响到了 Macaca 工具的基础命令,例如查看当前 Macaca 命令行工具版本:

$ macaca -v

正确情况下会输出1.1.3,与当前项目配置相一致,而且不会产生错误和标准错误,只有标准输出,所以可以用如下方式断言。

const path = require('path');
const EOL = require('os').EOL;
const CliTest = require('command-line-test');

const pkg = require('../package');

const binFile = path.resolve(pkg.bin.macaca);

describe('macaca command-line test', function() {

  it('`macaca -v` should be ok', function *() {
    var cliTest = new CliTest();
    var res = yield cliTest.execFile(binFile, ['-v'], {});
    res.stdout.should.containEql(pkg.version);
  });

  it('`macaca -h` should be ok', function *() {
    var cliTest = new CliTest();
    var res = yield cliTest.execFile(binFile, ['-h'], {});
    var lines = res.stdout.trim().split(EOL);
    lines[0].should.be.equal(pkg.description);
  });

  it('`macaca` should be ok', function *() {
    var cliTest = new CliTest();
    var res = yield cliTest.execFile(binFile, [], {});
    var lines = res.stdout.trim().split(EOL);
    lines[0].should.be.equal(pkg.description);
  });

  it('`macaca run --verbose` should be ok', function *() {
    var cliTest = new CliTest();
    var res = yield cliTest.spawn(binFile, ['run', '--verbose']);
    res.stdout.should.containEql('webdriver sdk launched');
  });

});

这样,macaca -v, macaca -h, macaca run 等基础的命令就不会出现低级错误,导致产品不可用,通过仔细分析和完善用例,可以达到很高的单元覆盖率。示例除了 Macaca 命令行,还有其他几个命令行工具的示例做为参考。


欢迎讨论,互相学习。

微博: http://weibo.com/xudafeng
Github: https://github.com/xudafeng

下一篇 - 如何选择其他测试框架

共收到 5 条回复 时间 点赞
达峰的夏天 [该话题已被删除] 中提及了此贴 09月26日 10:16

作为 Macaca 用户是不是更放心了呢?

不放心,又是 nodejs 每次新东西能 java python 同步提供文档和样例不

我们的命令行是 Node.js 的哦,不需要提供 java python 呀

达峰的夏天 [该话题已被删除] 中提及了此贴 09月26日 11:02

每个 it 模块都有 var cliTest = new CliTest();
这个可以提到 it 模块外面吗?

可以啊

达峰的夏天 [该话题已被删除] 中提及了此贴 10月26日 18:17
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册