欢迎光临散文网 会员登陆 & 注册

Postman接口测试使用教程和接口自动化测试项目实战你要的都有

2023-08-21 20:42 作者:君无懮  | 我要投稿

有些图片没有cv过来,建议大家边看视频边记笔记,笔记一定要自己记。

如果笔记有错误加我qq:3279793245 p22之后视频没有看

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


1 分类:

测试外部接口:测试被测系统和外部系统之间的接口 (只测正向)

测试内部接口:

1.内部接口只提供给内部系统使用 (公司内部使用)

2.内部接口提供给外部系统使用 (全面测试,异常场景,权限控制)


2 接口测试流程和用例设计

1 拿到接口api文档(或者f12抓包工具),熟悉接口业务,接口地址,鉴权方式,入参,错误码

2 编写接口测试用例以及评审

思路:

正例:输入正确入参,接口返回正确数据

返例:

鉴权反例:

鉴权码为空,错误,过期......

参数反例:

为空,参数类型异常,长度异常

错误码覆盖:

根据业务来定。

其他错误场景:

接口黑名单,接口调用次数限制,分页场景

3 使用postman执行测试用例

4 postman+nweman+Jenkins实现持续集成并且输出测试报告并且发送邮件。


3 postman 介绍 使用

创建项目


3.2 创建接口



get请求页签

左边竖着目录解释


collections :集合 项目

APIS: api文档

environments:环境变量

Mock servers:服务器

Monitors:监听

History:历史记录


=---------------=

横着关键字解释


Params :get传参

Authorization:鉴权

Headers :请求头

Body:post请求传参地方

none:没有参数

from-data :既可以传键值对,也可以传文件

x-www-from-urlcodend:只能传键值对

raw:传json,text,xml,html,javaScript

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

Pre-request Script:请求之前的脚本

Tests:请求之后的(脚本)断言

Settings:设置

Cookies:用于管理cookies信息


-----Authorization:鉴权图解

Body:post请求传参地方

from-data :既可以传键值对,也可以传文件

Cookies:用于管理cookies信息


post请求标签

Params 里可以以key-value形式添加鉴权token


响应页签



下方关键字解释

body:接口返回的数据

Pretty:以json,html,xml。。。不同格式查看返回的数据

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

PreView:以网页的形式查看返回的数据

Cookies:响应的cookies信息

Headers:响应头

Test Results:断言的结果

··· -> Save response to file : 以文件形式保存此次响应

get请求 post请求区别

get请求一般是获取数据

post请求一般是提交数据

git:

速度快

不限制参数长度

入参在url里,保密性不强 url后面加 ? 多个参数以 & 分割

post:

速度慢

限制参数长度

入参加密

4 postman环境变量 全局变量


Create Environment(环境变量):

添加环境变量:


使用环境变量:

环境变量key在URl栏里输入要用 {{}} 括起来 ,然后右上角选择对应的环境运行。



Globals(全局变量):

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



5 接口关联

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

需求:第一个接口里有access_token,第二个接口里需要这个token,就可以把token在第一个接口里设置为全局变量。


第一个接口里的 Tests :

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

//把返回的字符串的数据转换成对象的形式
var result = JSON.parse(responseBody);
console.log(result.access_token);
//把access_toekn设置为全局变量
pm.globals.set("access_token".result.access_token);

console.log(responseBody); 打印上一个接口测试里的值

var result = JSON.parse(responseBody); 把json值转为对象

console.log(result.access_token); 打印需要的值的value (value=result.key) //点左下角Consele显示控制台

pm.globals.set("access_token",result.access_token); 设置变量名称为 ‘access_token’的全局变量

高亮两行代码就可以完成

第二个接口:

value里使用{{access_token}} 获取value

图示:

不用看地址栏(url没改 )

第一个接口



第二个接口



1.1 查看环境变量和全局变量:



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

第一个接口里的Tests:

var result = responseBody.match(new RegExp('"access_token":"(.*?)"'));
console.log(result);//到这先运行一下 result会有好几个值,选择正确的值的下标放在第三行
pm.globals.set("access_token",result[1]); 设置全局变量

new RegExp('') //创建一个正则表达式 ,括号里传进的值如果加双引号,RegExp('')这个括号里就使用单引号。

new RegExp('"access_token":"(.*?)"') //黄色高亮是值的前面,橙色是值本身,值本身使用 (.*?) 代替。

原来的值为:

写完第二行先运行一下 result会有好几个值,选择正确的值的下标放在第三行。

//点左下角Consele显示控制台



第二个接口

value里使用{{access_token}} 获取value



3 内置动态参数以及自定义动态参数

postman内置动态参数:

{{$timestamp}} 生成当前时间的时间戳

{{$randomint}} 生成1-1000的随机数,有可能重复

{{$guid}} 生成一个随机的GUID的字符串


自定义动态参数

Pre-request Script()://请求之前执行的脚本在这里写代码


var times = Date.new();
pm.globals.set("times", times);

var times = Date.new(); 获得当前时间戳赋值给times

pm.globals.set("times", times); //把时间戳设置为全局变量

Body里直接使用times 。

//点左下角Consele显示控制台


6 业务闭环(增、改、查、删)和文件上传

一个业务如果有增删改查,可以按照 增 改 查 删的顺序执行接口,这样数据库就不会有多余数据。


文件上传

Body from-date file

key设置文件名字 value 选择地址


7 断言

传送门:csdn

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

header报文检查

Response time is less than 200ms

响应时间小于200ms

一般状态断言只有一个,业务断言可以有多个

写在Tests

运行结束之后在 Test Results里查看结果



全局断言 :

每个接口都要写状态断言

在项目- 项目名称右键 Edit Tests 里添加状态断言


Status code: Code is 200 检查返回值是否为200

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

Response body: Contains string 检查是否含有某个关键字

一定要自定义参数,需要拼接 + pm.globals.get("key") 或者 globals["times"] 或者 globals.times都是获取全局变量

//业务断言
pm.test("检查响应中是否有token这个关键字", function () {
    pm.expect(pm.response.text()).to.include("token");
});

//猪猪侠215222在上面接口里是由 猪猪侠+{{times}} 组成的

//times是一个时间戳,在这里当做随机数

//业务断言 获取 值为猪猪侠times(猪猪侠215154)的key
pm.test("检查是否有猪猪侠215648561", function () {
	//猪猪侠215222在上面接口里是由  猪猪侠+{{times}}   组成的
	//times是一个时间戳,在这里当做随机数
    pm.expect(pm.response.text()).to.include("猪猪侠"+ pm.globals.get("times"));
  	 pm.expect(pm.response.text()).to.include("猪猪侠"+globals["times"]));
		pm.expect(pm.response.text()).to.include("猪猪侠"+globals.times));

});

Response body: JSON value check

pm.test("检查errcode为0",function(){
     var jsonData = pm.response.json();
     pm.expect(jsonData.errcode).to.eql(0);
});

8批量运行测试用例

在项目- 项目名称右键 Run collection


批量上传文件时,要在settings里General里 Working directory 下面 打开可读取文件权限


9 通过csv或者json实现数据驱动(一个接口同时运行正例和反例)

csv

1 创建data.csv文件

2 value值依次为空进行运行,查看出错后的返回值


3 所有的key,在文件的第一行用逗号隔开



4 第二行输入正确的value,逗号隔开




5 其中一个key的value为空,其他正确,

其每个key的value依次为空,几个key写几条数据

后面加上第一步各个value为空时的返回值代码

正确的参数会返回token,错误会返回错误代码



6 Params 下面 value 要改成date文件里的{{key}}



7 如果接口运行前需要token 或者鉴权验证 要先进行判断

因为错误的数据进行测试是没有token,鉴权或api验证可能不需要判断

这个里token:

如果token不等于-1 ,则获取token

if(responseBody.search("access_token")!=-1){
var result = responseBody.match(new RegExp('"access_token":"(.*?)"'));
console.log(result);//到这先运行一下 result会有好几个值,选择正确的值的下标放在第三行
pm.globals.set("access_token",result[1]); 设置全局变量
};

这个token是写死的,使用csv要修改

原来的:

//业务断言 
pm.test("检查响应中是否有token这个关键字", function () {
    pm.expect(pm.response.text()).to.include("token");
});

csv:

accert_value在data.csv里对应的就是token的key

//业务断言 
pm.test("检查响应中是否有token这个关键字", function () {
    pm.expect(pm.response.text()).to.include(data.accert_value);
});

json

创建data.json

第一行写正确数据

其他每个key的value依次为空,几个key写几条数据

后面加上第一步各个value为空时的返回值代码

正确会返回token,错误会返回错误代码


[
	{"A":"1","B":"2","C":"3","accress_token":"token值4sdf6ds54gv6d4g35d4"},
	{"A":"","B":"2","C":"3","accress_token":4004},
  {"A":"1","B":"","C":"3","accress_token":4005},
	{"A":"1","B":"2","C":"","accress_token":4006}
]


其他和csv一样



10 必须带请求头的接口

host:请求地址

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

Connection: 连接方式

X-Requested-With 异步请求

User-Agent: 客户端用户类型

Referer: 请求来源地址

Cookie :Cookie信息

Content-type: 请求内容格式


1 不知道用哪个请求,就把所有请求头全部复制

抓包软件




2 postman Headers-Bulk Edit 粘贴



3 删除 Host以及Host以上的内容



4 点击Key-Value Edit,然后运行一遍取消一个对号,直到运行后Body-Previwe不显示网页


11 Postman接口Mock Servier服务器

mock 模拟

后端的接口还没开发完成,前段的业务需要调用后端的接口


1 postman-Mock Servers-创建一个服务

这里是成功之后返回“ok”





2浏览器测试:

复制浏览器地址+“/接口名字”

https://b6965b04-0e94-42f0-b681-7b968017a447.mock.pstmn.io/test

11 Cookie鉴权

cookie只是一小段文本,格式key-value


原理:

1当客户端第一次访问服务器的时候,那么服务器就会生成cookie,

并且在响应头的set-cookie里面把生成的cookie信息发送个客户端,在客户端保存起来。

2当客户端以后每次访问服务器的时候,那么客户端就会在请求头的cookie带上cookie信息,

从而实现鉴权。


cookie分类

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

持久cookie:保存在硬盘里,浏览器关闭后不会清除,只有当过期时间过了才会清除



演示:

cookie在第一个接口里,使用正则表达式把cookie设置为全局变量(需求文档会提示cookie在前端源码里的位置)


需求文档提示的token位置:


第一个接口Tests里代码:

responseBody.match(new RegExp('name="csrf_token" value="(.*?)"'));
pm.globals.set("csrf_token",result[1]);

运行第一个接口,点右上角眼睛,最下面显示cookie信息


第二个接口使用设置的全局变量


点击cookies,删除全部cookie,第二个接口会访问失败

12 加密和解密

13 Newman(新男人)

newman专用于接口测试,为postman而生,可以让posman的脚本用过命令行的方式执行

运行命令:newman run

常用参数;

-e 引用环境变量

-g 引用全局变量

-d 引用数据文件

-n 指定测试用例迭代次数

-r cli,html,json,junit --reporter-html-export 指定生成html报告。


示例:

1 导出项目接口,环境,全局变量,数据文件(标题9的csv和josn格式数据文件),把这些文件放在一个空白文件夹里。

接口


环境


全局变量


数据文件



2 文件地址栏cmd


3 输入执行代码

newman run 接口文件.json -e 环境变量文件.json -g 全局变量.json -d 数据文件.json -r cli,json,unit --reporter-html-export report.html

--------------------------------------

-r cli,json,unit --reporter-html-export report.html 为固定格式 输出report.html 这个文件

在文件存放的文件夹里,有输出的html文件。


14 postman+newman+Jenkins实现接口测试持续集成


Postman接口测试使用教程和接口自动化测试项目实战你要的都有的评论 (共 条)

分享到微博请遵守国家法律