1、什么是接口
-
什么是接口
- 硬件:USB接口,手机的type-C接口,电脑的充电接口,显示器HMDI接口
- 软件
-
我老弟说 接口是一个功能的入口 接入功能的入口。可以返回数据,就这么理解没问题
-
官方: Application Programming Interface,应用程序接口,简称 API,程序中具体负责在不同模块之间传输或接受数据的并做处理的类或者函数。简而言之,提供数据服务的类or函数
-
-
接口形成规范:网络协议://ip:port/path?arg1=1&arg2=2
-
接口基本信息:http端口默认80, https端口默认443
-
接口测试流程
-
明确请求协议,域名,端口,路径
-
明确请求方式,参数及值
-
在浏览器模拟请求,or使用工具postman、jmeter、LR、request代码去请求
-
获取返回响应,校验返回内容的正确性
-
-
开展接口测试的原因
-
确保系统的安全
-
更早的介入测试,降低缺陷的修复成本
-
尽可能多的发现系统中存在的问题
-
接口测试是企业应用广泛的测试手段
-
2、request&response
2.1 request
请求的格式
头部:用于规范数据格式内容
身体:用于承载数据
常用请求方式汇总
序号 | 方法 | 描述 |
1 | GET | 发送请求来获得服务器上的资源,请求体中不会包含请求数据,请求数据放在协议头中。另外get支持快取、缓存、可保留书签等。幂等 |
2 | POST | 和get一样很常见,向服务器提交资源让服务器处理,比如提交表单、上传文件等,可能导致建立新的资源或者对原有资源的修改。提交的资源放在请求体中。不支持快取。非幂等 |
3 | HEAD | 本质和get一样,但是响应中没有呈现数据,而是http的头信息,主要用来检查资源或超链接的有效性或是否可以可达、检查网页是否被串改或更新,获取头信息等,特别适用在有限的速度和带宽下。 |
4 | PUT | 和post类似,html表单不支持,发送资源与服务器,并存储在服务器指定位置,要求客户端事先知道该位置;比如post是在一个集合上(/province),而put是具体某一个资源上(/province/123)。所以put是安全的,无论请求多少次,都是在123上更改,而post可能请求几次创建了几次资源。幂等 |
5 | DELETE | 请求服务器删除某资源。和put都具有破坏性,可能被防火墙拦截。如果是https协议,则无需担心。幂等 |
6 | CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。就是把服务器作为跳板,去访问其他网页然后把数据返回回来,连接成功后,就可以正常的get、post了。 |
7 | OPTIONS | 获取http服务器支持的http请求方法,允许客户端查看服务器的性能,比如ajax跨域时的预检等。 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。一般禁用,防止被恶意攻击或盗取信息。 |
2.2 response
3、写接口
3.1 python flask 接口demo
1. 最简单的HelloWord接口,直接请求返回内容
# 导入flask框架类
from flask import Flask
# 实例化flask类
app = Flask(__name__)
# 路由指定去哪里请求
# 定义一个方法,返回接口内容
@app.route("/")
def hello_word():
return "Hello World"
if __name__ == "__main__":
app.run(debug=True) # debug=True代表接口处理调试中,执行该脚本后不会中断
执行helloworld.py
说明: flask框架默认端口5000
执行请求:http://127.0.0.1:5000/ 即返回 如下
3.2 python flask 接口升级
指定host port methods 传参,返回不同请求情况下的响应
from flask import Flask, request
import json
# 首先,我们创建了一个Flask类,由这个类生成了一个app实例
app = Flask(__name__)
@app.route("/test_api", methods=["POST"]) # 其次,我们使用route装饰器告诉 Flask 什么样的URL 能触发我们的函数。
def api_test():
# 定义默认返回内容response
result_response = {"code": "200", "result": "True", "res_msg": "请求成功,你真棒", }
# 参数为空,返回false和文字描述
if request.get_data() is None:
result_response['code'] = '10001'
result_response['result'] = 'false'
result_response['res_msg'] = '请求参为空,请检查传参'
return json.dumps(result_response, ensure_ascii=False)
# 参数不为空,获取参数并进行处理
get_data = request.get_data()
# 传入的参数为bytes类型,需要转换为json类型进行提取
data = json.loads(get_data)
# 获取参数,修改返回内容msg
name = data.get("name")
age = data.get("age")
result_response['res_msg'] = "%s的年龄是%s" % (name, age)
return json.dumps(result_response, ensure_ascii=False)
# 最后,我们用 run函数来让应用运行在本地服务器上
if __name__ == "__main__":
app.run(host='127.0.0.1', port=8888, debug=True)
执行程序
请求协议:http
请求域名:127.0.0.1
请求端口:8888
请求路径:/test_api
请求方式:post
请求参数:{"name":"小明","age":"30"}
接口 http://127.0.0.1:8888/test_api
响应结果: