您的位置:首页 > 新闻 > 热点要闻 > 在线设计logo软件_网站大全2021_昆明百度推广开户_seo软文推广工具

在线设计logo软件_网站大全2021_昆明百度推广开户_seo软文推广工具

2024/12/22 0:45:06 来源:https://blog.csdn.net/weixin_47817248/article/details/144448824  浏览:    关键词:在线设计logo软件_网站大全2021_昆明百度推广开户_seo软文推广工具
在线设计logo软件_网站大全2021_昆明百度推广开户_seo软文推广工具
Pytest 的钩子(hook)机制是一种特殊的机制,它允许用户插入自己的逻辑到测试执行的不同阶段。
通过使用钩子,开发者可以对测试执行过程进行定制化,比如修改测试对象、处理测试结果、配置测试环境等。这些钩子函数通常写在 conftest.py 文件中,pytest 会自动识别该文件并加载其中的钩子函数。
conftest.py 文件用于存放测试配置、固件(fixtures)以及钩子函数等。
参考文档:https://docs.pytest.org/en/latest/reference/reference.html#hooks

第一部分:setuptools

引导挂钩要求足够早注册的插件(内部和setuptools插件),可以使用的钩子

pytest_load_initial_conftests(early_config,parser,args)

用于在命令行选项解析之前加载初始的 conftest.py 文件。这些 conftest.py 文件通常用于存储测试目录中的插件配置和自定义 fixture(固定装置),从而允许在不同测试文件之间共享这些配置和 fixture。

early_config:pytest 的早期配置对象,它允许访问一些配置参数和插件。
parser:用于解析命令行选项的 ArgumentParser 对象。
args:命令行提供的初始参数列表。

通常你不需要手动加载 conftest.py 文件,因为 pytest 会自动处理。

pytest_cmdline_preparse(config,args):

(不建议使用)用于在命令行参数被解析之前执行一些自定义的操作。这个函数允许开发者在 pytest 开始处理命令行参数之前,对参数进行预处理或修改。这对于需要在参数解析之前做一些初始化工作或者对命令行参数进行自定义处理的情况非常有用。

config:pytest 的配置对象,通过这个对象可以访问和修改 pytest 的配置。
args:一个列表,包含了命令行中传递给 pytest 的参数。

Tip

修改 args 列表将直接影响 pytest 解析的参数,因此需要谨慎操作。
这个函数是 pytest 插件开发中比较高级的用法,通常用于创建复杂的测试配置或集成其他测试工具。
使用此钩子函数时,需要确保 pytest 版本支持,因为不同版本的 pytest 可能在钩子函数的实现上有所差异。

pytest_cmdline_preparse 提供了一个强大的机制,允许开发者在 pytest 开始处理命令行参数之前进行自定义的预处理,从而满足了复杂的测试配置需求。

pytest_cmdline_parse(pluginmanager,args): 返回一个初始化的配置对象,解析指定的args。

不是 pytest 核心提供的标准钩子,因此如果你在自己的测试项目或插件开发中遇到了这个函数,那么它很可能是由某个特定插件或自定义配置定义的。在这种情况下,你应该查阅该插件或配置的文档来了解 pytest_cmdline_parse 钩子的具体用法和目的。

pytest_cmdline_main(config): 要求执行主命令行动作。默认实现将调用configure hooks和runtest_mainloop。
# 假设这个代码片段位于一个 pytest 插件文件中def pytest_cmdline_main(config):# 打印 pytest 的根目录print(f"pytest rootdir: {config.rootdir}") # 打印执行目录# 打印自定义的命令行选项(如果有的话)# 注意:你需要先通过 pytest_addoption 钩子添加这些选项# ...

第二部分初始化挂钩

初始化钩子需要插件和conftest.py文件

pytest_addoption(parser): 自定义命令行参数。注册argparse样式的选项和ini样式的配置值,这些值在测试运行开始时被调用一次
# conftest.pydef pytest_addoption(parser):parser.addoption("--cluster_id",action="store",default=None,help="cluster_id")@pytest.fixture(scope="session")
def env(request):return request.config.getoption("--cluster_id")
def test_subpack(env):print(f'Running test_subpack with env: {env}')
pytest test_subpack.py -s --cluster_id sittest_subpack.py Running test_subpack with env: sit
.
pytest_configure(config): 允许插件和conftest文件执行初始配置。

