Pytest學習筆記1——傳統前后置處理


  引言

  在《Python 自動化測試框架unittest與pytest的區別》這篇文章中,已經介紹了pytest的前后置,現在單獨拿出來,再來復習一次。

  文中unittest是有三個處理前后置的函數:

  setUp()&tearDown() < setUpClass()&tearDownClass() < setUpModule()&tearDownModule(),而pytest相對比unittest多了2個,函數級和方法級。

  邏輯優先級:

  • 模塊級(setup_module/teardown_module)開始於模塊始末,全局的
  • 函數級(setup_function/teardown_function)只對函數用例生效(不在類中)
  • 類級(setup_class/teardown_class)只在類中前后運行一次(在類中)
  • 方法級(setup_method/teardown_method)開始於方法始末(在類中)
  • 類里面的(setup/teardown)運行在調用方法的前后

  實例

import pytest


# setup_function&teardown_function 不在類中使用
def setup_function():
    print("這是函數級setup>>>>>每條用例執行前執行")
def teardown_function():
    print("這是函數級teardown>>>>>每條用例執行后執行")

# setup_module&teardown_module 全局
def setup_module():
    print("這是模塊級setup>>>>>所有用例執行前執行")
def teardown_module():
    print("這是模塊級teardown>>>>>所有用例執行后執行")

# 測試用例
def test_001():
    print("用例001")
def test_002():
    print("用例002")

# 測試類
class Test_Api:
    def setup(self):
        print("這是方法setup>>>>>每條用例執行前執行")
    def teardown(self):
        print("這是方法teardown>>>>>每條用例執行后執行")

    def setup_class(cls):
        print("這是類方法setup_class>>>>>所有用例執行前執行")
    def teardown_class(self):
        print("這是類方法teardown_class>>>>>所有用例執行后執行")

    def setup_method(self):
        print("這是setup_method方法>>>>>每個用例開始前執行")

    def teardown_method(self):
        print("這是teardown_method方法>>>>>每個用例結束后執行")

    def test_003(self):
        print("用例003")

    def test_004(self):
        print("用例004")

if __name__ == '__main__':
    pytest.main('-s','test2.py')

  

運行結果:

test2.py::test_001 
這是模塊級setup>>>>>所有用例執行前執行
這是函數級setup>>>>>每條用例執行前執行
PASSED                                                [ 25%]用例001
這是函數級teardown>>>>>每條用例執行后執行

test2.py::test_002 這是函數級setup>>>>>每條用例執行前執行
PASSED                                                [ 50%]用例002
這是函數級teardown>>>>>每條用例執行后執行

test2.py::Test_Api::test_003 
test2.py::Test_Api::test_004 

============================== 4 passed in 0.05s ==============================

Process finished with exit code 0
這是類方法setup_class>>>>>所有用例執行前執行
這是setup_method方法>>>>>每個用例開始前執行
這是方法setup>>>>>每條用例執行前執行
PASSED                                      [ 75%]用例003
這是方法teardown>>>>>每條用例執行后執行
這是teardown_method方法>>>>>每個用例結束后執行
這是setup_method方法>>>>>每個用例開始前執行
這是方法setup>>>>>每條用例執行前執行
PASSED                                      [100%]用例004
這是方法teardown>>>>>每條用例執行后執行
這是teardown_method方法>>>>>每個用例結束后執行
這是類方法teardown_class>>>>>所有用例執行后執行
這是模塊級teardown>>>>>所有用例執行后執行

  

從結果上看,邏輯優先級:

對於類外:模塊級是最大的,全局的,針對.py模塊的,你可以認為(setup_module/teardown_module)是global,針對整個py文件,你可以將測試數據初始化和清理數據放到這里。

對於類中:setup_class>setup_method>setup

對於整個py文件(模塊):首先setup_module/teardown_module永遠是最先執行的,然后識別函數和類的位置,按從上到下來執行,也是python程序執行規則。

可以試試,將類和外面的函數換一下位置:

 

執行結果:

 

執行順序:

 

  總結

  pytest的前后置處理函數實例已經講完,這是傳統的處理方法,如果像一些場景,比如說登錄,在測試業務接口的時候,我們有些接口是不需要登錄,但是有些是需要登錄,前置條件是登錄,如果說用這種傳統的函數處理,肯定不適應了,於是有大神開發的了一個fixtrue函數,它其實是setup/teardown的升級版,設計思想是由它而來。我會在下篇進行分享,請盡情期待。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM