最近在用Python+Pytest+Allure搭建接口自动化测试框架
具体的框架要求:
1,使用Pytest进行测试用例编写和执行
2,使用Allure生成漂亮的测试报告
3,并且要求有断言方法
初步的框架设计如下,后期可以进一步添加很多功能
java
import pytest
import requests
import allure
# 接口地址
BASE_URL = "https://www.xxx.com"
# 示例接口函数
def get_user_info(user_id):
url = f"{BASE_URL}/users/{user_id}"
response = requests.get(url)
return response.json()
# 测试用例
@pytest.mark.parametrize("user_id", [1, 2, 3])
def test_get_user_info(user_id):
with allure.step("调用接口获取用户信息"):
user_info = get_user_info(user_id)
with allure.step("断言用户信息"):
assert user_info["id"] == user_id
# Pytest的fixture,用于在测试用例执行前后进行一些操作
@pytest.fixture(scope="session")
def setup_allure():
allure_dir = "allure-results"
allure_report_dir = "allure-report"
allure.clean_reports(allure_dir)
allure.clean_results(allure_dir)
allure.environment(report="true")
yield
allure_cmd = f"allure generate {allure_dir} -o {allure_report_dir} --clean"
allure_cmd += " && allure open --port 8080 allure-report"
allure_cmd += " && allure serve allure-results"
allure_cmd += " && allure report clean"
allure_cmd += f" && rm -rf {allure_dir}"
allure_cmd += f" && rm -rf {allure_report_dir}"
allure_cmd += " && allure results clean"
os.system(allure_cmd)
# 执行测试
if __name__ == "__main__":
pytest.main(['-s', '-v', '--alluredir=allure-results'])
在这个框架中,首先定义了一个基本的接口测试用例 test_get_user_info
,用于测试 get_user_info
函数是否能够正确返回用户信息。
另外使用 pytest.mark.parametrize
装饰器来指定多个用户ID作为参数进行测试。在测试用例中,可以使用 allure.step
来定义测试步骤,以便在Allure报告中展示清晰的测试步骤。
此外,这个框架还定义了一个 setup_allure
fixture,用于在测试执行前清理旧的Allure结果,并在测试执行后生成Allure报告,并使用Allure命令行工具打开报告或服务报告。