python中的单元测试模块unittest 淩亂°似流年 2022-05-17 09:50 182阅读 0赞 时间过得真快,一转眼一年没有发文了,后边会继续发表,多多交流! 一、概述: 由于最近在做自动化测试,所以对unittest进行了学习。unittest模块有自己的断言,运行用例,组织用例等的属性,所以,掌握了unittest,自动化也就不会太难了。 二、unittest的属性: 该文以思维导图的形式描述unittest的重要属性。 ![70][] 其中前四个是unittest最核心的三个属性。 testcase:测试用例; testsuite:测试套件,多个测试用例组成一个测试套件; test runner:执行测试用例,该类中的run()方法会执行testsuite/testcase中的run()方法。测试的结果会保存在testresult中。 还有一个很重要的就是fixture,看着是挺陌生的,其实就是一个测试用例执行之前环境的准备和执行之后环境的销毁。 三、实例: 首先准备一些待测方法,functions.py: > def fun_div(x): > return x/2 > > def fun_add(x): > return x+2 > > def fun_minus(x): > return x-2 > > def fun_multi(x): > return x*2 接下来写一些测试用例来测这些方法,test.py > import unittest > from functions import fun_add,fun_minus,fun_multi,fun_div > > > class TestFun(unittest.TestCase): > times = 0 > > @classmethod > def setUpClass(cls): > print('setUpclass') > > def setUp(self): > # 每个测试用例执行之前都会执行该方法 > TestFun.times += 1 > print('setUp', TestFun.times) > > def tearDown(self): > # 每个测试用例执行之后都会执行该方法 > TestFun.times += 1 > print('tearDown', TestFun.times) > > def test1(self): > # 测试用例1:fun_div > # 使用unittest提供的断言验证functions中的函数的正误 > # 如果不相等就会失败 > self.assertEqual(2, fun_div(4)) > self.failUnlessEqual(2, 2) > > # 如果表达式为False,测试失败 > self.assertTrue(1 < 2) > self.failUnless(2 == 2) > > # 如果两个值相等,就会测试失败 > self.assertNotEqual(2, 1) > > def test2(self): > # 测试用例2:fun_add > self.assertNotEqual(2, 1) > > def test2(self): > # 测试用例2:fun_add > self.assertTrue(fun_add(6) == 8) > > def test3(self): > # 测试用例3:fun_minus > self.assertNotEqual(6, fun_minus(6)) > self.assertEqual(4, fun_minus(6)) > > def test4(self): > # 测试用例4:fun_multi > self.assertIsInstance(4, int) > self.assertEqual(8, fun_multi(4)) > > @unittest.skipIf(True, 'no') > def test5(self): > print('跳过!') > > @classmethod > def tearDownClass(cls): > print('tearDownClass') > > > if __name__ == '__main__': > # unittest.main() > suit = unittest.TestSuite() > suit.addTest(TestFun('test1')) > suit.addTest(TestFun('test2')) > suit.addTest(TestFun('test3')) > suit.addTest(TestFun('test4')) > runner = unittest.TextTestRunner() > runner.run(suit) 执行结果: ![70 1][] 解释: 1、setUp和tearDown是每个用例的环境准备和环境销毁函数,也就是在每个用例执行之前要执行一次setUp函数,每个用例执行之后会执行一次tearDown函数; 2、setUpClass和tearDownClass是所有用例的环境准备和环境销毁函数,也就是说,在这么多用例执行之前只会执行一次setUpClass函数,执行之后会执行一次tearDownClass函数,举例来说,比如此次测试用例需要使用数据库,那么在setUpClass函数中就会进行数据库连接,在tearDownClass函数中进行数据库断开; 3、一般执行测试用例,都会使用testsuit的addTest()方法将要执行的用例放在一个测试套件中,创建一个testrunner对象,然后调用该对象的run()方法; 4、skip是一个装饰器,可以屏蔽一些测试用例,此功能可以用于调试测试用例。(大型项目中,执行所有的用例需要用很久的时间,但是我们刚好需要调试某个用例,就可以把其他的用例屏蔽掉); 5、一个测试用例类都会继承于TestCase类; 6、测试用例报告可以使用TextTestRunner输出(txt报告),也可以用HTMLTestRunner输出(html报告)。 后记:unittest大概了解就是这些了,后续会学习HTMLTestRunner输出漂亮的html报告。如果此文有问题,请记得评论,感谢~ 愿大家都能越来越好~~~ [70]: /images/20220517/e84ec98a218248949c519e1aed98d868.png [70 1]: /images/20220517/f110b5cf31b5499386fce6749ba10763.png
还没有评论,来说两句吧...