自動(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)