Что такое хорошая библиотека Python, на которой основываются пользовательские утверждения HTTP-теста?

Я конвертирую базу кода из Ruby в Python. В Ruby/RSpec я написал пользовательские "матчи", которые позволяют мне выполнять черно-белые тестовые веб-сервисы следующим образом:

describe 'webapp.com' do
 it 'is configured for ssl' do
 expect('www.webapp.com').to have_a_valid_cert
 end
end

Я бы хотел написать код, чтобы расширить структуру тестирования Python с такой же функциональностью. Я понимаю, что это, вероятно, не будет выглядеть одинаково, конечно. Он не должен быть BDD. "Assert..." все в порядке. Является ли pytest хорошим кандидатом на продление? Есть ли примеры написания расширений, подобных этим?

1 ответ

Да, pytest - хорошая основа для того, чтобы делать то, что вам нужно. Мы используем pytest с запросами и 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 дает вам возможность устанавливатьUp и tearDown. Также вы можете написать встроенный has_status, который может использоваться для простого утверждения чтения.

licensed under cc by-sa 3.0 with attribution.