Pytest測試框架介紹


1.Pytest測試框架介紹

Pytest框架是近年來比較流行的python自動化測試框架,主要有以下優點:

  • 使用簡潔,方便:無需測試類繼承,提供詳細的失敗信息。
  • 自動發現測試用例。
  • 靈活運行指定的測試用例,指定模塊,制定測試類,測試用例通過加標簽區分正常用例,回歸用例 冒煙用例等。
  • 兼容unittest/nose框架。
  • 相關插件眾多,可以根據需要擴展功能。

2.環境准備

2.1 安裝python

目前基本都是用python3,所以建議裝python3.

2.1.1使用home-brew工具安裝python3

安裝之前先查詢以下本機是否已經有python3的包

在終端輸入命令brew search python3

如果存在,就可以直接安裝了

在終端輸入命令brew install python3

如果遇到下面的報錯,是因為電腦啟用了SIP(System Integrity Protection),增加了rootless機制,導致即使在root權限下依然無法修改文件,在必要時候為了能夠修改下面的文件,我們只能關閉該保護機制。方法:重啟電腦,開機一瞬間 按住command+R,打開terminal終端 輸入csrutil disable,再次重啟。

shopeedeMacBook-Pro:~ shopee1$ brew install python
fatal: Unable to create '/usr/local/Homebrew/.git/index.lock' : Permission denied
fatal: Unable to create '/usr/local/Homebrew/.git/index.lock' : Permission denied
error: could not lock config file .git/config: Permission deniedni


2.1.2或者去官方下載相應的版本自行安裝

https://www.python.org/downloads/mac-osx/

2.2 安裝編譯器

可以選擇社區版

https://www.jetbrains.com/pycharm/download/#section=mac

2.3安裝pytest包

在終端輸入命令pip3 install pytest

3.Pytest特性介紹

3.1 命名

  • 測試文件test_*.py 和 *_test.py開頭或結尾,
  • 測試類Test開頭,沒有__init__函數,測試方法名以test_開頭的函數
  • 測試函數以test_開頭

3.2特殊的conftest.py文件

定義:conftest.py是pytest獨有的文件,文件名字是固定的,不可以做任何修改

作用:可以在文件里面編寫fixture,而這個fixture的作用就相當於我們unittest框架里面的setup()和teardown(),供測試函數使用。

用法:一個測試工程下是可以有多個conftest.py的文件,一般在工程根目錄放一個conftest.py起到全局作用。在不同的測試子目錄也可以放conftest.py,作用范圍只在該層級以及以下目錄生效。所有同目錄測試文件運行前都會執行conftest.py文件,不需要import。

3.3 參數化

  • 使用pytest.mark.parametrize()方式進行參數化

    @pytest .mark.parametrize( "test_input,expected" , [( "3+5" , 8 ), ( "2+4" , 6 ), ( "6*9" , 42 )])
    def test_eval(test_input, expected):
         assert eval(test_input) == expected

 

  • pytest.fixture()方式進行參數化,fixture裝飾的函數可以作為參數傳入其他函數

    @pytest .fixture(params=[ 0 , 1 , pytest.param( 2 , marks=pytest.mark.skip)])
    def data_set(request):
         return request.param
    def test_da(data_set):
         Pass

 

3.4給用例打標簽

給用例打標簽

  • 跳過該用例不執行

@pytest.mark.skip(reason='out-of-data api')

  • 當滿足某個條件時就跳過

@pytest.mark.skipif(sys.plafform == "win32", reason="does not run on windows")

自定義標簽

在pytest.ini文件中注冊自己的mark標簽,

[pytest]
markers =
        smoketest


在測試用例前面加上標簽@pytest.mark.smoketest

加上-m參數執行pytest -v -s Test_DownloadKeywordFile.py -m=smoketest

 

3.5運行方式

