当前位置: 首页 > news >正文

免费个人网站建设哪里好江苏省建设厅官网网站首页

免费个人网站建设哪里好,江苏省建设厅官网网站首页,商城源码哪家品牌好,网站打不开什么原因pytest hook 函数也叫钩子函数,pytest 提供了大量的钩子函数,可以在用例的不同生命周期自动调用。 比如,在测试用例收集阶段,可利用 hook 函数修改测试用例名称的编码。 pytest的hook是基于Python的插件系统实现的,使…

pytest hook 函数也叫钩子函数,pytest 提供了大量的钩子函数,可以在用例的不同生命周期自动调用。 比如,在测试用例收集阶段,可利用 hook 函数修改测试用例名称的编码。

pytest的hook是基于Python的插件系统实现的,使用特定的命名规范和装饰器来定义钩子函数。你可以在pytest插件或conftest文件中定义这些钩子函数。

pytest 可以识别到三种插件

内置插件:从 pytest 内部 _pytest 目录加载的插件

外部插件:通过 pip 安装的插件(比如: pip install pytest-ordering )。

conftest.py 插件:测试目录中的 conftest.py 加载

常用的pytest钩子函数

1. `pytest_configure(config)`: 在pytest启动时调用,可用于注册自定义标记、插件等。

2. `pytest_collection_modifyitems(config, items)`: 测试收集阶段调用,可以修改、筛选或排序收集到的测试项。

3. `pytest_runtest_protocol(item, nextitem)`: 在运行每个测试用例之前和之后调用,可以执行初始化、清理或自定义测试流程等操作。

4. `pytest_report_teststatus(report)`: 在测试用例执行后调用,可用于自定义测试结果报告。

5. `pytest_terminal_summary(terminalreporter)`: 在测试会话结束时调用,可用于生成自定义的测试总结报告。

通过使用这些钩子函数,你可以在pytest的不同阶段添加自己的逻辑和行为。这使得您可以自定义测试收集、执行、报告等方面,以满足特定的需求。

有许多其他的pytest钩子函数可以用于不同的目的和扩展。你可以在pytest的官方文档中查找完整的钩子函数列表以及每个钩子的详细说明和示例。

开发插件

pytest 提供了大量的 hook 函数,执行过程中几乎所有的行为都是可以定制的。那么,pytest 可以改写哪 些行为呢? 文字版 pytest hook 执行顺序:

root
└── pytest_cmdline_main
├── pytest_plugin_registered
├── pytest_configure
│ └── pytest_plugin_registered
├── pytest_sessionstart
│ ├── pytest_plugin_registered
│ └── pytest_report_header
├── pytest_collection
│ ├── pytest_collectstart
│ ├── pytest_make_collect_report
│ │ ├── pytest_collect_file
│ │ │ └── pytest_pycollect_makemodule
│ │ └── pytest_pycollect_makeitem
│ │ └── pytest_generate_tests
│ │ └── pytest_make_parametrize_id
│ ├── pytest_collectreport
│ ├── pytest_itemcollected
│ ├── pytest_collection_modifyitems
│ └── pytest_collection_finish
│ └── pytest_report_collectionfinish
├── pytest_runtestloop
│ └── pytest_runtest_protocol
│ ├── pytest_runtest_logstart
│ ├── pytest_runtest_setup
│ │ └── pytest_fixture_setup
│ ├── pytest_runtest_makereport
│ ├── pytest_runtest_logreport
│ │ └── pytest_report_teststatus
│ ├── pytest_runtest_call
│ │ └── pytest_pyfunc_call
│ ├── pytest_runtest_teardown
│ │ └── pytest_fixture_post_finalizer
│ └── pytest_runtest_logfinish
├── pytest_sessionfinish
│ └── pytest_terminal_summary
└── pytest_unconfigure

可以利用 pytest hook 强大的功能开发出自己的插件。

hook和fixture的区别

在pytest中,Hooks(钩子)和Fixtures(装置)是两个不同的概念。

Hooks(钩子)是pytest提供的一组钩子函数,用于自定义和扩展测试流程。钩子函数在特定的时间点被调用,并允许你插入自定义的代码来修改、补充或拦截测试操作,比如定制报告、自定义收集规则、执行前/后的初始化和清理等。Hooks通常由插件或conftest文件定义,并使用特定的命名规范和装饰器进行标记。使用hooks可以灵活地定制和扩展pytest的行为。

Fixtures(装置)是pytest的一项功能,用于管理测试用例的前置和后置操作。Fixture可以被看作为测试用例的准备和清理工作,并且可以在多个测试用例之间共享数据和资源。Fixture函数使用`@pytest.fixture`装饰器进行标记,并在测试函数的参数中使用。当测试函数需要使用该装置时,fixture函数将被自动执行并提供必要的数据和资源。Fixture可以执行一些初始化操作,为测试用例提供必要的数据,以及在测试结束后进行清理工作。使用fixture可以提高代码的复用性和可维护性,并减少测试用例之间的重复工作。

总结起来,Hooks允许你定制和扩展测试流程,而Fixtures则用于管理测试用例的前置和后置操作,并提供必要的数据和资源。Hooks是用于自定义pytest的整体行为,而Fixtures是用于测试用例级别的准备和清理工作。两者可以一起使用,以实现更高级别的自定义和测试管理。

pytest_collection_modifyitems

def pytest_collection_modifyitems(session: "Session", config: "Config", items: List["Item"]
) -> None:"""Called after collection has been performed. May filter or re-orderthe items in-place.:param pytest.Session session: The pytest session object.:param pytest.Config config: The pytest config object.:param List[pytest.Item] items: List of item objects."""

可以看到该方法在用例收集后执行,可以筛选或者对用例执行顺序进行修改。 

插件开发-筛选收集到的用例

当你想要自定义收集阶段中的测试项时,可以使用`pytest_collection_modifyitems`钩子函数。这个钩子函数在pytest的测试收集过程中被调用,允许你对收集到的测试项进行修改、筛选或排序。

下面是一个使用`pytest_collection_modifyitems`的例子,假设你希望在测试收集阶段中只运行有特定标记的测试用例(比如`smoke`标记),在根目录的conftest.py中添加如下方法:

def pytest_collection_modifyitems(config, items):marked_items = []unmarked_items = []# 将有"smoke"标记的测试项放入marked_items列表,其他放入unmarked_items列表for item in items:if 'smoke' in item.keywords:marked_items.append(item)else:unmarked_items.append(item)# 只保留有"smoke"标记的测试项items[:] = marked_items# 打印被移除的未标记项的名称for item in unmarked_items:print(f"Skipping unmarked test: {item.nodeid}")

在上述代码中,`pytest_collection_modifyitems`钩子函数接收两个参数:`config`表示pytest的配置对象,`items`是测试收集阶段收集到的所有测试项(测试用例)的列表。我们首先遍历每个测试项,将有"smoke"标记的项放入`marked_items`列表,其他项放入`unmarked_items`列表。然后,我们通过将`items`列表替换为`marked_items`列表,实现只保留有"smoke"标记的测试项。最后,我们遍历`unmarked_items`列表,打印被移除的未标记项的名称作为提示信息。

可以看到test_b被跳过 

插件开发-改写用例名称编码

测试用例如下


@pytest.mark.parametrize("name",["哈利","赫敏"])
def test_encode(name):print(name)

运行时会出现乱码

在conftest.py中添加如下方法

def pytest_collection_modifyitems(config, items):for item in items:item._nodeid = item.nodeid.encode('utf-8').decode('unicode-escape')

再次运行可以看到节点id显示为中文了。

 插件打包

软件测试 | Pytest测试框架之插件开发_pytest_hook_函数

http://www.yayakq.cn/news/701384/

相关文章:

  • 网站外链接自己可以怎么做的四川建设人才网官网证书查询
  • 西宁网站建设王道下拉惠简单的网页制作模板
  • 为什么做网站越早越好网站精美排版代码
  • 购物网站哪个质量好接软件开发项目的平台
  • 徐州网站二次开发wordpress 插件不生效
  • 一级做爰网站网站备案系统验证码出错的解决方案
  • 洛阳网站建设汉狮报价做网站哪些技术
  • 郑州定制网站开发ios开发工程师
  • 做模板网站简单吗WordPress去除index插件
  • 个性化网站建设开发企业年金怎么提取
  • 如何给一个企业的网站做推广本地wordpress 外网访问
  • 西安网站维护公司一家专门做男人的网站
  • 个人旅游网站模版做网站服务器价格多少合适
  • 有成crm哪家公司做推广优化好
  • 免费建站英语网站建设的必要性
  • 自己怎么做网站链接小型门户网站模板
  • 做venn图网站商业空间设计方案
  • 初创企业的建站流程wordpress attachment
  • 网站的基本概念怎么用ps做网站图片
  • 正规的佛山网站建设个人网站设计的参考文献
  • 东莞网站设计网址深圳惠州网站建设公司
  • 有开源项目做的网站ps做图软件怎么下载网站
  • 雷州市规划建设局网站高端网站建设定制
  • 如何加盟网站建设网页工具
  • 建设银行上海分行招聘网站网站开发常遇到客户问题
  • 英文网站建视频剪辑自学网站
  • 广西城乡和住房建设厅网站计算机网站建设是什么
  • 南昌专业的企业网站开发公司六安网站制作哪家好
  • 页面排版西宁整站优化
  • wordpress怎么做网盘站wordpress调用百度文库