一篇文章入门postmain接口测试

news2024/12/25 12:59:40

一、了解接口和接口测试

1、什么是接口?

电脑:USB,投影机(数据传输)

软件:统称APl,application,program,interface,微信提现和充值,支付宝支付,银联支付接口。(鉴权码:token,key,appkey)

2、接口包括:内部接口和外部接口

内部接口:开发人员自己开发的对自身系统提供的接口。

外部接口:开发系统调用外部的,微信,支付宝,其他的接口。

总结:接口就是软件提供给外部的一种服务。用于做数据传输。

3、软件为什么需要接口?

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

4、我们为什么要做接口测试 ?

(1)现在很多系统都是前后端分离,开发的进度不一样,需要把一开始开发出来的接口进行测试。

(2)基于安全考虑,前端有验证很容易绕过,直接请求接口,特别:身份证信息,银行卡,金钱交易。

(3)测试推崇的是测试左移,测试尽早的介入。

接口测试的本质:就是测试接口能否正常的交互数据,权限控制以及异常场景

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

接口测试就是测试系统组件接口之间的一种测试。

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

测试内部接口:

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

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

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

2.编写接口用例以及评审。
思路:
        正例:输入正常入参,接口能够成功返回数据。

        反例:

  •         鉴权反例:鉴权码为空,鉴权码错误,鉴权码过期
  •         参数反例:参数为空,参数类型异常,参数长度异常。
  •         错误码覆盖:根据业务而定的。
  •         其他错误场景:接口黑名单,接口调用次数限制,分页场景

3.编写用例和评审

4.使用接口测试工具Postman执行接口测试.

5.Postmain+Newman+Lenkins实现持续记成,并且输出测试报告并且发送邮件

三、接口返回数据和JSON详解

1、json格式:三组数据

{error_code:0,msg:"提现成功",data:[]}

error code:错误码,0代表成功,

codemsg:对错误码的中文说明

data:真正的返回的数据

2.html格式

<html>
<title></title>
<body>
<error code>0</error code>

......
</body>
</html>

3.xml格式

[ <?xml?version="1.0" encoding="utf-8">
<error code>0</error code>

......
</xml>


推荐一个网页工具在线JSON校验格式化工具(Be JSON)icon-default.png?t=N7T8https://www.bejson.com/

四、接口测试协议

1、webservice协议:

接口地址: http://......?wsdl
http://192.168.12.1:8080/addUser
http://192.168.12.1:8080/delUser
http://192.168.12.1:8080/updUser
http://192.168.12.1:8080/selUser
soap协议,wsdl
restful规则:get获取数据,post提交数据,put修改数据,delete删除数据

2.dubbo协议:

接口地址dubbo://...

适用于少量数据的传输。大并发。

3.http协议:

接口地址:http://   80%

  • https=http+ssl安全传输协议          端口:443

  • http:    端口80

什么是http协议?

http是超文本传输协议,主要用于浏览器和服务器之间交互数据,交互有两个部分:

请求:get,post,put,delete
响应:1XX信息,2XX成功,3XX重定向(跳转不传值),4XX客户端错误,5XX服务

http和https协议详情请看这篇文章

五、Postman的简介,安装,注册。

1.客户端安装

官网地址:

Download Postman | Get Started for Freeicon-default.png?t=N7T8https://www.postman.com/downloads/注册和登录Postman。

2.Postman的界面介绍

  • Home   主页
  • workspaces 工作空间
  • Collections 集合,项目集合
  • Apis  api文档
  • EnViromments  环境变量,全局变量Mock Server虚拟服务器。
  • Monitors  监听器
  • History  历史记录

六、Postman执行接口测试

(一)页面展示

(二)页面详解

每个功能按钮建议根据介绍自己动手点击尝试操作,就不分别展示了

1.请求页签

Params:get请求传参

authorization:鉴权

headers:请求头

Body:post请求传参

        form-data:既可以传键值对参数也可以传文件

        x-www-from-urlencoded:只能够传键值对参数

        raw :json ,text,xml,html ,javascrip

        binary:把文件以二进制的方式传参。

pre-request-script:请求之前的脚本。

tests:请求之后的断言

cookies:用于管理cookie信息。

2.响应页签:

Body:接口返回的数据

        Pretty:以Json,html,XML.…不同的格式查看返回的数据

        Raw:以文本的方式查看返回的数据。

        PreView:以网页的方式查看返回的教据。

Cookies:响应的Cookie信息

Headers:响应头

Test Results:断言的结果

200:状态码

OK:状态信息

58MS: 响应的时间

7.12KB:响应的字节数

经过前面的操作,发现了几个问题:

1.接口需要手动关联

2.每次发送请求都需要修改参数,而参数需要手动修改

下面本文就用一个实操的案例来解决这些问题,并且介绍剩下的知识点

首先,我们需要一个微信公众平台的测试号,获取鉴权码。

微信公众平台API文档如下链接:

微信开放文档

下面的操作会用到微信公众平台提供的测试接口,如果想自己动手实操的小伙伴可以根据上述步骤申请测试号。

第一步,打开微信公众平台网址https://mp.weixin.qq.com/,找到开发文档,如下图所示:

第二步,找到接口测试号申请,进入微信公众账号测试号申请系统,如下图所示:

最后,微信扫一扫,获取自己微信号的appID和appsecret,下面的操作都需要用到这个鉴权码

如下图所示:

七、Postman的环境变量以及全局变量

环境变量:环境变量就是全局变量教据

全局变量:全局变量是能够在任何接口里面访问的变量

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

实操演示:

第一步:设置环境变量

注意:变量名必须一致,每个环境设置完都要保存

第二步:在写接口地址的时候通过{{变量名}}的方式来取得环境变量的值

注意:执行前要选择对应的环境

八、接口关联

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

//第一个接口的操作:

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}}

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

第一个接口的操作:

//使用正则表达式提取器实现接口关联,match匹配

var result = responseBody.match(new RegExp('"access_token":"(.*?)"'));

console.log(result[1]);

//设置为全局变量

pm.globals.set("access_token", "result[1]");

第二个接口的操作:

使用{{变量名}}获取

{{access_token}}

九、Postman内置动态参数以及自定义动态参数

解决了需要手动修改参数的问题

1.Postman 内置动态参数

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

2.自定义动态参数

第一个接口的操作:

//手动获得时间戳

var  times = Date.now();

//设置为全局变量

pm.globals.set("times",times);

第二个接口的操作:

使用{{变量名}}获取

{{times}}

十、根据上文知识点实现业务闭环操作

接下来我们结合以上内容简单的实现一个业务闭环案例【实现增删改查的闭环】

上文的操作中我们已经创建了:1.获取token的值接口 和 2.创建标签接口

接下来我们再创建几个接口

查看api文档可知,【3.辑标签接口】需要用到【2.创建标签接口】创建出的便签id,所以需要对【2.创建标签接口】进行修改,在test中设置标签id的全局变量

//获得的创建的标签ID

var tag_id = responseBody.match(new RegExp('"id":(.*?),'));

console.log(tag_id[1]);

//把标签id设置为全局变量

pm.globals.set("tag_id", tag_id[1]);

3.编辑标签接口

4.获取已经创建的标签接口

5.删除标签接口

创建完成之后,我们依次执行查看效果

业务闭环效果演示

十一、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...检查是否包含响应头
  • Content-TypeResponse time is less than 200ms:检查请求耗时小于200ms

实操:

注意:

如果使用了内置的动态参数暂时是无法使用断言的

在断言中获取自定义动态参数【全局变量】的方式:

1.pm.globals.get("变量名")

2.globals["变量名"]

3.globals.times

效果展示:

其他断言自行尝试吧

全局断言

十二、上传文件的接口

注意:那个文件最好存放在postmain的执行路径下,防止出现问题【批量上传的时候会出错】

十三、postmain批量运行用例

十四、postmain数据驱动之CSV文件和JSON文件的处理

接口测试的时候除了执行正例,还需要执行反例

CSV文件

1、新建一个csv文件

2、查看反例相对应的报错返回码

这里的反例是:grant_type,appid,secret分别为空

3、编写csv文件

4、修改,params和断言

5、导入csv文件,执行用例,查看结果

JSON文件

创建一个.json的文件

注意:按照json的key:value的形式写好,注意最外层的[  ]  别忘了

其他操作和csv文件的一样.

  • 十五、测试必须带请求头的接口

  • 发送请求,返回的响应是一个页面的这种,通常是需要带请求头取访问的接口
  • 操作:

  • 通常使用fidder抓包,复制需要请求头

常见的请求头:

  • Host:请求的主机地址
  • Connection: 连接方式
  • Accept :客户端接收到的数据格式
  • XRequested-with :异步请求
  • User-Agent:客户端的用户类型
  • Referer:来源
  • Cookie:Cookie信息   
  • Content-Type :请求内容的格式