3.5.1運行文件

  • 指定運行某個模塊,命令行輸入pytest test_demo1.py
  • 指定某個模塊下某個類的某個用例,pytest 模塊名::類名::方法名,例pytest test_demo2.py::TestDemo2::test_success
  • 指定某個模塊下的某個方法,pytest 模塊名::方法名,例pytest test_demo1.py::test_fail

3.5.2常用運行參數

可以通過pytest -h或pytest --help查看所有的命令,包含了所有插件的

  • -s:默認情況下你在用例中寫的print或者log輸出,都不會在測試結果中展示。如果你想看到用例中的標准輸出,那么需要加上-s參數
  • -v:使用-v會讓輸出結果更詳細,不用的時候一個文件占一行,而用例之后一個用例占結果的一行。並且結果中的用例名稱和結果都會展示,而不僅僅是一個.或字符。
  • -m:標記markers用於標記測試並分組,以便快速選中某些需要的用例並運行。比如我們在冒煙測試時運行其中某一部分用例,等到真正測試時運行另一部分用例。可以通過@pytest.mark.標記名來標記這些需要的用例,運行時用-m標記就能快速選出這部分用例運行。
  • -k:pytest -k "stra or strb"測試類或函數包含stra或strb字符測試將被運行,其他的將忽略

4.測試報告生成

  • 生成txt格式的報告:加參數 --resultlog及存放路徑,如 pytest test_class.py --resultlog=./log.txt
  • 生成JunitXML 格式的測試報告, JunitXML報告是一種很常用的測試報告,比如可以和Jenkins進行集成,在Jenkins的GUI上顯示Pytest的運行結果,非常便利。 運行完case后可以到report路徑下去查看相應的xml文件,也可以在PyCharm打開該xml文件查看。運行時加上參數--junitxml及存放路徑
  • 生成html測試報告:需安裝pytest-html包。運行時加上--html參數及存放路徑
  • 利用allure插件生成測試報告,也可以集成到jenkins。

5.案例實踐

上面介紹了pytest的一些特性,現在來看以下Listing QC系統目前的接口自動化實現。

5.1測試背景

目前需要測試http接口,需要驗證接口主要是3個方面的內容:

請求參數:每個字段的校驗,格式,是否必填,邊界值等

返回參數:是否都返回了預期的字段

邏輯校驗:是否按照預定的輸入返回預期的輸出,有些需要和數據庫的數據進行比對

5.2整體代碼分布

目前由於時間緊急,搭得比較簡陋,只有一些基礎功能。

 

--Common存放一些自己編寫的類,由於Listing QC涉及的數據庫有些是分表分庫的,找到具體的表有一定的邏輯,我把這部分邏輯封裝成函數,方便操作數據庫。

--Conf配置文件存放數據庫的連接信息及API的配置信息等。

--run.py 主函數入口,目前主要是用allure插件生成報告

--TestCase測試用例存放處。每個API單獨存放一個文件。

--Util存放一些基礎操作類,如數據庫連接。

5.3設計思路

  • Conftest.py文件中利用pytest自帶pytest_addoption函數負責存儲好命令行參數。

  • 封裝fixture,返回某個表的查詢結果。內置的request fixture可以獲取設定的命令行參數

 

  • 將fixture mqc_file_profile_tab作為參數傳入測試函數中

  • 命令行輸入pytest -v -s Test_ListUploadedFiles.py::test_responsecheck_records運行用例

  • 如果要切換環境,加上參數--env參數,如--env=sit即可

  • 參數化,對於校驗字段格式時很實用

allure插件報告生成


5.4未完待續

后續還可以加上日志打印,郵件發送,CI集成等。

寫在最后:只要是寫的代碼就有可能有瑕疵,因此手工測試也是很有必要,我更多地把這個作為輔助測試手段。

附錄:

1.pytest參考文檔

https://docs.pytest.org/en/latest/contents.html

2.使用Pytest實現接口自動化


免責聲明!

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



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