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

做博客的网站公众号开发中心

做博客的网站,公众号开发中心,免费网站建立,个人网站备案转公司备案内置fixture Fixture使用pytest.fixture装饰,pytest有一些内置的fixture 命令可以查看内置fixture pytest --fixtures fixture范围 在pytest中,夹具(fixtures)具有不同的作用范围(scope),用于…

内置fixture

Fixture使用@pytest.fixture装饰,pytest有一些内置的fixture

命令可以查看内置fixture

pytest --fixtures

 

fixture范围

在pytest中,夹具(fixtures)具有不同的作用范围(scope),用于控制夹具在测试中的生命周期和重用性。可以通过使用`@pytest.fixture`装饰器并指定`scope`参数来定义夹具的作用范围。

以下是pytest中常用的夹具作用范围:

1. `function`(默认值):每个测试函数运行一次,即每个测试函数都会重新初始化和清理夹具。

2. `class`:每个测试类内的所有测试函数都共享同一个实例化的夹具。在测试类开始时初始化夹具,在测试类结束时清理夹具。

3. `module`:每个测试模块中所有测试函数都共享同一个实例化的夹具。在测试模块开始时初始化夹具,在测试模块结束时清理夹具。

4. `package`:每个测试包(包含多个模块)中的所有测试函数共享同一个实例化的夹具。在测试包开始时初始化夹具,在测试包结束时清理夹具。

5. `session`:整个测试会话中的所有测试函数共享同一个实例化的夹具。在测试会话开始时初始化夹具,在测试会话结束时清理夹具。

夹具的作用范围决定了夹具在测试过程中的生命周期和重用性。选择合适的作用范围可以提高测试的效率和性能,同时确保夹具在适当的时候进行初始化和清理。

要使用指定作用范围的夹具,请将`scope`参数传递给`@pytest.fixture`装饰器,例如:

```python
import pytest@pytest.fixture(scope="module")
def my_fixture():# 初始化夹具yield# 清理夹具
```

在上面的例子中,`my_fixture`被定义为模块级别的夹具,它将在测试模块开始时进行初始化,在测试模块结束时进行清理。

自动使用autouse

`autouse`是pytest夹具(fixture)的一个参数,用于指示夹具是否自动应用于所有测试函数,而无需在测试函数中显式调用夹具。

当你将`autouse=True`传递给夹具装饰器时,夹具将自动在每个测试函数运行前执行,并在测试函数运行后执行清理操作。这使得夹具的使用变得非常方便,无需在每个测试函数中添加装饰器或调用夹具函数。

例如,考虑以下的示例:

```python
import pytest@pytest.fixture(autouse=True)
def setup_and_teardown():# 在每个测试函数之前执行设置操作print("Setup")yield# 在每个测试函数之后执行清理操作print("Teardown")def test_one():print("Test one")def test_two():print("Test two")
```

在上述示例中,`setup_and_teardown`夹具被设置为`autouse=True`,因此它将自动应用于所有的测试函数。每个测试函数在运行之前都会执行`setup_and_teardown`夹具的设置操作,并在测试函数运行后执行清理操作。

运行上述示例的测试会产生以下输出:

```
Setup
Test one
Teardown
Setup
Test two
Teardown
```

注意,使用`autouse`参数应谨慎,确保夹具的设置和清理操作不会对每个测试函数产生意外的副作用,并且在确实需要自动应用于每个测试函数时使用它。否则,推荐在需要使用夹具的测试函数上显式添加夹具装饰器。

fixture可用性

夹具可用性是从测试的角度确定的。仅当测试位于定义了固定装置的范围内时,固定装置才可供测试请求。如果固定装置是在类内部定义的,则只能由该类内部的测试请求。但是,如果在模块的全局范围内定义了固定装置,则该模块中的每个测试(即使它是在类内部定义的)都可以请求它。

同样,如果测试与定义自动使用装置的范围相同,则该测试也只能受自动使用装置影响(请参阅 自动使用装置首先在其范围内执行)。

一个固定装置还可以请求任何其他固定装置,无论它是在哪里定义的,只要请求它们的测试可以看到涉及的所有固定装置。

例如,下面是一个带有固定装置 (outer ) 的测试文件,该夹具调用了一个不在它范围内的inner,但是inner在测试方法可调用的范围内,所以outer也可以调用inner。

import pytest@pytest.fixture
def order():return []@pytest.fixture
def outer(order, inner):order.append("outer")class TestOne:@pytest.fixturedef inner(self, order):order.append("one")def test_order(self, order, outer):assert order == ["one", "outer"]class TestTwo:@pytest.fixturedef inner(self, order):order.append("two")def test_order(self, order, outer):assert order == ["two", "outer"]

conftest.py: 跨多个文件共享固定装置

conftest.py是一个特殊的文件,它可以用于存放pytest的公共夹具(fixtures)和插件配置,以供项目中的多个测试文件共享和重用。

在pytest框架中,`conftest.py`文件需要放置在项目目录或测试目录的根目录下。当运行pytest时,它会自动加载这个文件,并提供其中定义的夹具和配置。

`conftest.py`文件通常包含以下内容:

1. 夹具定义:你可以在`conftest.py`中定义各种夹具,例如用于创建测试数据、配置测试环境或模拟外部依赖的夹具。这些夹具可以在项目中的任何测试文件中使用。

2. 共享夹具:`conftest.py`文件中定义的夹具可以在整个项目中共享和重用。这意味着你可以在多个测试文件中使用相同的夹具,而无需在每个文件中重新定义。

3. 配置选项:你可以在`conftest.py`中配置pytest的选项,例如设置报告的格式、启用特定的插件或定制断言行为。

4. 插件配置:如果你使用了一些pytest插件,你可以在`conftest.py`中配置这些插件的参数和行为。

使用`conftest.py`可以提高测试代码的可维护性和重用性,避免在每个测试文件中重复定义相同的夹具和配置。它使得夹具和配置可以在整个项目中共享,减少了冗余代码并提高了测试的效率。

根目录下的conftest.py可以被项目下的任何测试所使用,pytest会自动发现,不需要手动导入

可以有多个包含测试的嵌套目录/包,每个目录都可以有自己的conftest.py固定装置

夹具实例化顺序

当 pytest 想要执行测试时,一旦它知道将执行哪些装置,它就必须弄清楚它们的执行顺序。为此,它会考虑 3 个因素:

  1. 范围

  2. 依赖关系

  3. 自动使用

范围大的优先执行

import pytest@pytest.fixture(scope="session")
def order():return []@pytest.fixture
def func(order):order.append("function")@pytest.fixture(scope="class")
def cls(order):order.append("class")@pytest.fixture(scope="module")
def mod(order):order.append("module")@pytest.fixture(scope="package")
def pack(order):order.append("package")@pytest.fixture(scope="session")
def sess(order):order.append("session")class TestClass:def test_order(self, func, cls, mod, pack, sess, order):assert order == ["session", "package", "module", "class", "function"]

 

相同顺序的装置根据依赖关系执行

当一个装置请求另一个装置时,首先执行另一个装置。因此,如果fixturea请求fixture b,fixtureb将首先执行,因为a依赖于fixtureb并且没有它就无法运行。即使a 不需要 的结果b,它仍然可以请求b是否需要确保在 之后执行b

import pytest@pytest.fixture
def order():return []@pytest.fixture
def a(order):order.append("a")@pytest.fixture
def b(a, order):order.append("b")

执行顺序为order->a->b

自动使用的夹具调用的夹具也会自动使用

import pytest@pytest.fixture
def order():return []@pytest.fixture
def a(order):order.append("a")@pytest.fixture(autouse=True)
def b(a, order):order.append("b")

 夹具b为自动使用,那么它调用的a和order也会自动使用。

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

相关文章:

  • 找大学生做家教去哪个网站找好成都装修公司哪家口碑最好
  • 济南网站建设团队dede s网站地图调文章
  • html5在线制作网站模板wordpress插件失败
  • 短链接制作西安网站优化培训
  • 舟山市住房和城乡建设局网站视频网站seo实战
  • 门户网站的种类深圳福田区到访场所
  • 网站权重查询接口建筑网下载
  • 广州做网站多合肥网站建设方案服务
  • 网站首页制作过程科学小制作小发明
  • 顺德营销型网站建设浏览器的网站通知怎么做
  • 做网站签了合同后不想做了最早的做团购的网站
  • 南宁做网站开发的公司有哪些跨境电商平台规则
  • google网站优化工具做网站公司西安
  • 做seo要明白网站内专题网站建设的请示
  • 百度做公司网站需要多少钱上海骏域网站建设专家
  • 网站设计合理用wordpress如何添加关键字
  • 驾校做网站泰安网站建设公司
  • 百度搜索网站打开错误上海注册公司多久
  • 内江规划建设教育培训中心网站广西桂林山水甲天下风景区
  • 网站权重查询工具哪些网站做外贸
  • 分析学生做网站钦州建设网站
  • 潍坊 企业网站建设济南1951年建站
  • 江门做网站软件专业的移动网站建设公
  • 福田公司在哪里湖南网站seo推广
  • 安徽教育平台网站建设学校网站管理系统
  • 简述网站开发过程wordpress淘宝客响应式模板
  • 广州市恒嘉建设有限公司网站拉新接单网
  • 有些网站做不了seoWordPress 5.0.1怎麼使用
  • 网站速度慢的原因wordpress底部版权
  • 如何简单快速的制作网站福建网站建设制作