- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Pytest如何编写⽤例
Pytest 中不仅⽀持类写⽤例,也⽀持⽤函数写⽤例,下⾯我们来看⼀下如何编写
在写⽤例之前,我们先了解⼀下 Pytest 的查找规则,这样我们才知道什么样的⽤例才是 Pytest 允许的:
Pytest 默认会从配置的⽬录(pytest 的专⽤配置⽂件中进⾏过配置,后⾯讲)或者从当前⽬录(未配置的情况下)开始递归查找。如
果使⽤命令⾏运⾏⽅式,那么会从命令运⾏的当前⽂件夹开始查找;
1. 如果有配置 norecursedirs (同样在配置⽂件中配置的忽略⽬录),那么会忽略这部分⽬录;
2. 查找符合条件的⽬录下的所有 test_*.py 和 *_test.py ,默认情况下你必须按此要求去命名你的⽂件。当然这并不是不能改的,通过
pytest 专⽤的配置⽂件可以更改测试的命名规则;
3. 接下来,从这些⽂件中查找符合条件的测试项⽬(⽤例):
1. 以 test 开头的函数(可以不⽤带下划线,但是按照 python 的明明规范,带上下划线test_ 更符合 python 代码的审美);
2. 以 Test 开头的测试类(类中不能定义 __init__ ⽅法)中的以 test 开头的测试⽅法
注意:
1. 查找的根⽬录最好没有 __init__.py ,⽽⼦⽬录最好加上__init__.py ,这不会影响查找,但是可能会影响最后测试的加载;
2. 注意测试类中必须没有 __init__ 初始化⽅法;
3. 测试⽂件名中不要有 . ,⽐如不能这样写 test_foo.bar.py
好,简单了解⼀下pytest 的查找⽬录,那么也就是说我们在写测试时可以写为测试函数和测试类
那什么情况下⽤类,什么情况下⽤函数呢?
个⼈喜好,这不是开玩笑,本来就没有必须要求;
你需要引⼊更多⾯向对象的写法,⽐如继承,那么就写为类;
如果你需要把⼀些相关的⽤例集合在⼀起,那么就⽤类
测试类提供更多的抽象功能,这是⾯向对象本⾝就具备的。但这并不是必须的,⼀切取决于你的项⽬情况。你可以先写测试函数,如果遇到
需要⼤量抽象的时候,就⽤测试类
本⾝ Pytest 只是查找符合其规则的测试⽤例,并执⾏测试⽤例中的代码,然后记录运⾏的情况罢了。⾄于测试代码你怎么写,Pytest 也是
管不了的。就像你在测试⽤例中只写⼀个 print(hello pytest) ,这句代码从我们测试的⾓度来看没有任何意义,但是你只要命令上符合⽤例规
则,Pytest 就认为这是⼀个⽤例,并忠实的去执⾏它
测试函数的写法,我们上⼀节已经介绍过了,那么写⼀个类只要符合命名规则和 Python 语法即可:
import pytest
def add(a, b):
return a + b
def teststr():
测试字符串
a , b = 1, 2
assert add(a, b) == 2
def test_int():
测试整型
a , b = , 2
assert add(a, b) == 3
class TestSequence:
def test_list(self):
assert add([ ], [2]) == [ , 2]
def test_tuple(self):
assert add(( ,), (2,)) == ( , 2)
if __name__ == __main__:
pytest.main()
只是这些类⾥⾯不能再有测试固件 setUp 和 tearDown 了,在 Pytest 有专⽤的测试固件的写法。
当然,如果你按照 Unittest 的写法去写 测试⽤例,Pytest ⼀样可以按照 Unittest 的标准运⾏。试试吧!
文档评论(0)