В мире разработки программного обеспечения и обеспечения качества тестирование является важнейшим аспектом обеспечения надежности и функциональности приложений. В этой области часто встречаются два термина: «Контрактное тестирование» и «Тестирование API». Хотя на первый взгляд они могут показаться похожими, они служат разным целям и используют разные методологии. В этой статье блога мы раскроем тайну этих двух подходов к тестированию, предоставим примеры кода и обсудим различные методы, связанные с каждым из них. Итак, пристегнитесь и приступим!
Понимание тестирования API.
Тестирование API (интерфейса прикладного программирования) — это широко известный метод, используемый для проверки поведения и функциональности API. Он включает отправку запросов к конечным точкам API и проверку ответов на предмет соответствия ожидаемым критериям. Тестирование API обычно выполняется следующими методами:
- Модульное тестирование. Этот метод фокусируется на изолированном тестировании отдельных компонентов API, таких как функции или методы. Он проверяет правильность кода на детальном уровне.
Пример (Python):
def test_get_user():
response = requests.get('https://api.example.com/users/1')
assert response.status_code == 200
assert response.json()['id'] == 1
- Интеграционное тестирование. Интеграционные тесты проверяют взаимодействие между различными компонентами API, обеспечивая их слаженную работу. Он проверяет, правильно ли работают несколько API при интеграции.
Пример (JavaScript – использование платформы Jest):
test('POST /users creates a new user', async () => {
const response = await axios.post('https://api.example.com/users', { name: 'John Doe' });
expect(response.status).toBe(201);
expect(response.data.name).toBe('John Doe');
});
Понимание тестирования контракта.
С другой стороны, тестирование контракта фокусируется на тестировании контракта или соглашения между двумя взаимодействующими сторонами, обычно между поставщиком услуг (производителем API) и потребителем услуги (потребителем API). Он проверяет соблюдение обеими сторонами согласованного контракта. Вот несколько методов, связанных с тестированием контрактов:
- Тестирование контрактов, управляемое потребителем. В этом подходе потребитель API определяет ожидаемый контракт, включая форматы запросов и ответов, и передает его поставщику для проверки. Это гарантирует согласие обеих сторон.
Пример (Ruby – использование платформы Pact):
# Consumer-side test
pact = Pact::Consumer::Pact.new(consumer: 'Consumer', provider: 'Provider')
pact.given('a user exists')
.upon_receiving('a request to get a user')
.with(method: :get, path: '/users/1')
.will_respond_with(status: 200, body: { id: 1 })
# Provider-side verification
pact.verify(provider: 'Provider')
- Тестирование контракта на стороне поставщика. В этом методе поставщик API определяет контракт, а потребитель проверяет, соответствуют ли его запросы и ответы указанному контракту.
Пример (Java – использование Spring Cloud Contract):
// Provider-side contract
Contract.make {
request {
method 'GET'
url '/users/1'
}
response {
status 200
body(
id: 1
)
}
}
// Consumer-side verification
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureStubRunner(ids = "com.example:provider:1.0.0:stubs", stubsMode = StubRunnerProperties.StubsMode.LOCAL)
public class UserApiClientTest {
// Test code goes here
}