直播晚上 8:00 开始
霍格沃兹测试开发学社


pip install pytestpip install requests
| 形式 | 章节 |
|---|---|
| 知识点 | 接口自动化测试框架介绍 |
| 知识点 | 接口请求方法 |
| 知识点 | 接口请求参数 |
| 知识点 | 接口请求头 |
| 知识点 | 接口请求体-json |
| 知识点 | 接口响应断言 |
| 知识点 | json 响应体断言 |
| 测试类型 | 工具 | 价值 |
|---|---|---|
| 接口抓包 | Charles、Postman | 接口抓包工具,可以抓取 App 的数据包 |
| 接口测试 | Postman | 接口调试工具,接口手工测试工具,学习成本低,直接安装即可使用 |
| 接口自动化测试 | Requests、RestAssured | 用于接口自动化测试的 Java、Python 第三方库,需要与对应编程语言结合使用 |
| 性能测试 | JMeter | 性能测试工具 |

requests.get(url, params=None, **kwargs)
# 导入依赖
import requests
def test_get():
# 定义接口的 url 和拼接在 url 中的请求参数
url = "https://httpbin.ceshiren.com/get"
# 发出 GET 请求,r 接收接口响应
r = requests.get(url)
# 打印接口响应
logger.info(f"接口响应为 {r}")
requests.post(url, data=None, json=None, **kwargs)
# 导入依赖
import requests
def test_post():
# 定义接口的 url
url = "https://httpbin.ceshiren.com/post"
# 发出 POST 请求,r 接收接口响应
r = requests.post(url)
# 打印接口响应
logger.info(f"接口响应为 {r}")
| 属性 | 含义 |
|---|---|
r |
响应 Response 对象(可以使用任意的变量名) |
r.status_code |
HTTP 响应状态码 |
r.text |
返回响应的内容,是一个字符串。 |
r.json() |
如果响应的内容是 JSON 格式,可以使用该方法将其解析成 Python 对象。 |
import requests
from requests import Response
# Response就是一个响应对象
r: Response = requests.get('http://www.example.com')
r.status_codeimport requests
def test_req():
r = requests.get("https://httpbin.ceshiren.com/get")
assert r.status_code == 200
{
"name": "John",
"age": 30,
"city": "New York"
}
r.json():返回 python 字典。import requests
def test_res_json():
r = requests.get("https://httpbin.ceshiren.com/get")
assert r.status_code == 200
assert r.json()["url"] == "https://httpbin.ceshiren.com/get"



import requests
class TestOrder:
def setup_class(self):
self.base_url = "http://xx.xx.xx.xx"
def test_place_order(self):
'''
测试创建订单接口
:return:
'''
order_info = {
"pizza_type": "腊肠",
"size": "大号",
"toppings": "奶酪 橄榄",
"customer_name": "Harry",
"customer_phone": "1234567890",
"customer_address": "北京海淀区"
}
r = requests.post(self.base_url, json=order_info)
print(r.text)
# 验证响应状态码
assert r.status_code == 200
# 验证订单是否创建成功
assert r.json().get("code") == 0
assert r.json().get("msg") == "add order success"
# 验证是否返回订单id
assert r.json().get("data").get("order_id")
def test_order_query(self):
'''
测试查询订单接口
:return:
'''
payload = {
"id": 1
}
r = requests.get(self.base_url, params=payload)
print(r.text)
# 验证响应状态码
assert r.status_code == 200
# 验证订单是否创建成功
assert r.json().get("code") == 0
assert r.json().get("msg") == "get order success"
# 验证是否返回对应id的订单
assert r.json().get("data")[0].get("id") == 1
# 配置日志
import logging
import os
from logging.handlers import RotatingFileHandler
# 绑定绑定句柄到logger对象
logger = logging.getLogger(__name__)
# 获取当前工具文件所在的路径
root_path = os.path.dirname(os.path.abspath(__file__))
# 拼接当前要输出日志的路径
log_dir_path = os.sep.join([root_path, '..', f'/logs'])
if not os.path.isdir(log_dir_path):
os.mkdir(log_dir_path)
# 创建日志记录器,指明日志保存路径,每个日志的大小,保存日志的上限
file_log_handler = RotatingFileHandler(os.sep.join([log_dir_path, 'log.log']), maxBytes=1024 * 1024, backupCount=10)
# 设置日志的格式
date_string = '%Y-%m-%d %H:%M:%S'
formatter = logging.Formatter(
'[%(asctime)s] [%(levelname)s] [%(filename)s]/[line: %(lineno)d]/[%(funcName)s] %(message)s ', date_string)
# 日志输出到控制台的句柄
stream_handler = logging.StreamHandler()
# 将日志记录器指定日志的格式
file_log_handler.setFormatter(formatter)
stream_handler.setFormatter(formatter)
# 为全局的日志工具对象添加日志记录器
# 绑定绑定句柄到logger对象
logger.addHandler(stream_handler)
logger.addHandler(file_log_handler)
# 设置日志输出级别
logger.setLevel(level=logging.INFO)
allure --versionpip install allure-pytest--alluredir 参数生成测试报告。# 在测试执行期间收集结果
# —alluredir这个选项 用于指定存储测试结果的路径
pytest [测试用例/模块/包] --alluredir=./results --clean-alluredir
# 生成在线的测试报告
allure serve ./results
# 生成报告,指定输出路径,清理报告。
allure generate --clean results/html results -o results/html
