|
一、接口测试的简介和分类
接口测试就是测试系统俎件接口之间的一种测试。分类∶
测试外部接口∶测试被测系统和外部系统之问的接口。(只需要测试正例即可)
测试内部接口∶
1.内部接口只提供给内部系统使用。(预算系统,承保系统)(只需要测试正例即可)
⒉.内部接口提供给外部系统使用。(测试必须非常全面,正例,各种异常场景,权限控制
二、接口测试的流程以及用例的设计
1.拿到接口api文档(通过抓包工具获取),熟悉接口业务,接口地址,鉴权方式,入参,出参,错误码
2编写接口用例以及评审。思路∶
(1)正例∶输入正常入参,接口能够成功返回数据
(2)反例:
a.鉴权反例︰鉴权码为空,鉴权码错误,鉴权码过期,…-
b.参数反例︰参数为空,参数类型异常,参数长度异常
c.错误码覆盖∶根据业务而定的
d.其他错误场景∶接口黑名单,接口调用次数限制,分页场景
3.使用接口测试工具Postman执行接口测试
4.Postman+Newman+Jenkins实现持续集成,并且输出测试报告并且发送邮件
三、Postman执行接口测试
请求页签
Params : get请求传参
authorization:鉴权
headers:请求头
Body : post请求传参
a.form-data :既可以传键值对参数也可以传文件
b.x-www-from-urlencoded:只能够传键值对参数
c.raw : json , text, xml , html, javascript
d.binary :把文件以二进制的方式传参
pre-request-script:请求之前的脚本
tests :请求之后的断言
cookies :用于管理cookie信息
Body:接口返回的数据。
a.Pretty : 以Json , html,XML…不同的格式查看返回的数据。
b.Raw:以文本的方式查看返回的数据。
c.PreView.以网页的方式查看返回的数据
Cookies:响应的Cookie信息
Headers :响应头
Test Results"断言的结果。200状态码
OK状态信息
681MS 响应的时间
343B响应的字节数
面试题∶
Get请求和Post请求的区别︰
1.get请求一般是获取数据,post请求一般的提交数据。
2.post请求比get请求安全。体现在post通过在body里面的表单来提交数据,比get直接写在地址栏的安全
3.本质区别也就是是传参的方式不一样︰
get请求在地址栏后面以?的方式传参,多个参数之间用&分隔。post请求是在body以表单的方式传参。
问题:
多种环境∶开发环境,测试环境,生成环境。
接口关联∶需要手动关联
参数需要手动修改。
四、Postman的环境变量以及全局变量
环境变量:环境变量就是全局变量
全局变量:全局变量是能够在任何接口里面访问的变量。
获取环境变量和全局变量的值通过:{{变量名}}
五、接口关联
1.使用json提取器实现接口关联
在获取token的接口上
console.log(responseBody);
//打印responseBody
var result = JSON.parse(responseBody);
//JSON提取器,字符串数据转换为对象形式,并赋值给result
console.log(result.data.token);
//打印token
pm.globals.set("itoken", result.data.token);
//设置itoken为全局变量
在使用接口的token的接口上
itoken {{itoken}}
执行后
使用全局变量
2.使用正则表达式提取器实现接口关联
在获取token的接口上
var result = responseBody.match(new RegExp('{"code":"200","msg":"操作成功","data":{"id":1,"username":"admin","password":"admin","state":1,"createTime":"2021-11-21 21:47:55","updateTime":"2021-11-21 21:48:00","menuUrlPathList":null,"token":"(.*?)"}}'));
//使用正则表达式提取器实现接口关联,match匹配。将所要提取部分用(.*?)来替代
console.log(result);
//打印得到两个数据,其中1为所需
console.log(result[1]);
//打印数据1
pm.globals.set("itoken", result[1]);
//设置为全局变里
在使用token的接口上
itoken {{itoken}}
六、Postman内置动态参数以及自定义的动态参数
postman内置动态参数︰
{{KaTeX parse error: Expected 'EOF', got '}' at position 10: timestamp}̲}生成当前时间的时间戳。 {{randomintl}生成0-1000之间的随机数
{{$guid}}生成速记GUID字符串。
自定义动态参数
设置times全局变量
var times = Date.now();
//手动的获得时间戳
pm.globals. set( "times" ,times );
//设置为全局变量
使用时使用:
{[{times]}
|
|