用于在 pytest 配置阶段执行一些自定义的初始化操作,可以用来修改 pytest 的配置、添加插件、设置全局变量等。
调用的时机:在解析 pytest 配置文件(如 pytest.ini 或 pyproject.toml)之后,在命令行参数和环境变量解析之后,插件被加载和初始化之前。

def pytest_configure(config):# 在这里执行自定义的配置操作pass
# config 参数是一个 Config 对象,包含了 pytest 的所有配置信息。通过这个对象,可以访问和修改 pytest 的配置。
添加插件:可以通过 config.pluginmanager.register 方法添加自定义的插件。
def pytest_configure(config):config.pluginmanager.register(MyPlugin())

简单案例

# conftest.pydef pytest_configure(config):class MyPlugin:def pytest_runtest_setup(self, item):# 在测试用例执行之前执行的操作print("Running setup for", item.nodeid)def pytest_runtest_call(self, item):# 在测试用例执行时执行的操作print("Running test", item.nodeid) # 执行的时间用例开始前def pytest_runtest_teardown(self, item, nextitem):# 在测试用例执行之后执行的操作print("Running teardown for", item.nodeid, item)if nextitem: # 如果下一条用例没有,值为Noneprint(nextitem.nodeid)config.pluginmanager.register(MyPlugin())
# test_example.pydef test_example():print(1111)def test_example1():assert 1 + 1 == 2
test_case.py Running setup for test_case.py::test_example
Running test test_case.py::test_example
1111
.Running teardown for test_case.py::test_example <Function test_example>
test_case.py::test_example1
Running setup for test_case.py::test_example1
Running test test_case.py::test_example1
.Running teardown for test_case.py::test_example1 <Function test_example1>
修改配置:可以通过 config.option 访问和修改命令行参数。
def pytest_configure(config):config.option.verbose = 2  # 设置 verbose 级别为 2

简单案例

# conftest.pydef pytest_configure(config):config.option.verbose = 1  # 设置 verbose 级别为 2 默认为0# print(config.option) # 这里面有很多内容可以设置
# test_example.pydef test_example():assert 1 + 1 == 2
test_case.py::test_example PASSED

可以对比一下verbose为0的情况,输出的内容有些许的区别,设置1和2 没有任何区别,这个值0和其他数代表False和True

设置全局变量:可以通过 config.global_config 设置全局变量。

,目前没有找到案例

def pytest_configure(config):config.global_config.option = 'value'  # 设置全局变量

使用下面的方式传递全局变量

# conftest.py
import pytest@pytest.fixture(scope="session", autouse=True)
def set_global_variables(request):# 设置全局变量#print(request.__dict__)request.config.cache.set("my_global_variable", "value")# 在测试代码中使用全局变量
def test_example(pytestconfig):#print(pytestconfig.__dict__)global_variable_value = pytestconfig.cache.get("my_global_variable", None)assert global_variable_value == "value"
pytest_configure 钩子中添加一个自定义的命令行选项
# conftest.py 或者任何 pytest 插件的 hook 文件def pytest_configure(config):config.addinivalue_line("markers", "skip_on_windows: marks tests as skipping on Windows OS")
import pytest@pytest.mark.skip_on_windows
def test_example():assert 1==1

pytest_configure 钩子中调用了 config.addinivalue_line 方法,为 pytest 添加了一个新的标记 @pytest.mark.skip_on_windows,这样就可以在测试函数上使用这个标记来控制在 Windows 系统上的测试跳过。

pytest_unconfigure(config): 在退出测试过程之前调用。

这个和上一个 pytest_configure(config) 是一对

