1. 程式人生 > 其它 >pytest執行方式詳解(一)

pytest執行方式詳解(一)

  Pytest單元測試框架

 

 

 

 Pytest介紹:

  Pytest是python2自帶的自動化測試框架,python3的版本的話pytest框架獨立出來,是一款python的單元測試

框架,相比unittest更加靈活,更加容易上手,包括使用Pytest結合 Selenium丶Appium丶Requests進行web丶app丶api

實現自動化測試,

優勢:

1.測試用例的skip和xfail處理,可以跳過指定用例,或對某些預期失敗的case標記成失敗。

2.可以很好的和jenkins整合,實現持續整合,

3.支援與allure結合自動化生成測試報告

4.支援執行由nose、unittest編寫的測試用例,

5.支援引數化方式,ddt資料驅動;

 

一丶Pytest需要pip進行安裝:

1.Python3使用pip install  pytest -i https://pypi.douban.simple安裝

2.pycharm下載file-->setting-->project專案 點選+號 搜尋 pytest --->install packge下載

 

二丶Pytest支援的外掛:

1.Pytest-xdist: 用於自動化用例執行分散式執行丶提高程式碼執行速度

2.Pytest-ordering:用於改變測試用例執行順序丶以及進行管理組織分組管理測試用例執行

3.Pytest-requnfailures:用於測試用例執行失敗重新執行操作

4.allure-Pytest:用來生成自動化的測試報告

 

三丶Pytest的預設的測試用例執行規則

1.模組名稱必須以test進行開頭

2.測試類必須以Test進行開頭

3.相關函式方法必須以test進行開頭

4.pytest執行用例順序不按照ASCII順序進行執行,是按照自己寫的case順序進行執行用例

 

四丶Pytest執行方式:

1):主函式執行模式

import pytest

if __name__ == '__main__':
    # pytest.main() #執行所有內容
    

引數解釋:

-v:執行完用例顯示,更加詳細的資訊


#返回結果
case_api/api_ddt_demo03.py::Test::test01 PASSED                          [ 16%]
case_api/api_ddt_demo03.py::Test::test02 SKIPPED (unconditional skip)    [ 33%]
case_api/api_ddt_demo03.py::Test::test03 PASSED                          [ 50%]
case_api/api_ddt_demo03.py::Test::test04 PASSED                          [ 66%]
case_api/api_ddt_demo03.py::Test::test05 PASSED                          [ 83%]
case_api/api_ddt_demo03.py::Test::test06 PASSED  

 

-s: 顯示輸出除錯資訊,包含print列印輸出的值


#返回結果
case_api\api_ddt_demo03.py hello word(1) .shello word(3) .hello word(4) .hello word(5) .hello word(6) . ============= 5 passed, 1 skipped in 0.48s ==================================

  

-k:根據用例的部分字串內容進行執行執行的測試用例

pytest.mian(["-k 05"])
#執行結果 case_api\api_ddt_demo03.py . [100%] ============== 1 passed, 5 deselected in 0.50s ================================

  

-n: 支援多執行緒或者分散式的執行方式,同時多cpu進行執行測試用例

pytest.main(["-n 2"])
#返回結果
gw0 I / gw1 I gw0 [6] / gw1 [6] s..... [100%] ======================== 5 passed, 1 skipped in 2.42s =======================

  

--maxfail: 出現錯誤的用例,就停止測試

pytest.main(["--maxfail=2"])

--reruns: 失敗用例從新進行執行

pytest.main(['-vs',"--reruns=2"])#執行用例

執行結果:
case_api/api_ddt_demo03.py::Test::test03 hello word(3)
PASSED
case_api/api_ddt_demo03.py::Test::test04 hello word(4)
PASSED
case_api/api_ddt_demo03.py::Test::test05 hello word(5)
PASSED
case_api/api_ddt_demo03.py::Test::test06 RERUN
case_api/api_ddt_demo03.py::Test::test06 RERUN
case_api/api_ddt_demo03.py::Test::test06 FAILED
=============== 1 failed, 4 passed, 1 skipped, 2 rerun in 0.58s ===============

  

 

2)命令列執行模式

pytest:通過dos命令行同樣可以進行執行相關用例

Users\admin\PycharmProjects\wuhan>pytest #執行測試用例

返回結果: case_api\api_ddt_demo03.py:211: AssertionError ========================= short test summary info ========================== FAILED case_api/api_ddt_demo03.py::Test::test06 - AssertionError: True is ... ================== 1 failed, 4 passed, 1 skipped in 0.70s ==================

 

pytest -vs 列印詳細的輸出結果

 

C:\Users\admin\PycharmProjects\wuhan12>pytest -vs #接引數執行

輸出結果:
=========================== test session starts ============================

plugins: allure-pytest-2.9.45, forked-1.4.0, html-3.1.1, metadata-2.0.1, orde
ring-0.6, rerunfailures-10.2, xdist-2.5.0
collected 6 items                                                           

case_api/api_ddt_demo03.py::Test::test01 hello word(1)
PASSED
case_api/api_ddt_demo03.py::Test::test02 SKIPPED (unconditional skip)
case_api/api_ddt_demo03.py::Test::test03 hello word(3)
PASSED
case_api/api_ddt_demo03.py::Test::test04 hello word(4)
PASSED
case_api/api_ddt_demo03.py::Test::test05 hello word(5)
PASSED
case_api/api_ddt_demo03.py::Test::test06 FAILED