Sobes.tech
Middle

Кадом дигар асбобҳо барои санҷиши шартнома вуҷуд доранд?

sobes.tech AI

Ҷавоб аз AI

  • Pact: Популярен инструмент за тестиране на договори Consumer-Driven Contracts (CDC). Поддържа множество езици и платформи.
  • Spring Cloud Contract: Инструмент за тестиране на договори в екосистемата Spring. Може да се използва за CDC и тестиране на договори от страна на производител.
  • Swagger/OpenAPI: Спецификация, описваща API. Може да се използва за генериране на клиентски stub-ове и валидиране на отговори.
  • JSON Schema: Език за описание на структурата на JSON документи. Използва се за валидиране на договори.
  • Protobuf (Protocol Buffers): Формат за сериализация, който може да се използва за определяне на договори между услуги.
  • gRPC: RPC рамка с използване на Protobuf за определяне на договори на услуги.

Сравнение на Pact и Spring Cloud Contract:

Характеристика Pact Spring Cloud Contract
Подход CDC (Consumer-Driven Contracts) CDC и тестиране на договори от страна на производител
Екосистема Независим от езика и рамката Ориентиран към екосистемата Spring
Генериране на stub-ове/мокове Да (от страна на потребителя) Да (от страна на производителя)
Контрактен брокер Pact Broker Git, Maven Central и други
Поддръжка на протоколи HTTP, съобщения HTTP, съобщения

Пример за използване на Pact (DSL):

// Дефиниция на договор от страна на потребителя в Ruby с Pact
Pact.service_consumer "Consumer Service" do
  has_pact_with "Provider Service" do
    mock_service "provider_service_mock" do
      port 1234
    end
  end
end

describe "GET /data" do
  преди do
    provider_service_mock.upon_receiving "заявка за данни" do
      with(method: :get, path: "/data")
    end.will_respond_with(
      status: 200,
      headers: { "Content-Type" => "application/json" },
      body: { message: like("Hello,") } // Използва се за съответствие
    )
  end

  it "трябва да получи данни от доставчика" do
    # Вашият код за потребителя, който прави заявката
    # ...
    expect(@response.status).to eq(200)
    expect(@response.body).to include("Hello,")
  end
end