# conftest.py 或者任何 pytest 插件的 hook 文件def pytest_configure(config):print('pytest_configure running')def pytest_unconfigure(config):print('pytest_unconfigure running')
# test_case.py
def test_example():assert 1==1
pytest_configure running
================================================== test session starts ================================================== 
platform win32 -- Python 3.9.13, pytest-7.4.4, pluggy-1.3.0
rootdir: D:\pro\py4
configfile: pytest.ini
plugins: allure-pytest-2.13.5, Faker-30.6.0
collected 1 item                                                                                                          test_case.py .=================================================== 1 passed in 0.17s =================================================== 
pytest_unconfigure running
pytest_sessionstart(session): 在Session创建对象之后,执行收集并进入运行测试循环之前调用。
pytest_sessionfinish(session,exitstatus): 在整个测试运行完成后调用,就在将退出状态返回系统之前
# conftest.pydef pytest_sessionstart(session):print("pytest_sessionstart starting...") # 这里的执行时机有时是在=== test session starts ===之后 有可能时版本的问题def pytest_sessionfinish(session,exitstatus): print("pytest_sessionfinish starting...")def pytest_configure(config):print('pytest_configure running')def pytest_unconfigure(config):print('pytest_unconfigure running')
# test_case.py
def test_example():assert 1==1print('test_example')def test_example1():assert 2==2print('test_example1')
pytest_configure running
pytest_sessionstart starting...
================================================== test session starts ==================================================
platform win32 -- Python 3.9.13, pytest-7.4.4, pluggy-1.3.0
rootdir: D:\pro\py4
configfile: pytest.ini
plugins: allure-pytest-2.13.5, Faker-30.6.0
collected 2 itemstest_case.py test_example
.test_example1
.pytest_sessionfinish starting...=================================================== 2 passed in 0.17s ===================================================
pytest_unconfigure running
pytest_plugin_registered(plugin,manager):一个新的pytest插件已注册。
# conftest.py 或者 test_plugin.py
import pytestdef pytest_plugin_registered(plugin, manager):print(f"插件 {plugin.name} 已注册。")# 其他测试相关的代码...

上述代码胡打印你的环境中已经安装的插件,pip list 中的内容,可以用来监控当前环境中是否有必须的使用的插件,如果没有可以操作终端进行下载

第三部分:collection 收集钩子

pytest_collection(session): 执行给定会话的收集协议。。

用于在测试用例收集阶段执行一些自定义的操作。这个函数会在 pytest 收集测试用例时被调用,可以用来修改测试用例的收集行为。pytest_collection 函数的参数是一个 Session 对象,包含了 pytest 的会话信息。通过这个对象,可以访问和修改 pytest 的会话配置。如果需要在测试用例收集完成后执行一些操作,可以考虑使用 pytest_collection_modifyitems 钩子函数。

# conftest.pydef pytest_collection(session):print(session.__dict__)print("Collecting tests...")

def test_example():assert 1==1print('test_example')def test_example1():assert 2==2print('test_example1')
================================================== test session starts ==================================================
platform win32 -- Python 3.9.13, pytest-7.4.4, pluggy-1.3.0
rootdir: D:\pro\py4
configfile: pytest.ini
plugins: allure-pytest-2.13.5, Faker-30.6.0
collecting ... {'keywords': <NodeKeywords for node <Session py4 exitstatus=<ExitCode.OK: 0> testsfailed=0 testscollected=0>>, 'own_markers': [], 'extra_keyword_matches': set(), 'stash': <_pytest.stash.Stash object at 0x000001C48616C070>, 'testsfailed': 0, 'testscollected': 0, 'shouldstop': False, 'shouldfail': False, 'trace': <pluggy._tracing.TagTracerSub object at 0x000001C48616C190>, '_initialpaths': frozenset(), '_bestrelpathcache': _bestrelpath_cache(path=WindowsPath('D:/pro/py4')), 'exitstatus': <ExitCode.OK: 0>, '_fixturemanager': <_pytest.fixtures.FixtureManager object at 0x000001C486148F10>, '_setupstate': <_pytest.runner.SetupState object at 0x000001C488126940>}
Collecting tests...
collected 2 itemstest_case.py test_example
.test_example1
.=================================================== 2 passed in 0.18s ==============
pytest_generate_tests(metafunc: Metafunc) 用于在生成测试用例时执行一些自定义的操作。这个函数会在 pytest 收集到测试用例并准备生成测试用例时被调用,可以用来修改测试用例的生成行为。
# conftest.pydef pytest_generate_tests(metafunc):print()print(f"Generating tests for: {metafunc.function.__name__}")
# test_case.py
def test_example():assert 1==1print('test_example')def test_example1():assert 2==2print('test_example1')
================================================== test session starts ================================================== 
platform win32 -- Python 3.9.13, pytest-7.4.4, pluggy-1.3.0
rootdir: D:\pro\py4
configfile: pytest.ini
plugins: allure-pytest-2.13.5, Faker-30.6.0
collecting ...
Generating tests for: test_exampleGenerating tests for: test_example1
collected 2 itemstest_case.py test_example
.test_example1
.=================================================== 2 passed in 0.18s ==================
#### pytest_collection_modifyitems(session: Session, config: Config, items: List[Item]) 在执行收集后调用。可能会就地过滤或重新排序项目。
```python
# conftest.pydef pytest_collection_modifyitems(session, config, items):print(session)print(config)print(items[0].function.__doc__) # 获取函数注释内容print("Modifying collected items...")aa = []if '111' in items[0].function.__doc__:aa.append(items[0])items[:] = aa# 在这里可以对 items 进行修改,例如排序、过滤等
# test_case.py
def test_example():'''test1111'''assert 1==1print('test_example')def test_example1():'''test2222'''assert 2==2print('test_example1')
================================================== test session starts ==================================================
platform win32 -- Python 3.9.13, pytest-7.4.4, pluggy-1.3.0
rootdir: D:\pro\py4
configfile: pytest.ini
plugins: allure-pytest-2.13.5, Faker-30.6.0
collecting ... <Session py4 exitstatus=<ExitCode.OK: 0> testsfailed=0 testscollected=0>
<_pytest.config.Config object at 0x000001F71734D6D0>
test1111
Modifying collected items...
collected 2 items                                                                                                         test_case.py test_example
.=================================================== 1 passed in 0.18s ======
pytest_collection_finish(session: Session)

它允许用户在测试收集阶段完成后执行自定义操作。这个钩子函数接收一个 Session 对象作为参数,该对象包含了当前测试会话的所有信息。

# content of conftest.py
# content of conftest.py
def pytest_collection_finish(session):print("所有测试用例已收集完毕")print(f"共收集到 {len(session.items)} 个测试用例")print(session.items)
# test_case.py
def test_example():'''test1111'''assert 1==1print('test_example')def test_example1():'''test2222'''assert 2==2print('test_example1')
================================================ test session starts ================================================
platform win32 -- Python 3.9.13, pytest-7.4.4, pluggy-1.3.0
rootdir: D:\pro\py4
configfile: pytest.ini
plugins: allure-pytest-2.13.5, Faker-30.6.0
collected 2 items                                                                                                     
所有测试用例已收集完毕
共收集到 2 个测试用例
[<Function test_example>, <Function test_example1>]test_case.py test_example
.test_example1
.================================================= 2 passed in 0.12s =======================================
在这个示例中,当 pytest 完成测试用例的收集工作后,会自动调用 pytest_collection_finish 函数,并输出收集到的测试用例数量。
这个钩子可以用于多种场景,例如:1 日志记录:记录测试收集阶段的信息,如收集到的测试用例数量、收集时间等。2 动态调整测试用例:根据收集到的测试用例,动态地添加或移除某些测试用例。3 条件性测试:根据某些条件(如环境变量、配置文件等),决定是否执行某些测试用例。
要使用这个钩子,你需要将它定义在 conftest.py 文件中,因为 pytest 会在每个测试目录中查找并加载 conftest.py 文件。

第四部分:测试运行(runtest)钩子

pytest_runtestloop(session: Session) 执行主运行测试循环(收集完成后)。

它允许用户在测试执行阶段开始前或结束后执行自定义操作。这个钩子函数接收一个 Session 对象作为参数,该对象包含了当前测试会话的所有信息。
慎用

pytest_runtest_protocol(item: Item, nextitem: Optional[Item]) 对单个测试项目执行运行测试协议。



pytest_runtest_logstart(nodeid: str, location: Tuple[str, Optional[int], str]) 在运行单个项目的运行测试协议开始时调用。

它允许用户在单个测试用例执行阶段开始前执行自定义操作。这个钩子函数接收两个参数:nodeid 和 location,其中 nodeid 是当前正在执行的测试用例的唯一标识符,location 是一个包含测试用例所在文件路径、行号和测试用例名称的元组。

pytest_runtest_logfinish(nodeid: str, location: Tuple[str, Optional[int], str])在为单个项目运行测试协议结束时调用。
# content of conftest.py
def pytest_runtest_logstart(nodeid, location):print('==============logstart==============')print(f"测试用例 {nodeid} 开始执行")print('location: ', location)# 在这里可以添加自定义操作,例如记录日志、修改测试用例等# ...def pytest_runtest_logfinish(nodeid, location):print('==============logfinish==============')print(f"测试用例 {nodeid} 结束执行")print('location: ', location)# 在这里可以添加自定义操作,例如记录日志、修改测试用例等# ...
# test_case.py
def test_example():'''test1111'''assert 1==1print('test_example')def test_example1():'''test2222'''assert 2==2print('test_example1')
================================================ test session starts ================================================
platform win32 -- Python 3.9.13, pytest-7.4.4, pluggy-1.3.0
rootdir: D:\pro\py4
configfile: pytest.ini
plugins: allure-pytest-2.13.5, Faker-30.6.0
collected 2 itemstest_case.py ==============logstart==============
测试用例 test_case.py::test_example 开始执行
location:  ('test_case.py', 1, 'test_example')
test_example
.==============logfinish==============
测试用例 test_case.py::test_example 结束执行
location:  ('test_case.py', 1, 'test_example')
==============logstart==============
测试用例 test_case.py::test_example1 开始执行
location:  ('test_case.py', 6, 'test_example1')
test_example1
.==============logfinish==============
测试用例 test_case.py::test_example1 结束执行
location:  ('test_case.py', 6, 'test_example1')================================================= 2 passed in 0.11s ==========================
pytest_runtest_setup(item: Item) 调用以执行测试项目的设置阶段。

它允许用户在单个测试用例的 setup 阶段执行自定义操作。这个钩子函数接收一个参数:item,它代表当前正在执行的测试用例

# content of conftest.py
def pytest_runtest_setup(item):print(f"测试用例 {item.name} 的 setup 阶段开始")# 在这里可以添加自定义操作,例如记录日志、修改测试用例等# ...   
# test_case.py
def test_example():'''test1111'''assert 1==1print('test_example')def test_example1():'''test2222'''assert 2==2print('test_example1')
================================================ test session starts ================================================
platform win32 -- Python 3.9.13, pytest-7.4.4, pluggy-1.3.0
rootdir: D:\pro\py4
configfile: pytest.ini
plugins: allure-pytest-2.13.5, Faker-30.6.0
collected 2 itemstest_case.py 测试用例 test_example 的 setup 阶段开始
test_example
.测试用例 test_example1 的 setup 阶段开始
test_example1
.================================================= 2 passed in 0.12s ==========================
pytest_runtest_call(item: Item) 调用以运行测试项目的测试(调用阶段)。

它允许用户在单个测试用例的调用(call)阶段执行自定义操作。这个钩子函数接收一个参数:item,它代表当前正在执行的测试用例。

# content of conftest.py
def pytest_runtest_call(item):print(f"测试用例 {item.name} 的调用阶段开始")# 在这里可以添加自定义操作,例如记录日志、修改测试用例等# ...
# test_case.py
def test_example():'''test1111'''assert 1==1print('test_example')def test_example1():'''test2222'''assert 2==2print('test_example1')
================================================ test session starts ================================================
platform win32 -- Python 3.9.13, pytest-7.4.4, pluggy-1.3.0
rootdir: D:\pro\py4
configfile: pytest.ini
plugins: allure-pytest-2.13.5, Faker-30.6.0
collected 2 itemstest_case.py 测试用例 test_example 的调用阶段开始
test_example
.测试用例 test_example1 的调用阶段开始
test_example1
.================================================= 2 passed in 0.12s =============================
pytest_runtest_teardown(item: Item, nextitem: Optional[Item]) 调用以执行测试项目的拆卸阶段。

它允许用户在单个测试用例的 teardown 阶段执行自定义操作。这个钩子函数接收两个参数:item 和 nextitem,其中 item 是当前正在执行的测试用例,nextitem 是下一个将要执行的测试用例(如果没有下一个测试用例,则为 None)

# content of conftest.py
def pytest_runtest_teardown(item, nextitem):print(f"测试用例 {item.name} 的 teardown 阶段开始")# 在这里可以添加自定义操作,例如记录日志、修改测试用例等# ...if nextitem:print(nextitem.name)else:print(nextitem)
# test_case.py
def test_example():'''test1111'''assert 1==1print('test_example')def test_example1():'''test2222'''assert 2==2print('test_example1')
================================================ test session starts ================================================
platform win32 -- Python 3.9.13, pytest-7.4.4, pluggy-1.3.0
rootdir: D:\pro\py4
configfile: pytest.ini
plugins: allure-pytest-2.13.5, Faker-30.6.0
collected 2 itemstest_case.py test_example
.测试用例 test_example 的 teardown 阶段开始
test_example1
test_example1
.测试用例 test_example1 的 teardown 阶段开始
None================================================= 2 passed in 0.12s ===========================
pytest_runtest_makereport(item: Item, call: CallInfo[None]) 被称为为_pytest.reports.TestReport测试项目的每个设置,调用和拆卸运行测试阶段创建一个。

它允许用户在单个测试用例执行完成后生成测试报告时执行自定义操作。这个钩子函数接收两个参数:item 和 call,其中 item 是当前正在执行的测试用例,call 是一个 CallInfo 对象,包含了测试用例执行的结果信息。

import time
import pytest@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_makereport(item, call):print("------------------------Start---------------------------")out = yield  # 钩子函数的调用结果res = out.get_result()  # 获取用例执行结果print("执行结果:{}".format(res))if res.when == "call":  # 只获取call用例失败时的信息print("测试用例:{}".format(item))print("用例描述:{}".format(item.function.__doc__))print("测试步骤:{}".format(call))print("用例失败异常信息:{}".format(call.excinfo))print("用例失败时的详细日志:{}".format(res.longrepr))# print("------------------------End---------------------------")
# test_case.py
def test_example():'''test1111'''assert 1==1print('test_example')def test_example1():'''test2222'''assert 2==3print('test_example1')
================================================ test session starts ================================================
platform win32 -- Python 3.9.13, pytest-7.4.4, pluggy-1.3.0
rootdir: D:\pro\py4
configfile: pytest.ini
plugins: allure-pytest-2.13.5, Faker-30.6.0
collected 2 itemstest_case.py ------------------------Start---------------------------
执行结果:<TestReport 'test_case.py::test_example' when='setup' outcome='passed'>
test_example
------------------------Start---------------------------
执行结果:<TestReport 'test_case.py::test_example' when='call' outcome='passed'>
测试用例:<Function test_example>
用例描述:test1111
测试步骤:<CallInfo when='call' result: []>
用例失败异常信息:None
用例失败时的详细日志:None
.------------------------Start---------------------------
执行结果:<TestReport 'test_case.py::test_example' when='teardown' outcome='passed'>
------------------------Start---------------------------
执行结果:<TestReport 'test_case.py::test_example1' when='setup' outcome='passed'>
------------------------Start---------------------------
执行结果:<TestReport 'test_case.py::test_example1' when='call' outcome='failed'>
测试用例:<Function test_example1>
用例描述:test2222
测试步骤:<CallInfo when='call' excinfo=<ExceptionInfo AssertionError('assert 2 == 3') tblen=16>>
用例失败异常信息:<ExceptionInfo AssertionError('assert 2 == 3') tblen=16>
用例失败时的详细日志:def test_example1():'''test2222'''
>       assert 2==3
E       assert 2 == 3test_case.py:9: AssertionError
F------------------------Start---------------------------
执行结果:<TestReport 'test_case.py::test_example1' when='teardown' outcome='passed'>===================================================== FAILURES ====================================================== 
___________________________________________________ test_example1 ___________________________________________________ def test_example1():'''test2222'''
>       assert 2==3
E       assert 2 == 3test_case.py:9: AssertionError
============================================== short test summary info ============================================== 
FAILED test_case.py::test_example1 - assert 2 == 3
============================================ 1 failed, 1 passed in 0.22s ============================================
pytest_pyfunc_call(pyfuncitem: Function) 调用基础测试功能。

它允许用户在调用测试函数之前执行自定义操作。这个钩子函数接收一个参数:pyfuncitem,它代表当前正在执行的测试函数。

# content of conftest.pydef pytest_pyfunc_call(pyfuncitem):print(f"测试函数 {pyfuncitem.name} 开始执行")# 在这里可以添加自定义操作,例如记录日志、修改测试函数等# ...
# test_case.py
def test_example():'''test1111'''assert 1==1print('test_example')def test_example1():'''test2222'''assert 2==2print('test_example1')
================================================ test session starts ================================================
platform win32 -- Python 3.9.13, pytest-7.4.4, pluggy-1.3.0
rootdir: D:\pro\py4
configfile: pytest.ini
plugins: allure-pytest-2.13.5, Faker-30.6.0
collected 2 items                                                                                                     test_case.py 测试函数 test_example 开始执行
test_example
.测试函数 test_example1 开始执行
test_example1
.================================================= 2 passed in 0.11s ===========================
第五部分:Reporting 报告钩子
pytest_fixture_setup(fixturedef: FixtureDef[Any], request: SubRequest) 执行夹具设置执行。



pytest_fixture_post_finalizer(fixturedef: FixtureDef[Any], request: SubRequest) 在夹具拆除之后但在清除缓存之前调用,因此夹具结果fixturedef.cached_result仍然可用(不是 None)



pytest_runtest_logreport(report: TestReport) 处理项目的_pytest.reports.TestReport每个设置,调用和拆卸运行测试阶段产生的结果。



pytest_assertrepr_compare(config: Config, op: str, left: object, right: object) 返回失败断言表达式中的比较的说明。



版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com