前言:
使用Postman+Newman+Jenkins进行接口自动化测试和实现持续集成(CI)是一种常见的方案。Postman是一个流行的API开发和测试工具,Newman是Postman的命令行工具,而Jenkins是一个流行的持续集成工具。
相信提到接口测试,大家都知道而且用过 Postman,也认为这是一个非常容易上手的接口测试工具,实际上 Postman 功能非常强大,还有很多部分非常有意思而且实用的功能,我先抛砖引玉,关键是大家一起来探索和一起来分享。比如 Postman 能不能进行自动化接口测试,其实是可以的,而且在如今大家不断提到 TDD 和如何打造 pipeline 上,这方面的需求越来越强烈。
举个简单的真实场景,开发提供了 300 多个 API,每个 API 都有各种参数,所以我们会先在 postman 中为这 300 多个 API 编写 300*n 个 testcase,如果我们都用 postman 跑,其实效率并不高,作为工程师图形化不如命令好使,因此一定要用 newman,既然可以命令行你过来执行为啥不能 CI?
- 试想,当开发一直在不停的维护这 300 多个接口时,难道需要开发每次都告诉我们测试人员该进行测试了吗?只要通过 Jenkins 来自动执行这些接口测试,基本上 CI 就完成了很多。
- 如果能够监控到哪些接口发生变动,自动选择相关的 collections,也就是 test suits,就是朝更牛掰的路上又前进了一步。
- Jenkins 还可以自动发 email 给开发和你,另外也可以自动提交 bug,如果这样的话你就更舒服了,看邮件就可以了。
Postman 部分
这个太简单了,就略过去,百度搜一下,下载安装一个 native 的即可,因为作为 Chrome 插件已经不支持了。我们直接进入正题。
Collection 或者说测试集的建立
在 Postman 中,Collection 类似文件夹,可以把同一个项目的请求放在一个 Collection 里方便管理和分享,Collection 里面也可以再建文件夹。如果做 API 文档的话,可以每个 API 对应一条请求,如果要把各种输入都测到的话,就需要每条测试一条请求了。
在 Postman 里面可以将 Collection 导出存为 json 文件,有了这个文件,就可以通过 Postman CLI 完成命令行执行,实现自动化测试。
- 导入:用于导入你或团队保存的 API 请求文件,json 格式。
- 新建文件夹:用于 API 请求划分类别,便于管理。
- 保存请求:保存你的 API 请求,返回值也能存储下来。
- 下载:下载你测试通过的 API 请求,团队共享,导入。json 格式,可手动编辑的
Postman 允许用户发送任何类型的 HTTP 请求,例如 GET,POST,HEAD,PUT、DELETE 等,并且可以允许任意的参数和 Headers。
她支持不同的认证机制,包括 Basic Auth,Digest Auth,OAuth 1.0,OAuth 2.0 等。
她还可以响应数据是自动按照语法格式高亮的,包括 HTML,JSON 和 XML。
- 可以通过"Capture API request with Postman"来录制测试用例,这个方法也不错,大家可以试一下。
Postman 使用详解
- 请求 request
postman 界面分为两部分:左边的 sidebar 右边的 request builder:快速创建几乎所有的 HTTP 请求:URL,请求的 method,headers,body。
- 响应 responses
保证 API 响应的正确性,就是你需要做的大部分工作。postman 的 response viewer 部分会协助你完成该工作且使其变得简单。
一个 API 的响应包含 body,headers,响应状态码。postman 将 body 和 headers 放在不同的 tabs 中。响应码和响应时间显示在 tabs 的旁边。将鼠标悬停在响应码上面可以查看更详细的信息。
- 写断言测试
Postman 的 Tests 标签可以用来写断言测试,提供了大量的 API,非常方便实用。
- 运行 Collections
postman 允许你运行 collection,其实就是我们在测试领域所说的 test suit,可以配置运行任意的次数。 最后会给出一个整体运行的结果。会保存每一次运行的结果,提供给你比较每一次运行解雇的不同。
选择 collection,选择环境。点击运行按钮。
测试工具
测试工具主要包括三部分,在发起请求之前运行的 Pre-request,在收到应答之后运行的 Test,和一次运行所有请求的 Collection Runner
- Pre-request
Pre-request 和 Test 用的语言都是 JavaScript,Postman 在一个沙盒里执行代码,提供给用户的库和函数可以在 这里 查看。而 常用的功能都可以通过右边的 Code Snippets 实现,点击就可以插入到代码区域
可以看到 Pre-request 里常用的功能就两种,设置环境变量和设置全局变量。这条请求的 pre-request 就是在注册之前生成一个字符串作为随机用户名。
postman.setEnvironmentVariable("random_username", ("0000" + (Math.random()*Math.pow(36,4) << 0).toString(36)).slice(-4));
其他用法还包括在发起请求之前获取当前的时间戳放在参数里:
postman.setEnvironmentVariable("unixtime_now", Math.round(new Date().getTime()/1000));
当然也可以用来生成校验串。总之,在发请求之前需要手动修改的东西,都可以考虑用脚本自动实现。
- Test
和 Pre-request 相比,Test 的 Snippets 就丰富多了,例如检查状态码、检查响应串、验证 JSON、检查 header、限制应答时间。
如果需要将服务器响应的数据保存下来,用在后面的请求里,也需要在这一步做。
在图中的 Test 里,我首先检查了状态码为 200,然后解析返回的 JSON,把环境变量里的 token 设为 JSON 里的 token。
- Collection Runner
当编写了很多测试之后,就可以使用 Collection Runner 来自动运行整个 Collection 了,入口就在主界面最上面一行的 Runner 选好 Collection、Environment,如果有需要还可以载入 JSON 和 CSV 作为数据源。点击 Start Test Run ,就可以看到结果了。
mock server
Postman 支持 Mock server 其实也很重要,无论对前端开发还是后端测试,比较不同服务器之间接口很多,大家开发进度不一,另外可以做到环境隔离。Postman 通过添加examples来实现前端/后端/测试达成的接口协议,这样大家就可以分工并行干活,原文如下。
This behavior allows teams to mock an example request and response, in addition to simulating the endpoint using mock servers. Front-end and back-end developers and testers can all begin working in parallel, based on the agreed-upon example.
当然还有还多 mock 框架,我这里推荐大家一个很方便的 mock 框架就是 moco,已经在github 上开源了。
还有一个mock server稍微复杂些,但是也很好使。
Newman 的安装和使用
通过 npm 安装
如果要全局安装:
npm install -g newman
newman 的使用
在 npm 的网站可以找到newman 的专页,非常详细的说明.
- 支持本地 json 文件作为参数来运行
json 文件可以从 Postman 导出,选定某个 collection,你可以轻易的导出你的 Postman Collection 另外存储为一个 json 文件,然后放到你本地目录进行运行。
$ newman run examples/sample-collection.json
- 也支持通过 url 作为参数来运行
如果已经有 CI 平台,可以把这些 Collection 放到某个服务器上,newman cli 也支持通过 url 来运行。
$ newman run https:or http: your json url
- 还有一种就是把 newman 作为 Node.js 的一个 module 来调用,这样更适合大型项目,请参见官方示例代码。
const newman = require('newman'); // require newman in your project
// call newman.run to pass `options` object and wait for callback
newman.run({
collection: require('./sample-collection.json'),
reporters: 'cli'
}, function (err) {
if (err) { throw err; }
console.log('collection run complete!');
});
- 如果还需要更过命令或者帮助,可以通过下面命令获得。
$newman -h, --help
$newman run -h
对 SSL 的支持 newman 第三版以后(目前已经是 4.3.1)可以支持通过 CLI 选项来支持 SSL
--ssl-client-cert path_to_public_cert_file
--ssl-client-key path_to_private_client_key
--ssl-client-passphrase the_secret_passphrase
对 newman 配置代理:通过对 Postman 的 request 环境变量进行设置来完成代理的配置。
HTTP_PROXY / http_proxy
HTTPS_PROXY / https_proxy
NO_PROXY / no_proxy
完成 postman 的 request 设置
用 newman 的 reporter 功能
newman 集成和支持下面几种报告方式: cli, json, junit, progress and emojitrain.
CLI 是默认选项支持的,其他选项需要你显示在后面写上,比如:
$ newman run examples/sample-collection.json -r cli,json
Jenkins 部分
Jenkins 的安装和配置可以查询相关文档,如果没有配置 master-slave 多级架构,很好搭建,此处略过。
完成 Jenkins 搭建后,开始创建 job 来执行 newman 命令,确保你的 newman 命令在 Jenkins 服务器上是可执行的,比如将路径放到 PATH 里面,先执行一下
newman -v
- 选择一个自由风格的 job
- 可以选择定期执行,这部分可以网上搜一下如何定期执行一个 job,一般来说就是 5 行数据,根据你的需要。比如我要每 10 分钟执行一下,就这么写 “H/10 * * * *“。
这部分也可以通过监控代码提交来 trigger,我只是举个例子。
- 在执行 shell 的部分添加你的 shell 命令,其实也就是你 newman 命令
这里需要主线的是,你的 json 文件是放在那里,前面已经说过可以放到内部服务器,给个 url,newman 也是支持的,也可以放到 Jenkins 的服务器上。
- 其他邮件配置或者如何自动提交 bug,也比较 normal,请自行突破,相信只有自己突破了才有更大的收获感。
不足之处:
API 接口不能太多,不要超过 300 个,太多通过这个方式还是很麻烦,至少维护 json 文件比较累。
不能支持并发操作,只能用于功能测试和压测。
总之这个自动化接口测试架构,而且带有 CI 的框架还是比较适合以 API 接口为主的测试,非常容易上手和熟悉,也非常容易维护,希望能真的帮助你。
作为一位过来人也是希望大家少走一些弯路
在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。
(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等)
相信能使你更好的进步!
点击下方小卡片
版权归原作者 自由家 所有, 如有侵权,请联系我们删除。