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...