接口测试——学习笔记1
接口测试本质:就是测试接口能否正常的交互数据,权限控制以及异常场景。
接口返回数据的JSON详解
json格式:三组数据
{error_code:0,msg:“xxx”,data:[]}
error_code:错误码,0代表成功,msg:对错误码的中文说明,data:真正的返回的数据
-
json就是一种数据类型,整型,小数,字符串。
-
JSON由两组数据组成
MAP对象,键值对
{key:value,key:value}
数组
{value1,value2,value3}
{
"people":[
{
"firstName": "Brett",
"lastName":"McLaughlin"
},
{
"firstName":"Jason",
"lastName":"Hunter"
}
]
}
html格式
<html>
<title></title>
<body>
<error_code>0</error_code>
...
</body>
</html>
xml格式
<?xml?version="1.0" encodeing="utf-8">
<error_code>0</error_code>
...
</xml>
接口测试协议
webservice协议
接口地址:http:// xxx ?wsdl
http://192.168.xx.1:8080/addUser
http://192.168.xx.1:8080/delUser
http://192.168.xx.1:8080/updUser
http://192.168.xx.1:8080/selUser
soap协议,wsdl
restful规则:
get获取数据,post提交数据,put修改数据,delete删除数据。
http://192.168.xx.1:8080/user
dubbo协议
接口地址以dubbo://…
适用于少量数据的传输。大并发。
http协议
接口地址:http://
https=http+ssl安全传输协议 端口:443
http端口:80
什么是http协议?
http是超文本传输协议,主要适用于浏览器和服务器之间交互数据,交互有两个部分:
请求:get,post,put,delete
响应:1xx信息,2xx成功,3xx重定向(跳转不传值),4xx客户端错误,5xx服务器错误
请求部分包含:
请求行:请求方法,请求URL,HTTP协议及版本
报文头
报文体
响应部分包含:
企业接口测试的流程和方案
-
拿到api接口文档,熟悉接口业务:接口地址、鉴权、入参、出参、错误码。
-
接口计划和方案
思路:
正例:输入正常的入参,查看接口是否返回成功。
反例:
鉴权反例:鉴权为空,鉴权码错误,鉴权码已过期…
参数反例:参数为空,参数类型异常,参数长度异常,错 误码的覆盖
其他场景:分页异常
-
编写用例和评审
-
执行接口测试
-
输出接口测试报告
接口测试工具以及Postman介绍
接口测试工具:
postman,JMeter,soupui,apipost,fiddler,Charles
Postman请求部分的页签
Params:用于在get请求传参
Authorization: postman自带的鉴权功能
Headers:请求头
Body: post请求传参
- none: 没有参数
- form-data: 既有文件又有键值对
- x-www-form: 只传键值对
- raw: 创JSON,txt,xml,html,js
- binary: 把文件以二进制的方式传输
Pre-request-Script:接口请求之前的脚本,js
Tests:断言的代码
Cookies: postman的cookies管理器
code: 生产接口自动化脚本
Postman响应部分的页签
Body: 返回的数据
- Pretty:以JSON格式展示
- Raw:以文本的格式展示
- Preview:以网页的格式展示
cookie:返回的cookie信息
Headers:响应头
TestResults:断言结果
status:状态码
time:消耗的时间
size:字节数
Postman内置的动态参数
企业当中做接口测试的时候经常会出现接口不能把参数写死。
时间戳:{{$timestamp}}
生成1000以内的随机整数:{{$randomint}}
生成一个GUID的字符串:{{$guid}} 很长的一个字符串
Postman环境变量和全局变量
开发环境、测试环境、预发布环境、线上环境
不管是环境变量也好,还是Globals也好都是全局变量
接口关联
JSON提取器
正则表达式提取器
Postman断言
//八种断言方式,八大元素定位
//断言返回码为200 Status code: Code is 200
//一般用于状态断言
pm.test(“Status code is 200”, function () {
pm.response.to.have.status(200);
});
//断言返回的结果中包含有一个指定的字符串 Response body: Contains string
//用于业务断言
pm.test(“Body matches string”, function () {
pm.expect(pm.response.text()).to.include(“string_you_want_to_search”);
});
//对返回的结果做JOSN字段检查 Response body: JOSN value check
//用于业务断言
pm.test(“Your test name”, function () {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
//断言返回的结果等于一个字符串 Response body: Is equal to a string
//用于业务断言
pm.test(“Body is correct”, function () {
pm.response.to.have.body(“response_body_string”);
});
//断言响应头中包含有指定的响应头 Response headers: Content-Type header check
pm.test(“Content-Type is present”, function () {
pm.response.to.have.header(“Content-Type”);
});
//断言接口响应的时间小于200毫秒 Response time is less than 200ms
//用于性能断言
pm.test(“Response time is less than 200ms”, function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
//断言一个post请求的返回的状态码是否在指定的范围里面 Status code: Successful POST request
pm.test(“Successful POST request”, function () {
pm.expect(pm.response.code).to.be.oneOf([201, 202]);
});
//断言返回的状态码信息中包含指定的字符串 Status code: Code name has string
pm.test(“Status code name has string”, function () {
pm.response.to.have.status(“Created”);
});