注意:如果不知道是哪个请求头,就把所有请求头复制过来,挨个试!!

十六、Mock Service服务器

mock模拟

在前后端分离的项目中,后端的接口还没开发完成,前端的业务需要调用后端的接口,这种情况一般使用 mock service服务器模拟后端接口

1.创建Mock Service服务器

如果想修改返回值,可以直接修改

举个栗子:  把之前设置的 success 修改成 {"error_code":0,msg:"返回成功",data:[]}

也可以在网页上测试一下

服务端地址 + 自己设置的路径 

https://eb090e8b-7c68-4325-8a76-ef5c90bf3a75.mock.pstmn.io/test

十七、Postman的Cookie鉴权

1、什么是cookie ?

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

2、cookie鉴权的原理

1.当客户端第一次访问服务器的时候,那么服务器就会生成Cookie信息,并且在响应头的set-cookie里面把牛成的cookie信息发送给客户端
2.当客户端第2-N次访问服务器的时候,那么客户端就会在请求头的cookie带上cookie信息,从而实现鉴权。

3、cookie的分类

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

由于个人信息问题,这部分不做演示,一般可以用一个访问的接口和一个登录的接口来测试

1.在访问接口中获得token(Cookie),做法和上文写的一样,核心在获得Cookie(token),

断言脚本可参考如下:

//使用正则表达式提取器获取token

var result = responseBody.match(new RegExp('name="csrf_token" value="(.*?)"'));

console.log(result);

//设置为全局变量

pm.globals.set("csrf_token", result[1]);

2.其他操作参考接口关联,传输数据的做法,把csrf_token,传给登录接口就行了.


感谢支持,未完待续~~~~~~~~~~~~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1452862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于umi ui图标未显示问题

使用ant design pro 时&#xff0c;安装了umi ui &#xff0c;安装命令&#xff1a; yarn add umijs/preset-ui -D但是启动项目后&#xff0c;发现没有显示umi ui的图标 找了许多解决方案&#xff0c;发现 umi的版本问题&#xff0c;由于我使用的ant design pro官网最新版本&a…

tf.linspace时出现Could not find valid device for node.

背景&#xff1a; 在使用tensorflow2.x的时候,当使用tf.linspace的时候会出现如下的报错&#xff1a; import os os.environ[TF_CPP_MIN_LOG_LEVEL] 2import tensorflow as tf from tensorflow import keras import numpy as npdef out():# x tf.constant(np.arange(12).re…

实现低功耗设计的嵌入式系统技术

&#xff08;本文为简单介绍&#xff0c;观点来源网络&#xff09; 在嵌入式系统设计中&#xff0c;追求低功耗已成为一个核心指标&#xff0c;旨在延长设备的运行时间并提升能效。实现这一目标的途径是多元的&#xff0c;涉及从硬件选型到软件算法的各个层面。 首先&#xf…

顺序结构实现栈

顺序结构实现栈 1. 栈1.1 栈的概念及结构1.2栈的实现 2. 栈的各种函数实现3. 全部代码实现 1. 栈 1.1 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为…

浅析太阳能电池量子效率测试系统的主要组成部分

太阳能电池量子效率测试系统是用于对太阳能电池进行量子效率测试的设备。量子效率是指太阳能电池在接收光照射时&#xff0c;将光子转化为电子的效率。太阳能电池的量子效率越高&#xff0c;其转化光能为电能的效率就越高。主要由以下几个组成部分构成&#xff1a; 光源&#x…

MIT-BEVFusion系列八--onnx导出2 spconv network网络导出

这里写目录标题 export-scn.py加载模型设置每层的精度属性初始化输入参数导出模型model.encoder_layers 设置初始化参数设置 indice_key 属性更改 lidar backbone 的 forward更改lidar网络内各个层的forward带参数装饰器&#xff0c;钩子函数代码使用装饰器修改forward举例 跟踪…

SpringBoot实战第五天

最后在开发一个文件上传接口&#xff0c;结束后端部分开发 文件上传接口 先看接口文档 阅读接口文档&#xff0c;唯一问题就是项目暂时还没有传到服务器上&#xff0c;所以对文件的存储与读取暂时在项目本地进行 Controller层 RestController public class FileUploadCont…

探索设计模式的魅力:揭秘模版方法模式-让你的代码既灵活又可维护

