Chakram学习笔记 - 基本概念

作者: 做测试的DanteYu | 来源:发表于2017-11-23 18:27 被阅读11次

    什么是Chakram

    Chakram可以让API testing更简单,它可以让你写出直接易懂的E2E测试,保证JSON REST endpoints工作的正确性。不过,暂不支持非JSON的数据格式。

    Chakram是基于node.jsmochachairequest打造的,所以Chakram可以提供BDD式的测试风格和处理promises。

    整个Chakram有两大模块组成:

    1. chakram - 包含了很多HTTP操作,用于API Testing
    2. chakram-expectation - 扩展了chai.expect,加上了HTTP matcher,用于判断HTTP相关内容

    Chakram主要特点

    • 提供HTTP相关的验证
      • 验证status code
      • 验证cookie
      • 验证header
      • 验证JSON和schema
      • 验证compression
      • 验证响应时间
    • 基于mocha和chai的BDD的风格
    • promise友好
    • 自定义的验证

    Chakram的安装运行

    Chakram的运行需要nodejs环境,通过npm install --save-dev chakram可以把Chakram作为development dependency加入到项目中。

    Mocha用来运行Chakram测试,所以Mocha的各种功能都可以和Chakram一起使用。本质上讲,我们可以把Chakram看成一个API Testing的库,测试框架本质还是Mocha

    功能介绍 HTTP specific assertion

    Chakram提供API Testing中最常用的功能 - HTTP request和response验证。

    Chakram使用request library作为请求处理的库,基于这个库(as a helper)提供了很多简单好用的方法来覆盖常用的HTTP request方法。

    发起请求 HTTP GET

    chakram.get(url, params)发起了一个HTTP请求。返回值是一个ChakramResponse对象,这个对象封装了一次HTTP请求的结果。

    验证response

    Chakram提供了很多验证response的方法,类似于chaiChakramexpect接口提供了BDD风格的验证方法。我们只需要把response作为参数传给chakram.expect,然后接着使用Chakram提供的验证方法就可以了。还可以使用Chai提供的chains getter来提供可读性。一旦response被接受到了,验证就立即开始。

    此外,Chakram.expect继承了Chai所有的属性和验证方法,可以任意使用。

    Waiting

    由于语言和库的特殊性,API testing在此时都是异步执行的。由于Chakram是基于Mocha的,所以支持异步模式和promise都不在话下。在Mocha中,通过在it()中加上回调函数,可以让it()等到这个回调函数被执行才结束测试;对于promise,需要在it()中直接返回即可. 在Chakram中,通过在it()中返回的promise对象,会保证测试等待请求和验证的完成。

    chakram.wait就用来保证测试会等到所有的请求和验证完成后才结束。Chakram也会让所有没有等待验证结束的测试失败。chakram.wait()返回值是一个promise对象,当所有验证都完成的时候,这个promise对象就会被生成实现。

    Complex Promise Use

    因为chakram大量使用了promises作为return value,所以我们可以使用(new Promise()).then() 这样的chains方法来描述请求和验证。

    Example

    综上所述,下面来看一个最简单的发出请求和验证response的例子

    var chakram = require('../node_modules/chakram/lib/chakram.js'),
        expect = chakram.expect;
    
    const testURL = "https://api.douban.com/v2/movie/subject/26363254";
    
    describe("I can get movie information from douban", function () {
      it("should have year 2017 for movie Wolf Warrior 2", function () {
        let response = chakram.get(testURL);
        expect(response).to.have.status(200);
        expect(response).to.have.header('content-type', 'application/json; charset=utf-8');
        expect(response).to.comprise.of.json({
          "year": "2017"
      });
        return chakram.wait();
      });
    
      it('should have Wu Jing Starring', function(){
        return chakram.get(testURL).then(function(response){
          let expected_id = response.body.casts[0].id;
          expect(expected_id).to.equal("1000525");
        })
      });
    });
    

    相关文章

      网友评论

        本文标题:Chakram学习笔记 - 基本概念

        本文链接:https://www.haomeiwen.com/subject/fqqtbxtx.html