如何使用Django的manage.py test生成Allure测试报告?
使用Django的
manage.py test生成Allure报告 我完全懂你的困扰——Allure的文档几乎全是围绕pytest的,但你就习惯用Django原生的manage.py test跑测试,不想切换到pytest生态。其实咱们可以通过自定义测试运行器结合Allure的Python核心库来实现,不用动现有测试代码,下面是一步步的实操方案:
1. 安装必要依赖
除了你已经装的allure-pytest,咱们还需要Allure的Python核心库(不依赖pytest):
pip install allure-python-commons
2. 编写自定义测试运行器
在你的Django项目根目录下新建一个test_runner.py文件,用来继承Django默认的测试运行器,注入Allure的报告逻辑:
from django.test.runner import DiscoverRunner from allure_commons.types import AttachmentType import allure_commons import allure class AllureTestRunner(DiscoverRunner): def run_suite(self, suite, **kwargs): # 初始化Allure上下文 allure_commons.plugin_manager.register(allure_commons.plugin.Plugin()) # 执行测试套件 test_result = super().run_suite(suite, **kwargs) # 生成Allure结果文件和HTML报告 allure.generate_report(source="allure-results", target="allure-report", clean=True) # 清理Allure插件 allure_commons.plugin_manager.unregister(allure_commons.plugin.Plugin()) return test_result def run_test(self, test, **kwargs): try: # 给测试用例自动添加Allure标题和描述 allure.dynamic.title(test._testMethodName) test_doc = test._testMethodDoc or "No description provided" allure.dynamic.description(test_doc) # 执行单个测试用例 result = super().run_test(test, **kwargs) # 捕获失败/错误信息,添加为Allure附件 for failure in result.failures + result.errors: error_msg = str(failure[1]) allure.attach(error_msg, name="Error Details", attachment_type=AttachmentType.TEXT) return result except Exception as e: allure.attach(str(e), name="Unexpected Exception", attachment_type=AttachmentType.TEXT) raise
3. 配置Django使用自定义运行器
打开项目的settings.py,找到TEST_RUNNER配置项,替换成咱们刚才写的运行器:
# 替换成你的项目名称,比如myproject.test_runner.AllureTestRunner TEST_RUNNER = 'your_project_name.test_runner.AllureTestRunner'
4. 运行测试并查看报告
现在直接执行你熟悉的命令:
python manage.py test
测试完成后,项目根目录会生成两个文件夹:
allure-results:存储Allure的原始测试结果数据allure-report:生成好的静态HTML报告
如果要在浏览器里查看报告,确保你已经安装了Allure命令行工具,然后执行:
allure serve allure-results
这会启动一个本地临时服务器,自动打开浏览器展示美观的Allure报告。
额外注意事项
- Allure命令行工具:如果还没装,需要从Allure官方下载对应系统的版本,添加到系统环境变量PATH中,这样才能用
allure serve或allure generate命令。 - 自定义扩展:你可以在测试用例里直接使用Allure的装饰器(比如
@allure.severity(allure.severity_level.CRITICAL)),自定义测试运行器会自动识别这些标记。 - 兼容性:这个方案完全兼容Django原生的
TestCase和SimpleTestCase,不需要修改你已有的测试代码。
内容的提问来源于stack exchange,提问作者p.matsinopoulos
相关产品推荐
相关产品推荐

