在ASP.NET Core的测试体系中,TestServer是一个轻量级的HTTP服务器组件,它可以直接在测试进程中启动应用,模拟真实的请求处理流程,非常适合用来做并发场景下的接口测试,不需要额外部署外部服务器,简化了测试环境的搭建流程。
TestServer的基本使用准备
首先需要在测试项目中引入必要的NuGet包,核心的包是Microsoft.AspNetCore.Mvc.Testing,这个包已经包含了TestServer相关的依赖,同时会帮我们自动配置应用的主机和服务器环境。
引入包之后,需要创建一个测试专用的WebApplicationFactory类,这个类会负责启动TestServer并配置应用的服务和中间件,示例代码如下:
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.Extensions.DependencyInjection;
using System;
// 自定义WebApplicationFactory,泛型参数为你的ASP.NET Core启动类
public class TestWebApplicationFactory<TProgram> : WebApplicationFactory<TProgram> where TProgram : class
{
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.ConfigureServices(services =>
{
// 这里可以替换测试专用的服务,比如用内存数据库替换真实数据库
});
}
}
编写基础的TestServer请求测试
完成WebApplicationFactory的配置后,就可以创建TestServer客户端发起请求了,基础的单请求测试代码如下:
using System.Net;
using System.Threading.Tasks;
using Xunit;
public class BasicTest
{
private readonly TestWebApplicationFactory<Program> _factory;
public BasicTest()
{
_factory = new TestWebApplicationFactory<Program>();
}
[Fact]
public async Task Test_Get_WeatherForecast_ReturnsSuccess()
{
// 创建TestServer的HttpClient
var client = _factory.CreateClient();
// 发起GET请求
var response = await client.GetAsync("/weatherforecast");
// 验证响应状态码为200
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
}
}
实现并发测试逻辑
并发测试的核心是同时发起多个请求,验证接口在高并发下的稳定性,比如是否出现数据错误、响应超时或者服务崩溃的情况。我们可以使用Task.WhenAll来并发执行多个请求任务,示例代码如下:
using System.Collections.Generic;
using System.Net;
using System.Threading.Tasks;
using Xunit;
public class ConcurrencyTest
{
private readonly TestWebApplicationFactory<Program> _factory;
public ConcurrencyTest()
{
_factory = new TestWebApplicationFactory<Program>();
}
[Fact]
public async Task Test_Concurrent_Request_Stability()
{
// 并发请求数量
int concurrentCount = 100;
var client = _factory.CreateClient();
// 存储所有请求任务
var tasks = new List<Task<HttpResponseMessage>>();
for (int i = 0; i < concurrentCount; i++)
{
// 每个任务发起一次POST请求,模拟提交数据
tasks.Add(client.PostAsync("/api/order", new StringContent("{"productId":1,"count":1}", System.Text.Encoding.UTF8, "application/json")));
}
// 等待所有请求完成
var responses = await Task.WhenAll(tasks);
// 验证所有请求的响应状态码都是200或者201
foreach (var response in responses)
{
Assert.True(response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.Created);
}
}
}
并发测试的注意事项
在使用TestServer做并发测试时,有几个点需要特别注意:
- 测试环境的服务配置尽量和生产环境一致,比如数据库连接池大小、中间件配置等,否则测试结果可能不符合真实场景的表现。
- 如果接口涉及到共享资源操作,比如扣减库存、更新账户余额,需要额外验证并发下的数据一致性,避免超卖或者数据错误的问题。
- 并发数量不要设置得过高,避免测试进程本身资源不足导致测试结果失真,可以从低并发逐步提升验证接口的承载能力。
- 测试完成后要及时释放TestServer和相关资源,避免占用过多系统内存,可以在测试类的Dispose方法中释放factory实例。
适用场景说明
TestServer的并发测试适合在单元测试和集成测试阶段使用,能够快速验证接口的基础并发能力,但是如果需要模拟更高量级的并发,比如上万级别的请求,还是建议使用专业的压测工具比如JMeter、Locust等。TestServer的优势在于可以和测试代码深度集成,方便在测试过程中验证业务逻辑的正确性,同时不需要额外部署环境,提升测试效率。
TestServerASP.NET_Core并发测试c#修改时间:2026-06-22 20:12:47