postman学习

接口测试的简介和分类

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

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

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

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

1)拿到接口API文档(或者通过抓包工具获取),熟悉接口业务,接口地址,鉴权方式,入参,出参,错误码。2)编写接口用例以及评审

思路

正例:输入正常入参,接口能够成功返回数据反例:

鉴权反例:

鉴权的意思:鉴定它是否有访问接口的权限鉴权码:token,key,appkeypostman中的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,javascriptbinary:将文件以二进制的方式传参 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 检查返回的状态码是否为200response body:contains string 检查响应中包括指定字符串response body:json value check 检查响应中其中json的值response body:is equal to a string 检查响应等于一个字符串response headers:Content-Type header check: 检查是否包含响应头Content-Typeresponse 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=valuecookie鉴权的原理

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)首先是在所在的文件夹中执行cmd2)执行如下命令:

命令: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 command4)执行系统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格式

0

提现成功

....

Xml格式 -主体内容同html格式

接口测试协议

webservice协议:接口地址:http://…?wsdl 这种格式

soap协议,wsdlrestful规则

get获取数据,post提交数据,put修改数据,delete删除数据地址一样,例如:http://123.12.32.2:8080/user dubbo协议:接口地址: dubbo://…这种格式

适用于少量数据的传输,大并发不适合传输大量的文件,如文件或者视频 http协议:

1)接口地址1:http://…

接口地址2:https://…

https=http+ssl安全传输协议 端口:443http协议的端口是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接口文档,熟悉接口的业务,接口地址,鉴权,入参,出参,错误码接口计划和方案

思路

正例:输入正常的入参,查看接口是否返回成功反例:

鉴权反例:鉴权为空,鉴权码错误,鉴权码已过期…参数反例:参数为空,参数类型异常,参数长度异常,错误码覆盖其他场景:分页 编写用例和评审执行接口测试输出接口测试报告

相关链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: