[英]How to reset some attributes of fixture in each Unit Test?
你们中谁能告诉我如何在每个单元测试中更改夹具?
在以下示例中,我想:
start_driver()
-这是长时间运行的操作,因此,我使用scope=session
初始化此固定装置, driver.counter
重置为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执行:
$ 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.fixture(autouse=True)
def reset_counter(driver):
driver.counter = 0
reset_counter
将被执行自动由于autouse=True
,并且因为默认范围是function
,它将被每个测试之前执行一次。 driver
参数将引用driver
夹具的返回值(夹具arg和测试arg一样,也由夹具名称解析)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.