这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » python中的单元测试模块unittest

共2条 1/1 1 跳转至

python中的单元测试模块unittest

高工
2018-10-23 08:30:54     打赏

一、概述:


    由于最近在做自动化测试,所以对unittest进行了学习。unittest模块有自己的断言,运行用例,组织用例等的属性,所以,掌握了unittest,自动化也就不会太难了。


二、unittest的属性:


  该文以思维导图的形式描述unittest的重要属性。

1111111111111111111111.png



其中前四个是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)

执行结果:

4444444444444444444444.png


解释:


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报告)。





管理员
2018-10-23 09:34:01     打赏
2楼

谢谢楼主分享


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]