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名称解析)。很高兴我能提供帮助!