Pytest中conftest.py共享fixture(五)

2021-03-02 Python自動化測試

      有一點首先需要確認的的是,pytest中的fixture是pytest用於將測試前後進行預備,清理工作的代碼分離出核心測試邏輯的一種機制。但是我們更加希望的是在一個測試套件中,能夠共享fixture的機制,這樣所一個測試套件裡面的所有測試點都能夠共同使用,和我在早期介紹的分離測試固件的思想有點雷同。在pytest中通過conftest.py來共享fixture,如果希望多個測試文件共同使用一個fixture時候,可以在該目錄下創建conftest.py文件,但是切記該文件絕對不能倒入使用,這點一定要注意,創建conftest.py文件後,把需要的fixture加入到裡面,就可以使用了。先來一個簡單的案例,在一個包中,有三個測試模塊,每個測試點都顯示開始前執行和結束後執行,也就是說,每個測試點執行的時候,先列印測試開始,然後執行測試點,然後最後列印測試結束,見案例代碼:

見conftest.py的源碼:

#!/usr/bin/python3
#coding:utf-8
import pytest

@pytest.fixture(autouse=True)
def wuya():
print('開始測試')
yield
print('結束測試')

執行模塊test_001.py 或者 test_002.py的測試代碼,見執行後的結果信息:

cachedir: .pytest_cache
rootdir: /Applications/code/stack/study/xunit/conftest01, inifile:
plugins: allure-adaptor-1.7.10
collected 2 items

test_001.py::test_login_001
SETUP F wuya
test_001.py::test_login_001 (fixtures used: wuya)PASSED
TEARDOWN F wuya
test_002.py::test_logout_001
SETUP F wuya
test_002.py::test_logout_001 (fixtures used: wuya)PASSED
TEARDOWN F wuya

回溯過程使用到的命令為:pytest --setup-show,如上結果信息就是回溯的過程。

      fixture也可以傳遞測試數據,那麼也可以寫到conftest.py的文件中,還是看一個案例,見conftest.py的最新源碼:

#!/usr/bin/python3
#coding:utf-8
import pytest

@pytest.fixture(autouse=True)
def wuya():
print('開始測試')
yield
print('結束測試')

@pytest.fixture()
def login():
return 'adfghjk34567dsfg'

測試代碼見如下:

#!/usr/bin/python3
#coding:utf-8
import pytest


def test_login(login):
if login=='adfghjk34567dsfg':
assert True
else:
assert False

執行如上的測試代碼,見執行後的結果信息:

platform darwin -- Python 3.7.4, pytest-4.0.2, py-1.8.0, pluggy-0.12.0
rootdir: /Applications/code/stack/study/xunit/conftest01, inifile:
plugins: allure-adaptor-1.7.10
collected 3 items / 2 deselected

test_login.py
SETUP F wuya
SETUP F login
test_login.py::test_login (fixtures used: login, wuya).
TEARDOWN F login
TEARDOWN F wuya

依據如上的測試代碼,可以看出在一個conftest.py中,可以編寫多個共享fixture的代碼。關於cionftest.py共享fixture的幾個注意事項,再次總結下,具體如下:

1、conftest.py文件絕對不能當平常的模塊來倒入,是絕對不能

2、conftest.py很多時候是被當作pytest一個本地插件庫

3、可以 把一個目錄下的conftest.py看成是一個供該目錄下所有測試用例使用的fixture倉庫

謝謝您的關注,您也可購買我的書籍(出版的書籍已重印),或者購買本人的測試實戰視頻課程,謝謝您的關注!!!

相關焦點

  • pytest(8):fixture與conftest.py結合使用
    上一篇介紹了fixture scope的幾種使用方式,除了直接寫入到用例頁,也可以使用conftest.py文件達到同樣的效果。  1.conftest.py名稱是固定的,必須是這個不能變。  2.與要調用的包在一個目錄下,並且這個包下要有__init__.py   3.使用的時候不需要導入 conftest.py,pytest 會自動識別到這個文件  4.放到項目的根目錄下可以全局調用,放到某個 package 下,就在這個 package 內有效。
  • Pytest系列(6) - conftest.py的詳細講解
    什麼是conftest.py可以理解成一個專門存放fixture的配置文件實際開發場景多個測試用例文件(test_*.py)的所有用例都需要用登錄功能來作為前置操作,那就不能把登錄功能寫到某個用例文件中去了 如何解決上述場景問題?
  • 手把手教你pytest測試框架(7)-fixture裝飾器
    py文件,但fixture不行,如果想跨文件,則需要把fixture寫在conftest.py文件裡。注意:conftest.py是固定寫法,只要和其他py文件在同一目錄下,且該目錄下擁有__init__.py文件即可。注意:conftest.py文件無需import,pytest會自動查找,只要別把名寫錯了就好。
  • pytest「conftest、pytest參數化、重運行、出測試報告」
    文章總覽圖一、conftest問題整理:1.這個conftest.py分路徑嗎?如果在TestCases下建這個包可以直接用嗎?TestCases這裡有ModeA和ModeB,想在ModeA或ModeB下面用這個conftest.py裡面的,一樣全部都可以用。
  • pytest文檔42-fixture參數化params
    pytest 測試用例裡面對應的參數可以用 parametrize 實現,隨著用例的增多,我們的需求也會越來越多,那麼如何在 fixture 中使用參數呢?fixture 源碼先看下 fixture 源碼,有這幾個參數:scope,params,autouse,ids,name。
  • 基於Pytest框架的自動化測試開發實踐(萬字長文入門篇)
    回到我們讀取測試配置信息的需求上,在自動化測試項目tests/目錄中創建一個文件conftest.py,定義一個fixture函數env:@pytest.fixture(scope="session")def env(request): config_path = os.path.join(request.config.rootdir
  • Pytest之命令行執行
    其實在底層微服務共享的模式下,更多的關注底層的微服務的測試,而對於上層應用來說,只需要隨機的選擇一個使用產品活躍度高的用戶來進行測試就可以了,從這個架構的模式下這樣的測試思路是沒有問題的,而且也是成立的。
  • 實戰 | 接口自動化測試框架開發(Pytest+Allure+AIOHTTP+用例自動生成)
    認可的測試用例首先說明下 pytest 的運行機制,pytest 首先會在當前目錄下找 conftest.py 文件,如果找到了,則先運行它,然後根據命令行參數去指定的目錄下找 test 開頭或結尾的 .py 文件,如果找到了,如果找到了,再分析 fixture,如果有 session 或 module 類型的,並且參數 autotest=True 或標記了 pytest.mark.usefixtures
  • Python測試框架Pytest的常用插件測試報告
    /linuxchao/p/linuxchao-pytest-report.html使用方法:在命令行或 pytest.ini 配置文件 addopts 中添加選項 --html=測試報告路徑(1)命令行方式:pytest --html report/report.html --self-contained-html(2)pytest.ini文件:addopts
  • Pytest之並發執行(十四)
    在Pytest測試框架中提供了pytest-xdist可以並發執行測試用例,來提升測試用例的執行速度。通常的情況下,測試用例的執行都是依據一定的規則來按順序進行執行,這樣的結果是每次執行的時候有的資源就只能被一個測試用例佔用,而達不到測試用例執行的時候資源的共享,插件pytest-xdist插件可以很好的解決這個問題,一方面資源達到共享,基於第一點的考慮,也就達到了第二點的提升了測試執行的效率。
  • [接口測試_B] 04 Pytest斷言處理_告警斷言
    pytest中對告警進行斷言採用pytest.warns()方法,其斷言的方法與pytest.raises()類似。pytest.warns()除了能斷言告警外,還能夠捕獲告警信息,並對捕獲的告警信息進行分類處理,可以設定出現特定告警信息時,則用例執行失敗。
  • python pytest接口自動化框架搭建
    pytest2.編寫單測用例在pytest框架中,有如下約束:所有的單測文件名都需要滿足test_*.py格式或*_test.py格式。在單測文件中,可以包含test_開頭的函數,也可以包含Test開頭的類。在單測類中,可以包含一個或多個test_開頭的函數。此時,在執行pytest命令時,會自動從當前目錄及子目錄中尋找符合上述約束的測試函數來執行。
  • Pytest測試用例之setup與teardown方法(二)
    " in p def test_002(self): print("正在執行第二條用例") p = 'test' assert 't' in p if __name__ == '__main__': pytest.main(['-s', 'test_fixtclass.py'])
  • 乾貨 | 一文搞定 pytest 自動化測試框架(一)
    創建文件名為 test_add.py 文件,代碼如下:#!>運行 test_add.py 文件,在命令行進入到這個文件所在的路徑,可以直接使用 pytest 命令運行,pytest 會找當前目錄以及遞查找子目錄下所有的 test_*.py 或 *_test.py 的文件,把其當作測試文件。
  • pytest---setup和teardown簡單用法
    print('用例01')def test02():    print('用例02')if __name__ == '__main__':    pytest.main(['-s','test_02.py'])
  • Pytest的基本應用(一)
    但是前提是需要安裝pytest,它是屬於第三方的庫,安裝的命令為:                   pip  install pytest          在這裡先寫一個函數的測試代碼,來說明pytest的應用,創建f.py的模塊,在裡面編寫以test開頭的測試代碼,然後在該目錄下執行pytest,發現測試代碼並沒有執行,見如下截圖
  • Pytest中斷言的重要性,就不需要我重複了吧
    出品 | 51Testing軟體測試網前言 我們在寫自動化的過程中,用例的斷言也是至關重要的,斷言可以幫助我們判斷用例測試點是否成功和失敗。當然在我們這麼強大的Pytest框架中,斷言也是比較強大的。為什麼?繼續往下看 。
  • Pytest丨如何使用全功能的Python測試框架?小白必看
    關注我,每周分享軟體測試技術乾貨、面試經驗,想要進入軟體測試學習交流群的可以直接私信我哦~~我們在寫自動化的過程中,用例的斷言也是至關重要的,斷言可以幫助我們判斷用例測試點是否成功和失敗。當然在我們這麼強大的pytest框架中,斷言也是比較強大的。為什麼?繼續往下看。