pytest測試框架1 強大的Fixture功能

2022-08-23 05:51:14 字數 4090 閱讀 2672

1.fixture是 幹什麼用的??

fixture是在測試函式執行前後,由pytest執行的外殼函式;**可以定製,滿足多變的測試需求;

包括定義傳入測試中的資料集,配置測試前系統的初始狀態,為批量測試提供資料來源等等...

fixture是pytest用於將測試前後進行預備,清理工作的**分離出核心測試邏輯的一種機制!

2.舉個例子

@pytest.fixture()

def some_data():

return 42

def test_some_data(some_data):

assert some_data == 42

#@pytest.fixture() 裝飾器用於宣告函式是乙個fixture

如果測試函式的引數列表中包含fixture名字,那麼pytest會檢測到,

檢測順序是:優先搜尋該測試所在的模組,然後搜尋conftest.py

並在測試函式執行之前執行該fixture,

fixture可以完成測試任務,也可以返回資料給測試函式

pytest --setup-show test_example1.py

3.fixture函式放在**合適?

1.可以放在單獨的測試檔案裡

2.如果希望多個測試檔案共享fixture,可以放在某個公共目錄下新建乙個conftest檔案,將fixture放在裡面。

4.使用fixture傳遞測試資料

fixture非常適合存放測試資料,並且他可以返回任何資料

@pytest.fixture()

def a_list():

return [1,2,3,44,5]

def test_a_list(a_list):

assert a_list[2] == 3

5.指定fixture作用範圍

fixture裡面有個scope引數可以控制fixture的作用範圍:session > module > class > function

1)function

每乙個函式或方法都會呼叫 \

@ pytest.fixture()

def first():

print("\n獲取使用者名稱")

a = "xiaoyulaoshi"

return a

@pytest.fixture(scope="function")

def sencond():

print("\n獲取密碼")

b = "123456"

return b

def test_1(first):

'''用例傳fixture'''

print("測試賬號:%s" % first)

assert first == "xiaoyulaoshi"

def test_2(sencond):

'''用例傳fixture'''

print("測試密碼:%s" % sencond)

assert sencond == "123456"

2).class 每乙個類呼叫一次,乙個類可以有多個方法

@pytest.fixture(scope="class")

def first():

print("\n獲取使用者名稱,scope為class級別只執行一次")

a = "xiaoyulaoshi"

return a

class testcase():

def test_1(self, first):

'''用例傳fixture'''

print("測試賬號:%s" % first)

assert first == "xiaoyulaoshi"

def test_2(self, first):

'''用例傳fixture'''

print("測試賬號:%s" % first)

assert first == "xiaoyulaoshi"

3).module,每乙個.py檔案呼叫一次,該檔案內又有多個function和class

import pytest

@pytest.fixture(scope="module")

def first():

print("\n獲取使用者名稱,scope為module級別當前.py模組只執行一次")

a = "xiaoyulaoshi"

return a

def test_1(first):

'''用例傳fixture'''

print("測試賬號:%s" % first)

assert first == "xiaoyulaoshi"

class testcase():

def test_2(self, first):

'''用例傳fixture'''

print("測試賬號:%s" % first)

assert first == "xiaoyulaoshi"

4).session

是多個檔案呼叫一次,可以跨.py檔案呼叫,每個.py檔案就是module

當我們有多個.py檔案的用例時候,如果多個用例只需呼叫一次fixture,那就可以設定為scope = "session",並且寫到conftest.py檔案裡

conftest.py

import pytest

@pytest.fixture(scope="session")

def first():

print("\n獲取使用者名稱,scope為session級別多個.py模組只執行一次")

a = "xiaoyulaoshi"

return a

test_fixture11.py

import pytest

def test_1(first):

'''用例傳fixture'''

print("測試賬號:%s" % first)

assert first == "xiaoyulaoshi"

import pytest

def test_2(first):

'''用例傳fixture'''

print("測試賬號:%s" % first)

assert first == "xiaoyulaoshi"

6.fixture的引數化

pytest支援在多個完整測試引數化方法:

1).pytest.fixture(): 在fixture級別的function處引數化

2)[email protected]:允許在function或class級別的引數化,為特定的測試函式或類提供了多個argument/fixture設定。

3_.pytest_generate_tests:可以實現自己的自定義動態引數化方案或擴充套件。

測試框架 Pytest框架(一)

目錄 pytest的安裝與執行 安裝 執行執行方式及命令 ide中執行 命令列終端執行 生成報告 報告中的亂碼處理 檢查點 斷言 基於python語言的自動化常用的框架有三種,unittest pytest rf。前兩款更多的用於白盒單元測試,rf可以很好的做系統測試使用。安裝pytest pip ...

Pytest測試框架(一)

pip install u pytest 用下面的命令去檢查一下pytest是否成功安裝 pytest version this is pytest version 5.4.1 建立名為test 001.py的檔案,敲如下內容 def reverse string return string 1 d...

全功能Python測試框架 pytest

python通用測試框架大多數人用的是unittest htmltestrunner,這段時間看到了pytest文件,發現這個框架和豐富的plugins很好用,所以來學習下pytest.pytest是乙個非常成熟的全功能的python測試框架,主要有以下幾個特點 安裝pytest pip insta...