1、用import语句引入unittest模块
2、让所有执行测试的类都继承于TestCase类,可以将TestCase看成是对特定类进行测试的方法的集合
3、setUp()方法中进行测试前的初始化工作,teardown()方法中执行测试后的清除工作,它们都是TestCase中的方法
4、编写测试的方法最好以test开头(可以直接运行)deftest_add(self)、deftest_sub(self)等,可以编写多个测试用例对被测对象进行测试
5、在编写测试方法过程中,使用TestCaseclass提供的方法测试功能点,比如:assertEqual等
6、调用unittest.main()方法运行所有以test开头的方法
import unittest#1、导入unittest模块
class TestDemo(unittest.TestCase):#TestDemo继承TestCase类
def setUp(self) -> None:#箭头是指方法预期的返回值类型 非强制要写
print('setUp,初始化语句')
def tearDown(self) -> None:
print('tearDown,清理语句')
def test_add(self):
self.assertEqual(10+6,16,'test_add执行失败')# assertEqual 预期结果与实际结果不符时才会打印此语句
print('test_add')
if __name__ == '__main__':
unittest.main()
执行结果如下,可看出setUp和tearDown的执行顺序:
注意,运行unittest脚本时不要直接右击run,需要点击菜单顶部的run手动选择与原有脚本名称一致的文件执行,如下图:
assertEqual(a,b) a==b #是否相等
assertNotEqual(a,b) a!=b #是否不相等
assertTrue(x) bool(x)isTrue #是否为True
assertFalse(x) bool(x)isFalse #是否为False
assertIn(a,b) a in b #是否包含
assertGreater(a,b) a>b #大于
assertGreaterEqual(a,b) a>=b #大于等于
assertLess(a,b) a
assertLessEqual(a,b) a<=b #小于等于
import unittest
class TestDemo(unittest.TestCase):#TestDemo继承TestCase类
def test_demo01(self): #判断是否相等
self.assertEqual(1, 2, '不相等')
def test_demo02(self): #判断是否不相等
self.assertNotEqual(1,1,'相等')
def test_demo03(self): #判断是否为True
self.assertTrue(0,'不为True')#任何为真的表达式,非0 非空 true
def test_demo04(self): # 判断是否为False
self.assertFalse([1,2,3],'不为False')
def test_demo05(self): #判断是否包含
self.assertIn('healer','b','无包含关系')#b内是否包含healer
def test_demo06(self): #判断是否大于
self.assertGreater(1,2,'不大于')
def test_demo07(self): #判断是否大于等于
self.assertGreaterEqual(1,2,'不大于等于')
def test_demo08(self): #判断是否小于
self.assertLess(2,1,'不小于')
def test_demo09(self): #判断是否小于等于
self.assertLessEqual(2,1,'不小于等于')
if __name__ == '__main__':
unittest.main()
1、当在一个测试类或多个测试模块下,用例数量较多时,unittest在执行用例(test_xxx)时,并不是按从上到下的顺序执行,而是有特定的顺序,unittest框架默认根据ACSII码的顺序加载测试用例,数字与字母的顺序为:0~9,A~Z,a~z。
①对于类来说,classTestAxx会优先于classTestBxx被执行。
②对于方法来说,test_aaa()方法会有优先于test_bbb()被执行。
③对于测试目录与测试文件来说,unittest同样是按照以上规则来加载测试用例的。
2、如何控制测试用例执行顺序
①顺应unittest的默认执行顺序,通过设置测试类或者测试方法方法名字来实现
②通过addTest()添加用例的顺序控制用例执行,先添加的先执行,后添加的后执行
import unittest
class LoginTest(unittest.TestCase):
def test_login_demo01(self):
print('exec login_demo01')
def test_login_demo02(self):
print('exec login_demo02')
def test_login_demo03(self):
print('exec login_demo03')
if __name__ == '__main__':
#方法一:addTest(类名(方法名))实现测试套件
login_suite = unittest.TestSuite()
login_suite.addTest(LoginTest('test_login_demo02'))
login_suite.addTest(LoginTest('test_login_demo01'))
login_suite.addTest(LoginTest('test_login_demo03'))
#方法二:makeSuite,此方法测试用例方法名必须以test开头
# login_suite = unittest.TestSuite(unittest.makeSuite(LoginTest))#此行代码可运行所有测试用例
unittest.main(defaultTest='login_suite')#对象名必须是字符串形式(测试套件对象) 不可直接引用