一,前言
1,单元测试
软件测试一般按阶段划分为:单元测试,集成测试,系统测试。单元测试(unit testing)是指对软件中的最小可测试单元进行检查和验证。 单元测试中单元的含义,单元就是人为规定的最小的被测功能模块,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。在实际项目中,单元测试往往由开发人员完成。
2,单元测试框架
-
单元测试其实就是构造数据使用一段代码去测试另一段代码,理论上来说,不使用单元测试框架也能进行单元测试。但如果用于单元测试的代码(即测试用例)增多,在没有测试框架的情况下会变得拥挤、不可管理,这个时候引入测试框架就变得尤为重要。
-
单元测试框架提供了一种统一的编程模型,可以将测试定义为一些简单的类,这些类中的方法可以调用希望测试的应用程序代码。利用单元测试框架,可以很轻松地插入、设置和分解有关测试的功能,可以直观方便地管理测试用例。
-
主流的单元测试框架,如Java的Junit、TestNg,python的Unittest、Pyunit、Pytest,通用的自动化测试框架Robot Framework等。
3,单元测试框架作用
-
提供用例组织与执行
-
提供丰富的断言方法
-
提供丰富的日志与测试结果
二,Unittest 测试框架
1,Unittest 简介
Unittest是Python自带的单元测试框架,不仅适用于单元测试,还可用于Web、Appium、接口自动化测试用例的开发与执行。该测试框架可组织执行测试用例,并且提供丰富的断言方法,判断测试用例是否通过,并最终生成测试结果。
Unittest官方文档:unittest — Unit testing framework — Python 3.10.4 documentation
2,Unittest 核心要素
-
TestCase:即测试用例,Unittest提供testCase类来编写测试用例,一个TestCase的实例就是一个测试用例。一条测试用例就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown),通过运行一条测试用例,可以对某一个问题进行验证。
-
Fixture:即测试固件,用于测试用例环境的搭建和销毁。在测试步骤执行前需要为该测试用例准备环境(SetUp),如启动app或打开浏览器,测试步骤执行后需要恢复环境 (TearDown),如关闭app或浏览器,这时候就需要用到Fixture,使代码更简洁。
-
TestSuite:即测试套件,把需要执行的测试用例集合在一起就是TestSuite。使用TestLoader来加载TestCase到TestSuite中。
-
TextTestRunner:即测试执行器,用于执行测试用例。该模块中提供run方法执行TestSuite中的测试用例,并返回测试用例的执行结果,如运行的用例总数、用例通过数、用例失败数。
-
report:即测试报告。unittest框架没有自带的用于生成测试报告的模块或接口,需要使用第三方的扩展模块HTMLTestRunner。
3,Unittest 断言
断言在自动化测试脚本中是很重要的内容,只有设置正确合适的断言才能获取正确的测试结果。Unittest框架提供了自己的断言方法,如下:
断言方法 |
判断内容 |
---|---|
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) |
注意: