postman

接口测试

一、接口测试的简介和分类

接口分为硬件接口和软件接口。

接口:是数据交互的通道,在系统或组件之间,完成数据的传递。

接口类型

按划分形式,大致分为3类:

  1. 按协议分,协议不同,接口类型不同。HTTP、TCP、UDP、IP、FTP、USB
  2. 按语言划分。java、python
  3. 按范围划分。系统之间 和 程序内部。
    1. 系统之间:内部系统之间,内部和外部系统之间。
    2. 程序内部:

分类:

测试外部接口:测试被测系统和外部系统之间的接口。(只需要测试正例)

测试内部接口:

  • 内部接口只提供给内部系统使用。(预算系统,承担系统。只需测试正例)
  • 内部接口提供给外部系统使用。(测试必须非常全民,各种异常场景,权限控制)

二、接口测试的理论以及用例的设计

  • 数据(预期结果)从哪来
    • 根据用户需求
  • 怎样校验:借助工具、代码模拟客户端、

用工具或代码模拟客户端,向服务器发送请求,校验服务器回发的响应数据是否与预期结果一致。

接口测试是站在用户的角度,

  1. 拿到接口api文档(通过抓包工具获取),熟悉接口业务,接口地址,鉴权方式,入参、出参,错误码。

  2. 编写接口用例及评审。

    思路:

    • 正例:输入正常入参,接口能够成功返回数据。
    • 反例:
      • 鉴权反例:鉴权码为空,鉴权码错误,过期,失效…
      • 参数反例:参数为空,类型异常。
      • 错误码覆盖:根据业务而定。
      • 其他错误场景:接口黑名单,接口调用次数限制,分页场景。
  3. 使用接口测试工具Postman执行接口测试

  4. Postman+Newman+Jenkins实现持续集成,并且输出测试报告并且发送邮件。

三、微信公众平台接口

获取权限:

AppId(ID):

secret(密匙):

四、Postman介绍

  1. postman界面介绍
    • Collections 集合,项目集合
    • APIs api文档
    • Environments 环境变量,全局变量
    • Mock Server 虚拟服务器
    • Monitors 监听器

五、执行接口测试

请求页签:

  • Params :get请求传参
  • Authorization:鉴权
  • Headers:请求头
  • Body:post请求传参
    • none :没有参数
    • form-data:即可以传键值对参数也可以传文件
    • x-www-from-urlencoded :只能过传键值对参数
    • row: 可以传json、text、html、javascript
    • binary:把文件以二进制的方式传参
  • pre-request Script:请求之前的脚本
  • test:请求之后的断言
  • cookies:用户管理cookie信息

响应页签:

  • Body:接口返回数据
    • Pretty:以json、html、xml…不同格式查看返回的数据
    • row:以文本的方式查看返回的数据
    • preView:以网页的方式查看返回的数据
  • cookies:下班个图的cookie信息
  • Headers:响应头
  • testResult:断言的结果
  • 200 状态码 ,681MS 响应的时间 ;343B 响应的字节数

get和post请求的区别

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

问题

  1. 多种环境:开发环境,测试环境,生成环境。
  2. 接口关联:需要手动连接
  3. 参数需要手动修改

六、环境变量以及全局变量

  • 环境变量:环境变量就是全局变量
  • 全局变量:全局变量是能够在任何接口里面访问的变量
  1. 在environment里设置环境变量

获取全局变量和环境变量的值是通过:{{变量名}}

七、接口关联

1.使用json提取器实现接口关联

console.log(responseBody);
//1.使用json提取器提取token值

//2.把返回的字符串格式的数据转换成对象的形式
var result=JSON.parse(responseBody);
console.log(result.access_token);

//3.把access_token设置为全局变量
//pm.globals.set("access_token", "result.access_token");	错误写法
pm.globals.set("access_token", result.access_token);
//改第二个接口:{{access_token}}

2.使用正则表达式实现接口关联

//使用正则表达式提取器实现接口关联,match匹配。
//var result=responseBody.match(new RegExp('{"access_token":"(.*?)","expires_in":7200}'));  错误写法
var result=responseBody.match(new RegExp('"access_token":"(.*?)","expires_in":7200'));
console.log(result);
//获取下标为1的值: result[1]
//设置为全局变量
//pm.globals.set("access_token", "result[1]"");   错误写法
pm.globals.set("access_token", result[1]);

八、内置动态参数以及自定义的动态参数

内置动态参数:

  • {{$timestamp}} 生成当前时间的时间戳
  • {{$randomInt}} 生成0-1000之间的随机数
  • {{$guid}} 生成速记GUID字符串

自定义动态参数

//在pre-request Script页面输入代码

//手动获得时间戳
var times=Date.now();
//设置为全局变量
pm.globals.set("times", "times");

使用时:{{times}}

获取标签id:在2.创建标签接口的–Tests(请求之后的断言)里编写

//用正则表达式获得创建的标签ID
var tag_id=responseBody.match(new RegExp('"id":(.*?),'));
console.log(tag_id[1]);

//把标签id设置为全局变量
pm.globals.set("tag_id",tag_id[1]);

//引用  {{tag_id}}

注意:

