【pytest官方文檔】解讀fixtures - 1.什麼是fixtures

在深刻了解fixture以前,讓咱們先看看什麼是測試數據庫

1、測試的構成

其實說白了,測試就是在特定的環境、特定的場景下、執行特定的行爲,而後確認結果與指望的是否一致。api

就拿最多見的登陸來講,完成一次正常的登陸場景,須要可用的測試環境,能夠正常登陸的帳號和密碼。
而後,用這個帳號密碼進行登陸操做,結果登陸成功,符合此次正常登陸場景的預期結果,測試完成。函數

這樣看來,一般就能夠把測試分爲4個步驟:測試

  1. Arrange
  2. Act
  3. Assert
  4. Cleanup

Arrange,能夠理解爲 除了執行測試以外的任何事情。好比上面例子中,我得有個可用的測試環境跟可用的帳號密碼,這些都要事先準備好。
此外,還有多是:啓動/終止服務、將記錄輸入數據庫、定義要查詢的URL、爲還不存在的用戶生成一些憑據等等。
總之,就是爲了可以進行測試要準備好的事情。ui

Act,相比準備前置環境,Act作的事情就相對單一些,其實就是開始測試動做。好比,接口測試裏,調用被測試的api接口。code

AssertAssert是咱們查看結果的地方,看看是否像咱們預期的那樣。好比接口請求成功後,數據的接口會返回「success」assert status == "success"對象

Cleanup,在測試結束後,作清理工做,爲了其餘的測試不會意外的受到本次測試的影響。好比,測試以前我插入了一條測試數據,測試完後,我把它刪掉。接口

總得來講,測試就是Act+Assert,而其餘要安排的事情,放在Arrange裏。文檔

2、回到fixtures自己

而在pytest中,fixtures就是來作Arrange的事情。固然了,fixture也不侷限於此,若是測試足夠複雜的話,不妨也能夠在裏面進行act的事情。it

把一個普通的函數變成fixtures很是簡單,只要加上@pytest.fixture這個裝飾就成:

import pytest


class Fruit:
    def __init__(self, name):
        self.name = name

    def __eq__(self, other):
        return self.name == other.name


@pytest.fixture
def my_fruit():
    # 這裏是一個fixture,返回了一個Fruit對象,名字叫蘋果
    return Fruit("蘋果")


@pytest.fixture
def fruit_basket(my_fruit):
    # 這裏是另外一個fixture,一樣聲明一個Fruit對象,名字叫香蕉。
    # 而後在這個fixture中又傳入了上一個fixture:my_fruit
    # 最後把最終的返回裝到一個列表[]裏,返回
    return [Fruit("香蕉"), my_fruit]


def test_my_fruit_in_basket(my_fruit, fruit_basket):
    # 這是一個測試函數,可使用多個fixture
    assert my_fruit in fruit_basket

上面的代碼體現了fixtures的2個重要特性:

  • 測試函數可使用多個fixture
  • fixture自己還可使用其餘的fixture

接下來,我將繼續跟着官方文檔解讀fixture的特色。

相關文章
相關標籤/搜索