首先要安装flask包:
pip install flask
from flask import Flask, requestapp=Flask(__name__)a=request.values.get("a");b=request.values.get("b")
sum = int(a) + int(b)return str(sum) # http一般使用字符串传输数据@app.route("/add/", methods=["GET"]) # 写到函数上面(装饰器)- if __name__ == "__main__":
- app.run()
保存为***.py, 打开命令行,进入add.py所在目录,运行python ***.py(名称可以自定义)
完整代码
- # 1. 导入包
- from flask import Flask, request
- # 2. 实例化一个
- app = Flask(__name__)
- # 3. 编写一个接口处理方法
- @app.route("/add/", methods=["GET","POST"]) # 4. 挂载路由(指定接口的url路径), 声明接口接受的方法
- def add():
- # 3.1 从请求中获取参数
- # request.values {"a": "1", "b": "2"}
- a = request.values.get("a")
- b = request.values.get("b")
- # 3.2 业务操作
- sum = int(a) + int(b)
- # 3.3 组装响应并返回
- return str(sum)
-
- # 5. 运行接口
- if __name__ == '__main__':
- app.run() # 默认5000端口,可以指定端口app.run(port=50001)
-
运行代码:
在浏览器窗口输入或者在Postman中输入:
http://localhost:5000/add/?a=1&b=2
访问结果:
代码:
- from flask import Flask, request, jsonify
-
- app = Flask(__name__)
-
- @app.route("/api/sub/", methods=["POST"])
- def sub():
- if not request.json: # 如果请求数据类型非json
- return jsonify({"code": "100001", "msg": "请求类型错误", "data": None})
-
- if not "a" in request.json or not "b" in request.json: # 如果参数中没有a或者没有b
- return jsonify({"code": "100002", "msg": "参数缺失", "data": None})
-
- a = request.json.get("a")
- b = request.json.get("b")
- result = str(float(a) - float(b)) # 使用float支持浮点数相减
- return jsonify({"code": "100000", "msg": "成功", "data": result}) # 使用jsonify将字典数据转换为json类型的相应数据
-
- if __name__ == '__main__':
- app.run()
打开 Postman 应用。
创建一个新的请求:
配置请求参数:
http://localhost:5000/api/sub/。- {
- "a": 5,
- "b": 2
- }
发送请求:
获取响应:
{"code": "100000", "msg": "成功", "data": "3.0"},其中 "data" 的值是参数 "a" 减去参数 "b" 的结果。
接口测试是测试系统组件间接口的一种测试。
接口测试主要用于检测外部系统与系统之 间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过 程,以及系统间的相互逻辑依赖关系等。
Excel/TestLink/禅道
| TestCase | Url | Method | DataType | a | b | Excepted | Actual | Status |
|---|---|---|---|---|---|---|---|---|
| test_add_normal | /api/add/ | GET | Url | 3 | 5 | 8 | ||
| test_add_zero | /api/add/ | POST | FORM | 0 | 0 | 0 | ||
| test_add_negetive | /api/add/ | POST | FORM | -3 | 5 | 2 | ||
| test_add_float | /api/add/ | POST | FORM | 3.2 | 5.2 | 8.4 | ||
| test_add_null | /api/add/ | POST | FORM | 0 |
需要安装三方包:requests pytest pytest-html
pip install requests pytest pytest-html
url = 'http://127.0.0.1:5000/add/'params = {"a":3, "b":5} # get请求url参数, 字典格式data = {"a":3, "b":5} # post请求请求数据, 字典格式resp = requests.get(url=url, params=params)resp = requests.post(url=url,data=data)- # 1. 导入包
- import requests
-
- base_url = "http://127.0.0.1:5005"
-
- # 2. 组装请求
- def test_add_normal():
- # url 字符串格式
- url = base_url + "/add/"
-
- # data {} 字典格式
- data = {"a": "1", "b": "2"}
- # 3. 发送请求,获取响应对象
- response = requests.post(url=url, data=data)
- # 4. 解析响应
- # 5. 断言结果
- assert response.text == '3'
运行代码并在浏览器输入:
- http://127.0.0.1:5005/add/
-
请求格式为json
三处不同:
data=json.dumps(data) (使用json.dumps需要import json)完整代码:
- # 1. 导入包
- import requests
- import json
-
- base_url = "http://127.0.0.1:5005"
-
- def test_sub_normal():
- url = base_url + "/api/sub/"
- headers = {"Content-Type": "application/json"} # 1. 必须通过headers指定请求内容类型为json
- data = {"a": "4", "b": "2"}
- data = json.dumps(data) # 2. 序列化成字符串
- response = requests.post(url=url, headers=headers, data=data)
- # 3. 响应解析 # 响应格式为: {"code":"100000", "msg": "成功", "data": "2"}
- resp_code = response.json().get("code")
- resp_msg = response.json().get("msg")
- resp_data = response.json().get("data")
- # 断言
- assert response.status_code == 200
- assert resp_code == "100000"
- assert resp_msg == "成功"
- assert resp_data == "2"
访问:在浏览器的地址栏中输入接口的完整URL,包括协议(通常是HTTP或HTTPS)、主机名或IP地址、端口号和路径。
http://127.0.0.1:5005/api/sub/
补充1: 感受Python黑科技之exec()动态生成用例:
数据文件: test_add_data.xls
| TestCase | Url | Method | DataType | a | b | Excepted | Actual | Status |
|---|---|---|---|---|---|---|---|---|
| test_add_normal | /api/add/ | GET | Url | 3 | 5 | 8 | ||
| test_add_zero | /api/add/ | POST | FORM | 0 | 0 | 0 | ||
| test_add_negetive | /api/add/ | POST | FORM | -3 | 5 | 2 | ||
| test_add_float | /api/add/ | POST | FORM | 3.2 | 5.2 | 8.4 | ||
| test_add_null | /api/add/ | POST | FORM | 0 |
- import requests
- import xlrd
-
- base_url = 'http://127.0.0.1:7890'
-
- # 1.打开excel
- wb = xlrd.open_workbook("test_add_data.xls")
- # 2. 获取sheet
- sh = wb.sheet_by_index(0) # wb.sheet_by_name("Sheet1")
- # 行数 sh.nrows 列数 sh.ncols
- # 获取单元格数据
- # print(sh.cell(1,0).value)
- # print(sh.nrows)
- tpl = '''def {case_name}():
- url = base_url + '/add/'
- data = {{"a": "{a}", "b":"{b}"}}
- response = requests.get(url=url, data=data)
- assert response.text == '{expected}'
- '''
-
- for row in range(1, sh.nrows):
- case_name = sh.cell(row,0).value
- a = sh.cell(row, 4).value
- b = sh.cell(row, 5).value
- expected = sh.cell(row, 6).value
- case = tpl.format(case_name=case_name, a=a, b=b, expected=expected)
- exec(case)
这个得需要调试,有的电脑可能一直提示拒绝连接

解决办法如下:

我的默认端口:7890

动态生成的用例支持pytest发现和执行
pytest(运行所有test开头的.py用例)或pytest test_user.py(只运行该脚本中用例)pytest -q test_user.pypytest test_user.py --html=test_user_report.htmlpytest test_user.py --resultlog=run.logurl="http://127.0.0.1:5000/add/"headers={"Content-Type": "application/json"}params={"a":"1":"b":"2"}data={"a":"1":"b":"2"}files={"file": open("1.jpg")}