一、什么是接口
官方:接口是硬件或者软件提供给外界的服务。
硬件接口:USB接口。
软件接口:api(application program interface)
cookie:在服务器产生,保存在客户端
session:在服务器产生,保存在服务器,但是可以通过cookie传输到客户端。sessionID
token:鉴权码,也可以通过cookie传输。
二、为什么需要接口
专业:因为项目内部的数据能够被外部修改。
三、接口返回的数据格式
json是一种数据格式:整形,字符串
1.json格式
{“error_code”:"0","msg":"提现成功","data":"详细的数据"}
error_code:错误码,0成功,40001错误码
msg:错误码的中文说明
data:具体的数据
JSON由键值对{}和数组[]组成。
2.xml格式
<xml>
<error_code>0</error_code>
<msg>提现成功</msg>
<data>详细的数据</data>
</xml>
3.html格式
<html>
<head>
<title></title>
</head>
<body>
数据
</body>
</html>
四、接口协议
http: 以http开头。返回json格式
webservice:以http开头,以?wsdl结束。(web service descrition,language),返回xml格式。
duboo协议:duboo:开头,返回json格式
请问什么是http协议?
又名:超文本传输协议,主要作用是:浏览器和服务器之间交互数据。交互数据分为请求和响应两个部分。
请求:请求行,请求头,空一行,请求正文
响应:响应行,响应头,空一行,响应正文
请求行:请求方式,请求地址url,协议
GET http://localhost/phpwind/index.php?m=u&c=login HTTP/1.1
请求头:
Host: localhost(主机)
Connection: keep-alive(连接状态,保持活跃)
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(客户端的用户)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3(客户端接收的数据类型)
Referer: http://localhost/phpwind/(来源)
Accept-Encoding: gzip, deflate, br(客户端接收的压缩方式)
Accept-Language: zh-CN,zh;q=0.9(客户端接收的语言)
Cookie: Pycharm-a7943e9=c6763d48-d1f4-4903-b72d-738219304462; csrf_token=00af6710d4cf234e; z92_visitor=J4FIxKqz%2BYgWDGcoJzFV70Y1b2ka02%2BjPcVw6nwmEVE%3D; z92_lastvisit=6998%091593863870%09%2Fphpwind%2F
(客户端发送给服务器的cookie)
空一行
请求正文
----------------------------------------------------------------------------------------------------------------
响应行:协议,状态码,状态信息
200成功
30X重定向
40X请求的资源找不到
50X服务器错误
HTTP/1.1 200 OK
响应头
Date: Sat, 04 Jul 2020 13:08:20 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=6998%091593868101%09%2Fphpwind%2Findex.php%3Fm%3Du%26c%3Dlogin; expires=Sun, 04-Jul-2021 13:08:21 GMT; path=/
Set-Cookie: z92_visitor=Ig2%2Bvhubk1sSLrLMujkCLPyXnWu%2FLhE41lYKXObcN8cC7bqaj1foBQ%3D%3D; path=/
Vary: Accept-Encoding(服务器发送给客户端的cookie)
Content-Length: 15322(响应的字节数)
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html;charset=utf-8(响应的数据的类型)
空一行
响应正文
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title>登录 - phpwind 9.0 - Powered by phpwind</title>
<meta http-equiv="X-UA-Compatible" content="chrome=1">
五、企业中执行接口测试流程
1.查看api文档,查看请求地址,发送方式。协议,token,,请求参数,返回值是什么
2.接口测试计划,方案,用例I并评审。
接口测试方案(解决怎么测):
正例:
1-2个,
get(一般用于获取数据),
post(一般用于提交数据),
put(一般用于修改数据),
delete(一般用于删除数据)
反例:
鉴权码异常:鉴权码为空,错误,过期....
参数的异常:
参数:必填,长度异常,类型异常,格式异常。
错误码覆盖。
其他异常:
分页(0,第一页,中间页,最后页,负数,中文,特殊字符,字母)
3.使用接口工具执行接口测试
4.提交接口测试报告。
六、执行接口测试
post请求传参有那四种类型,以及它们在postman中对于的选项。
get:在params传参
post:在Body
form-data:传键值对和文件。
x-www-....:传键值对
raw:传xml,json,javascript,html,txt
binaly:传二进制文件。
get请求和post请求的区别是什么?
1.get请求一般是获取数据,post请求一般是提交数据。
2.get请求不安全,post请求安全。
3.本质的区别:传参的方式不一样
get在请求地址后以?方式传参,然后多个参数之间用&分隔。
post它是在body中传参。
七、Postman请求页签和响应页签说明。
请求页签:
params:get方式传参。
headers:请求头
body:post方式传参。
Pre-request Script:请求之前的脚本
Tests:请求之后的断言。
cookies:客户端发送服务器给的字典数据。
Code:生成接口自动化测试脚本。
响应页签:
Body:返回数据
Pretty:将响应以JSON或者XML的格式显示。
Raw:以文本的格式显示
PreView:以HTML网页的形式显示
Cookies:服务器发送给客户端的字典数据。
Headers:响应头
Test Results:断言的结果
八、Postman中的断言
断言:用于判断接口请求是否成功!
最少两个:
状态断言:200
业务断言:可以有多个。
//状态断言:
//断言状态码为200
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");
});
//检查返回的JOSN数据的值。
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.expires_in).to.eql(7200);
});
//断言返回的结果等于一个字符串
pm.test("Body is correct", function () {
pm.response.to.have.body("{\"errcode\":0,\"errmsg\":\"ok\"}");
});
//断言响应头中是否包含Content-Type
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Connection");
});
//断言接口的请求时间少于200ms
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
九、全局变量和环境变量
关联接口如何测试?(上一个接口的返回值如何作为下一个接口的参数?)
1.在上一个接口的Tests断言中通过JSON取值
//通过JSON提取
var jsData = JSON.parse(responseBody)
pm.globals.set("new_token",jsData.access_token);
//通过正则表达式提取
var access_token = responseBody.match(new RegExp('"access_token":"(.+?)"'))[1]
pm.globals.set("new_token",access_token);
2.在下一个接口通过{{new_token}}获取全局变量。
开发环境:给开发用的
测试环境:给测试用的
预发布环境:项目上线之前先预发布
线上环境:给用户用的
多层嵌套时取值的方法
{
"tags": [
{
"id": 2,
"name": "星标组",
"count": 0
},
var jsData = JSON.parse(responseBody)
pm.globals.set("new_token",jsData.tags[0].id);
十、项目实战
{{$timestamp}} 服务器的时间戳
{{$randomInt}} 随机出0-1000的随机数
{{$guid}} 随机出一个字符串
Postman:专为接口而生
newman:专为postman而生,执行非GUI方式
newman run "e:\yongli.json" -e "e:\\huanjing.json" -g "e:\quanju.json" -r cli,html,json,junit --reporter-html-export "e:\result.html"
接口签名:sign
csrf_token:鉴权码
sign = MD5(appkey+参数名+时间戳)