加油奋斗吧 2020-04-07
import unittest from assertpy import assert_that """ Testcase: 一个TestCase的实例就是一个测试用例。什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(setUp), 执行测试代码 (run),以及测试后环境的还原(tearDown)。元测试(unit test)的本质也就在这里,一个测试用例是一个完整 的测试单元,通过运行这个测试单元,可以对某一个问题进行验证。 Test suite: 多个测试用例集合在一起,就是TestSuite,而且TestSuite也可以嵌套TestSuite。 Test runner: 是来执行测试用例的,其中的run(test)会执行TestSuite/TestCase中的run(result)方法。 TestLoader: 是用来加载TestCase到TestSuite中的,其中有几个loadTestsFrom__()方法,就是从各个地方寻找TestCase,创建它们的实例, 然后add到TestSuite中,再返回一个TestSuite实例。 Test fixture: 对一个测试用例环境的搭建和销毁,是一个fixture,通过覆盖 TestCase的setUp()和tearDown()方法来实现。 这个有什么用呢?比如说在这个测试用例中需要访问数据库,那么可以在setUp() 中建立数据库连接以及进行一些初始化, 在tearDown()中清除在数据库中产生的数据,然后关闭连接。注意tearDown的过程很重要,要为以后的 TestCase留下一 个干净的环境。关于fixture,还有一个专门的库函数叫做fixtures,功能更加强大。 unittest.skip(): 装饰器,当运行用例时,有些用例可能不想执行等,可用装饰器暂时屏蔽该条测试用例。 一种常见的用法就是比如说想调试某一个测试用例,想先屏蔽其他用例就可以用装饰器屏蔽。 使用unittest编写python的单元测试代码,包括如下几个步骤: 1、编写一个python类,继承 unittest模块中的TestCase类,这就是一个测试类 2、在上面编写的测试类中定义测试方法(这个就是指的测试用例),每个方法的方法名要求以 test 打头,没有额外的参数。 在该测试方法中 调用被测试代码,校验测试结果,TestCase类中提供了很多标准的校验方法,如 最常见的assertEqual。 这里使用assertpy 3、执行 unittest.main() ,该函数会负责运行测试,它会实例化所有TestCase的子类,并运行其中所有以test打头的方法。 """ class TestCase(unittest.TestCase): @classmethod def setUpClass(cls): print(‘前提条件,只会执行一次,比如登录获取cookie‘) @classmethod def tearDownClass(cls) : print(‘结束测试,做一些清理工作,执行一次‘) def setUp(self) -> None: print(‘每一个test执行 前都会执行的‘) def tearDown(self) -> None: print(‘每一个test执行后都会执行‘) def test_1(self): print(‘1111‘) assert_that(2).is_equal_to(2) def test_2(self): print(‘2222‘) assert_that(2, description=‘ERROR‘).is_equal_to(4) @unittest.skip("ssss") def test_3(self): print(‘333‘) assert_that(2, description="错误").is_equal_to(3) if __name__ == ‘__main__‘: suit1 = unittest.TestSuite() suit1.addTest(TestCase(‘test_2‘)) suit1.addTest(TestCase(‘test_1‘)) suit1.addTest(TestCase(‘test_3‘)) runner = unittest.TestRunner() runner.run(suit1)