vlambda博客
学习文章列表

你知道吗?Postman 也可以持续集成测试!

Postman 是一个创建和使用API的应用,Postman 对于Web开发者来说非常有用,上次简单介绍了 Postman 的使用。

这次主要针对 Postman 的多请求测试,以及如何利用 Jenkin 持续集成工具进行 Postman 接口自动化测试进行介绍,如:

  1. Postman Runner
  2. Runner 数据源
  3. Newman
  4. Jenkins

Postman Runner

Postman Runner 是一个针对 Collections 进行测试的功能,Postman Runner 位于 Postman 工具的右下角。

打开 Postman Runner 之后,将 Collections 拖进 Postman Runner 的 RUN ORDER 区域即可,可以根据需要拖动接口进行排序,默认情况下, Postman Runner 是根据 RUN ORDER 中接口的排序顺序进行测试的。

如果采用 Postman Runner 进行测试,最好所有接口都有测试结果校验,即用 Javascript 在 Tests 中对接口的返回值进行校验,这样 Postman Runner 运行之后就可以看到测试结果了。

你知道吗?Postman 也可以持续集成测试!

如上面运行结果,前面两个接口测试是失败的,也就是测试不通过,如果没有写测试校验,那么只要结果不报错,就当测试通过。

Runner 数据源

Postman Runner 可以使用外部的 json 或者 csv 数据源对 Collections 进行测试,针对 Collections 中的变量表:

你知道吗?Postman 也可以持续集成测试!

构造 json 数据源如下:

[{
  "httpContext""http://localhost:8080",
  "userId""2"
}]

这里需要注意,测试数据源必须是一个数组,因为 Runner 可以执行执行多次(Iteraions),第一执行使用数组的第一条数据,依次类推。

在 Runner 选择数据源后可以进行预览(Preview):

你知道吗?Postman 也可以持续集成测试!

再次执行测试:

你知道吗?Postman 也可以持续集成测试!

这获取用户的校验不通过,因为数据源 ID=2 而断言用的是 ID=1 :

pm.test("User id equal '1'"function ({
    var jsonData = pm.response.json();
    pm.expect(jsonData.id).to.equal('1')
});

具体的请求结果可以通过 Console 来查看。

Newman

newman 是 Postman 命令行测试 Collections 的工具,newman 依赖 nodejs 环境,所以需要先安装 nodejs,然后通过 npm 安装 newman:

npm install -g newman

安装完成后,可以将 Collections 导出,使用 newman 进行测试:

newman run SpringBootDemo.postman_collection.json

测试结果如下:

你知道吗?Postman 也可以持续集成测试!

当然 newman 同样也可以指定数据源对 Collections 进行测试:

newman run SpringBootDemo.postman_collection.json  -d user.json

这里由于数据源 ID=2,所以获取用户的接口 ID=1 的校验会失败:

你知道吗?Postman 也可以持续集成测试!

Jenkins

Jenkins 是一个持续集成工具,Jenkins 的安装,可以自己通过 Docker 构建带有 nodejs 环境的 Jenkins 镜像,然后运行对应的容器来跑 Jenkins。

构建带有nodejs环境的 Jenkins Dockerfile:

FROM jenkins:2.60.3
USER root
RUN wget https://nodejs.org/dist/v14.17.5/node-v14.17.5-linux-x64.tar.xz \
  && mkdir -p /opt/nodejs \
  && tar xvf node-v14.17.5-linux-x64.tar.xz -C /opt/nodejs\
  && ln -s /opt/nodejs/node-v14.17.5-linux-x64/bin/node /usr/local/bin/node \
  && ln -s /opt/nodejs/node-v14.17.5-linux-x64/bin/npm /usr/local/bin/npm \
  && npm install -g newman \
  && ln -s /opt/nodejs/node-v14.17.5-linux-x64/bin/newman /usr/local/bin/newman 
USER jenkins

编译、构建镜像:

docker build -t="jenkins_postman:1.0" .

运行 Jenkins 容器:

docker run --name jenkins_postman_1.0 -p 8080:8080 -p 50000:50000 -v /home/itqn/docker/jenkins_postman/:/var/jenkins_home -d jenkins_postman:1.0

查看 Jenkins 初始化密码:

docker logs jenkins_postman_1.0

Jenkins 初始化密码是在启动的时候终端输出的:

你知道吗?Postman 也可以持续集成测试!

到这里,Jenkins 就安装完成了,接下来就是利用 Jenkins 对 Postman 进行集成测试,选择新建 Jenkins 项目:

你知道吗?Postman 也可以持续集成测试!

创建构建执行脚本:

你知道吗?Postman 也可以持续集成测试!

需要注意的是:要将脚本和测试数据复制到 docker 挂载目录,即:

/home/itqn/docker/jenkins_postman
# 脚本
# newman run /var/jenkins_home/SpringBootDemo.postman_collection.json --suppress-exit-code 1

测试结果:

这是一个失败的测试结果,因为请求的是 localhost:8080,其实是 Jenkins,正确的应该的是请求容器外部 IP 的 SpringMVC 应用。

调整一下 user.json 的 httpContext:

[{
  "httpContext""http://192.168.50.10:8080",
  "userId""1"
}]

修改配置,使用数据源测试 user.json 再次测试:

最终测试成功!!(记得测试的时候关闭防火墙,或者开放8080端口)

当然,可以利用 jenkins 的触发器定时构建。



推荐阅读: