领取资料,咨询答疑,请➕wei: June__Go
上一小节我们学习了pytest_report_header钩子函数的使用方法,本小节我们讲解一下pytest_report_collectionfinish钩子函数的使用方法。
pytest_report_collectionfinish
钩子函数在 pytest 完成所有测试用例的收集后被调用。这个钩子可以用来在测试执行之前执行一些最终的检查或操作,例如验证测试用例的数量、打印收集到的测试用例列表、或者执行一些自定义的报告生成。
以下是一个具体的代码示例,展示了如何在 conftest.py
文件中使用 pytest_report_collectionfinish
钩子函数:
# conftest.py
import pytest
def pytest_report_collectionfinish(session):
# 获取收集到的测试用例数量
num_tests_collected = len(session.items)
# 获取收集到的测试用例列表
test_list = [item.name for item in session.items]
# 打印测试用例数量和列表
print(f"\nTotal number of tests collected: {num_tests_collected}")
print("List of collected tests:")
for test in test_list:
print(f" - {test}")
# 执行其他自定义的报告生成或操作
# 例如,你可以在这里生成一个 HTML 报告或者导出测试用例列表到一个文件
# ...
# 如果需要,可以在这里执行一些清理工作
# ...
# 你也可以在 pytest 运行结束时执行一些操作
def pytest_sessionfinish(session, exitstatus):
# 在这里执行测试运行结束后的操作,例如发送测试报告
# ...
在这个示例中,我们在 pytest_report_collectionfinish
钩子函数中首先获取了收集到的测试用例数量和列表。然后,我们打印了这些信息,以便用户在命令行中看到。这个列表可以帮助用户快速了解哪些测试用例将被执行。
我们还提供了一个 pytest_sessionfinish
钩子函数的示例,它在测试会话结束时被调用。在这个钩子中,你可以执行一些清理工作,例如关闭资源、发送测试报告等。
请注意,这个示例中的代码仅用于演示如何使用 pytest_report_collectionfinish
钩子函数。在实际应用中,你可能需要根据具体的测试需求来调整这些操作,例如生成自定义的报告格式或者执行其他类型的后处理。
在这个更复杂的示例中,我们将使用 pytest_report_collectionfinish
钩子函数来执行一系列高级操作。我们将验证测试用例的收集结果,记录测试用例的详细信息,生成一个自定义的测试用例报告,并在收集过程结束后执行一些清理工作。这个示例将展示如何结合多个钩子函数来提供更全面的测试报告和后处理。
首先,确保你的项目中有一个 conftest.py
文件。然后,在 conftest.py
文件中定义 pytest_report_collectionfinish
和其他相关钩子函数:
# conftest.py
import pytest
import os
import json
from datetime import datetime
# 全局变量用于存储测试用例的详细信息
collected_tests_info = {}
def pytest_collectitem(item):
# 在每个测试用例被收集时,记录其信息
collected_tests_info[item.name] = {
'file': item.fspath.basename,
'line': item.location[0],
'module': item.location[1],
'parent': item.parent.name
}
def pytest_report_collectionfinish(session):
# 获取当前时间戳
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# 创建自定义的测试用例报告文件
report_file = f"pytest_test_collection_report_{timestamp}.json"
# 将收集到的测试用例信息写入 JSON 文件
with open(report_file, 'w') as json_report:
json.dump(collected_tests_info, json_report, indent=4)
# 打印报告文件的路径
print(f"\nTest collection report saved to: {os.path.abspath(report_file)}")
# 执行清理工作,例如关闭数据库连接或网络资源
# ...
# 如果需要,可以在这里执行其他后处理操作
# ...
# 在测试运行结束时执行的操作
def pytest_sessionfinish(session, exitstatus):
# 在这里执行测试运行结束后的操作,例如发送测试报告
# ...
在这个示例中,我们首先定义了一个 pytest_collectitem
钩子函数来记录每个被收集的测试用例的详细信息。这些信息包括测试用例所在的文件、行号、模块和父模块。我们将这些信息存储在全局变量 collected_tests_info
中。
然后,在 pytest_report_collectionfinish
钩子函数中,我们创建了一个 JSON 文件来保存收集到的测试用例信息。这个文件包含了所有测试用例的详细信息,可以用于后续的分析或报告生成。
我们还定义了一个 pytest_sessionfinish
钩子函数,它可以在测试会话结束时执行一些操作,例如发送测试报告或执行其他清理工作。
请注意,这个示例中的代码仅用于演示如何使用 pytest_report_collectionfinish
钩子函数来生成自定义的测试用例报告。在实际应用中,你可能需要根据具体的测试需求来调整这些操作,例如生成不同格式的报告或者执行更复杂的后处理逻辑。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走,希望可以帮助到大家!领取资料,咨询答疑,请➕wei: June__Go