一、测试方案概述
- 基于工具类:
- Postman + Newman + Jenkins
- JMeter + Ant + Jenkins
- Apifox + Apifox-CLI + Jenkins
- 基于框架和平台:
- Python + Requests + Pytest + Allure + YAML + Logging + Jenkins
- 开发自动化测试平台
介绍基于 Python Requests 和 Pytest 的 API 接口测试自动化框架。涵盖常见请求方法(GET/POST)、响应处理、接口关联方式(类变量、文件存储、正则/JsonPath 提取)。详细讲解 Pytest 用例管理、Fixture 夹具使用及参数化配置,并提供统一请求封装与 YAML 配置示例,旨在构建高效的接口自动化测试体系。
import jsonpath
import requests
class TestApi:
# 获取 access_token 鉴权码接口
def test_get_token(self):
url = "https://api.weixin.qq.com/cgi-bin/token"
datas = {
"grant_type": "client_credential",
"appid": "YOUR_APPID",
"secret": "YOUR_SECRET"
}
res = requests.get(url=url, params=datas)
token = res.json()['access_token']
print(token)
**kwargs 是关键字参数的缩写,作用是接收函数调用时传入的多余关键字参数,并把它们打包成一个字典。
def post(url, data=None, json=None, **kwargs):
# url: 接口地址
# data: 参数 (表单/表格---x-www-form-urlencoded)
# json: 参数 (JSON---application/json)
# **kwargs: 可变长度的字典
def put(url, data=None, **kwargs):
def delete(url, **kwargs):
四种方法底层都调用的是 request 方法:
requests.request("get", url, params=params, **kwargs)session.request(method=method, url=url, **kwargs) --- 最底层方法requests.request 与 session.request 的区别:requests.request 的每个请求是独立的,而 session.request 会自动关联所有请求的 cookie 信息。res.text:文本内容res.json():返回字典形式的结果res.content:返回字节类型的结果res.status_code:返回状态码res.reason:返回状态信息res.cookie:返回 cookie 信息res.encoding:返回编码格式res.headers:返回响应头res.request.xxx:得到请求数据import requests
class TestApi:
# 获取 access_token 鉴权码接口
def test_get_token(self):
url = "https://api.weixin.qq.com/cgi-bin/token"
datas = {
"grant_type": "client_credential",
"appid": "YOUR_APPID",
"secret": "YOUR_SECRET"
}
res = requests.get(url=url, params=datas)
TestApi.access_token = res.json()['access_token']
print(TestApi.access_token)
# 查询标签接口
def test_select_flag(self):
urls = "https://api.weixin.qq.com/cgi-bin/tags/get"
datas = {"access_token": TestApi.access_token}
res = requests.get(url=urls, params=datas)
print(res.json())
# 编辑标签接口
def test_edit_flag(self):
urls = "https://api.weixin.qq.com/cgi-bin/tags/update"
datas1 = {"access_token": TestApi.access_token}
datas2 = {"tag": {"id": 134, "name": "广东人"}}
res = requests.post(url=urls, json=datas2, params=datas1)
print(res.json())
# 文件上传
def test_file_upload(self):
urls = "https://api.weixin.qq.com/cgi-bin/media/uploadimg"
datas1 = {"access_token": TestApi.access_token}
datas2 = {"media": open("./images/2.jpg", "rb")}
res = requests.post(url=urls, files=datas2, params=datas1)
print(res.json())
re.search() 或 re.findall()jsonpath.jsonpath() 返回一个列表.group(1) 用来提取正则表达式中第一个括号分组匹配到的内容。group(0) 返回整个正则表达式匹配到的完整内容。group(2) 返回第二个分组内容。安装方式:pip install -r requirements.txt
@pytest.fixture(scope='function', autouse=False, params=["mysql", "redis"])
def connection_mysql(request):
print("连接数据库...")
yield request.param
print("关闭数据库连接")
import os
import yaml
def write_yaml(data):
with open(os.getcwd()+"/extract.yaml", encoding="utf-8", mode="a+") as f:
yaml.dump(data, stream=f, allow_unicode=True)
def read_yaml(key):
with open(os.getcwd()+"/extract.yaml", encoding="utf-8", mode="r") as f:
value = yaml.load(f, Loader=yaml.FullLoader)
return value[key]
def clean_yaml():
with open(os.getcwd()+"/extract.yaml", encoding="utf-8", mode="w") as f:
f.truncate()

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online