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