繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM