You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置xUnit实现负载测试仅在指定条件下执行

xUnit 负载测试条件执行实现方案(无需条件编译)

完全可以通过xUnit原生特性实现需求,不需要额外的条件编译配置,以下是两种可落地的实现方案:

方案一:环境变量自动判断(无需修改IDE配置,更推荐)

利用构建服务器默认存在的CI环境变量,配合自定义测试特性实现自动判断:

  1. 首先定义负载测试专属的Fact特性:
public class LoadTestFactAttribute : FactAttribute
{
    public LoadTestFactAttribute()
    {
        // 主流构建服务器都会预置值为true的CI环境变量
        bool isBuildServer = Environment.GetEnvironmentVariable("CI")?.Equals("true", StringComparison.OrdinalIgnoreCase) ?? false;
        // 非构建服务器环境下默认标记跳过
        if (!isBuildServer)
        {
            Skip = "负载测试默认仅在构建服务器执行,手动显式触发可忽略该限制";
        }
    }
}

如果是用Theory的负载测试,可以对应封装LoadTestTheoryAttribute。
2. 替换负载测试的特性标记:

public class MyLoadTests
{
    [LoadTestFact]
    public void HighConcurrencyAccessTest()
    {
        // 负载测试逻辑
    }
}

该方案天然满足所有需求:

  • 构建服务器存在CI环境变量,不会跳过负载测试,始终执行
  • 本地点击「运行全部测试」时,xUnit会自动跳过所有带Skip标记的负载测试
  • 本地手动选中单个/多个负载测试触发运行时,IDE测试运行器会自动忽略Skip属性,直接执行测试

方案二:Trait标记+过滤器配置

适合需要灵活调整测试运行范围的场景:

  1. 定义负载测试的Trait标记:
public class LoadTestAttribute : TraitAttribute
{
    public LoadTestAttribute() : base("TestCategory", "LoadTest") {}
}
  1. 给所有负载测试加该标记:
[LoadTest]
public class MyLoadTests
{
    [Fact]
    public void HighConcurrencyAccessTest()
    {
        // 负载测试逻辑
    }
}
  1. 配置本地IDE默认测试过滤器:在Visual Studio/Rider的测试设置中,新增默认过滤规则TestCategory!=LoadTest,点击「运行全部测试」时会自动排除负载测试。
  2. 配置构建服务器的测试运行命令:执行dotnet test时不需要加任何过滤参数,或者显式指定包含所有测试即可,例如:
dotnet test --filter "TestCategory=LoadTest|TestCategory!=LoadTest"
  1. 本地手动执行负载测试时,直接在测试运行器中选中LoadTest分类下的测试,或者临时清空默认过滤器运行全部测试即可。

内容的提问来源于stack exchange,提问作者mu88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:57:05