unittest测试框架 (上)
目录
- 一、unittest(python自带测试框架)简介(重要的概念)
- 二、断言方法
- 三、discover更多测试用例
- 四、用例执行的顺序
- 五、执行多级目录的用例
- 六、跳过测试和预期失败
- 七、编写WEB测试用例
一、什么是框架?
提供用例组织与执行
- 大量的用例堆砌在一起,就产生了扩展性与维护性等问题,需要考虑用例的规荡与组织问题。
提供丰富的比较方法
- 用例执行完成之后,需要将实际结果与预期进行比较,从而断定用例是否执行通过。
提供丰富的执行日志
- 当测试用例执行失败时能抛出清晰的失败原因,当所有用例执行完成后能提供丰富的执行结果。
重要的概念
1.Test Case
一个TestCase的实例就是一个测试用例。(一个完整的测试流程)
包括:
- 测试前准备环境的搭建(setUp)
- 实现测试过程的代码(run)
- 测试后环境的还原(tearDown)
2.Test Suite
测试套件:把多条用例放在一起执行。
- TestSuite用来组装单个测试用例。
3.Test Runner
测试的执行是单元测试中一个重要的概念。
- 一般单元测试框架中都会提供丰富的执行策略和执行结果。
4.Test Fixture
对一个测试用例环境的搭建和销毁,就是一个fixture,通过覆盖TestCase的setUp()和tearDown()方法来实现。
EG:
- 测试用例的执行需要访问数据库。
- 在setUp()中建立数据库连接来进行初始化。
- 在tearDonw()中清除数据库产生的数据。
实例
套件:
二、断言方法
定义:在执行用例过程中,最终用例是否执行通过,是通过判断测试得到的实际结果与预期结果是否相等决定的。unittest框架的TestCase类提供下面这些方法用于测试结果的判断。
三、discover更多测试用例
当测试用例集更多,runtest逐一添加过于麻烦,TestLoader类中提供有discover()方法可更容易解决这个问题。
unittest.defaultTestLoader.discover(start_dir, pattern, top_level_dir)
- start_dir:要测试的模块名或测试用例目录
- pattern=‘test*.py:表示用例文件名的匹配原则。
- top_level_dir=None:测试模块的顶层目录,如果没有顶层,默认为None。
四、用例执行的顺序
用例的执行涉及多个层级:
- 在多个测试目录的情况下,先执行哪个目录?
- 在多个测试文件的情况下,先执行哪个文件?
- 在多个测试类的情况下,先执行哪个测试类?
- 在多个测试方法的情况下,先执行哪个测试方法?
- unittest框架默认根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0~9、A~Z、a~z。
- 对于测试目录与测试文件来说,unittest框架同样是按照这个规则来加载测试用例的。
五、执行多级目录的用例
当测试用例达到一定量级时,就要考虑划分目录,比如规划如下目录:
如果将discover()方法中的start_dir参数定义为“./test_case/”目录,那么只能加载test_a.py文件中的测试用例。
方法:在每级目录中新建一个__init__.py文件即可。
六、跳过测试和预期失败
在运行测试时,有时需要直接跳过某些测试用例,或者当用例符合某个条件时跳过测试。unittest提供了实现这些需求的装饰器。
1、unittest.skip(reason)
- 无条件地跳过装饰的测试,说明跳过测试的原因。
2、unittest.skipIf(condition,reason)
- 跳过装饰的测试,如果条件为真时。
3、unittest.skipUnless(condition, reason)
- 跳过装饰的测试,除非条件为真。
4、unittest.expectedFailure
- 测试标记为失败。不管执行结果是否失败,统一标记为失败
七、web测试用例目录样例
小结:
Unittest
一、测试用例 TestCase
用例名必须以Tes开头(Test_01)
二、测试固件 Test Fixture
setUp 每条用例执行时执行一遍
tearDown 每条用例结束执行一次
@classmethod
setUpClass. 在执行所有用例前执行一次
@classmethod
tearDownClass 在执行所用用例后执行一次
三、测试套件 TestSuit
生成执行用例的套件
Suit = unittest.TestSuite()
Suit.addTest(TestCount(“测试文件名或测试用例名,可以使用正则”))
四、测试启动 TestRunner
启动Suit
Runner = unittest.TextTestRunner()
Runner.run(Suit)
五、断言
assertEqual(a,b)
assertIs(a,b)
六、discover
unittest.defaultTestLoader.discover(start_dir=,pattern=,top_level_dir=)
start_dir : 测试用例模块名或测试用例目录
pattern : 用例文件名的测试规则
top_lever_dir=None : 测试模块的顶级目录
七、执行用例的顺序
1、当运行用例时,鼠标停放的位置在用例上时,运行用例时,就会执行该条用例。当停放在用例外,才可以执行多条用例。
2、用例的执行顺序是按ASCI码表顺序运行。测试目录与测试文文件。
八、unittest中的装饰器
unittest.skip(reason)
无条件跳过用例,reason描述原因
unittest.skipIf(condition,reason)
Condition条件下,跳过该条用例
unittest.skipUnless(condition,reason)
除非Condition为真时,不跳过该条用例
unittest.expectedFailure
统一标记该条用例为失败