Python与PyCharm实战:构建接口自动化测试工具全面指南
作为一名测试工程师,接口自动化测试是必备技能之一。本文将详细介绍如何使用 Python 结合 PyCharm,构建一个支持上传用例表格、执行测试用例、生成 HTML 测试报告,并且可以导出测试报告的接口自动化测试工具。
目录
-
环境准备
-
创建项目结构
-
安装依赖库
-
编写测试用例表格
-
编写工具模块
-
ExcelReader 模块
-
Logger 模块(可选)
-
编写测试脚本
-
运行测试并生成报告
-
运行结果截图
-
导出测试报告
-
常见问题与解决
-
总结
环境准备
1. 安装 Python
首先,确保你的电脑上安装了 Python 3.6 及以上版本。
官方下载地址:Python 官网下载
安装完成后,在命令行中输入以下命令,验证安装是否成功:
bash
python --version
2. 安装 PyCharm
接下来,安装 PyCharm 作为开发工具。
官方下载地址:PyCharm 官网下载
建议选择 专业版(Professional),以获得完整的功能支持。
创建项目结构
在 PyCharm 中创建一个新的项目,命名为 api_test_tool
。项目的目录结构如下:
api_test_tool/
├── test_cases/ # 存放测试用例表格
│ └── test_cases.xlsx
├── reports/ # 存放测试报告
│ └── (测试报告将生成在此)
├── utils/ # 工具模块
│ ├── __init__.py
│ ├── excel_reader.py # Excel 读取模块
│ └── logger.py # 日志模块
├── tests/ # 存放测试脚本
│ └── test_api.py
├── requirements.txt # 依赖库列表
└── README.md # 项目说明文件
安装依赖库
在项目的根目录下创建 requirements.txt
文件,写入以下内容:
requests
openpyxl
pytest
pytest-html
通过 PyCharm 安装依赖
-
打开 PyCharm,进入
Terminal
(终端)窗口。 -
(可选)创建并激活虚拟环境,以避免影响全局的 Python 环境:
bash
python -m venv venv source venv/bin/activate # Mac/Linux venv\Scripts\activate # Windows
-
安装依赖库:
bash
pip install -r requirements.txt
验证安装
输入以下命令,查看已安装的库:
bash
pip list
确保 requests
、openpyxl
、pytest
、pytest-html
均已安装。
编写测试用例表格
在 test_cases/
目录下创建 test_cases.xlsx
,按照以下格式编写测试用例:
用例名称 | 请求方法 | URL | 请求头 | 请求体 |
---|---|---|---|---|
获取所有帖子 | GET | https://************/posts | {} | {} |
创建新帖子 | POST | https://************/posts | {"Content-Type": "application/json"} | {"title": "foo", "body": "bar", "userId": 1} |
更新现有帖子 | PUT | https://************/posts/1 | {"Content-Type": "application/json"} | {"id": 1, "title": "foo", "body": "bar", "userId": 1} |
删除帖子 | DELETE | https://************/posts/1 | {} | {} |
注意事项:
第一行为表头,不会被读取为测试用例。
确保请求头和请求体是合法的 JSON 字符串。
编写工具模块
1. excel_reader.py
模块
负责读取 Excel 表格中的测试用例。
python
# utils/excel_reader.py
import openpyxl
class ExcelReader:
def __init__(self, file_path):
self.file_path = file_path
def get_test_cases(self):
workbook = openpyxl.load_workbook(self.file_path)
sheet = workbook.active
test_cases = []
for row in sheet.iter_rows(min_row=2, values_only=True):
test_case = {
'name': row[0],
'method': row[1],
'url': row[2],
'headers': eval(row[3]),
'data': eval(row[4])
}
test_cases.append(test_case)
return test_cases
2. logger.py
模块(可选)
用于日志记录,便于调试与追踪。
python
# utils/logger.py
import logging
def setup_logger():
logger = logging.getLogger('api_test')
logger.setLevel(logging.INFO)
fh = logging.FileHandler('api_test.log')
fh.setLevel(logging.INFO)
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
logger.addHandler(fh)
logger.addHandler(ch)
return logger
编写测试脚本
创建测试脚本 test_api.py
,放在 tests/
目录下。
python
# tests/test_api.py
import os
import sys
import pytest
import requests
# 设置项目路径,确保可以导入模块
project_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(project_path)
from utils.excel_reader import ExcelReader
from utils.logger import setup_logger
# 初始化日志
logger = setup_logger()
# 获取测试用例
excel_file = os.path.join(project_path, 'test_cases', 'test_cases.xlsx')
reader = ExcelReader(excel_file)
test_cases = reader.get_test_cases()
@pytest.mark.parametrize('case', test_cases)
def test_api(case):
logger.info(f"执行用例:{case['name']}")
response = requests.request(
method=case['method'],
url=case['url'],
headers=case['headers'],
json=case['data']
)
logger.info(f"状态码:{response.status_code}")
logger.info(f"响应体:{response.text}")
# 根据实际情况进行断言,这里简单判断状态码
if case['method'] == 'POST':
assert response.status_code == 201, f"期望状态码201,实际得到{response.status_code}"
elif case['method'] == 'DELETE':
assert response.status_code == 200 or response.status_code == 204, f"期望状态码200或204,实际得到{response.status_code}"
else:
assert response.status_code == 200, f"期望状态码200,实际得到{response.status_code}"
运行测试并生成报告
在 PyCharm 中运行测试
-
打开 PyCharm 的终端(Terminal),确保已激活虚拟环境。
-
进入项目根目录,运行以下命令:
bash
pytest tests/ --html=reports/report.html --self-contained-html
命令参数说明
tests/
:指定测试脚本所在目录。
--html=reports/report.html
:指定生成的报告文件路径。
--self-contained-html
:生成自包含的 HTML 文件,便于分享与查看。
查看测试报告
测试完成后,打开 reports/report.html
,即可查看详细的测试报告。
运行结果截图
1. 运行执行
运行>_Terminal:
bash
pytest tests/ --html=reports/report.html --self-contained-html
查看报告:
点击底部链接地址(以实际为主):
bash
file:///C:/Users/Lenovo/api_test_tool/reports/report.html
2. 点击选择一个浏览器浏览(可选)
3. 运行成功截图
导出测试报告
HTML 报告:生成的报告位于 reports/report.html
,可以直接打开或分享。
其他格式:如需生成 XML 格式的报告,可使用参数 --junitxml=reports/report.xml
。
常见问题与解决
1. 无法读取测试用例
解决方案:确保 test_cases.xlsx
存在且未被其他程序占用。检查 Excel 文件的内容格式是否正确。(必要时把test_cases文件夹删除,重新创建然后把复制粘贴用例贴进去)
2. 依赖库缺失
解决方案:一定要确保依赖库全部已经导入成功,在Pycharm中File(顶部)-Settings-Python Interpreter-+(进行搜索对应库)。上文requirements.txt的库
3. 运行项目老是出现各种路径或库的找不到
解决方案:创建项目建议一定要选择“New environment using”,不要沿用以前项目“Previously configured interpreter”,原因是导致各种不兼容和配置错误
总结
通过本教程,我们一步一步地构建了一个功能完善的接口自动化测试工具。我们涵盖了环境配置、项目结构搭建、代码编写、测试执行到报告生成的完整流程。
对于测试工程师来说,这不仅是实践自动化测试的好机会,也是深入理解测试流程和 Python 编程的有效途径。
你的收获:
学会了如何使用 Python 读取 Excel 测试用例。
掌握了使用 requests
库发送 HTTP 请求的方法。
了解了如何使用 pytest
进行单元测试并生成测试报告。
熟悉了项目的组织结构和模块化编程的思想。
欢迎交流与讨论!
如果你在实现过程中遇到任何问题,或者有更好的建议,欢迎在评论区留言。让我们共同进步!
作者:立刻&坚持