Python常见的测试框架有哪些
这篇文章主要介绍“Python常见的测试框架有哪些”,在日常操作中,相信很多人在Python常见的测试框架有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python常见的测试框架有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
测试的常用规则一个测试单元必须关注一个很小的功能函数,证明它是正确的;
每个测试单元必须是完全独立的,必须能单独运行。这样意味着每一个测试方法必须重新加载数据,执行完毕后做一些清理工作。通常通过setUp()和setDown()方法处理;
编写执行快速的测试代码。在某些情况下,测试需要加载复杂的数据结构,而且每次执行的时候都要重新加载,这个时候测试执行会很慢。因此,在这种情况下,可以将这种测试放置一个后台的任务中。
采用测试工具并且学着怎么使用它。
在编写代码前执行完整的测试,而且在编写代码后再重新执行一次。这样能保证你后来编写的代码不会破坏任何事情;
在提交代码前执行完整的测试;
如果在开发期间被打断了工作,写一个打断的单元测试,关于你下一步将要开发的。当你回来工作时,你能知道上一步开发到的指针;
单元测试函数使用长的而且具有描述性的名字。在正式执行代码中,可能使用square()或sqr()取名,但是在测试函数中,你必须取像test_square_of_number_2()、test_square_negativer_number()这些名字,这些名字描述更加清楚;
测试代码必须具有可读性;
单元测试对新进的开发人员来说是工作指南。
单元测试的目的是对一个模块、一个函数或者一个类来进行正确性检验,如果单元测试通过,说明我们测试的对象能够正常工作。如果单元测试不通过,要么测试对象有 bug,要么测试条件输入不正确。下面小编为大家介绍 Python 的几种测试框架。
1. unittestunittest和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. unittest2unittest2 可以说是一个针对 unittest 测试框架新特性的补丁。它很大程度上和 unittest 都类似。然后还添加了一些 unittest 没有的方法。
参考文档:http://pytest.org/latest/
看了一下,pytest文档还是蛮详细的。比较关注的一点是,pytest 直接可以通过@pytest.mark.parametrize 进行参数化,而unittest 则需要借助DDT。
示例:
definc(x):
returnx+1
deftest_answer():
assertinc(3)==5
执行如下:
$pytest4. nose
=======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========
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. doctestdoctest 模块会搜索那些看起来像交互式会话的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常见的测试框架有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。