第二篇 第二節 ddt數據驅動的引入

    第二篇上一節的內容,我們在進行註冊函數的邏輯測試時,寫了6個測試函數,我們發現所有測試函數中只有data和expect_result不一樣,其他內容都一樣,那我們就想想函數的作用是什麼?是實現一個功能,當不同參數函數的結果也不一樣時,那我們就可以將這些參數可以作爲函數參數傳入

如上一節內容,既然只有data和expect_result不一樣,那麼我們就可以

1.   將所有的測試數據存在一個變量中

testcase = [[['Luji', '1234567'], {'code': 2, 'msg': '用戶名長度須在6-15內'}],
            [['1234567890123456', '1234567'], {'code': 2, 'msg': '用戶名長度須在6-15內'}],
            [['Lujier', '1234567'], {'code': 1, 'msg': '該用戶名已被使用'}],
            [['Lujier001', '12345'], {'code': 3, 'msg': '密碼長度須在6-20內'}],
            [['Lujier001', '123456789012345678901'], {'code': 3, 'msg': '密碼長度須在6-20內'}],
            [['Lujier001', '1234567'], {'code': 0, 'msg': '註冊成功'}]
            ]

2.   在定義測試函數時,則將data和expect_result作爲該函數參數(test_login.py)

     

class TestLogin(unittest.TestCase):

    def setUp(self):
        print("每一條用例執行開始")

    def tearDown(self):
        print("每一條用例執行開始")

    def test_login(self, data, expect_result):

        actual_result = register(*data)  # 測試結果
        try:
            # 斷言處理
            self.assertEqual(actual_result, expect_result)
        except Exception as msg:
            print("用例執行失敗,原因:{}!".format(msg))
            raise msg
        else:
            print("用例執行成功")
3.  測試用例集文件run_suite.py如下內容:
import unittest
from CSDN.test_login import TestLogin
from HTMLTestRunnerNew import HTMLTestRunner

'''創建一個測試套件'''
suite = unittest.TestSuite()
# 用例測試數據,
testcases = [[['Luji', '1234567'], {'code': 2, 'msg': '用戶名長度須在6-15內'}],
             [['1234567890123456', '1234567'], {'code': 2, 'msg': '用戶名長度須在6-15內'}],
             [['Lujier', '1234567'], {'code': 1, 'msg': '該用戶名已被使用'}],
             [['Lujier001', '12345'], {'code': 3, 'msg': '密碼長度須在6-20內'}],
             [['Lujier001', '123456789012345678901'], {'code': 3, 'msg': '密碼長度須在6-20內'}],
             [['Lujier001', '1234567'], {'code': 0, 'msg': '註冊成功'}]
             ]
for case in testcases:
    suite.addTest(TestLogin('test_login', case[0], case[1]))
# 3. HTMLTestRunnerNew 測試報告
with open("test_report.html", "wb") as f:
    runner = HTMLTestRunner(
        stream=f,
        verbosity=0,
        title="test reports",
        description="",
        tester="Lujier")
    runner.run(suite)

   但是,存在一個問題那就是,我們一般進行測試時,會有很多的測試模塊,這樣就導致

          1)   run_suite.py文件可能內容過多;

           2)  如果測試數據出錯,就需要進入run_suite中,找到問題模塊的數據,代碼較多情況下,不好定位

   那麼如何解決呢?

           在這裏,我們就要開始引入ddt了, 我們可以將測試數據放在對應的測試模塊中,測試模塊內容如下:

test_login.py

import unittest
from ddt import data,ddt

@ddt
class TestLogin(unittest.TestCase):
    # 用例測試數據,

    testcases = [[['Luji', '1234567'], {'code': 2, 'msg': '用戶名長度須在6-15內'}],
                 [['1234567890123456', '1234567'], {'code': 2, 'msg': '用戶名長度須在6-15內'}],
                 [['Lujier', '1234567'], {'code': 1, 'msg': '該用戶名已被使用'}],
                 [['Lujier001', '12345'], {'code': 3, 'msg': '密碼長度須在6-20內'}],
                 [['Lujier001', '123456789012345678901'], {'code': 3, 'msg': '密碼長度須在6-20內'}],
                 [['Lujier001', '1234567'], {'code': 0, 'msg': '註冊成功'}]
                 ]
    def setUp(self):
        print("每一條用例執行開始")

    def tearDown(self):
        print("每一條用例執行開始")
        
    @data(*testcases)
    def test_login(self, testcase):
        datacontent = testcase[0]   # 測試數據
        expect_result = testcase[1]  # 預期結果
        actual_result = register(*datacontent)  # 測試結果
        try:
            # 斷言處理
            self.assertEqual(actual_result, expect_result)
        except Exception as msg:
            print("用例測試失敗,原因:{}!".format(msg))
            raise msg
        else:
            print("用例執行成功")

那自然的,run_suite文件內容就跟上一節的內容一樣嘍

import unittest
from CSDN.test_login import TestLogin
from HTMLTestRunnerNew import HTMLTestRunner

'''創建一個測試套件'''
suite = unittest.TestSuite()
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromTestCase(TestLogin))

# 3. HTMLTestRunnerNew 測試報告
with open("test_report.html", "wb") as f:
    runner = HTMLTestRunner(
        stream=f,
        verbosity=0,
        title="test reports",
        description="",
        tester="Lujier")
    runner.run(suite)

運行結果如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章