用于 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 负载测试从编码转换为可视化?