推荐一款声明式 HTTP 自动化测试框架
发布于 7 年前 作者 sigoden 3011 次浏览 来自 分享

编写完 API 接口后,我们需要测试其功能。手动一条一条用 Postman 和 curl 测试也是一种方式,但是缺点显而易见。 严谨精明的程序员常常会编写一些测试程序来完成这项工作。 一般是生成请求数据,再通过 http 发送请求,最后断言响应是否匹配预期。

下面是就注册和修改用户信息接口的测试举例, Node.js 下实现是这样的:

const { assert } = request('chai')

let registJohnToken

it('regist', function() {
  return request(app)
    .post('/api/users')
    .set('Accept', 'application/json')
    .send({
      user: {
        email: 'john@jacob.com',
        password: 'johnnyjacob',
        username: 'johnjacob'
      }
    })
    .expect(200)
    .then(response => {
      let user = response.body.user
      assert.isDefined(user)
      assert.equal(user.email, 'john@jacob.com')
      assert.equal(user.username, 'johnjacob')
      assert.isDefined(user.token)
      registJohnToken = user.token
    })
});

it('update user data', function () {
  return request(app)
    .put('/api/user')
    .set('Accept', 'application/json')
    .set('Authorization', 'Token ' + registJohnToken)
    .send({
      user: {
        username: 'john'
      }
    })
    .expect(200)
    .then(response => {
      let user = response.body.user
      assert.isDefined(user)
      assert.equal(user.username, 'john')
    })
})

如何使用 htte 来实现这两个测试呢?

首先我们需要编写一个配置文件 .htte.yaml 来描述接口

url: http://localhost:3000/api
apis:
  register: 
    method: post
    uri: /users
  updateUser:
    method: put
    uri: /user

然后我们编写测试 user.yaml

units:
  - describe: register user
    api: register
    name: registerJohn
    req:
      body:
        user:
          email: john@jacob.com
          password: johnnyjacob
          username: johnjacob
    res:
      body:
        user:
          email: john@jacob.com
          username: johnjacob
          token: !@exist
  - describe: update user data
    api: updateUser
    req:
      headers:
        Authorization: !$concat ['Token', ' ', !$query $$registerJohn.res.body.user.token]
      body:
        user:
          username: john
    res:
      body:
        user: !@object
          username: john

改写完成.

我们可以使用 htte 命令行工具运行测试

$ htte # 执行测试, 如果找不到命令,可以使用 npm i -g htte 安装

RunUnits: 
  user:
    regist user:
      ✓
    update user data:
      ✓

上面的接口截取自 realworld项目。 该项目采用 htte 进行接口测试,可以作为例子学习如何使用 htte。

特性

  • 使用声明的方式 (YAML) 编写测试
  • 不与后端开发语言耦合
  • 无技能要求,不需要会编程也能编写测试
  • 直白描述请求需要的数据和响应返回的数据, 简单,易理解,已编写
  • 可以使用插件自定义生成请求数据及断言响应数据,提供了灵活性又不失简洁
  • 提供 jsonpath 变量机制处理测试接口间的数据耦合,简单方便安全

项目开源 sigoden/htte

回到顶部