设计模式专栏&#xff1a;http://t.csdnimg.cn/U54zu 目录 一、开篇二、应用场景一坨坨代码实现存在的问题 三、解决方案模式方法结构示意图及说明用模板方法模式重构示例解决的问题 四、工作原理使用模板方法模式重写示例结构图核心结构&#xff1a;抽象类和具体实现 五、总结…

IDEA 的28 个天花板技巧,yyds!

IDEA 作为Java开发工具的后起之秀,几乎以碾压之势把其他对手甩在了身后,主要原因还是归功于:好用;虽然有点重,但依旧瑕不掩瑜,内置了非常多的功能,大大提高了日常的开发效率,下面汇总了常用的28个使用小技巧,学会之后,让你的撸码效率直接起飞... 注意:不同idea版本菜…

计算机二级之sql语言的学习(数据模型—概念模型)

概念模型 含义: 概念模型用于信息世界&#xff08;作用对象&#xff09;的建模&#xff0c;是实现现实世界到信息世界&#xff08;所以万丈高楼平地起&#xff0c;不断地学习相关的基础知识&#xff0c;保持不断地重复才能掌握最为基础的基础知识&#xff09;的概念抽象&#…

SG5032VEN晶体振荡器SPXO

在高速数字通信和精密电子系统中&#xff0c;时钟信号的质量至关重要。SG5032VEN晶体振荡器&#xff08;SPXO&#xff09;凭借其低相位抖动的LVDS输出&#xff0c;为这些应用提供了理想选择。提供频率范围:200.1 MHz ~ 500mhz&#xff0c;满足了从高速网络到数据中心等不同应用…

Java编程在工资信息管理中的最佳实践

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

【c++】析构函数

1.特征 析构函数是特殊的成员函数&#xff0c;其特征如下&#xff1a; 1.析构函数名是在类名前加上字符~。 2.无参数无返回值类型。 3.一个类只能有一个析构函数。若未显式定义&#xff0c;系统会自动生成默认的析构函数。注意&#xff1a;析构函数不能重载。 4.对象生命周…

HTML-多媒体嵌入-MDN文档学习笔记

HTML-多媒体与嵌入 查看更多学习笔记&#xff1a;GitHub&#xff1a;LoveEmiliaForever MDN中文官网 HTML-中的图片 将图片放入网页 可以使用<img/>来将图片嵌入网页&#xff0c;它是一个空元素&#xff0c;最少只需src属性即可工作 <img src"图片链接"…

【Python】测量WAV文件播放时长

问题 windows播放WAV音频文件&#xff0c;一般使用API函数&#xff0c;如PlaySound。实际使用发现&#xff0c;从调用PlaySound到实际开始播放存在200ms以上的延时&#xff0c;在游戏编程中音效实时性是个需要解决的问题。 本文主要讨论&#xff0c;windows播放WAV文件的衍生…

JVM-JVM中对象的生命周期

申明&#xff1a;文章内容是本人学习极客时间课程所写&#xff0c;文字和图片基本来源于课程资料&#xff0c;在某些地方会插入一点自己的理解&#xff0c;未用于商业用途&#xff0c;侵删。 原资料地址&#xff1a;课程资料 对象的创建 常量池检查:检查new指令是否能在常量池…

ESP32-Cam学习(1)——拍摄第一张照片

1.开发板介绍 使用的ESP32-Cam实物图为&#xff1a; 在某宝可以轻易买到。它分为主板&#xff0c;和底板。底板的主要功能是供电、程序下载等等。主板才是ESP32芯片的核心。 2.固件烧录 使用摄像头之前&#xff0c;需要给ESP32刷入支持摄像头的固件库&#xff0c;其下载地址为…

(07)Hive——窗口函数详解

一、 窗口函数知识点 1.1 窗户函数的定义 窗口函数可以拆分为【窗口函数】。窗口函数官网指路&#xff1a; LanguageManual WindowingAndAnalytics - Apache Hive - Apache Software Foundationhttps://cwiki.apache.org/confluence/display/Hive/LanguageManual%20Windowing…

线索化二叉树(先序,中序,后序)+线索化二叉树的遍历【java详解】

目录 线索化二叉树的基本介绍&#xff1a; 举个栗子&#xff1a; 二叉树的中序线索化&#xff1a; 创建HeroNode类&#xff0c;表示节点信息&#xff1a; 编写中序线索化方法代码&#xff1a; 中序线索化遍历代码&#xff1a; 测试代码&#xff1a; 测试结果&#xff1a…

OpenAI发布Sora技术报告深度解读!真的太强了!

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;洲与AI。 &#x1f388; 本文专栏&#xff1a;本文收录…