Python自动化
依赖安装
pip install requests pytest
pytest
基础用法
- 创建 test_ 开头的py开头
- 创建 test_ 开头的函数
- 在函数中使用断言
pytest
def test_abc():
assert 1 == 2
其他用发
- 参数
-s
去除IO过滤 - mark
- fixture
- hook
requests
QuickStart
def test_baidu():
resp = requests.request(
"get",
"https://www.baidu.com",
)
print(resp.status_code) # 整数 200
print(resp.headers) # 字典
print(resp.text) # 字符串
print(resp.json()) # JSON
assert resp.status_code == 200
assert "baidu" in resp.text
标记跳过测试注解
@pytest.mark.skip
# 有一个好用的网站用来做接口的测试
# https://httpbin.org/
表单参数
def test_form():
resp = requests.request(
method="post",
url="https://httpbin.org/post",
data={
"username": "sanmu",
"password": "123456"
}
)
assert resp.status_code == 200
JSON参数
def test_json():
requests.post(
url="https://httpbin.org/post",
json={
"username": "sanmu",
"password": "123456"
}
)
文件上传
def test_file():
with open("files/163.jpg", "rb") as f:
resp = requests.post(
url="https://httpbin.org/post",
files={"file": f}
)
assert resp.status_code == 200
注意:
- 使用文件上传时,尽量使用 with 语句自动关闭文件,避免资源泄露
- 同时要注意文件类型打开模式
文件类型 | 正确模式 | 错误模式 |
---|---|---|
图片(jpg/png) | "rb" |
"r" |
文本文件(txt) | "r" |
"rb" |
CSV/JSON | "r" |
"rb" |
接口关联
def test_chain():
resp = requests.get("https://news.baidu.com/widget?id=LocalNews&ajax=json")
assert resp.status_code == 200
# 假设第一个接口返回了token, 模拟提取
token = jsonpath.jsonpath(resp.json(), "$.request_id")[0]
print(token)
# 后续逻辑...