Python的Unitest單元測(cè)試框架之?dāng)嘌詀ssert

自動(dòng)化腳本最重要的是斷言,正確設(shè)置斷言可以有效判斷測(cè)試用例執(zhí)行結(jié)果。python unitest單元測(cè)試框架提供了一整套內(nèi)置的斷言方法。
思路:
每個(gè)testcase增加unitest的斷言,
1.斷言如果失敗,則拋出一個(gè)AssertionError,測(cè)試用例為fail。(如果異常,則當(dāng)做錯(cuò)誤來(lái)處理)
2.如果斷言成功,則testcase為pass狀態(tài)

以下是常用的斷言方法,msg是斷言失敗輸出的提示信息,可以為空。

Boolean型斷言:True or False

1:assertEqual(arg1, arg2, msg=None) ,驗(yàn)證arg1=arg2,不等則fail
2:assertNotEqual(arg1, arg2, msg=None),驗(yàn)證arg1 != arg2, 相等則fail
3:assertTrue(expr, msg=None),驗(yàn)證expr是true,如果為false,則fail
4:assertFalse(expr,msg=None),驗(yàn)證expr是false,如果為true,則fail
5:assertIs(arg1, arg2, msg=None),驗(yàn)證arg1、arg2是同一個(gè)對(duì)象,不是則fail
6:assertIsNot(arg1, arg2, msg=None),驗(yàn)證arg1、arg2不是同一個(gè)對(duì)象,是則fail
7:assertIsNone(expr, msg=None),驗(yàn)證expr是None,不是則fail
8:assertIsNotNone(expr, msg=None),驗(yàn)證expr不是None,是則fail
9:assertIn(arg1, arg2, msg=None),驗(yàn)證arg1是arg2的子串,不是則fail
10:assertNotIn(arg1, arg2, msg=None),驗(yàn)證arg1不是arg2的子串,是則fail
11:assertIsInstance(obj, cls, msg=None),驗(yàn)證obj是cls的實(shí)例,不是則fail
12:assertNotIsInstance(obj, cls, msg=None),驗(yàn)證obj不是cls的實(shí)例,是則fail

比較兩個(gè)變量的斷言

13:assertAlmostEqual (first, second, places = 7, msg = None, delta = None)
驗(yàn)證first約等于second。palces: 指定精確到小數(shù)點(diǎn)后多少位,默認(rèn)為7
14:assertNotAlmostEqual (first, second, places, msg, delta),驗(yàn)證first不約等于second。palces: 指定精確到小數(shù)點(diǎn)后多少位,默認(rèn)為7

==注: 在上述的兩個(gè)函數(shù)中,如果delta指定了值,則first和second之間的差值必須≤delta==

15:assertGreater (first, second, msg = None),驗(yàn)證first > second,否則fail
16:assertGreaterEqual (first, second, msg = None),驗(yàn)證first ≥ second,否則fail
17:assertLess (first, second, msg = None),驗(yàn)證first < second,否則fail
18:assertLessEqual (first, second, msg = None),驗(yàn)證first ≤ second,否則fail
19:assertRegexpMatches (text, regexp, msg = None),驗(yàn)證正則表達(dá)式regexp搜索==匹配==的文本text。regexp:通常使用re.search()
20:assertNotRegexpMatches (text, regexp, msg = None),驗(yàn)證正則表達(dá)式regexp搜索==不匹配==的文本text。regexp:通常使用re.search()

可以處理元組、列表、字典等更復(fù)雜的數(shù)據(jù)類(lèi)型的斷言

21:assertEqual(arg1, arg2, msg=None),驗(yàn)證arg1=arg2,不等則fail
22:assertNotEqual(arg1, arg2, msg=None),驗(yàn)證arg1 != arg2, 相等則fail
23:assertTrue(expr, msg=None),驗(yàn)證expr是true,如果為false,則fail
24:assertFalse(expr,msg=None),驗(yàn)證expr是false,如果為true,則fail
25:assertIs(arg1, arg2, msg=None),驗(yàn)證arg1、arg2是同一個(gè)對(duì)象,不是則fail
26:assertIsNot(arg1, arg2, msg=None),驗(yàn)證arg1、arg2不是同一個(gè)對(duì)象,是則fail
27:assertIsNone(expr, msg=None),驗(yàn)證expr是None,不是則fail
28:assertIsNotNone(expr, msg=None),驗(yàn)證expr不是None,是則fail
29:assertIn(arg1, arg2, msg=None),驗(yàn)證arg1是arg2的子串,不是則fail
30:assertNotIn(arg1, arg2, msg=None),驗(yàn)證arg1不是arg2的子串,是則fail
31:assertIsInstance(obj, cls, msg=None),驗(yàn)證obj是cls的實(shí)例,不是則fail
32:assertNotIsInstance(obj, cls, msg=None),驗(yàn)證obj不是cls的實(shí)例,是則fail

以下是示例代碼:

# coding=utf-8

import time
import unittest
from util import HTMLTestRunner

class Case(unittest.TestCase):

    @classmethod             # 所有case執(zhí)行之前準(zhǔn)備環(huán)境只執(zhí)行一次,所有case結(jié)束后只執(zhí)行一次tearDownClass
    def setUpClass(cls):
        print('setupclass')
    @classmethod
    def tearDownClass(cls):
        print('teardownclass')

    def test_01(self):
        print("test01-assertEqual:驗(yàn)證arg1=arg2,不等則fail")
        self.assertEqual('a', 'b', 'mesg')

    def test_02(self):
        print('test02-assertNotEqual:驗(yàn)證arg1 != arg2, 相等則fai')
        self.assertNotEqual('a', 'b','mesg')

    def test_03(self):
        print('test03-assertTrue:驗(yàn)證expr是true,如果為false,則fail')
        expr=True
        self.assertTrue(expr,'mesg')

    def test_04(self):
        print('test04-assertIs:驗(yàn)證arg1、arg2是同一個(gè)對(duì)象,不是則fail')
        arg1=2
        arg2=2
        self.assertIs(arg1,arg2,'mesg')

    def test_05(self):
        print('test05-assertIn:驗(yàn)證arg1是arg2的子串,不是則fail')
        arg1='ab'
        arg2='abcdefg'
        self.assertIn(arg1,arg2,'mesg')

    def test_06(self):
        print('test06-assertIn:驗(yàn)證arg1是arg2的子串,不是則fail')
        arg1='ab'
        self.assertIsInstance(23,str)



if __name__=='__main__':
    suite=unittest.TestSuite()
    t=(Case('test_01'),Case('test_02'),Case('test_03'),Case('test_04'),Case('test_05'),Case('test_06'))
    suite.addTests(t)
    unittest.TestSuite().run(suite)


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容