【问题标题】:how to execute a code based on some ratio?如何根据某个比率执行代码?
【发布时间】:2018-05-07 11:45:19
【问题描述】:

我知道标题可能无法让您清楚。让我在这里解释一下

我在 Visual Studio 中有一个测试用例(负载测试)。要求是,它必须根据 web.config 文件中给出的分配访问不同的 url。

在 web.config 我有一组值

<appSettings>
<add key="Allocation1" value="20"/>
<add key="Allocation2" value="80"/>
</appSettings>

在运行测试时,我想访问第一个 url 20% 和第二个 url 80%。表示如果第一个 url 选择了 2 次,那么接下来 8 次应该选择第二个 url。

任何人都可以知道,这是可以实现的吗?有什么线索吗?

【问题讨论】:

  • Means if the first url selected 2 times then next 8 times 2nd url should be selected . 之后会发生什么?
  • 之后我有一个代码可以完成其余的功能。现在随机选择 url 和休息功能工作正常。
  • 您具体有什么问题?从配置文件中读取?运行一些代码 X 次(但这只是 for loop 对吗?)别的什么?

标签: c# asp.net visual-studio performance


【解决方案1】:

如果你有大量的迭代,我会根据随机值来实现它。基本上

  1. 生成一个介于 0 和 100 之间的随机数:

    var rnd = new Random();
    var number = rnd.Next(0, 100);
    
  2. 检查该数字是高于还是低于您的第一个阈值

    if(number <= allocation1)
        [[call URL 1]];
    else
        [[call URL 2]];
    

如果您的迭代次数足够大,这将收敛到对 URL 2 的调用分布为 80/20。显然,如果您只使用 10 次迭代,这将不是很准确。如果您的迭代次数如此之少,请使用一个变量来跟踪对 URL 1 和 URL 2 的调用百分比。如果百分比超过 20%,则仅调用第二个 URL,直到百分比再次降至 20% 以下

var percentage = callsToUrl1 / totalCalls;
if(percentage > 0.2)
    [[call URL 2]];
else
    [[use the normal random algorithm as above]];

编辑: 对于超过两个百分比,使用更多条件

if(number <= allocation1)
    [[call URL 1]];
else if(number <= allocation1 + allocation2)
    [[call URL 2]];
else
    [[call URL 3]];

等等..

【讨论】:

  • 虽然我同意大数定律,但似乎没有什么理由在这里引入随机化。 OP 正在尝试执行 specific 分发。随机化充其量不会显着改变分布。但它有机会这样做,在最坏的情况下。
  • @leonard_deutsch ,好的,如果我给出 3 个值而不是 2 个 .. 像 30%、30%、40% 这样的结果会是什么
猜你喜欢
  • 1970-01-01
  • 2016-12-24
  • 2013-02-24
  • 1970-01-01
  • 1970-01-01
  • 2019-01-15
  • 1970-01-01
  • 2011-02-26
  • 2022-01-21
相关资源
最近更新 更多