『心善淵』Selenium3.0基礎 — 28、unittest中測試套件的使用


1、測試套件的作用

在我們實際工作,使用unittest框架會有兩個問題:

  1. 我們知道測試用例的執行順序是根據測試用例名稱順序執行的,在不改變用例名稱的情況下,我們怎么來控制用例執行的順序。
  2. 一個測試文件,我們直接執行該文件即可,但如果有多個測試文件,怎么實現多個測試文件一起執行行。

要解決上面兩個問題,我們就要用到測試套件TestSuite

2、使用測試套件

(1)入門示例

1)用法

  1. unittest.TestSuite():創建測試套件。
  2. addTest()addTests()方法是將測試用例添加到測試套件中。
  3. unittest.TextTextRunner():通過該類下面的run()方法來運行suite所組裝的測試用例,suite測試套件為run()方法參數。

例如:將test_Demo1模塊下的TestDmeo類下的test_case_01測試用例添加到測試套件中。

# 1.創建測試套件
suite = unittest.TestSuite()

# 2.向測試套件中添加測試用例
# 模塊名.測試類名('測試用例名')
suite.addTest(test_Demo.TestDmeo('test_case_01'))

# 3.執行測試套件中的用例
runner = unittest.TextTestRunner()
runner.run(suite)

2)示例

# 1 導入unittest
import unittest

# 2 創建測試類
class TestDmeo(unittest.TestCase):

    # 3 編寫test case
    def test_case_01(self):
        """測試用例1"""
        print("執行測試用例1")

    def test_case_02(self):
        """測試用例2"""
        print("執行測試用例2")

    def test_case_03(self):
        """測試用例3"""
        print("執行測試用例3")


if __name__ == '__main__':
    # 執行當前測試類中,以test開頭的測試用例
    # unittest.main()

    # 1. 創建測試套件
    suite = unittest.TestSuite()
    # 2. 向測試套件中添加測試用例
    # 當前模塊中的測試用例,可省略模塊名(文件名)
    suite.addTest(TestDmeo('test_case_02'))
    suite.addTest(TestDmeo('test_case_03'))
    suite.addTest(TestDmeo('test_case_01'))
    # 3. 執行測試套件中的用例
    runner = unittest.TextTestRunner()
    runner.run(suite)

提示:向測試套件中添加測試用例的順序,就是測試用例執行的順序。(此時解決了第一個問題)

注意:

使用PyCharm執行上邊代碼,會按順序執行全部測試用例,這是PyCharm問題。

使用命令行直接執行該Python文件,沒有問題。

(2)根據不同的條件加載測試用例(了解)

提示:這種方式很少用,了解一下即可。推薦都用下面的方式(3)。

unittest.TestLoader():根據不同的條件加載測試用例,其中有幾個方法:

  1. unittest.TestLoader().loadTestsFromName(測試用例名)
  2. unittest.TestLoader().loadTestsFromNames(測試用例名的列表)
  3. unittest.TestLoader().loadTestsFromTestCase(測試類名)
  4. unittest.TestLoader().loadTestsFromModule(模塊名)
  5. unittest.TestLoader().discover()

例如:將``test_demo2模塊下的TestDmeo類下的test_case_01`測試用例添加到測試套件中。

測試用例名格式:文件名+類名+方法名,一級一級的。

示例

# 1 導入unittest
import unittest

# 2 創建測試類
class TestDmeo(unittest.TestCase):

    # 3 編寫test case
    def test_case_0001(self):
        """測試用例0001"""
        print("執行測試用例0001")

    def test_case_0002(self):
        """測試用例0002"""
        print("執行測試用例0002")

    def test_case_0003(self):
        """測試用例0003"""
        print("執行測試用例0003")


if __name__ == '__main__':
    # 1. 創建測試套件
    suite = unittest.TestSuite()

    # 2. 向測試套件中添加測試用例
    """
    # 2.1 loadTestsFromName
    # 提示:
        name參數是傳入文件名,字符串格式
        格式:模塊名.測試類名.測試用例名  
    """
    # suite_1 = unittest.TestLoader().loadTestsFromName('test_demo2.TestDmeo.test_case_01')

    """
    # 2.2 loadTestsFromNames
        參數是一個列表,列表中的元素格式同上
    """
    # suite_1 = unittest.TestLoader().loadTestsFromNames(
    #     ['test_demo2.TestDmeo.test_case_01','test_demo2.TestDmeo.test_case_02'])

    """
    # 2.3  loadTestsFromTestCase
        參數一個測試類名
        當前模塊直接傳如測試類名稱即可
    """
    suite_1 = unittest.TestLoader().loadTestsFromTestCase(TestDmeo)

    # 加入套件
    suite.addTest(suite_1)
    # 3. 執行測試套件中的用例
    runner = unittest.TextTestRunner()
    runner.run(suite)

(3)常用方式(推薦)

unittest.defaultTestLoader():通過該類下面的discover()方法可自動根據測試目錄test_dir匹配查找測試用例文件,如test*.py,並將查找到的測試用例組裝到測試套件中。

1)簡單示例:

discover=unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')

2)測試套件示例:

  1. 創建test_case包用來存放測試用例。
  2. 以上面兩個測試類做例子,把test_demo1test_demo2兩個測試用例類文件放入test_case包中。
  3. 編寫調用用例腳本run_case.py文件執行多個測試用例。

3)說明:

test_demo1test_demo2兩個文件,就是上面(1)(2)的示例。

下面是run_case.py文件內容,需求是同時執行test_demo1test_demo2兩個文件中的測試用例。

"""
1.學習目標
    run_case.py必須會寫
2.操作步驟
    2.1 明確測試用例存放路徑
    2.2 將要執行的用例添加到測試套件中
    2.3 執行測試套件中的用例
3.注意事項
    1.run_case.py文件需要放置在項目根目錄下
    2.所有測試用例都寫在test_caset文件夾中
    3.編寫用例的py文件需要以test開頭
"""
# 1.導入unittest
import unittest

# 2.獲取測試用例存放路徑---測試用例存放文件夾
case_path = "./test_case"

# 3.添加用例到測試套件中
"""
# 如果只添加一個文件,pattern就直接填寫文件名
start_dir, 指定case目錄
pattern='test*.py', 匹配文件規則,# 選擇文件夾中的寫test_開頭的py文件
"""
discover = unittest.defaultTestLoader.discover(case_path, pattern="test*.py")  

# 4.執行測試套件中的用例
runner = unittest.TextTestRunner()
runner.run(discover)


免責聲明!

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



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