postman学习笔记

postman学习

接口测试的简介和分类

  • 接口测试就是测试系统组件接口之间的一种测试
  • 分类
    • 测试外部接口:测试被测系统和外部系统之间的接口(只需要测试正例即可
    • 测试内部接口
      • 1)内部接口只提供给内部系统使用。(比如说是预算系统或者是承保系统)(只需要测试正例即可
      • 2)内部接口提供给外部系统使用。(测试必须非常全面,正例,各种异常场景,权限控制等等

接口测试的流程以及用例的设计

  • 1)拿到接口API文档(或者通过抓包工具获取),熟悉接口业务,接口地址,鉴权方式,入参,出参,错误码
  • 2)编写接口用例以及评审
    • 思路
      • 正例:输入正常入参,接口能够成功返回数据
      • 反例:
        • 鉴权反例:

          • 鉴权的意思:鉴定它是否有访问接口的权限
          • 鉴权码:token,key,appkey
          • postman中的authorization是用来做鉴权的
          • 测试鉴权码为空,鉴权码错误,鉴权码过期等等情况下能够访问成功
        • 参数反例:参数为空,参数类型异常,参数长度异常等等情况

        • 错误码覆盖:根据业务而定

        • 其他错误场景:

          • 接口黑名单,接口调用次数闲置,分页场景
  • 3)使用接口测试工具(如postman)执行接口测试。
  • 4)postman+newman+Jenkins实现持续集成,并且输出测试报告并且发送邮件

postman的界面介绍

  • workspaces:工作空间
  • connection:集合,项目结合
  • APIs:api文档
  • enviroments:环境变量,全局变量
  • mock server:虚拟服务器
  • monitors:监听器
  • history:历史记录

postman执行接口测试

  • 请求页签

    • params:get请求传参
    • authorization:鉴权
    • headers:请求头
    • body:post请求传参
      • none:没有参数
      • form-data:既可以传键值对参数也可以传文件
      • x-www-from-urlencoded:只能够传键值对参数
      • raw:可以传json,text,xml,html,javascript
      • binary:将文件以二进制的方式传参
    • Pre-request Script:请求之前的脚本
    • tests:请求之后的断言
    • cookies:用于管理cookie信息
  • 响应页签

    • Body:接口返回的数据

      • pretty:以json,html.xml,text,auto不同格式查看返回的数据
      • raw:以文本的方式查看返回的数据
      • preview:以网页的方式查看返回的数据
    • cookies:响应的cookie信息

    • headers:响应头

    • test results:断言的结果

    • status:200 ok:200是状态码,ok是状态信息

    • time:223ms:是接口响应的时间

    • size:373B:响应的字节数

  • get和post的区别

    • 区别1):get请求一般是获取数据,post请求一般是提交数据
    • 区别2):post请求要比get请求安全
    • 区别3):本质区别是传参的方式不一样
      • get请求在地址栏后面以?的方式传参,多个参数之间用&分隔
      • post请求是在body中以表单的方式传参
  • 问题:

    • 多种环境:开发环境、测试环境、生产环境
    • 接口关联:需要手动关联
    • 参数需要手动修改

postman的环境变量以及全局变量

  • 解决问题:多种环境:开发环境、测试环境、生产环境
  • 环境变量:环境变量就是全局变量
  • 全局变量:全局变量是能够在任何接口里面访问的变量
  • 获取环境变量和全局变量的值通过:{{变量名}}的方式获取

处理接口关联问题

  • 两种方式
    • JSON提取器实现接口关联
    • 使用正则表达式提取器实现接口关联

Postman之JSON提取器实现接口关联

  • 解决问题:接口关联:需要手动关联

  • 实现方式:

    • 第一步:在被调用的接口的tests中写入如下类似内容
    console.log(responseBody);
    // 使用json提取器提取access_token值
    // 把返回的字符串格式的数据转换成对象的形式
    var result = JSON.parse(responseBody);
    console.log(result.access_token);
    // 把access_token设置为全局变量
    pm.globals.set("access_token", result.access_token);
    
    • 第二步:在所用的接口中参数值使用这个方式填充:{{access_token}}

Postman之正则表达式提取器实现接口关联

  • 解决问题:接口关联:需要手动关联

  • 实现方式:

    • 第一步:在被调用的接口的tests中写入如下类似内容
    // 使用正则表达式提取器实现接口关联,matcg表示匹配
    var resuslt = responseBody.match(new RegExp('"access_token":"(.*?)"'));
    console.log(resuslt[1])
    // 设置为全局变量
    pm.globals.set("access_token", resuslt[1]);
    
    • 第二步:在所用的接口中参数值使用这个方式填充:{{access_token}}

