前言:以前有一段時間一直用 Python Uittest作自動化測試,以爲Uittest組織冒煙用例比較繁瑣,後來康哥提示我使用pytest.mark來組織冒煙用例html
本文講述如下幾個內容:python
一、Unittest 如何組織冒煙用例
二、Pytest 組織冒煙測試
三、Pytest 執行unittest冒煙用例git
環境準備:github
Python 3.64
Pytest 5.01數組
項目目錄:框架
smoke_testing_demo test_case __init__.py test_case_with_unittest.py test_case_with_pytest.py run_unittest_smoke_testing.py
<br>測試
$ loader.py 該文件在python3.7已不存在,建議使用python3.64 查看使用方法 class TestLoader(object): """ 該類負責根據各類標準加載測試並將它們包裝在TestSuite中 """ def loadTestsFromNames(self, names, module=None): """ 返回給定的一組用例名的測試用例的套件 """
測試用例ui
$ test_case_with_unittest.py #!/usr/bin/env python3 # encoding:utf-8 import unittest class TestUittestCase(unittest.TestCase): def test_case_with_unittest_1(self): '''冒煙測試用例''' print('I am Smoke Testing ') def test_case_with_unittest_2(self): pass if __name__ == '__main__': unittest.main(verbosity=2)
$ test_case_with_unittest2.py #!/usr/bin/env python3 # encoding:utf-8 import unittest class TestUittestCase2(unittest.TestCase): def test_case_with_unittest_3(self): '''冒煙測試用例''' print('I am Smoke Testing ') def test_case_with_unittest_4(self): pass if __name__ == '__main__': unittest.main(verbosity=2)
冒煙測試用例集spa
$ run_unittest_smoke_testing.py #!/usr/bin/env python3 # encoding:utf-8 import unittest cases = [ 'test_case.test_case_with_unittest2.TestUittestCase2.test_case_with_unittest_3', 'test_case.test_case_with_unittest.TestUittestCase.test_case_with_unittest_1' ] test_suit = unittest.TestLoader().loadTestsFromNames(cases) runner = unittest.TextTestRunner(verbosity=2) runner.run(test_suit)
運行結果命令行
test_case_with_unittest_3 (test_case.test_case_with_unittest2.TestUittestCase2) 冒煙測試 ... ok test_case_with_unittest_1 (test_case.test_case_with_unittest.TestUittestCase) 冒煙測試 ... ok ---------------------------------------------------------------------- Ran 2 tests in 0.000s
<br>
ps: 更多經過loadTestsFromNames 使用技巧, 能夠查看《Unittest組織用例的姿式》這篇博文,連接在文末
<br>
ps:更多的pytest.mark用法能夠參考乙醇老師《安利一下pytest的mark用法》
測試用例
$ run_unittest_smoke_testing.py #!/usr/bin/env python3 # encoding:utf-8 import pytest @pytest.mark.test_env def test_case_1(): pass @pytest.mark.test_env @pytest.mark.smoke def test_case_2(): ''' 冒煙用例''' pass
cd 進入 /test_case目錄, 使用命令行運行 test_case_with_pytest.py
pytest test_case_with_pytest.py -v -m smoke
運行結果
collected 2 items test_case_with_pytest.py::test_case_2 PASSED ============================== 1 tests deselected ============================== ==================== 1 passed, 1 deselected in 0.01 seconds ====================
運行被標記test_env的用例
pytest test_case_with_pytest.py -v -m test_env
運行結果
collected 2 items test_case_with_pytest.py::test_case_1 PASSED test_case_with_pytest.py::test_case_2 PASSED =========================== 2 passed in 0.01 seconds ===========================
<br>
Pytest測試框架是兼容Python自帶的Unittest
修改test_case_with_unittest2.py
$ test_case_with_unittest2.py #!/usr/bin/env python3 # encoding:utf-8 import unittest import pytest class TestUittestCase2(unittest.TestCase): @pytest.mark.smoke def test_case_with_unittest_3(self): '''冒煙測試用例''' print('I am Smoke Testing ') def test_case_with_unittest_4(self): pass if __name__ == '__main__': unittest.main(verbosity=2)
命令行運行 test_case_with_unittest2.py
pytest test_case_with_unittest2.py -v -m smoke
運行結果
collected 2 items / 1 deselected / 1 selected test_case_with_unittest2.py::TestUittestCase2::test_case_with_unittest_3 PASSED [100%] ============== 1 passed, 1 deselected, 1 warnings in 0.01 seconds ==============
總結:
一、Uittest組織冒煙用例,需經過loadTestsFromNames在不一樣的測試模塊裏指定測試用例,組裝成test suit(測試套件)後,給TextTestRunner運行
二、Pytest組織冒煙用例,只需給測試用例加上@pytest.mark.key ,使用命令行pytest -m key test_case.py 便可
<br>
筆者我的看法:
使用Uittest組織冒煙測試,關注點有至少有兩個
一、當編寫新功能的冒煙測試,須要去維護冒煙測試用例集
二、合併代碼時,若是有兩我的同時修改了這個冒煙用例集,還要解決衝突,防止遺漏冒煙用例
使用Pytest組織冒煙測試,關注點在於用例的自己
當編寫新功能的冒煙測試,我只需在給用例加一個編寫用例人員約定好的@pytest.mark,例如@pytest.mark.smoke
《Python Unittest - 根據不一樣測試環境跳過用例詳解》
https://github.com/SEtester/smoke_testing_demo
<br>
__最後,歡迎同窗們留言, 你認爲自動化冒煙測試 Unittest , Pytest 哪家強? __
文章若有不是,歡迎同窗們斧正 <br>
<br>