自動化冒煙測試 Unittest , Pytest 哪家強?

前言:以前有一段時間一直用 Python Uittest作自動化測試,以爲Uittest組織冒煙用例比較繁瑣,後來康哥提示我使用pytest.mark來組織冒煙用例python

本文講述如下幾個內容:數組

一、Unittest 如何組織冒煙用例
二、Pytest 組織冒煙測試
三、Pytest 執行unittest冒煙用例框架

環境準備:測試

Python 3.64
Pytest 5.01ui

項目目錄:命令行

smoke_testing_demo
        test_case
            __init__.py
            test_case_with_unittest.py
            test_case_with_pytest.py
        run_unittest_smoke_testing.py


1、Unittest如何組織冒煙用例

  • 當 import unittest 時 ,會自動導入TestLoader類
  • TestLoader這個類下,封裝了 5 種組織用例的方法
  • 本文主要講解 loadTestsFromNames
  • 更多Uittest組織用例方法可參考《Unittest組織用例的姿式》這篇博文,連接在文末
$ 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 TestUittestCase(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)


loadTestsFromNames 方法簡介code

$ loader.py 該文件在python3.7已不存在,建議使用python3.64 查看使用方法

class TestLoader(object):
    """
    該類負責根據各類標準加載測試並將它們包裝在TestSuite中
    """
    
    def loadTestsFromNames(self, names, module=None):
    """
    返回給定的一組用例名的測試用例的套件
    """

loadTestsFromNames 組織冒煙用例utf-8

$ 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


小結:it

  • 經過loadTestsFromNames 能夠從不一樣的模塊組織特定的用例集
  • 使用loadTestsFromNames這個方法,須要傳入一個數組
  • 數組裏面裏面的元素必須是字符串
  • 數組元素傳入格式:'moudleName.testCaseClassName.testCaseName'
  • 執行用例是根據數組元素的的順序執行
ps: 更多經過loadTestsFromNames 使用技巧,
能夠查看《Unittest組織用例的姿式》這篇博文,連接在文末


2、Pytest 組織冒煙測試

  • pytest 提供了測試用例標記機制
  • 一個測試用例容許被多個@pytest.mark進行標記
  • 同一個@pytest.mark能夠標記多個測試用例
  • pytest.mark經常使用於冒煙測試用例組織
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_2
使用命令行運行 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的用例

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 ===========================


3、Pytest 執行 Unittest冒煙用例

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 TestUittestCase(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


自動化冒煙測試 Unittest , Pytest 哪家強?

筆者我的看法:

  • 使用Uittest組織冒煙測試,關注點有至少有兩個
    一、當編寫新功能的冒煙測試,須要去維護冒煙測試用例集
    二、合併代碼時,若是有兩我的同時修改了這個冒煙用例集,還要解決衝突,防止遺漏冒煙用例

  • 使用Pytest組織冒煙,關注點在於用例的自己
    當編寫新功能的冒煙測試,我只需在給用例加一個編寫用例人員約定好@pytest.mark,例如@pytest.mark.smoke

最後,歡迎同窗們留言。文章若有不是,歡迎斧正

相關文章
相關標籤/搜索