pytest是python語言中一款強大的單元測試框架,用來管理和組織測試用例,可應用在單元測試、自動化測試工做中。html
unittest也是python語言中一款單元測試框架,可是功能有限,沒有pytest靈活。python
就像:蘋果電腦mac air 和mac pro同樣。都是具有一樣的功能,可是好用,和更好用。session
本文包含如下幾個內容點:框架
1)pytest的簡單示例dom
2)pytest的安裝函數
3)pytest的特徵、與unittest的區別。單元測試
4) pytest如何自動識別用例。測試
5)pytest框架中,用例的運行順序。ui
1)pytest寫用例很簡單,下面是一個簡單的例子:spa
1 import random 2 3 4 def test_demo(): 5 assert 7 == random.randint(0,10)
運行結果以下:
============================= test session starts ============================= platform win32 -- Python 3.7.2, pytest-4.6.3, py-1.8.0, pluggy-0.12.0 rootdir: D:\Pychram-Workspace\STUDY_PYTEST plugins: allure-pytest-2.6.5, html-1.21.1, metadata-1.8.0, rerunfailures-7.0collected 1 item simple.py F simple.py:10 (test_demo) 7 != 6 Expected :6 Actual :7 ========================== 1 failed in 0.14 seconds ===========================
2)pytest的安裝
安裝命令:pip install pytest
3)pytest的特徵、與unittest的區別。
pytest的特徵以下:
3.1 自動識別測試用例。(unittest當中,須要引入TestSuite,主動加載測試用例。)
3.2 簡單的斷言表達:assert 表達式便可。(unittest當中,self.assert*)
3.3 有測試會話、測試模塊、測試類、測試函數級別的fixture。(unittest當中是測試類、測試函數級別的fixture)
3.4 有很是豐富的插件,目前在600+,好比allure插件。(unittest無)
3.5 測試用例不須要封裝在測試類當中。(unittest中須要自定義類並繼承TestCase)
那麼pytest是如何自動識別測試用例的呢?咱們在編寫pytest用例的時候,須要遵照哪些規則呢?
4) pytest如何自動識別用例
識別規則以下:
一、搜索根目錄:默認從當前目錄中搜集測試用例,即在哪一個目錄下運行pytest命令,則從哪一個目錄當中搜索;
二、搜索規則:
1)搜索文件:符合命名規則 test_*.py 或者 *_test.py 的文件
2)在知足1)的文件中識別用例的規則:
2.1)以test_開頭的函數名;
2.2)以Test開頭的測試類(沒有__init__函數)當中,以test_開頭的函數
示例:在D:\pycharm_workspace目錄下,建立一個python工程,名爲study_pytest。在工程下,建立一個python包,包名爲TestCases。
在包當中,建立一個測試用例文件:test_sample_1.py。文件內容以下:
1 #!/usr/bin/python3 2 # -*- coding: utf-8 -*- 3 # Name: test_sample_1.py 4 # Author: 簡 5 # Time: 2019/6/27 6 7 # 定義py文件下的測試用例 8 def test_sample(): 9 print("我是測試用例!") 10 11 class TestSample: 12 13 def test_ss(self): 14 print("我也是測試用例!") 15 16 def hello_pytest(self): 17 print("hi,pytest,我不是用例哦!!")
按照上面定義的搜索規則,須要跳轉到工程目錄,而後再執行命令:pytest -v 。 執行結果以下:
讓咱們愉快的加進來第2個測試文件:test_sample_2.py,內容以下:
#!/usr/bin/python3 # -*- coding: utf-8 -*- # Name: test_sample_2 # Author: 簡 # Time: 2019/6/27 def add(a,*args): sum = a for item in args: sum += item return sum def test_add_two_number(): assert 33 == add(11,22) assert 55.55 == add(22.22,33.33) def test_add_three_number(): assert 101 == add(10,90,1)
再次運行命令:pytest -v 獲得以下結果:
經過多個用例文件的執行,能夠看出用例的執行順序。
5) pytest中用例的執行順序
原則:先搜索到的py文件中的用例,先執行。在同一py文件當中,按照代碼順序,先搜索到的用例先執行。