python的单元测试模块---unittest

Python的Unittest单元测试

一个项目在最终发布前必须要进行测试,为了在测试中测试应用的安全性,正确性,有效性。需编写相应的测试代码来检测
所有功能是否符合要求。

Python中使用的单元测试模块最多的是unittest,包括一些主流web框架,例如Django中的单元测试django.test也是继承
于unittest模块的。

最近使用Django框架,想测试功能,发现django.test是继承与unittest的,所以今天学习下unittest模块的一些用法。

unittest的官方文档:

https://docs.python.org/3/library/unittest.html#assert-methods

注:要多阅读阅读英文文档,很有帮助的。

一、Unittest的简要介绍

unittest提供了自动化测试,共享测试的设置,关闭代码测试,集合的聚合测试以及独立于报告框架的测试。

二、如何使用Unittest

1.命名约束:所有的测试实例的命名要以test_开头,这样能让测试运行器识别哪些方法作为测试方法。

一个简单的测试案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import unittest

class TestMethods(unittest.TestCase):

def test_upper(self):
self.assertEqual('my name is syz'.upper(), 'MY NAME IS SYZ')

def test_isupper(self):
self.assertTrue('SYZ'.isupper())
self.assertFalse('syz'.isupper())

def test_split(self):
s = 'I love zjw'
self.assertEqual(s.split(' '), ['I', 'love','zjw'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
print('split error')

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

说明:

① 每一个测试的关键点是回调assertEqual()函数,来检查得到的结果和预期的结果是否符合

assertTrue()assertFalse() 去验证是否满足条件。

assertRaises()用于验证当产生异常时,指定的异常是否被捕捉到。

④ 使用这些assert方法,而不是assert属性的好处在于可以生成多个异常结果形成一个报告,因为assert属性是针对一个表达式。

⑤ unittest.main()提供了一个命令行接口去测试脚本。

以上就是一个简单的测试用例,但也能够满足大多数测试场景。

三、学习命令行接口调用测试

1.命令行启动测试案例有三种:

1
2
3
4
5
python -m unittest test_module1 test_module2
python -m unittest test_module.TestClass
python -m unittest test_module.TestClass.test_method
python -m unittest test/test_func.py
python -m unittest -v test_moudle1

注:

python -m相当于import模块,执行的可以是一个模块。

② 后面可以接多个模块;也可以接模块中的类,或者类的测试方法,当然也可以是py脚本

-v表示verbosity(冗余),该指令表示详细的针对每一个测试用例显示其结果。

介绍几个常用的指令:

-c,强制停着,产生 KeyboardInterrupt异常

-f,当遇见第一个失败的测试停止

-b,主要用来在运行期间缓存错误的异常,当运行结束,输出结果后再清空缓存区。

今天先学到这,先去结合django实践一下咯~


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!