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