Python 接口自动化常用库
- 一、接口自动化 4 大核心库
- 1. requests —— 发送 HTTP 请求(核心)
- 概念
- 原理
- 使用示例
- 使用场景
- 2. pytest —— 测试用例运行框架(必会)
- 概念
- 原理
- 使用示例
- 使用场景
- 3. json —— 处理 JSON 数据(自带库)
- 概念
- 原理
- 使用示例
- 使用场景
- 4. pyyaml —— 配置文件读取
- 概念
- 原理
- 使用示例
- 使用场景
- pymysql —— 连接数据库
- 概念
- 原理
- 使用示例
- 使用场景
- 二、接口自动化 常用工具库
- 5. logging —— 日志输出(调试神器)
- 概念
- 使用示例
- 场景
- 6. os / sys —— 文件/路径处理
- 概念
- 示例
- 场景
- 7. allure-pytest —— 生成权威测试报告
- 概念
- 使用
- 场景
- 8. openpyxl —— Excel 数据驱动
- 概念
- 示例
- 场景
- 三、接口自动化 高级进阶库
- 9. requests-mock —— 接口 Mock
- 概念
- 场景
- 10. faker —— 自动生成测试数据
- 概念
- 示例
- 场景
- 四、接口自动化库体系
- 五、企业真实接口自动化项目结构
- 六、面试必问
- 1. 接口自动化常用哪些库?
- 2. requests 作用?
- 3. pytest 作用?
- 4. 为什么用 yaml?
- 5. 接口自动化流程?
一、接口自动化 4 大核心库
1. requests —— 发送 HTTP 请求(核心)
概念
Python 最流行的HTTP/HTTPS 请求库,用来模拟客户端向服务器发请求(GET/POST/PUT/DELETE)。
原理
封装了 Python 底层的urllib,提供简洁易用的 API,支持:
- 请求头、参数、JSON、文件上传
- Cookie/Session 保持
- 超时、异常处理
使用示例
importrequests# 1. GET 请求(查询)res=requests.get("http://127.0.0.1:8080/api/device")# 2. POST 请求(提交/新增)data={"deviceId":1001,"cmd":"open"}res=requests.post(url="http://127.0.0.1:8080/api/control",json=data,timeout=5)# 获取结果print(res.status_code)# 状态码print(res.json())# 返回JSON数据使用场景
- 接口功能测试
- 接口自动化测试
- 设备控制、平台接口调用
- 嵌入式/物联网设备接口调试
2. pytest —— 测试用例运行框架(必会)
概念
Python最主流的单元测试/自动化测试框架,用来管理、运行、断言测试用例。
原理
- 自动识别测试文件/测试函数
- 提供强大断言 assert
- 支持 fixture、前置后置、参数化
- 可生成测试报告
使用示例
importrequestsimportpytest# 测试用例deftest_get_device_info():res=requests.get("http://127.0.0.1:8080/api/device")# 断言assertres.status_code==200assertres.json()["code"]==200assert"deviceId"inres.json()["data"]使用场景
- 编写接口自动化用例
- 批量执行用例
- 接口自动化项目主体框架
- 结合 CI/CD 持续集成
3. json —— 处理 JSON 数据(自带库)
概念
Python 自带的JSON 处理库,用于字典 ↔ JSON 字符串互相转换。
原理
json.dumps():字典 → JSON 字符串json.loads():JSON 字符串 → 字典
使用示例
importjson# 字典转JSON字符串data={"name":"test","age":18}json_str=json.dumps(data)# JSON字符串转字典res_text='{"code":200,"msg":"success"}'res_dict=json.loads(res_text)print(res_dict["code"])# 200使用场景
- 接口请求参数格式化
- 接口返回数据解析
- 提取接口字段做断言
4. pyyaml —— 配置文件读取
概念
用来读取YAML 配置文件,存放环境地址、账号、密码、全局配置。
原理
YAML 是专门用来做配置文件的格式,比 Excel/ini 更清晰。
使用示例
config.yaml
base_url:http://127.0.0.1:8080user:adminpwd:123456读取:
importyamlwithopen("config.yaml",encoding="utf-8")asf:cfg=yaml.safe_load(f,Loader=yaml.FullLoader)print(cfg["base_url"])使用场景
- 环境切换(测试/预发/生产)
- 存放账号密码
- 全局配置统一管理
pymysql —— 连接数据库
概念
Python 连接 MySQL 数据库 的第三方库,用于:
- 查询
- 新增
- 修改
- 删除
自动化中断言数据正确性。
原理
1.建立连接(IP、端口、用户名、密码、库名)
2.创建游标
3.执行 SQL
4.获取结果
5.关闭连接
使用示例
安装
pip install pymysqlimportpymysql# 1. 创建连接conn=pymysql.connect(host="127.0.0.1",port=3306,user="root",password="123456",database="test",# 库名charset="utf8")# 2. 创建游标cursor=conn.cursor()# ======================# 3. 执行查询(最常用)# ======================sql="SELECT device_id, status FROM device WHERE device_id = %s"cursor.execute(sql,("1001",))# 防注入result=cursor.fetchone()# 获取一条# result = cursor.fetchall() # 获取所有print("设备ID:",result[0])print("状态:",result[1])# ======================# 4. 执行新增# ======================sql="INSERT INTO device(device_id, status) VALUES (%s, %s)"cursor.execute(sql,("1002",1))conn.commit()# 必须提交# ======================# 5. 执行修改# ======================sql="UPDATE device SET status=0 WHERE device_id=%s"cursor.execute(sql,("1001",))conn.commit()# ======================# 6. 执行删除# ======================sql="DELETE FROM device WHERE device_id=%s"cursor.execute(sql,("1002",))# 提交事务conn.commit()# 7. 关闭cursor.close()conn.close()使用场景
场景1:验证新增是否成功
# 1. 调接口requests.post(url,json={"device_id":"1001"})# 2. 查数据库sql="select * from device where device_id='1001'"cursor.execute(sql)assertcursor.fetchone()isnotNone场景2:验证状态是否更新
requests.post(url,json={"device_id":"1001","cmd":"OPEN"})sql="select status from device where device_id='1001'"cursor.execute(sql)status=cursor.fetchone()[0]assertstatus==1# 1=开阀成功场景3:验证是否删除成功
requests.delete(url)sql="select * from device where id=1001"cursor.execute(sql)assertcursor.fetchone()isNone场景4:清理脏数据
sql="delete from device where device_id like 'test_%'"cursor.execute(sql)conn.commit()二、接口自动化 常用工具库
5. logging —— 日志输出(调试神器)
概念
Python 自带日志库,用来记录请求、返回、报错信息。
使用示例
importlogging logging.basicConfig(level=logging.INFO)logging.info("开始请求接口")logging.error("接口请求失败")场景
- 调试接口
- 定位自动化脚本问题
- 生成运行日志
6. os / sys —— 文件/路径处理
概念
操作系统交互库,处理文件路径、文件夹、文件判断。
示例
importosprint(os.getcwd())# 当前路径print(os.path.exists("log"))# 判断文件是否存在场景
- 读取配置文件
- 生成报告路径
- 自动化项目路径管理
7. allure-pytest —— 生成权威测试报告
概念
最流行的自动化测试报告工具,生成美观、可追溯的 HTML 报告。
使用
pytest--alluredir=./report allure serve ./report场景
- 接口自动化测试报告
- 工作汇报、测试结果展示
8. openpyxl —— Excel 数据驱动
概念
读取 Excel 文件,做数据驱动测试。
示例
fromopenpyxlimportload_workbook wb=load_workbook("case.xlsx")ws=wb.active url=ws.cell(row=2,column=1).value场景
- 大量接口用例管理
- 数据参数化测试
三、接口自动化 高级进阶库
9. requests-mock —— 接口 Mock
概念
Mock 模拟接口返回,不依赖真实后端也能跑自动化。
场景
- 后端未开发完成时,提前写自动化
- 异常场景模拟(超时、500、401)
10. faker —— 自动生成测试数据
概念
自动生成姓名、电话、邮箱、设备编号等测试数据。
示例
fromfakerimportFaker f=Faker()print(f.name())print(f.phone_number())场景
- 接口批量造数据
- 注册、新增设备、提交表单
四、接口自动化库体系
请求发送:requests 用例运行:pytest 数据处理:json、yaml 日志调试:logging 路径文件:os 测试报告:allure 数据驱动:openpyxl 测试数据:faker五、企业真实接口自动化项目结构
api_auto_project/ ├── configs/ # 配置文件 ├── test_case/ # 测试用例 ├── common/ # 工具类(requests封装、日志) ├── data/ # 测试数据 ├── report/ # 测试报告 └── run.py # 运行入口六、面试必问
1. 接口自动化常用哪些库?
requests、pytest、json、yaml、logging、allure、openpyxl。
2. requests 作用?
发送 HTTP 请求,支持 GET/POST/PUT/DELETE,带参数、请求头、文件、超时、异常处理。
3. pytest 作用?
管理、运行、断言测试用例,支持前置后置、参数化、生成报告。
4. 为什么用 yaml?
结构清晰,适合做配置文件,切换环境方便。
5. 接口自动化流程?
- 封装 requests
- 编写用例
- 断言
- 生成报告