**编写脚本时要特别注意他们的双引号,有时候有双引号就成功了,有时候没有双引号才能成功。**不明白原因是什么。

九、接口闭环

增改查删

序号获取方式操作URL其余操作
1Get获取token在Tests里,用JSON或正则获取动态token
2POST创建https://{{ip}}/cgi-bin**/tags/create**?access_token={{access_token}}在body里输入要上传的参数,在Tests里获取id;在pre-request Script里设置变量
3POST编辑在body里输入要修改的id,以及内容
4GET查看没有其余操作,只用输入url即可
5POST删除在body里输入要删除的id
6POST文件上传body里选择form-data可以用文件形式上传图片

十、断言

常用六种断言

Status 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 :检查是否包含响应头Content-Type

Response time is less than 200ms :检查请求耗时小于200ms

断言有状态断言和业务断言,状态断言一般只有一个,业务断言有多个。在Tests里进行编写。

状态断言:判断状态码是否为200.

业务断言:那获取token来说,就是判断响应中是否包含access_token。

获取自定义动态参数的方式

不能使用自带的动态参数。

//获取全局变量
pm.globals.get("variable_key");
pm.expect(pm.response.text()).to.include("花蝴蝶" + pm.globals.get("times"));

//globals["times"]
pm.expect(pm.response.text()).to.include("花蝴蝶" + globals["times"]);

//globals.times
pm.expect(pm.response.text()).to.include("花蝴蝶" + globals.times);

全局断言

点击项目右边的…—》选择Edit,进入页面—》在tests里编写

例如状态码判断断言,就可以写在里面

//状态断言
pm.test("检查返回码状态为200", function () {
    pm.response.to.have.status(200);
});

十一、批量运行测试用例

在接口文档第10页

十二、数据驱动之CSV文件和JSON文件的处理(进行反例测试)

对1.获取鉴权码token接口进行反例测试

在接口文档第11页

十三、必须带请求头的接口

例如,测百度,就必须要有请求头才能进行查看页面,不然只有链接

常见的请求头:

Host:请求的主机地址

Connection 链接方式

Accept 客户端接收到的数据格式

X-Requested-With 异步请求

User-Agent 客户端的用户类型

Referer 来源

Cookie cookie信息

Content-Type 请求内容的格式

十四、Mock Server 服务器

mock 模拟;后端的借口还没开发完成,前端的业务需要调用后端的接口。就需要用到

在接口文档,12~14页

十五、postman的cookie鉴权,token鉴权

什么是cookie?

cookie是一小段文本,格式:key=value

cookie的鉴权原理:

1.当客户端第一次访问服务器的时候,那么服务器就会成成Cookie信息,并且在响应头的set-cookie里面吧生成的cookie信心发送给客户端。

2.当客户端低2-N次访问服务器的时候,那么客户端就会在请求头的cookie带上cookie信息,从而实现鉴权。

cookie的分类:

会话cookie:保存在内存,当浏览器关闭之后就会自动化清除cookie。

持久cookie:保存在硬盘,浏览器关闭后不会清除,只有当失效时间到了才会自动清除。

十六、Postman实现接口的加密和解密(视频漏了这节课)

1.两种加密方式

​ 对称式加密:DES,AES,Base64加密算法

​ 非对称加密:双钥(公钥、私钥)加密,RSA加密算法

​ 不考虑解密:MD5、SHA1、SHA3

2.Postman如何实现加密和解密

MD5最广泛

使用心得:对着视频教学时,觉得很简单,但是自己操作时却无从下手。纸上得来终觉浅,绝知此事要躬行。也有一部分原因是我看的教学视频不完整,太笼统了。

接口测试

一、接口测试的特点

  • 测试可以提前介入,提早发现bug,符合质量控制前移的理论。
  • 可以发现一些页面操作发现不了的问题;接口测试可以实现自动化测试。
  • 不同于传统的单元测试,接口测试是从站在亭湖角度产开吃的

接口概念:测试系统或组件之间交互的数据的正确性,以及逻辑依赖关系的正确性!

原理:

模拟客户端向服务器发送请求,服务器接受请求后进行相应的业务处理,并向客户端返回响应数据是否符合预期。

二、接口类型

类型:

  1. 按协议分:tcp、ftp、udp
  2. 按语言分:java、python、c++
  3. 按范围分:
    1. 系统之间:内部系统之间、内部系统和外部系统之间
    2. 系统内部:函数与函数、方法与方法、类与类、模块与模块

二、HTTP协议

1.http协议的概念:

  • 超文本传输协议,基于请求和想要模式的,应用层协议。

  • 支持客户端/服务器2.简单快读,灵活,无连接,无桩体

特点:1.支持客户端/服务器2.简单快速3.灵活4.无连接,无状态。

2.URL格式:

协议:http:80端口;https:443端口

域名: 😕/ 分隔符 本质:ip地址 端口号

3.http请求协议

三、接口测试流程

  1. 需求分析
    • 主要依据需求文档
  2. 接口文档解析
    • 一般由开发人员编写接口文档
  3. 设计测试用例
  4. 执行测试
    • 使用接口测试工具实现
    • 通过编写大妈实现
  5. 接口缺陷管理与跟踪
  6. 生成测试报告
  7. 接自动化持续集成
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值