请求提供Pact Flow发布Dot Net契约及服务端验证代码
.NET 下 Pact Flow 契约发布与服务端验证代码示例
一、Consumer 端发布契约到 Pact Flow
1. 安装依赖
先安装必要的NuGet包:
Install-Package PactNet Install-Package PactNet.Native
2. 契约编写与发布代码
using PactNet; using PactNet.Outputters; // 初始化Pact构建器 var pact = new PactBuilder(new PactConfig { PactDir = "./pacts", // 生成的契约文件存放目录 Outputters = new List<IOutput> { new ConsoleOutput() } // 输出日志到控制台 }) .ServiceConsumer("DotNet Order Consumer") // 消费者服务名称 .HasPactWith("DotNet Order Provider"); // 对应的提供者服务名称 // 定义具体的契约交互 await pact.UponReceiving("请求获取指定ID的订单") .Given("ID为123的订单已存在") .WithRequest(HttpMethod.Get, "/api/orders/123") .WithHeaders(new Dictionary<string, object> { { "Accept", "application/json" } }) .WillRespond() .WithStatus(HttpStatusCode.OK) .WithHeaders(new Dictionary<string, object> { { "Content-Type", "application/json; charset=utf-8" } }) .WithJsonBody(new { Id = 123, ProductName = "测试商品", Quantity = 2, Total = 99.98 }); // 生成本地契约文件 await pact.BuildAsync(); // 发布契约到Pact Flow var pactPublisher = new PactPublisher(new PactPublisherConfig { PactBrokerUri = "https://你的Pact Flow Broker地址", BrokerToken = "你的Pact Flow API令牌" // 从Pact Flow控制台获取 }); await pactPublisher.PublishPactsAsync(new PublishPactOptions { PactDirectory = "./pacts", ConsumerVersion = "1.0.0", // 当前消费者服务版本 Tags = new List<string> { "dev", "test" } // 给契约打标签,用于环境区分 });
二、Provider 端契约验证实现
1. 安装依赖
安装Provider验证所需的NuGet包:
Install-Package PactNet.Provider Install-Package PactNet.Native
2. 验证代码示例
using PactNet.Provider; using PactNet.Verifier; // 初始化验证器配置 var config = new PactVerifierConfig { Outputters = new List<IOutput> { new ConsoleOutput() }, ProviderVersion = "1.0.0" // 当前提供者服务版本 }; using var verifier = new PactVerifier(config); verifier .ServiceProvider("DotNet Order Provider", "http://localhost:5000") // 本地运行的提供者服务地址 .WithPactBrokerSource(new Uri("https://你的Pact Flow Broker地址"), options => { options.SetBearerToken("你的Pact Flow API令牌"); // 指定要验证的消费者契约版本(这里取dev标签下的最新版本) options.ConsumerVersionSelectors(new List<ConsumerVersionSelector> { new ConsumerVersionSelector { Tag = "dev", Latest = true } }); }) .Verify(); // 执行验证
3. 注意事项
- 执行验证前,确保提供者服务已启动并运行在指定地址(示例中为
http://localhost:5000) - 契约中的请求路径、参数、响应结构需要和实际服务逻辑匹配
- API令牌需要从Pact Flow控制台生成,确保有对应的读写权限
内容的提问来源于stack exchange,提问作者Tushar Adsul
相关产品推荐
相关产品推荐

