51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3458|回复: 1
打印 上一主题 下一主题

[原创] 利用postman实现自动化测试

[复制链接]
  • TA的每日心情
    擦汗
    3 天前
  • 签到天数: 1042 天

    连续签到: 4 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2020-8-11 10:09:49 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
     背景
      根据公司安排,沐白同学要去测试部门轮岗两周,今天是轮岗第一天。沐白很激动,因为??,你懂的,测试部门有很多小姐姐,咳咳!好了不开玩笑了,沐白眼里只有代码!
      主管:沐白,我发你一个脚本,你看能不能把脚本优化一下
      我:内心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这个变量重置为它,这样就可以在下一次请求时带上这个参数的正确值了
      代码如下:
    1. pm.test("获取商品种类Id", function () {
    2.   // 把响应的数据转换为JSON格式
    3.   let { success, data } = pm.response.json();
    4.   // 判断请求是否成功, 如果验证没通过, 就不会执行下面的语句,并且这次请求流也会终止, 也就是下面的购买商品请求就不会发送了
    5.   pm.expect(success).to.eql(true);
    6.   // 如果请求成功,就设置goodsId这个变量, 并会在下面的请求中带上这个最新的值
    7.   pm.environment.set("goodsId", data.goodsId);
    8.   });
    复制代码
    pm.test 方法可以设置断言,如果callback(返回false就是没通过校验,上面是通过pm.expect来判断的,你也可以自己写判断,来返回true或false)没有通过,那么这次执行就会终止,包括接下来的请求也不会发送,这很重要,因为大部分的情况下,请求的发送是有前置条件的,就像这个例子,然后获取商品种类失败了,那么购买商品的请求就不应该发送
      最后,我们只要让这个collecion连续执行20000次就行了,点击collecion右侧小箭头


    设置执行次数、间隔时间,点击运行按钮,就OK了~

    最后附上后端代码,用koa简单的写了一个服务器
    1. const Koa = require('koa');
    2.   const app = new Koa();
    3.   app.use(async (ctx, next) => {
    4.   if(ctx.url === '/getGoodsId') ctx.body = { success: false, data: {goodsId: Math.ceil(Math.random() * 100)} }
    5.   else next()
    6.   });
    7.   app.use(async (ctx, next) => {
    8.   console.log(ctx.req)
    9.   if(ctx.url === '/bugGoods') {
    10.   ctx.body = {success: true, data: '购买成功'}
    11.   } else next();
    12.   });
    13.   app.use(async (ctx, next) => {
    14.   ctx.body = '404';
    15.   });
    16.   app.listen(80);
    复制代码
    最后,我们把这个collecion导出,看下是个什么东东

     发现是个json文件,嗖嘎??,打开这个json文件,发现里面有我刚才写的后置脚本,这就解释了为什么主管给我的脚本里面有json文件了,
      至于里面的excel文件,它的作用和变量是类似的,都是为了满足请求参数值的变换,但与变量相比,少了灵活性,所以我的优化就是用变量和脚本来取代了excel文件
      好了,文章到这里就结束了,希望能帮助到再看的各位,??





    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-9 14:08
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    2#
    发表于 2020-10-13 16:30:30 | 只看该作者
    postman+newman还是挺好用的
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-10 06:59 , Processed in 0.062584 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表