什么是基于自定义http测试断言的优秀Python库?

时间:2014-01-07 21:12:46

标签: python tdd pytest

我正在将代码库从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是否适合延伸?有没有像这样编写扩展的例子?

1 个答案:

答案 0 :(得分:1)

是的,pytest是做你需要的好框架。我们正在使用py {requestsPyHamcrest。看看这个例子:

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,它可用于轻松读取测试断言。