用于 Visual Studio 负载测试的 C# 线程安全随机长

Posted

技术标签:

【中文标题】用于 Visual Studio 负载测试的 C# 线程安全随机长【英文标题】:C# Thread safe random long for use in Visual Studio Load Test 【发布时间】:2016-11-07 10:12:46 【问题描述】:

我正在使用 Visual Studio 负载测试(企业版)通过 REST 调用执行 API 负载测试。我正在测试的端点之一需要每个 POST 的唯一长值,范围为 100000000000000 到 999999999999999。

根据 Visual Studio 负载测试线程的请求,使用基于系统时钟种子的随机生成器会导致大量重复(对于 60 秒内的 4000 个随机数,我看到了数百个重复)。

有谁知道我如何实现一个线程安全的随机生成器,以便在 Visual Studio 负载测试中使用?

【问题讨论】:

用锁把它包在一个类中? lastValue + 1 为什么使用随机数? 是的,我漏掉了“unique”这个词,random 根本不可用,不能保证 Random 类会提供唯一的值,事实上它几乎可以保证你会得到重复。 在这里显示您的代码会很棒。 【参考方案1】:

您可以使用静态变量并为每个请求增加其值。

【讨论】:

你可以加locking【参考方案2】:

而不是随机的,如果您只需要不同的数字,那么您可以使用上下文值$WebTestIteration。如果使用了多个代理,那么您可以使用诸如$WebTestIteration * numberOfAgents + $AgentId 之类的东西。当然,这两个值在上下文中,所以表达式更像

int.Parse(e.WebTest.Context["$WebTestIteration"]) * numberOfAgents
    + int.Parse(e.WebTest.Context["$AgentId")

【讨论】:

【参考方案3】:

试试Interlocked:

Interlocked.Increment(ref longCount);

【讨论】:

以上是关于用于 Visual Studio 负载测试的 C# 线程安全随机长的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 负载测试启动和清理方法

命令行的 Visual Studio 负载测试设置参数

是否可以将 Visual Studio 负载测试从编码转换为可视化?

Visual Studio 云负载测试平均测试时间似乎很长

C# 6.0 功能不适用于 Visual Studio 2015

Visual Studio 2013/2015 测试项目模板 - 用于 NUnit?