接口测试 5. 基于 Postman 的 API 自动化测试

solo · 2017年08月01日 · 最后由 Chery.Peng 回复于 2017年08月10日 · 2321 次阅读

本来打算自己写,发现有一篇写得很好的,我就不重复造轮子了。直接转载。(原文链接:https://segmentfault.com/a/1190000005055899

  1. 安装
    两种安装方式,我热衷于以 chrome 插件形式安装
    Chrome 插件
    Mac App

  2. 发送请求
    Postman 最基础的功能就是发送 http 请求,支持 GET/PUT/POST/DELETE,还有很多我不认识的 http 方法。

通过填写 URL、header、body 等就可以发送一个请求,这对于我们平时做一些简单的测试是够用的。

如果你的应用需要用到登录验证,可以通过填写 Authorization 以满足你的需求。
另外也可以使用 Chrome 浏览器已经登录的 cookie,同步浏览器的 cookie 需要安装另一个插件 Interceptor(拦截机)。它可以在你发送请求时帮你将已经存在于浏览器的数据随 header 请求,另外它可以将浏览器的请求写到 postman 的历史中(需要开启 “Request Capture”
)。

  1. 集合 每次配置完一个请求都可以保存到一个集合中,如此一来,下次测试可以直接从集合中找到你要执行的测试。

集合不单单只有分类和存储功能,Postman 支持一键运行整个集合内的测试。

我们可以把一个请求当做一个 Test Case, 那么集合就是一个 Test Suite。

每个集合都对应一个 URL,可以通过 Share 按钮获得你的集合 URL,这个 URL 可以用于分享给你的队友,或者用于 Newman 执行。

Newman 是 Postman 的一个命令行工具,可以让 API 测试加入到你的持续集成任务上。

  1. 环境变量 当做 API 测试时,你可能经常需要切换不同的设置。比如,开发环境的 API 设置、测试环境和产品环境的 API 设置,你可能需要在不同的测试环境下使用不同的配置。为此 Postman 提供了环境变量,这样你就可以通过修改环境变量,而不需修改请求了。

你可以通过右上角的下拉菜单选择环境,可以通过点击右侧的小眼睛来查看当前环境变量。

  1. API 测试 Postman 测试沙箱是一个 JavaScript 执行环境,可以通过 JS 脚本来编写 pre-requist 和测试脚本。pre-requist 可以用来修改一些默认参数。

Postman 沙箱集成了几个工具库,比如 lodash、SugarJs、tv4,还有一些内置函数如 xml2JSON..

tv4 用于验证 JSON 数据,通过编写 JSON Schema 来验证,JSON Schema 的语法请参照这里
测试语法:

// description 为该测试的描述
// value 只要 Boolean(value) 不等于 false,这个测试就是 PASS
tests[description] = value

// example
tests["Status code is 200"] = responseCode.code === 200;
我们以 github status 的接口为例:
url: https://status.github.com/api/status.json

tests["Status code is 200"] = responseCode.code === 200;

// validate json schema
var schema = {
properties: {
status: {type: 'string'},
last_updated: {type: 'string'}
}
};

tests["Valid data schema"] = tv4.validate(responseBody, schema);

// check status
var jsonData = JSON.parse(responseBody);
tests["Github status is good"] = jsonData.status === 'good';
运行结果:

示例
http://httpbin.org/ 启发,Postman 也提供了一套入门的 API http://dump.getpostman.com/ ,接下来我们将利用这套 API 做完整的测试。

  1. 创建一个环境变量

点击 Manage Environments,然后点击 Add

添加一个 URL 变量,我们会在后续使用

  1. 请求一个新用户 我们需要通过发送一个 POST 请求到{{url}}/blog/users/来创建一个用户,并需要附加下面的参数到请求 body 中:

注:记得将环境变量切换到 dump.getpostman.com,这样我们才能获取到{{url}}变量
{
"username": "abhinav",
"password": "abc"
}

这个接口现在好像不支持创建用户了,我们假设已经创建成功了,因为这不影响我们后续操作

  1. 获取用户的 Token Token 用于授予终端请求和访问权限的。我们可以通过 POST 用户名和密码请求 {{url}}/blog/users/tokens/ 来获取用户的 Token,这个 Token 将用于其他请求中。

{
"username": "abhinav",
"password": "abc"
}

  1. 格式化 JSON 我们需要从上面的请求结果中获取到用户 Token 和用户 ID,并将这两个值保存到环境变量中,以供后续使用。将下面这段代码添加到测试编辑器中:

var data = JSON.parse(responseBody);

if (data.token) {
tests["Body has token"] = true;
postman.setEnvironmentVariable("user_id", data.user_id);
postman.setEnvironmentVariable("token", data.token);
}
else {
tests["Body has token"] = false;
}

  1. 创建一篇文章 如果上面的测试是在主窗口或者集合运行器中执行,那么 user_id 和 token 会自动地被添加到环境变量中。 为了创建一篇文章,我们需要发送一个 POST 请求到 {{url}}/blog/posts ,并将 user_id 和 token 添加在 URL 参数中。POST 的请求 Body 如下:

{
"post": "This is a new post"
}

  1. 检查返回数据 如果上述的请求成功的话将返回一个带有 post_id 的 JSON。我们将在这里验证是否创建文章成功,并且将文章 ID 保存到环境变量。将下面这段代码添加到测试编辑器中:

var data = JSON.parse(responseBody);

if (data.post_id) {
tests["post_id found"] = true;

postman.setEnvironmentVariable("post_id", data.post_id);
}
else {
tests["post_id found"] = false;
}

  1. 获取一篇文章并验证 JSON 我们将通过上面返回的文章 ID 来获取我们创建的文章。这里我们将用到 Postman 内置的 tv4 JSON 验证器来检查服务器响应的 JSON。 创建一个 GET 请求到 {{url}}/blog/posts/{{post_id}},并将下面这段代码添加到测试编辑器中:

var schema = {
"type": "object",
"properties": {
"content": "string",
"created_at": "integer",
"id": "integer"
},
"required": ["content", "created_at", "id"]
};

var data = JSON.parse(responseBody);

var result = tv4.validateResult(data, schema);

tests["Valid schema"] = result.valid;

  1. 一键运行与分享集合 我们将上述每一个测试保存到 PostmanTest 的集合中,这样我们就可以在任何时候打开和运行你想要的测试,并且可以一键运行所有,或者将集合分享给你的小伙伴,也可以获取嵌入式代码(如下面的按钮)。
共收到 2 条回复 时间 点赞

不错

—— 来自 TesterHome 官方 安卓客户端

感谢搬运,哈哈哈

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册