一、什么是接口?
接口指的是实体或者软件提供给外界的一种服务
二、为什么需要接口?
因为接口能够使用我们的实体,软件的内部数据能够被外部修改。
硬件接口:USB接口:传输数据。
软件接口:API(application program interface)
三、软件接口返回的数据格式。
数据格式:1,2,3 (整形) a,b,c(字符串)
1.json
{‘error_code’:40001,msg:‘提现成功’,data:[具体的数据]}
error_code(code)错误码
msg(message):对错误码的中文说明
data(result):具体的数据
目前80%-90%多会返回这个json格式:
json有另种数据组成:(互相嵌套)
a.字典,键值对{}
b.数组:[12,13,14]
验证json格式以及可以做加密和解密:https://www.bejson.com/
2.xml
<error_code>40001</error_code>
提现成功
具体的数据
3.html
四、接口协议(看接口地址)
http协议:https//
webservice协议 https:// ?wsdl
dubbo协议:dubbo://
http协议:https//
面试:你了解http协议吗?
http协议是一种超文本传输协议。主要用于浏览器和服务器之间交互数据。交互数据分为两个部分:
请求:
get(获取数据):
post(提交数据)
put(修改数据)
delete(删除数据)
响应:用数字来表示响应的结果
1XX信息
2XX成功
3XX重定向(跳转)
4XX客户端错误
5XX服务器错误
请求行(请求方式,请求地址,协议的版本)
POST http://localhost/phpwind/index.php?m=u&c=login&a=dorun HTTP/1.1
请求头
Host: localhost(请求的主机地址)
Connection: keep-alive(这个连接保存活跃)
Content-Length: 110(请求的内容有110个字节)
Accept: application/json, text/javascript, /; q=0.01(客户端可以接收的数据格式)
Origin: http://localhost
X-Requested-With: XMLHttpRequest(ajax请求,异步请求)
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/78.0.3904.108 Safari/537.36(客户端的用户)
Content-Type: application/x-www-form-urlencoded; charset=UTF-8(内容的格式)
Referer: http://localhost/phpwind/index.php?m=u&c=login(来源)
Accept-Encoding: gzip, deflate, br(压缩方式)
Accept-Language: zh-CN,zh;q=0.9(语言)
Cookie: 9cV_lastvisit=17%091590760909%09%2Fphpwind%2Fread.php%3Ftid%3D31%26fid%3D2;
csrf_token=2c76c391ab3922fe; z92_visitor=a5z0Tsv0r9m8jVz52RhNQa4k%2B1HgkW8pYwuQsZtEWu0%3D;
z92_lastvisit=1397%091591103375%09%2Fphpwind%2Findex.php%3Fm%3Du%26c%3Dlogin%26a
%3Dcheckname(缓存cookie)
空一行
请求数据
username=admin&password=123456&backurl=http%3A%2F%2Flocalhost%2Fphpwind
%2F&invite=&csrf_token=2c76c391ab3922fe
响应行(协议,响应码,响应信息)
HTTP/1.1 200 OK
响应头
Date: Tue, 02 Jun 2020 13:09:47 GMT
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
X-Powered-By: PHP/5.4.45
Set-Cookie: z92_lastvisit=1409%091591103387%09%2Fphpwind%2Findex.php%3Fm%3Du%26c%3Dlogin
%26a%3Ddorun; expires=Wed, 02-Jun-2021 13:09:47 GMT; path=/
Vary: Accept-Encoding
Content-Length: 310
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
空一行
响应数据
{“referer”:“http%3A%2F%2Flocalhost%2Fphpwind%2Findex.php%3Fm%3Du%26c%3Dlogin%26a
%3Dwelcome%26_statu
%3DYlVJQzNBanhUS3UycHc0d0VHJTJCa0o1MlJwSGQwelN0TGkxdzB1d2ZNU0FwclJiS0NoSE01ZkhGSTdzaGVaN1V
sfGh0dHA6Ly9sb2NhbGhvc3QvcGhwd2luZC98”,“refresh”:false,“state”:“success”,“data”:"",“html”:
“”,“message”:[""],"__error":""}
五、企业当中如何做接口测试?
接口测试流程:
1.得到api接口文档,熟悉接口业务,接口地址,鉴权,入参,出参,错误码。
2.编写接口测试计划方案以及评审。
3.编写接口测试用例以及评审
思路:
正例:
鉴权反例:
鉴权码为空,错误的鉴权码,鉴权码已过期…
参数反例:
参数为空,参数类型异常,参数长度异常,
其他场景:
分页场景:(0,第一页1,中间页5,最后一页10,100,其他异常)
4.使用接口测试工具执行接口测试
5.输出接口测试报告。
六、执行接口测试
get:params:传键值对
post:body:(提交表单)
none没有参数
form-data:传文件和键值对
x-www… 传键值对
raw:传text,json,xml
binary:传文件的二进制。
作业:接口测试post请求时有哪三种参数类型,这三种参数类型分别对应Postman中的body页签下的那是哪三个选项:
1.键值对,对应的是body下的form-data,x-www…
2.text,json,xml 对应的是body下的raw
3.文件格式:对应的是body下的form-data和binary
特别的接口:必须要有请求头才可以请求成功的接口。
断言:判断接口有没有请求成功!
请求:
Params:get请求传参
Headers:请求头
Body:post请求传参
Pre-request Script:请求之前的脚本
Tests:请求之后的断言脚本,用于判断请求是否成功!
console.log(“在请求前写的脚本”) 打印
响应:
Body:响应的数据(Pretty:json,Raw:文本,Preview:网页)
Cookies:缓存
Headers:响应头
Test Results:断言的结果
Status:200返回码
OK:返回信息
Time:170ms 毫秒
Size:343B 字节
面试题:get和post请求有什么区别?
1.get请求一般是获取数据,post请求一般是提交数据
2.post比get安全
3.本质区别:传参的方式不一样:
get在url之后以?的方式传参,多个参数之间用&隔开。
post是在body的表单中传参。
七、断言
//断言:判断接口有没有成功
//状态断言
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”);
});
//断言返回的json数据中的值:断言expires_in的值为7200
pm.test(“Your test name”, function () {
var jsonData = pm.response.json();
pm.expect(jsonData.expires_in).to.eql(7200);
});
//断言响应的内容等于一个字符串:Ctrl+/
// pm.test(“Body is correct”, function () {
// pm.response.to.have.body(“response_body_string”);
// });
//检查响应头中是否有Content-Type字段
pm.test(“Content-Type is present”, function () {
pm.response.to.have.header(“Content-Type”);
});
//断言响应的时间少于200MS
pm.test(“Response time is less than 200ms”, function () {
pm.expect(pm.response.responseTime).to.be.below(300);
});
八、为什么需要环境变量和全局变量
环境变量:
开发环境:给开发用:服务器IP地址:192.168.0.1
测试环境:给测试用:服务器IP地址:192.168.0.2
预发布环境:在上线之前的一个演示环境,和线上环境一样。:服务器IP地址:192.168.0.3
线上环境:给客户看的:服务器IP地址:www.baidu.com
九、上一个接口的返回值如何作为下一个接口的参数
上一个接口的tests中取值:
//responseBod返回的值
//JSON.parse把返回的值转化成一个vjson格式的数据,保存到value这个变量中
var value = JSON.parse(responseBody)
//把取得的token值保存到全局变量的access_token变量中。
pm.globals.set(“access_token”, value.access_token);
下一个接口通过{{access_token}}取值
Jmeter:正则表达式取值,JSON提取器。
十、项目实战PHPWIND
1.访问项目
2.登录
3.跳转到登录成功页面
4.选板块
5.点击新板块
6.发帖
7.跳转到发帖成功
8.回帖
9.跳转到回帖成功页面
10.退出