[Python Test] Use pytest fixtures to reduce duplicated code across unit tests

Posted Answer1215

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Python Test] Use pytest fixtures to reduce duplicated code across unit tests相关的知识,希望对你有一定的参考价值。

In this lesson, you will learn how to implement pytest fixtures. Many unit tests have the same resource requirements. For example, an instantiated object from a class. You will learn how to create the instance of the class one time as a fixture and reuse that object across all your tests. This results in faster tests, eliminates duplicate code, and uses less resources when running your tests.

 

"""
Python class for a self-driving car.
Suitable for disrupting automotive industry
"""

class Car(object):

    def __init__(self, speed, state):
        self.speed = speed
        self.state = state

    def start(self):
        self.state = "running"
        return self.state

    def turn_off(self):
        self.state = "off"
        return self.state

    def accelerate(self):
        self.speed += 10
        return self.speed

    def stop(self):
        self.speed = 0
        return self.speed

 

test:

"""
Tests for Car class
"""

import pytest
from car import Car

class TestCar(object):

    """
    default scope is "function" which means
    foreach test, it will have its own scope
    "module" ref to class itself, so it sharing
    the same instance
    """

    @pytest.fixture(scope="module")
    def my_car(self):
        return Car(0, "off")

    def test_start(self, my_car):
        my_car.start()
        assert my_car.state == "running"

    def test_turn_off(self, my_car):
        my_car.turn_off()
        assert my_car.state == "off"

    def test_accelerate(self, my_car):
        my_car.accelerate()
        assert my_car.speed == 10

    """
    This one will failed because we are using fixture
    scope as "module", my_car.speed == 20
    """
    def test_accelerate1(self, my_car):
        my_car.accelerate()
        assert my_car.speed == 10

    def test_stop(self, my_car):
        my_car.stop()
        assert my_car.speed == 0

 

以上是关于[Python Test] Use pytest fixtures to reduce duplicated code across unit tests的主要内容,如果未能解决你的问题,请参考以下文章

“py.test”与“pytest”命令

pytest报错 make sure your test modules/packages have valid Python names.

pytest--命令行常用参数

如何为仅更新全局dict类型变量的函数编写unit_test-Python(pytest)

pytest框架--@pytest.fixture(scpoe=‘xxx')装饰器

python测试框架pytest和测试报告allure的联合使用-----测试套件