python的单元测试框架

1、unittest是Python内置的标准类库。它的API跟Java的JUnit、.net的NUnit,C++的CppUnit很相似。

   通过继承unittest.TestCase来创建一个测试用例。参考https://docs.python.org/2/library/unittest.html

   需要使用特定类模板

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会自动识别源文件,目录或包中的测试用例。任何符合正则表达式:

  1. (?:^|[b_.-])[Tt]est  

的类、函数、文件或目录,以及TestCase的子类都会被识别并执行。

运行:

nosetests [文件]

nosetests [目录]

如果不加目录,默认执行当前目录下的所有符合nose条件的用例,

如果加目录,则运行指定目录里面符合nose条件的用例

常用参数

-v 把运行中的具体过程输出nosetests -v

-s 把测试用例中的print输出打印到控制台,这个调试的时候还是挺方便的

-w ,指定一个目录运行测试。目录可以是相对路径或绝对路径

nose里面常用的工具有很多函数,比如类似unittest的assertEqual

使用方法

from nose import tools

然后看下里面有这么多的方法

assert_almost_equal
assert_almost_equals
assert_dict_contains_subset
assert_dict_equal
assert_equal
assert_equals
assert_false
assert_greater
assert_greater_equal
assert_in
assert_is
assert_is_instance
assert_is_none
assert_is_not
assert_is_not_none
assert_items_equal
assert_less
assert_less_equal
assert_list_equal
assert_multi_line_equal
assert_not_almost_equal
assert_not_almost_equals
assert_not_equal
assert_not_equals
assert_not_in
assert_not_is_instance
assert_not_regexp_matches
assert_raises
assert_raises_regexp
assert_regexp_matches
assert_sequence_equal
assert_set_equal
assert_true
assert_tuple_equal
eq_
istest
make_decorator
nontrivial
nontrivial_all
nottest
ok_
raises
set_trace
timed
trivial
trivial_all
with_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

原文地址:https://www.cnblogs.com/shengulong/p/6667376.html