Postman之内置动态参数和自定义动态参数

  • 解决问题:参数需要手动修改
  • Postman内置动态参数
    • 参数固定格式:{{$xxxx}}
      • {{$timestamp}}:生成当前时间的时间戳
      • {{$randomInt}}:生成0-1000之间的随机数
      • {{$guid}}:生成速记GUID字符串
  • 自定义动态参数
    • 实现方式:

      • 第一步:在调用的接口的Pre-request Script中写入如下类似内容
      // 手动的获得时间戳
      var times =Date.now();
      // 设置为全局变量
      pm.globals.set("time_now",times);
      
      • 第二步:在所用的接口中参数值使用这个方式填充:““标签时间{{time_now}}””

Postman断言

  • 目的:之前看结果都是通过人的肉眼判断是否通过,针对这个问题进行改进。
  • 常见的断言:
    • status code:code is 200 检查返回的状态码是否为200
    • response body:contains string 检查响应中包括指定字符串
    • response body:json value check 检查响应中其中json的值
    • response body:is equal to a string 检查响应等于一个字符串
    • response headers:Content-Type header check: 检查是否包含响应头Content-Type
    • response time is less than 200ms:检查请求耗时小于200ms
  • 示例
    • 在Tests中一般要写状态断言和业务断言两种,如下所示
    // 使用正则表达式提取器实现接口关联,matcg表示匹配
    var resuslt = responseBody.match(new RegExp('"access_token":"(.*?)"'));
    console.log(resuslt[1])
    // 设置为全局变量
    pm.globals.set("access_token", resuslt[1]);
    
    
    // 断言
    // 状态断言
    pm.test("Status code is 200", function () {
        pm.response.to.have.status(200);
    });
    // 业务断言
    pm.test("Body matches string", function () {
        pm.expect(pm.response.text()).to.include("access_token");
    });
    
    • 在输出的结果页签的 Test Results中查看结果

    • 在断言中使用自定义动态参数不能使用这种{{xxx}}方式,要使用+号拼接,动态参数使用get a global variable方式获取

    • 可以将接口中的状态断言代码挪动到集合的test中去,接口中的断言只留下业务断言

      • 方法:在集合的三个点中点edit,然后将状态断言cut 到test中去,update即可。实现了全局断言

Postman批量运行测试用例

  • 操作方法:点击集合右边的->选择run

Postman之CSV或JSON文件实现数据驱动

  • csv方式
    • 在接口中参数的参数值均设置为对应的csv表中的列名{{xxx}}
    • 在接口中的业务断言做修改,以微信公众平台的token接口为例子介绍:
      • 1)接口中的test进行如下修改
          if (responseBody.search("access_token")!=-1){
          // 使用正则表达式提取器实现接口关联,matcg表示匹配
          var resuslt = responseBody.match(new RegExp('"access_token":"(.*?)"'));
          console.log(resuslt[1])
          // 设置为全局变量
          pm.globals.set("access_token", resuslt[1]);
      }
      
      // 断言
      
      // 业务断言
      pm.test("Body matches string", function () {
          pm.expect(pm.response.text()).to.include(data.access_token); //data为表名,access_token为列名
      });
      
      • 2)在批量测试中导入csv测试数据文件
  • json方式
    • 与csv类似,只是原始的文件格式不一样而已

必须带请求头的接口测试和常见请求头详解

  • pass

Postman接口Mock Servier服务器

  • mock :模拟的意思
  • 解决的问题:后端的接口还没有开发完成,前端的业务需要调用后端的接口,这时候可以使用模拟服务器
  • 使用的方式
    • 在Mock Servers中选择新建集合,在其中选择是使用post还是get方式,然后添加子页面url,添加接口的模拟返回值。所有工作做完之后,可以测试接口,此时会自动生成集合名称的环境变量在其中自动添加了默认值,我们可以选取相应集合中的接口进行测试,想要修改默认的返回值如下所示。
      • 如何修改返回的数据:
        • 在调用mock server的接口中的Default中进行修改,在Body 下的pretty中进行修改

Postman的Cookie鉴权

  • 鉴权:鉴定它是否有访问接口的权限
  • cookie:cookie是一小段文本,格式key=value
  • cookie鉴权的原理
    • 1.当客户端第一次访问服务器的时候,那么服务器就会生成cookie信息,并且在响应头的set-cookie里面把生成的cookie信息发送给客户端
    • 2.当客户端第2-N次访问服务器的时候,那么客户端就会在请求头的cookie带上cooKie信息,从而实现鉴权
  • cookie的分类
    • 会话cookie:保存在内存,当浏览器关闭之后就会自动化清除cookie
    • 持久cookie:保存在硬盘,浏览器关闭后不会清除,只有当失效时间到了才会自动清除

Postman的Newman命令以及常见的参数

  • Postman是专为接口测试而生,newman是专为postman而生。
  • newman可以让Postman脚本通过非GUI(命令行)的方式运行。
  • 运行命令:newman run xxx任务
  • 常见参数:
    • -e:引用环境变量
    • -g:引用全局变量
    • -d:引用数据文件
    • -n:执行测试用例迭代的次数
    • -r cli,html,json,junit --reporter-html-export 报告名称.html :指定生成HTML的报告
  • 执行命令:
    • 1)首先是在所在的文件夹中执行cmd
    • 2)执行如下命令:
      • 命令:newman run testcase.json -e enviroment.json -g globals.json -d data.json -r cli,html,json,junit --reporter-html-export report.html
        • testcase.json为测试接口
        • enviroment.json为环境变量
        • globals.json为全局变量
        • data.json为输入的测试用例
        • report.html为输出的测试报告

Postman+Newman+Jenkins实现接口测试持续集成

  • 实现步骤
    • 1)新建一个项目
    • 2)设置自定义工作空间
    • 3)构建可执行批处理命令:execute windows batch command
    • 4)执行系统Groovy脚本:execute system Groovy script
      • 在groovy script中写入如下内容
        • System.setProperty(“hudson.model.DirectoryBrowserSupport.CSP”,“”)
    • 5)生成的HTML的报告集成到Jenkins

详细篇

什么是接口?

  • 电脑:USB,投影仪(数据传输)
  • 软件:统称API,Application Program Interface(鉴权码:token,key,appkey)
    • 接口分为内部接口和外部接口
      • 内部接口:开发人员自己开发的对自身系统提供的接口
      • 外部接口:开发人员调用外部的,比如微信、支付宝等其他的接口
      • summary:接口就是软件提供给外部的一种服务,用于做数据传输。

软件为什么需要接口?

  • 因为接口能够让内部的数据被外部进行修改

为什么要做接口测试?

  • 现在很多系统都是前后端分离,开发的进度不一样,需要把一开始开发出来的接口进行测试
  • 基于安全考虑,前端有验证很容易绕过,直接请求接口,特别:身份证信息,银行卡,金钱交易
  • 测试推崇的是测试左移,测试尽早的介入
  • 接口测试的本质:就是测试接口能否正常的交互数据,权限控制以及异常场景

接口返回的数据格式

  • Json格式
    • 一般会返回三组数据
      • {error_code:0,msg:“提现成功”,data:[]}
  • Html格式
    <html>
        <head>
        </head>
        <body>
            <error_code>0</error_code>
            <msg>提现成功</msg>
            ....
        </body>
    </html>   
    
  • Xml格式
    -主体内容同html格式

接口测试协议

  • webservice协议:接口地址:http://…?wsdl 这种格式
    • soap协议,wsdl
    • restful规则
      • get获取数据,post提交数据,put修改数据,delete删除数据
      • 地址一样,例如:http://123.12.32.2:8080/user
  • dubbo协议:接口地址: dubbo://…这种格式
    • 适用于少量数据的传输,大并发
    • 不适合传输大量的文件,如文件或者视频
  • http协议:
    • 1)接口地址1:http://…
      1. 接口地址2:https://…
      • https=http+ssl安全传输协议 端口:443
      • http协议的端口是80
    • 什么是http协议?
      • http是超文本传输协议,主要用于浏览器和服务器之间的交互数据,交互有两个部分:
        • 请求:get,post,put.delete

        • 响应:1xx信息,2xx成功,3xx重定向(跳转不传值),4xx客户端错误,5xx服务器错误

        • 请求部分包含:

          • 请求行
          • 请求头
            • Accept:客户端可以接收的数据格式
            • X-Request-With:异步请求
            • User-Agent:客户端的用户
            • Host:请求的主机
            • Accept-Encoding:压缩方式
            • Connection:连接方式(比如保持活跃)
            • Cookie:请求的cookie信息
            • Content-Length:内容的长度
        • 响应部分包含:

          • 响应行:协议 响应码 响应信息
          • 响应头:

企业接口测试的流程和方案

  • 拿到api接口文档,熟悉接口的业务,接口地址,鉴权,入参,出参,错误码
  • 接口计划和方案
    • 思路
      • 正例:输入正常的入参,查看接口是否返回成功
      • 反例:
        • 鉴权反例:鉴权为空,鉴权码错误,鉴权码已过期…
        • 参数反例:参数为空,参数类型异常,参数长度异常,错误码覆盖
        • 其他场景:分页
    • 编写用例和评审
    • 执行接口测试
    • 输出接口测试报告
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__BC__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值