利用postman实现自动化测试

发表于:2020-8-05 13:09

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:沐白同学ye    来源:掘金

  背景
  根据公司安排,沐白同学要去测试部门轮岗两周,今天是轮岗第一天。沐白很激动,因为??,你懂的,测试部门有很多小姐姐,咳咳!好了不开玩笑了,沐白眼里只有代码!
  主管:沐白,我发你一个脚本,你看能不能把脚本优化一下
  我:内心os(啥?刚来几分钟,屁股没坐热,就让我优化脚本)但咱也好歹实习了半年,也算是见过小风浪的??,内心的小慌张,可不会显示在脸上,"好的好的??,我马上看下"
  打开主管给的脚本,愣了一下,有几个excel、json文件,疑惑脸??,这这这就是脚本文件吗?,我怎么没看到代码...,行吧??,一步一步来,既然主管说用postman,那就导入postman试一下
  下面的脚本是自己写的,不是公司实际项目的,为了演示的方便,我简化了接口的参数
  考虑到有一些小伙伴可能之前没有接触过postman,所以先来简单的介绍一下postman提供的一些功能
  collection: 集合,我们的接口就是写在它里面的,上图的增加订单记录就是一个collection
  folder: 如果接口数量很多,需要分类,我们可以在collection下新建文件夹,然后在文件夹里编写接口,因为演示的接口很少,我就没有建文件夹??
  request: 接口,这就是我们主要关心的,我们可以看到,图中有两个接口,一个是获取商品种类Id的,还有一个是购买商品的,我们可以为每个接口设置下列参数
  Params 查询串的参数列表
  Authorization 授权,在这里可以设置请求认证的参数,来确保这个请求是可以被服务端允许的,比如说添加token,当然我们也可以放到Headers里
  Headers 请求首部
  Body 请求体, post请求的参数就是在这里写的
  Pre-requese Script 请求的前置脚本 顾名思义,这里写的脚本,会在这次请求发送之前执行
  Tests 测试脚本,我喜欢把它叫做后置脚本,会在这次请求结束之后执行,我们可以对这次请求的结果进行认证、操作
  Settings 里面一有些选项,可以设置重定向的行为
  Environment:环境,分为全局环境和局部环境 类似于作用域的效果,我们可以在它下面定义变量,并且可以设置请求运行时,它们所处的环境,这关系到变量是否能被访问
  variable:变量,我们可以利用变量取代硬编码,提高脚本的重用性
  介绍完了postman提供的常用功能之后,接下来我正式演示一下,怎么利用postman来进行自动化测试
  我的目标是在数据库中插入两万条购买记录
  一次购买记录的添加流程
  调用 /getGoodsId 获取商品种类Id
  调用 /bugGoods 添加购买记录,是post请求,并且请求体里的值来自 /getGoodsId 返回的结果
  我们可以利用Tests模块,获取到响应数据里的goodsId后,把环境中的goodsId这个变量重置为它,这样就可以在下一次请求时带上这个参数的正确值了
  代码如下:
   pm.test("获取商品种类Id", function () {
  // 把响应的数据转换为JSON格式
  let { success, data } = pm.response.json();
  // 判断请求是否成功, 如果验证没通过, 就不会执行下面的语句,并且这次请求流也会终止, 也就是下面的购买商品请求就不会发送了
  pm.expect(success).to.eql(true);
  // 如果请求成功,就设置goodsId这个变量, 并会在下面的请求中带上这个最新的值
  pm.environment.set("goodsId", data.goodsId);
  });
  pm.test 方法可以设置断言,如果callback(返回false就是没通过校验,上面是通过pm.expect来判断的,你也可以自己写判断,来返回true或false)没有通过,那么这次执行就会终止,包括接下来的请求也不会发送,这很重要,因为大部分的情况下,请求的发送是有前置条件的,就像这个例子,然后获取商品种类失败了,那么购买商品的请求就不应该发送
  最后,我们只要让这个collecion连续执行20000次就行了,点击collecion右侧小箭头
  设置执行次数、间隔时间,点击运行按钮,就OK了~
  最后附上后端代码,用koa简单的写了一个服务器
   const Koa = require('koa');
  const app = new Koa();
  app.use(async (ctx, next) => {
  if(ctx.url === '/getGoodsId') ctx.body = { success: false, data: {goodsId: Math.ceil(Math.random() * 100)} }
  else next()
  });
  app.use(async (ctx, next) => {
  console.log(ctx.req)
  if(ctx.url === '/bugGoods') {
  ctx.body = {success: true, data: '购买成功'}
  } else next();
  });
  app.use(async (ctx, next) => {
  ctx.body = '404';
  });
  app.listen(80);
  最后,我们把这个collecion导出,看下是个什么东东
  发现是个json文件,嗖嘎??,打开这个json文件,发现里面有我刚才写的后置脚本,这就解释了为什么主管给我的脚本里面有json文件了,
  至于里面的excel文件,它的作用和变量是类似的,都是为了满足请求参数值的变换,但与变量相比,少了灵活性,所以我的优化就是用变量和脚本来取代了excel文件
  好了,文章到这里就结束了,希望能帮助到再看的各位,??

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号