Django中写自动化测试可以使用:doctests或unit tests。自动化测试的逻辑是,将测试数据传入待测试函数,执行后,以输出结果与预期是否一致,作为判断测试是否通过的标准。这里有几个关键点,(1)需要测试数据,(2)需要指明待测试函数,(3)需要给出预期的结果。
1. 测试驱动开发
测试驱动开发是一个迭代的开发周期,先编写自动化测试代码,再填充功能。
- 第一步,先编写测试
- 第二步,查看测试失败的地方
- 第三步,编写足够的代码以使测试通过
- 第四步,再次测试
- 第五步,代码重构
- 第六步,重复以上操作
2. doctests
doctests是Python内置的测试模块。由普通部分和执行部分组成。
- 普通部分为注释部分
- 执行部分由’»>’(python shell提示符)或’…‘提示符区分。
doctest搜索各个模块、类和函数中的docstring,把每个可执行部分当做一次测试范例运行。再将实际运行值和期望值,对比作为一次运行结果。myfunction.py
|
|
|
|
v参数表示开启啰嗦模式,可以查看详情,如果不使用v参数,测试成功后不会有任何提示。如果测试不通过,则打印错误报告。
3. unit tests
Django的单元测试是基于类实现的,运行测试时,test runner会在目录的test*.py文件中寻找单元测试用例类(继承自TestCase),在测试类中执行test开头的函数。Django内置了一些测试辅助类,比如Test Client、TestCase、Email Service。通过Client,可以方便的发起一个get或者post请求,并取得返回结果。TestCase是对unittest.TestCase进行了封装,省去了很多重复要写的代码,新增了一个self.client。Email Service提供了方便的邮件发送的方法。
3.1 怎样写单元测试
Model部分的测试
|
|
View部分的测试
|
|
3.2 运行单元测试
|
|
Django会自动在Model中创建测试数据,测试完后清除。如果想要保留测试数据,请执行单元测试时,带上–keepdb参数。
4. 参考
- https://docs.python.org/3/library/doctest.html
- https://docs.djangoproject.com/en/dev/topics/testing/