【问题标题】:Add integration tests for API gateway endpoints为 API 网关端点添加集成测试
【发布时间】:2023-01-02 14:43:06
【问题描述】:

我已经实施了一个microservices-based 项目。 API gateway(用 .Net Core 编写)中有多个端点,我想测试这些端点。我有一个名为功能测试的项目,我测试需要多个服务才能工作的流程。

我正在使用 TestServer 对不同的服务进行 http 调用,我主要使用这些服务来检查 IntegrationEvents 是否得到正确处理,但我不能将它用于 API gateway 端点:

    using Microsoft.AspNetCore.TestHost.TestServer identityServer = new IdentityScenariosBase().CreateServer();
    using Microsoft.AspNetCore.TestHost.TestServer productServer = new ProductScenariosBase().CreateServer();
        
    HttpClient identityClient = identityServer.CreateClient();    
    HttpClient productClient = productServer .CreateClient();

    // Some other codes

而且我知道,作为一种替代方法,我可以在像上面的代码示例这样的测试方法中调用 API gateway 端点的所有进程,但我想对一个端点进行一个简单的 http 调用API gateway 并得到结果。

【问题讨论】:

    标签: c# asp.net-core microservices integration-testing api-gateway


    【解决方案1】:

    如果你想对你的端点进行HTTP调用API网关得到结果,就可以使用HttpClient向API网关发送请求并接收响应。以下是如何使用 HttpClient 执行此操作的示例:

    using System.Net.Http;
    
    // ...
    
    HttpClient httpClient = new HttpClient();
    HttpResponseMessage response = await httpClient.GetAsync("http://your-api-gateway-endpoint");
    
    if (response.IsSuccessStatusCode)
    {
        string responseContent = await response.Content.ReadAsStringAsync();
        // do something with the response content
    }
    else
    {
        // handle error
    }
    

    您还可以使用 HttpClient 通过适当的方法(例如 PostAsync、PutAsync、DeleteAsync)发送其他类型的 HTTP 请求(例如 POSTPUTDELETE)。

    我希望这有帮助!如果您还有其他问题,请告诉我。

    更新 - 使用 WebApplicationFactory

    Web应用工厂是一个类,它提供了一种在内存中创建 ASP.NET Core Web 应用程序实例以进行测试的方法。您可以使用 WebApplicationFactory 为您的 Web 应用程序编写功能测试,方法是创建一个派生自 WebApplicationFactory 的测试类,然后使用该测试类创建一个服务器和一个客户端,您可以使用它们向您的应用程序发送 HTTP 请求并接收响应。

    这是您如何使用的示例Web应用工厂编写功能测试:

    using Microsoft.AspNetCore.Mvc.Testing;
    using System.Net.Http;
    using Xunit;
    
    public class MyTests : IClassFixture<WebApplicationFactory<Startup>>
    {
        private readonly WebApplicationFactory<Startup> _factory;
    
        public MyTests(WebApplicationFactory<Startup> factory)
        {
            _factory = factory;
        }
    
        [Fact]
        public async Task Test1()
        {
            // Arrange
            HttpClient client = _factory.CreateClient();
    
            // Act
            HttpResponseMessage response = await client.GetAsync("/");
    
            // Assert
            response.EnsureSuccessStatusCode();
            string responseContent = await response.Content.ReadAsStringAsync();
            Assert.Equal("Hello, World!", responseContent);
        }
    }
    

    在此代码中,测试类派生自 WebApplicationFactory&lt;Startup&gt;,其中 Startup 是定义 Web 应用程序配置方式的类。测试类有一个构造函数,它以 WebApplicationFactory&lt;Startup&gt; 的实例作为参数,这个实例用于创建一个HTTP客户端您可以使用它来向您的应用程序发送 HTTP 请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-24
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      相关资源
      最近更新 更多