这篇文章主要介绍“Python常见的测试框架有哪些”,在日常操作中,相信很多人在Python常见的测试框架有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python常见的测试框架有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

测试的常用规则

一个测试单元必须关注一个很小的功能函数,证明它是正确的;

每个测试单元必须是完全独立的,必须能单独运行。这样意味着每一个测试方法必须重新加载数据,执行完毕后做一些清理工作。通常通过setUp()和setDown()方法处理;

编写执行快速的测试代码。在某些情况下,测试需要加载复杂的数据结构,而且每次执行的时候都要重新加载,这个时候测试执行会很慢。因此,在这种情况下,可以将这种测试放置一个后台的任务中。

采用测试工具并且学着怎么使用它。

在编写代码前执行完整的测试,而且在编写代码后再重新执行一次。这样能保证你后来编写的代码不会破坏任何事情;

在提交代码前执行完整的测试;

如果在开发期间被打断了工作,写一个打断的单元测试,关于你下一步将要开发的。当你回来工作时,你能知道上一步开发到的指针;

单元测试函数使用长的而且具有描述性的名字。在正式执行代码中,可能使用square()或sqr()取名,但是在测试函数中,你必须取像test_square_of_number_2()、test_square_negativer_number()这些名字,这些名字描述更加清楚;

测试代码必须具有可读性;

单元测试对新进的开发人员来说是工作指南。

单元测试的目的是对一个模块、一个函数或者一个类来进行正确性检验,如果单元测试通过,说明我们测试的对象能够正常工作。如果单元测试不通过,要么测试对象有 bug,要么测试条件输入不正确。下面小编为大家介绍 Python 的几种测试框架。

1. unittest

unittest和JUnit类似,可以说是python的标准单元测试框架,所以有时也被人称为PyUnit。它使用起来和xUnit家族其他成员类似。用的人也比较多。兼容python2以及python3。

个人比较喜欢用这个,主要之前用过JUnit,用这个上手就很快。而且属于python自动集成,不用额外的安装包,感觉是该有的都有了,用着方便。

示例:

importunittest

classTestStringMethods(unittest.TestCase):

deftest_upper(self):

self.assertEqual('foo'.upper(),'FOO')

deftest_isupper(self):

self.assertTrue('FOO'.isupper())

self.assertFalse('Foo'.isupper())

deftest_split(self):

s='helloworld'

self.assertEqual(s.split(),['hello','world'])

#checkthats.splitfailswhentheseparatorisnotastring

withself.assertRaises(TypeError):

s.split(2)

if__name__=='__main__':

unittest.main()

2. unittest2

unittest2 可以说是一个针对 unittest 测试框架新特性的补丁。它很大程度上和 unittest 都类似。然后还添加了一些 unittest 没有的方法。

3. pytest

参考文档:http://pytest.org/latest/

看了一下,pytest文档还是蛮详细的。比较关注的一点是,pytest 直接可以通过@pytest.mark.parametrize 进行参数化,而unittest 则需要借助DDT。

示例:

definc(x):

returnx+1

deftest_answer():

assertinc(3)==5

执行如下:

$pytest
=======testsessionstarts========
platformlinux--Python3.x.y,pytest-3.x.y,py-1.x.y,pluggy-0.x.y
rootdir:$REGENDOC_TMPDIR,inifile:
collected1item
test_sample.pyF
=======FAILURES========
_______test_answer________
deftest_answer():
>assertinc(3)==5
Eassert4==5
E+where4=inc(3)
test_sample.py:5:AssertionError
=======1failedin0.12seconds========
4. nose

nose 扩展了 unittest,从而使得测试更容易。

一般可以用 unittest 方式写用例,写完之后用 nose 来执行。nose 的测试收集方式还是很方便的。

还有一个特定就是,nose 可以采用@with_setup()来定义方法的 setup 和 teardown。

示例:

defsetup_func():

"setuptestfixtures"

defteardown_func():

"teardowntestfixtures"

@with_setup(setup_func,teardown_func)

deftest():

"test..."

5. doctest

doctest 模块会搜索那些看起来像交互式会话的Python代码片段,然后尝试执行并验证结果。

doctest中,如果要写测试用例,只需要在写在以''''''包围的文档注释即可,也就是可以被__doc__这个属性引用到的地方。这点比较特别,跟其他单元测试框架都不一样。但是我觉得这样的话就注定了doctest不适合大型测试,因为做不到代码和测试的分离。

importdoctest

"""

Thisisthe"example"module.

Theexamplemodulesuppliesonefunction,factorial().Forexample,

>>>factorial(5)

120

"""

deffactorial(n):

"""Returnthefactorialofn,anexactinteger>=0.

>>>[factorial(n)forninrange(6)]

[1,1,2,6,24,120]

>>>factorial(30)

265252859812191058636308480000000

>>>factorial(-1)

Traceback(mostrecentcalllast):

...

ValueError:nmustbe>=0

FactorialsoffloatsareOK,butthefloatmustbeanexactinteger:

>>>factorial(30.1)

Traceback(mostrecentcalllast):

...

ValueError:nmustbeexactinteger

>>>factorial(30.0)

265252859812191058636308480000000

Itmustalsonotberidiculouslylarge:

>>>factorial(1e100)

Traceback(mostrecentcalllast):

...

OverflowError:ntoolarge

"""

importmath

ifnotn>=0:

raiseValueError("nmustbe>=0")

ifmath.floor(n)!=n:

raiseValueError("nmustbeexactinteger")

ifn+1==n:#catchavaluelike1e300

raiseOverflowError("ntoolarge")

result=1

factor=2

whilefactor<=n:

result*=factor

factor+=1

returnresult

if__name__=="__main__":

doctest.testmod(verbose=True)

verbose参数用于控制是否输出详细信息,默认为False,如果不写,那么运行时不会输出任何东西,除非测试fail。

输出如下:

Trying:
[factorial(n)forninrange(6)]
Expecting:
[1,1,2,6,24,120]
ok
Trying:
factorial(30)
Expecting:
265252859812191058636308480000000
ok
Trying:
factorial(-1)
Expecting:
Traceback(mostrecentcalllast):
...
ValueError:nmustbe>=0
ok
Trying:
factorial(30.1)
Expecting:
Traceback(mostrecentcalllast):
...
ValueError:nmustbeexactinteger
ok
Trying:
factorial(30.0)
Expecting:
265252859812191058636308480000000
ok
Trying:
factorial(1e100)
Expecting:
Traceback(mostrecentcalllast):
...
OverflowError:ntoolarge
ok
1itemshadnotests:
__main__
1itemspassedalltests:
6testsin__main__.factorial
6testsin2items.
6passedand0failed.
Testpassed.

到此,关于“Python常见的测试框架有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!