unittest_认识unittest(1)

unittest是python内置的单元测试框架,具备编写用例、组织用例、执行用例、输出报告等自动化框架的条件。 使用unittest前需要了解该框架的五个概念: 即test case,test suite,test loader,test runner,test fixture。

  • test case:一个TestCase的实例就是一个测试用例。什么是测试用例呢?就是一个完整的测试流程,包括测试前环境准备(setUp),执行测试(run),以及测试后环境的还原(tearDown)。
  • test suite:多个测试用例的集合,测试套件或测试计划。
  • test loader:加载TestCase到TestSuite中的,其中loadTestsFrom*()方法用于寻找TestCase,并创建它们的实例,然后添加到TestSuite中,返回TestSuite实例。
  • test runner:执行测试用例,并将测试结果保存到TextTestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息。
  • test fixture:一个测试用例执行前的环境准备以及执行后的环境还原就是一个fixture。

了解了概念后,我们来看一段简单的代码

import unittest


class Demo(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        print("setUpClass被执行\n")

    @classmethod
    def tearDownClass(cls) -> None:
        print("tearDownClass被执行")

    def setUp(self) -> None:
        print("setup被执行")

    def tearDown(self) -> None:
        print("teardown被执行\n")

    def test_a(self):
        print("test_a被执行")

    def test_c(self):
        print("test_c被执行")

    def test_b(self):
        print("test_b被执行")
        a, b = 1, 2
        assert a+b == 3

    def d(self):
        print("d被执行")


if __name__ == '__main__':
    unittest.main()

执行结果

从脚本和运行结果我们可以得到以下结论:

  • 定义一个测试类时,要继承unittest.TestCase这个类
  • setUpClass()和tearDownClass()在测试类执行前后只会被执行一次
  • setUp()和tearDown()在测试类每个测试用例执行前后都会被执行一次
  • 测试用例必须以test开头,否则不会被执行。
  • 测试用例的执行顺序不是根据代码的先后顺序执行的,而是根据ASCII码的顺序执行的测试用例,ASCII码数字与字母的顺序为:0-9,A-Z,a-z。

执行流程大致如下

编写TestCase,由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,最后将运行的结果保存在TextTestResult中。

 

posted @ 2021-02-20 20:49  码上测  阅读(139)  评论(0编辑  收藏  举报