1、unittest是Python内置的标准类库。它的API跟Java的JUnit、.net的NUnit,C++的CppUnit很相似。
通过继承unittest.TestCase来创建一个测试用例。参考
需要使用特定类模板
2、Doctest doctest 模块会搜索那些看起来像交互式会话的 Python 代码片段,然后尝试执行并验证结果.即使从没接触过 doctest,我们也可以从这个名字中窥到一丝端倪。“它看起来就像代码里的文档字符串(docstring)一样” 如果你这么想的话,就已经对了一半了。
3、pytest是unittest的替代工具。
尽管它是一个功能丰富、灵活的测试框架,但是它的语法很简单。创建一个单元测试就像编写一个模块一样。相比unittest,实现相同的测试功能,pytest做的事情更少。
pytest 在命令行中有彩色输出
不需要使用特定类模板
setup/teardown 语法与 unittest 的兼容性不如 nose 高,实现方式也不如 nose 直观
4、Nose是对unittest的扩展,使得python的测试更加简单。nose自动发现测试代码并执行,nose提供了大量的插件,比如测试输出的xUnitcompatible,覆盖报表等等。
不需要使用特定类模板
不需要unittest那种必须有固有的格式,他只需要文件,类名,方法名等含有test就可以
nosetests 兼容对 doctest 和 unittest 测试脚本的解析运行
nose是开源的测试库,比unittest更为强大,其运行顺序按 setUp->test_func_1->test_func_2->...->tearDown
顺序执行。其中setUp是初始化定义各个参数的,tearDown是执行完各个测试函数再执行的,中间的 test_func_*
就是自己要测试的函数
nose会自动识别源文件,目录或包中的测试用例。任何符合正则表达式:
- (?:^|[b_.-])[Tt]est
的类、函数、文件或目录,以及TestCase的子类都会被识别并执行。
运行:
nosetests [文件]
nosetests [目录]
如果不加目录,默认执行当前目录下的所有符合nose条件的用例,
如果加目录,则运行指定目录里面符合nose条件的用例
常用参数
-v 把运行中的具体过程输出nosetests -v
-s 把测试用例中的print输出打印到控制台,这个调试的时候还是挺方便的
-w ,指定一个目录运行测试。目录可以是相对路径或绝对路径
nose里面常用的工具有很多函数,比如类似unittest的assertEqual
使用方法
from nose import tools
然后看下里面有这么多的方法
assert_almost_equalassert_almost_equalsassert_dict_contains_subsetassert_dict_equalassert_equalassert_equalsassert_falseassert_greaterassert_greater_equalassert_inassert_isassert_is_instanceassert_is_noneassert_is_notassert_is_not_noneassert_items_equalassert_lessassert_less_equalassert_list_equalassert_multi_line_equalassert_not_almost_equalassert_not_almost_equalsassert_not_equalassert_not_equalsassert_not_inassert_not_is_instanceassert_not_regexp_matchesassert_raisesassert_raises_regexpassert_regexp_matchesassert_sequence_equalassert_set_equalassert_trueassert_tuple_equaleq_istestmake_decoratornontrivialnontrivial_allnottestok_raisesset_tracetimedtrivialtrivial_allwith_setup
mock
那mock是啥子东西,mock可以用来模拟不同的资源,比如我们要调用数据库进行增删改查,而创建一个数据库,写入真实数据进行操作未免代价太大,这时候mock就起作用了。广泛的说,mock可以代替那些不易操作的资源
参考:
1、http://www.tuicool.com/articles/2uIv6v2
2、http://www.tuicool.com/articles/u6ZJry
3、https://my.oschina.net/lionets/blog/269174