我正在将代码库从Ruby转换为Python。在Ruby / RSpec中,我编写了自定义“matchers”,它允许我对这样的Web服务进行黑盒测试:
describe 'webapp.com' do
it 'is configured for ssl' do
expect('www.webapp.com').to have_a_valid_cert
end
end
我想编写代码来扩展具有相同功能的Python测试框架。当然,我意识到它可能看起来不一样。它不需要是BDD。 “断言......”就好了。 pytest
是否适合延伸?有没有像这样编写扩展的例子?
答案 0 :(得分:1)
是的,pytest是做你需要的好框架。我们正在使用py {requests和PyHamcrest。看看这个例子:
import pytest
import requests
from hamcrest import *
class SiteImpl:
def __init__(self, url):
self.url = url
def has_valid_cert(self):
return requests.get(self.url, verify=True)
@pytest.yield_fixture
def site(request):
# setUp
yield SiteImpl('https://' + request.param)
# tearDown
def has_status(item):
return has_property('status_code', item)
@pytest.mark.parametrize('site', ['google.com', 'github.com'], indirect=True)
def test_cert(site):
assert_that(site.has_valid_cert(), has_status(200))
if __name__ == '__main__':
pytest.main(args=[__file__, '-v'])
上面的代码使用夹具site
的参数化。同样yeld_fixture
为您提供setUp和tearDown的可能性。您也可以编写内联匹配器has_status
,它可用于轻松读取测试断言。