1、什么叫钩子函数
在Pytest框架中,钩子函数是一种允许用户扩展或者自定义测试执行过程的机制。钩子函数允许用户在测试的不同阶段插入自定义的代码,以实现特定的行为,操作或处理。这种插入式的机制使得Pytest具有高度的灵活性和扩展性。
如下图:
Pytest的钩子函数遵循一定的命名规则,通常以"pytest"为前缀, 这些钩子函数可以通过编写对应的函数并将其放在 conftest.py 文件中来实现。
pytest 中的钩子函数按功能一共分为 6 类:引导钩子,初始化钩子、用例收集钩子、用例执行钩子、报告钩子、调试钩子。
2、常用的钩子函数
1、pytest_addoption(parser): 当 pytest 命令行解析器被创建时,pytest 将调用这个函数,它将接受一个 parser 参数,可以通过它向解析器中添加自定义的命令行选项。
2、pytest_configure(config): 当 pytest 执行前首次读取配置文件时调用,通常在这里可以对配置进行修改。
3、pytest_unconfigure(config): 在 pytest 执行完成并退出时调用。
4、pytest_generate_tests(metafunc): 当pytest生成测试时,pytest将调用此函数。这是一个非常有用的函数,它可以帮助你动态生成测试。
5、pytest_collection_modifyitems(session, config, items): 这个钩子函数可以修改 pytest 的测试收集结果。你可以通过它添加、删除或者修改 pytest 收集的测试。
6、pytest_runtest_setup(item): 在 pytest 执行测试用例的 setup 阶段时调用。可以在这里添加自定义的 setup 逻辑。
7、pytest_runtest_call(item): 当测试用例被执行时,pytest 将调用此函数。在这个钩子函数中可以添加自定义的逻辑
8、pytest_runtest_teardown(item): 在 pytest 执行测试用例的 teardown 阶段时调用。可以在这里添加自定义的 teardown 逻辑。
9、pytest_runtest_makereport(item, call): 它在测试用例执行完毕并生成测试报告时触发,可以在此处对测试结果进行处理,通过实现该钩子函数来对测试报告进行定制化的处理,例如记录测试用例的执行结果、截图等。
10、pytest_sessionstart(session): 在测试套件开始执行前调用(也就是pytest进程启动后,会调用此钩子函数),可以在此处完成一些初始化操作。
11、pytest_sessionfinish(session, exitstatus): 在测试套件执行结束后调用(也就是pytest进程结束前,会调用此钩子函数,),可以在此钩子函数中执行清理操作或收集报告等。。
12、pytest_terminal_summary(terminalreporter): 在 pytest 执行完成后调用,它将整个测试结果的总结输出到终端上。
13、pytest_collection_finish(session): 当 pytest 集合测试结束时调用,可以在此处对测试用例进行筛选。
14、pytest_collection_modifyitems(session, config, items): 当测试用例收集完成后,会调用此钩子函数,可以通过此钩子函数修改、重排序测试用例。
这些钩子函数可以通过编写对应的函数并将其放在 conftest.py 文件中来实现。例如,如果想要在测试完成后发送一封邮件,可以在 conftest.py 文件中编写一个名为 pytest_sessionfinish 的函数,并在其中调用发送邮件的代码。
# conftest.py
def pytest_sessionfinish(session, exitstatus):
# 根据测试结果执行不同的操作
if exitstatus == 0:
# 测试通过时记录日志
log_message = "测试通过,所有测试用例执行成功。"
else:
# 测试失败时记录日志
log_message = "测试失败,部分或全部测试用例执行失败。"
# 记录日志
send_email(log_message)
# 模拟发送邮件的函数
def send_email(content):
print(f"发送邮件:{content}")