自动化脚本最重要的是断言,正确设置断言可以有效判断测试用例执行结果。python unitest单元测试框架提供了一整套内置的断言方法。
思路:
每个testcase增加unitest的断言,
1.断言如果失败,则抛出一个AssertionError,测试用例为fail。(如果异常,则当做错误来处理)
2.如果断言成功,则testcase为pass状态
以下是常用的断言方法,msg是断言失败输出的提示信息,可以为空。
Boolean型断言:True or False
1:assertEqual(arg1, arg2, msg=None) ,验证arg1=arg2,不等则fail
2:assertNotEqual(arg1, arg2, msg=None),验证arg1 != arg2, 相等则fail
3:assertTrue(expr, msg=None),验证expr是true,如果为false,则fail
4:assertFalse(expr,msg=None),验证expr是false,如果为true,则fail
5:assertIs(arg1, arg2, msg=None),验证arg1、arg2是同一个对象,不是则fail
6:assertIsNot(arg1, arg2, msg=None),验证arg1、arg2不是同一个对象,是则fail
7:assertIsNone(expr, msg=None),验证expr是None,不是则fail
8:assertIsNotNone(expr, msg=None),验证expr不是None,是则fail
9:assertIn(arg1, arg2, msg=None),验证arg1是arg2的子串,不是则fail
10:assertNotIn(arg1, arg2, msg=None),验证arg1不是arg2的子串,是则fail
11:assertIsInstance(obj, cls, msg=None),验证obj是cls的实例,不是则fail
12:assertNotIsInstance(obj, cls, msg=None),验证obj不是cls的实例,是则fail
比较两个变量的断言
13:assertAlmostEqual (first, second, places = 7, msg = None, delta = None)
验证first约等于second。palces: 指定精确到小数点后多少位,默认为7
14:assertNotAlmostEqual (first, second, places, msg, delta),验证first不约等于second。palces: 指定精确到小数点后多少位,默认为7
==注: 在上述的两个函数中,如果delta指定了值,则first和second之间的差值必须≤delta==
15:assertGreater (first, second, msg = None),验证first > second,否则fail
16:assertGreaterEqual (first, second, msg = None),验证first ≥ second,否则fail
17:assertLess (first, second, msg = None),验证first < second,否则fail
18:assertLessEqual (first, second, msg = None),验证first ≤ second,否则fail
19:assertRegexpMatches (text, regexp, msg = None),验证正则表达式regexp搜索==匹配==的文本text。regexp:通常使用re.search()
20:assertNotRegexpMatches (text, regexp, msg = None),验证正则表达式regexp搜索==不匹配==的文本text。regexp:通常使用re.search()
可以处理元组、列表、字典等更复杂的数据类型的断言
21:assertEqual(arg1, arg2, msg=None),验证arg1=arg2,不等则fail
22:assertNotEqual(arg1, arg2, msg=None),验证arg1 != arg2, 相等则fail
23:assertTrue(expr, msg=None),验证expr是true,如果为false,则fail
24:assertFalse(expr,msg=None),验证expr是false,如果为true,则fail
25:assertIs(arg1, arg2, msg=None),验证arg1、arg2是同一个对象,不是则fail
26:assertIsNot(arg1, arg2, msg=None),验证arg1、arg2不是同一个对象,是则fail
27:assertIsNone(expr, msg=None),验证expr是None,不是则fail
28:assertIsNotNone(expr, msg=None),验证expr不是None,是则fail
29:assertIn(arg1, arg2, msg=None),验证arg1是arg2的子串,不是则fail
30:assertNotIn(arg1, arg2, msg=None),验证arg1不是arg2的子串,是则fail
31:assertIsInstance(obj, cls, msg=None),验证obj是cls的实例,不是则fail
32:assertNotIsInstance(obj, cls, msg=None),验证obj不是cls的实例,是则fail
以下是示例代码:
# coding=utf-8
import time
import unittest
from util import HTMLTestRunner
class Case(unittest.TestCase):
@classmethod # 所有case执行之前准备环境只执行一次,所有case结束后只执行一次tearDownClass
def setUpClass(cls):
print('setupclass')
@classmethod
def tearDownClass(cls):
print('teardownclass')
def test_01(self):
print("test01-assertEqual:验证arg1=arg2,不等则fail")
self.assertEqual('a', 'b', 'mesg')
def test_02(self):
print('test02-assertNotEqual:验证arg1 != arg2, 相等则fai')
self.assertNotEqual('a', 'b','mesg')
def test_03(self):
print('test03-assertTrue:验证expr是true,如果为false,则fail')
expr=True
self.assertTrue(expr,'mesg')
def test_04(self):
print('test04-assertIs:验证arg1、arg2是同一个对象,不是则fail')
arg1=2
arg2=2
self.assertIs(arg1,arg2,'mesg')
def test_05(self):
print('test05-assertIn:验证arg1是arg2的子串,不是则fail')
arg1='ab'
arg2='abcdefg'
self.assertIn(arg1,arg2,'mesg')
def test_06(self):
print('test06-assertIn:验证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)