接口测试请求方式:get、post、delete、put
get请求与post请求区别:
1、提交方式得不同:get请求直接在地址栏中输入参数以及数据信息进行提交,post得数据是放在forms表单中,以表单形式提交接口数据来获取接口响应;
2、请求数据大小:get请求的数据相对于post请求数据要小;
3、安全性不同:get请求方式数据信息在地址栏中展示,相对于post请求的数据参数在表单中,安全性要小一些;
接口测试流程:
1、需求讨论
2、需求评审
3、场景设计
4、数据准备
5、执行测试
接口测试的条件:
1、服务器地址;
2、接口地址及端口;
3、接口的请求方式;
4、接口请求头;
5、接口的参数以及参数的约束条件;
6、接口返回的数据包括正常以及异常的返回数据;
接口用例设计:理清思路,避免漏测,提高测试效率,跟进测试进度,跟进重复性工作
1、功能:功能是否正常,功能是否按照接口文档实现
2、业务逻辑:是否有依赖业务,有些接口需要依赖其他接口后才可以进行访问,比如下单接口需要登陆后进行访问,这个时候需要在下单的接口中增加一个登录接口的cookie字段以及值,才可以进行访问下单接口
3、异常:
参数异常:关键字参数(能否使用代码中的关键字,比如将用户名改为echo输出的关键字)、参数为空、添加的参数多增加或减少、填写错误参数
数据异常:关键字参数(将数据更改为NULL)、数据为空、长度不一致(查看接口是否有验证数据长度的验证)、错误数据
4、安全:
cookie:测试存在依赖关系的接口时,验证在不添加cookie字段以及值的时能否访问成功;
header:有时候在验证移动端接口的时,特别需要考虑header ,为了安全考虑需要加入header的一些信息,此时就需要验证加入header 以及不加入时接口的安全性是否符合需求
一、什么是接口:
1、不是所有的接口都可以进行调用,需要有鉴权码(token,key,appkey)
2、接口包括:内部接口(开发人员自己开发的系统内部接口),外部接口 (调用外部:微信,支付宝等)
3、总结:软件提供给外部的一个服务,用于软件数据的一个传输;
4、为什么需要接口:因为接口可以让内部数据被外部所调用以及修改;
5、为什么需要接口测试:
a:现在的开发项目都是前后端分离,开发进度不一致,需要将一开始开发出来的接口进行测试,这里需要mock模拟数据;
b:基于安全角度考虑,前端页面上的验证很容易通过,此时应着重考虑接口,特别是身份验证银行卡信息等数据;
c:现在推崇测试左移,就是今早的进行测试;
6、接口测试的本质:接口测试本质就是验证接口能否正常交换数据,当出现异常数据时接口会不会提示异常数据信息;
接口交互示意图.png
二、接口返回数据以及json详解:
1、json格式:三组数据
a:code:0;错误码,0表示成功;
b:msg:”success“,对错误码的中文说明;
c:data:真正返回的数据;
json就是一种数据类型
json由两种组数据组成,键值对(key-velue)、数组
2、html格式:返回的是<html><html/>格式的数据
3、xml:<?xml?nersion="10.0.0">
三、接口协议:
1、webservice协议:接口地址---https://...............?wsdl
restful规则:get获取数据,post发送数据,put修改数据,delete删除数据
2、double:适用于少量数据的传输,但是也可以承载大并发
3、http协议:接口地址:http://.....................
http:端口--80
https:端口--443(http+ssl(安全传输协议))
4、http协议详解:超文本传输协议,主要用于浏览器与服务器之间交互,交互由两部分:
a:请求:get、post、put、delete
b:相应:1xx相应信息、2xx相应成功、3xx重定向、4xx客户端错误、5xx服务器错误
一、什么是接口
1、什么是接口?
电脑:USB,投影机(数据传输)
软件:统称API,application,program,interface,微信提现和充值,支付宝支付,银联支付接口。(鉴权码:token,key,appkey)
接口包括:内部接口和外部接口
内部接口:开发人员自己开发的对自身系统提供的接口。
外部接口:开发系统调用外部的,微信,支付宝,其他的接口。
总结:接口就是软件提供给外部的一种服务。用于做数据传输。
2、软件为什么需要接口?
因为接口能够让内部的数据被外部进行修改。
3、我们为什么要做接口测试?
(1)现在很多系统都是前后端分离,开发的进度不一样,需要把一开始开发出来的接口进行测试。mock
(2)基于安全考虑,前端有验证很容易绕过,直接请求接口,特别:身份证信息,银行卡,金钱交易。
(3)测试推崇的是测试左移,测试尽早的介入。
接口测试的本质:就是测试接口能否正常的交互数据,权限控制以及异常场景。
二、接口返回数据和JSON详解
1.json格式:三组数据(80%)
{error_code:0,msg:"提现成功",data:[]}
error_code:错误码,0代表成功, code
msg:对错误码的中文说明
data:真正的返回的数据
1.json就是一种数据类型,整形,小数,字符串。
2.JSON由两组数据组成
MAP对象,键值对,{key:value,key:value}
数组:[value1,value2,value3]
{ "people":[ {"firstName": "Brett", "lastName":"McLaughlin" }, { "firstName":"Jason","lastName":"Hunter"}]}
2.html格式
<htm>
<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>
三、接口测试协议
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删除数据。
http://192.168.12.1:8080/user
2.dubbo协议:接口地址以dubbo://......
适用于少量数据的传输。大并发。
3.http协议:接口地址:http:// 80%
https=http+ssl安全传输协议 端口:443
http:端口80
什么是http协议?
http是超文本传输协议,主要用于浏览器和服务器之间交互数据,交互有两个部分:
请求:get,post,put,delete
响应:1XX信息,2XX成功,3XX重定向(跳转不传值),4XX客户端错误,5XX服务器错误。
请求部分包含:
请求行:请求方式,请求地址,协议
POST http://47.107.116.139/phpwind/index.php?m=u&c=login&a=dorun HTTP/1.1
请求头:
Accept: application/json, text/javascript, */*; q=0.01(客户端可以接收的数据格式)
X-Requested-With: XMLHttpRequest(异步请求)
User-Agent: PostmanRuntime/7.26.5(客户端的用户)
Cache-Control: no-cache
Postman-Token: 14a45257-b900-46e4-b760-e45c1a2ac824
Host: 47.107.116.139(请求的主机地址)
Accept-Encoding: gzip, deflate, br(压缩方式)
Connection: keep-alive(保持活跃)
Cookie: wNq_lastvisit=1029%091605272358%09%2Fphpwind%2F;
wNq_visitor=pVVS4zEbzW%2F5x0XgEQQ4F20ipEcBIXS8AU0DopI6Xoj7L3SmaUYR%2Fw%3D%3D;
csrf_token=68bd2c7857e99ca7(请求cookie信息)
Content-Length: 0(内容的长度)
空一行
请问正文
响应的部分:
响应行:协议,响应码,响应信息
HTTP/1.1 200 OK
响应头:
Server: nginx
Date: Fri, 13 Nov 2020 12:59:22 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.36
Set-Cookie: wNq_lastvisit=1033%091605272362%09%2Fphpwind%2Findex.php%3Fm%3Du%26c%3Dlogin%26a%3Ddorun;
expires=Sat, 13-Nov-2021 12:59:22 GMT; Max-Age=31536000; path=/
Vary: Accept-Encoding(响应的)
Content-Length: 196
空一行
响应的内容
{"referer":"http%3A%2F%2F47.107.116.139%2Fphpwind%2Findex.php%3Fm%3Du%26c%3Dlogin","refresh":false,"state":"fail","message":
["\u5e10\u53f7\u6216\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a"],"__error":""}
四、企业接口测试的流程和方案?
1.拿到api接口文档,熟悉接口的业务,接口地址,鉴权,入参,出参,错误码。
2.接口计划和方案
思路:
正例:输入正常的入参,查看接口是否返回成功。
反例:
鉴权反例:鉴权为空,鉴权码错误,鉴权码已过期.....
参数反例:参数空,参数类型异常,参数长度异常。
错误码的覆盖。
其他场景:分页异常。
3.编写用例和评审
4.执行接口测试
5.输出接口测试报告。
五、接口测试工具以及Postman介绍
接口测试工具:
postman,jmeter,soupui,apipost,fiddler,charles
请求部分的页签:
Params:用于在get请求传参
Authorization:postman自带的鉴权功能
Headers:请求头
Body:post请求传参
none:没有参数
form-data:即有文件又有键值对。
x-www-form...只传输键值对
raw:创Json,txt,xml,html,js
binary:把文件以二进制的方式传输
Pre-request Sciprt:接口请求之前的脚本。js
Tests:断言的代码
Cookies:Postman的cookie的管理器
code:生产接口自动化脚本。
响应部分的页签:
Body:返回的数据
Pretty:以json格式展示
Raw:以文本的格式展示
Preview:以网页的格式展示
cookie返回的cookie信息
Headers响应头
TestResults:断言结果
status:状态码
time消耗的时间
szie:字节数
六、Postman内置的动态参数
企业当中做接口测试的时候经过会出现接口不能把参数写死。
时间戳:{{$timestamp}}
生成0-1000的随机整数:{{$randomInt}}
生成一个GUID的字符串:{{$guid}} 很长的一个字符串
七、Postman环境变量和全局变量
开发环境,测试环境,预发布环境,线上环境。
不管是环境变量也好,还是Globals也好都是全局变量。
八、接口关联
JSON提取器
//提取access_token的值
var jsValue = JSON.parse(responseBody)
console.log(jsValue.access_token)
//把提取的值保存到全局变量
pm.globals.set("access_token",jsValue.access_token);
正则表达式提取器
//使用正则表达式提取 match:匹配 new RegExp新建规则
var flag_id = responseBody.match(new RegExp('"id":(.+?),'))[1]
console.log(flag_id)
pm.globals.set("flag_id",flag_id);
Cookie提取器:鉴权码通过cookie传输
九、Postman断言
//八种断言方式,八大元素定位
//1.断言返回码为200 用于状态断言
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
//2.断言返回的结果中包括有一个指定的字符串 用于业务断言
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("tags");
});
//3.对返回的结果做jSON字段检查 用于业务断言
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.tags[0].id).to.eql(2);
});
//4.断言返回的结果等于一个字符串 用于业务断言
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
});
//5.断言响应头中包含有指定的响应头
pm.test("ContentType is present", function () {
pm.response.to.have.header("ContentType");
});
//6.断言接口请求的时间少于200毫秒 用于性能断言
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(500);
});
//7.断言一个post请求的返回的状态码是否在指定的范围里面
pm.test("Successful POST request", function () {
pm.expect(pm.response.code).to.be.oneOf([200, 201]);
});
//8.断言返回的状态码信息中包含指定的字符串
pm.test("Status code name has string", function () {
pm.response.to.have.status("OK");
});
精确断言:
var times = Date.now()
pm.globals.set("times", times);
全局断言:
用于状态断言
十、Postman连接数据库进行接口测试
1、安装node.js
2、安装xmysql
3、连接数据库:xmysql -h 数据库地址 -u 用户名 -p
十一、Postman参数化
1、txt
2、csv
3、json
使用时在运行接口得模块中选中参数化文件,直接运行
网友评论