27. Unittest单元测试框架的介绍与使用

unittest单元测试框架

先贴一下unittest官网地址。unittest文档开头介绍了四个重要的概念:test fixture,test case, test suite, test runner。html

test fixture

test fixture表示执行一个或多个测试所需的准备。怎么去理解这句话呢?好比咱们执行一条建立文章的测试用例,可是若是咱们调用建立文章的接口,须要咱们进行登陆。那么咱们能够把登陆做为一个test fixture。python

test case

测试用例,这个没必要多说,没有测试用例就不能叫作接口测试了。微信

test suite

咱们在作接口测试的时候,通常都是执行多条测试用例。这就有了test suite概念,简单来讲,就是把想要执行的测试用例进行组装而后进行测试。框架

test  runner

执行测试用例。
为了方便你们的理解,会用一个实例对上面四个概念进行解释。请看以下代码:函数

import unittest


class AddTest(unittest.TestCase):
    def setUp(self):
        print("在每一个用例执行以前")

    def tearDown(self):
        print("在每一个用例执行以后")

    @classmethod
    def setUpClass(cls):
        print("在用例执行以前,只执行一次,优先于setUp")

    @classmethod
    def tearDownClass(cls):
        print("全部用例运行以后只执行一次")

    def add(self, a, b):
        if type(a) == int and type(b) == int:
            return a + b
        else:
            return "请输入数字"

    def test_add1(self):
        self.assertEqual(self.add(2, 3), 5, "验证加法")

    def test_add2(self):
        self.assertEqual(self.add(2, 4), 6, "验证加法")


if __name__ == '__main__':
    # unittest.main()
    # test suite(构造测试集)
    suite = unittest.TestSuite()
    suite.addTest(AddTest("test_add1"))
    suite.addTest(AddTest("test_add2"))
    # test runner (执行测试)
    runner = unittest.TextTestRunner()
    runner.run(suite)

上面代码输出以下内容:单元测试

在用例执行以前,只执行一次,优先于setUp
在每一个用例执行以前
在每一个用例执行以后
在每一个用例执行以前
在每一个用例执行以后
全部用例运行以后只执行一次学习

咱们来根据代码拆解一下,看哪部分对应test fixture,test case, test suite, test runner。首先,在使用unittest单元测试框架以前,咱们须要导包,咱们先import unittest,而后建立一个AddTest类,这个类继承unittest.TestCase。而后咱们建立一个add方法(注意:通常类中的函数咱们称做为方法),而后建立了2条测试用例test_add1,test_add2,注意!测试用例必须以test开头!而后使用test fixture中setUp、tearDown、setUpClass 、tearDownClass。而后使用test suite把2条测试用例加进去,固然须要注意一点,用例执行是有顺序的(按照 ASCII 码的从小到大的顺序),好比test_add1和test_add2,前面都是同样的,可是最后1位1排在2前面,因此先执行1,最后使用test runner执行测试用例。到这里想必你们都已经明白。最后画一张思惟导图,更方便你们的理解。测试

细心的人能够看到,测试用例中有一个assertEqual,这就是咱们说比assert更好用的断言,那么这些断言有哪些呢?请看下面表格:ui

Method Checks that
assertEqual(a, b) a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIs(a, b) a is b
assertIsNot(a, b) a is not b
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a, b) a in b
assertNotIn(a, b) a not in b
assertIsInstance(a, b) isinstance(a, b)
assertNotIsInstance(a, b) not isinstance(a, b)

小结:本章内容只是简单介绍了一下unittest的使用方法以及相关概念,unittest框架使用起来很简单也很方便,建议你们多去官网学习,固然无论是UI自动化也好,仍是接口自动化也好,若是使用Python实现,通常都不会绕过Unittest这个概念,但愿你们能够熟练掌握。 code

欢迎关注微信公众号:软件测试汪。软件测试交流群:809111560

相关文章
相关标签/搜索