Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在每个单元测试中重置夹具的某些属性?_Python_Pytest - Fatal编程技术网

Python 如何在每个单元测试中重置夹具的某些属性?

Python 如何在每个单元测试中重置夹具的某些属性?,python,pytest,Python,Pytest,你们中有谁能告诉我如何在每个单元测试中改变夹具吗 在以下示例中,我想: 执行start\u driver()仅一次-这是一个长时间运行的操作,因此我使用scope=session初始化这个装置 在每个单元测试中,将驱动器计数器重置为0 代码: import pytest import time def start_driver(): # some long running operations time.sleep(3) def increment(driver):

你们中有谁能告诉我如何在每个单元测试中改变夹具吗

在以下示例中,我想:

  • 执行
    start\u driver()
    仅一次-这是一个长时间运行的操作,因此我使用
    scope=session
    初始化这个装置
  • 在每个单元测试中,将驱动器计数器重置为0
代码:

import pytest
import time

def start_driver():
    # some long running operations
    time.sleep(3)

def increment(driver):
    driver.counter += 1
    return driver.counter

class DriverInstance():
    def __init__(self):
        self.driver = start_driver()
        self.counter = 0

@pytest.fixture(scope='session')
def driver():
    yield DriverInstance()

def test_driver_1(driver):
    assert increment(driver) == 1

def test_driver_2(driver):
    assert increment(driver) == 1
$ pytest driver.py
========================================= test session starts ==========================================
platform linux -- Python 3.7.1, pytest-5.0.1, py-1.7.0, pluggy-0.12.0
rootdir: /home/backend/backend, inifile: pytest.ini
plugins: mock-1.10.4
collected 2 items

driver.py .F                                                                                     [100%]

=============================================== FAILURES ===============================================
____________________________________________ test_driver_2 _____________________________________________

driver = <driver.DriverInstance object at 0x7f78a5b000b8>

    def test_driver_2(driver):
>       assert increment(driver) == 1
E       assert 2 == 1
E        +  where 2 = increment(<driver.DriverInstance object at 0x7f78a5b000b8>)

driver.py:25: AssertionError
================================== 1 failed, 1 passed in 3.03 seconds ==================================
Pytest执行:

import pytest
import time

def start_driver():
    # some long running operations
    time.sleep(3)

def increment(driver):
    driver.counter += 1
    return driver.counter

class DriverInstance():
    def __init__(self):
        self.driver = start_driver()
        self.counter = 0

@pytest.fixture(scope='session')
def driver():
    yield DriverInstance()

def test_driver_1(driver):
    assert increment(driver) == 1

def test_driver_2(driver):
    assert increment(driver) == 1
$ pytest driver.py
========================================= test session starts ==========================================
platform linux -- Python 3.7.1, pytest-5.0.1, py-1.7.0, pluggy-0.12.0
rootdir: /home/backend/backend, inifile: pytest.ini
plugins: mock-1.10.4
collected 2 items

driver.py .F                                                                                     [100%]

=============================================== FAILURES ===============================================
____________________________________________ test_driver_2 _____________________________________________

driver = <driver.DriverInstance object at 0x7f78a5b000b8>

    def test_driver_2(driver):
>       assert increment(driver) == 1
E       assert 2 == 1
E        +  where 2 = increment(<driver.DriverInstance object at 0x7f78a5b000b8>)

driver.py:25: AssertionError
================================== 1 failed, 1 passed in 3.03 seconds ==================================
$pytest driver.py
===============================================================测试会话开始==========================================
平台linux——Python 3.7.1、pytest-5.0.1、py-1.7.0、pluggy-0.12.0
rootdir:/home/backend/backend,ini文件:pytest.ini
插件:mock-1.10.4
收集2项
driver.py.F[100%]
==================================================================故障===============================================
____________________________________________测试驱动程序2_____________________________________________
驱动程序=
def测试驱动程序2(驱动程序):
>断言增量(驱动程序)==1
E断言2==1
E+式中,2=增量()
driver.py:25:AssertionError
==========================================================1失败,1在3.03秒内通过==================================

例如,引入另一个将重置计数器的装置

@pytest.fixture(autouse=True)
def reset_counter(driver):
    driver.counter = 0

由于
autouse=True
,将自动执行
reset\u计数器
,并且由于默认范围是
函数
,它将在每次测试前执行一次。
driver
参数将引用
driver
fixture的返回值(fixture args,就像test args一样,也通过fixture名称解析)。

很高兴我能提供帮助!