2

我想在我的 Web 应用程序中运行 POST 操作之一的负载测试。问题在于,只有在 POST 数据中接收到唯一的电子邮件地址时,才能完成该操作。我生成了带有数千个请求的 wcat 脚本,每个请求都带有唯一的电子邮件,例如:

 transaction                        
  {                                  
    id = "1";     
    weight = 1;
    request 
    { 
        verb = POST; postdata = "Email=test546546546546%40loadtest.com&..."; 
        setheader { name="Content-Length"; value="..."; 
    } 
    // more requests like that
  }

我的 UBR 设置文件如下:

settings
{
    counters
    {
        interval = 10;
        counter = "Processor(_Total)\\% Processor Time";
        counter = "Processor(_Total)\\% Privileged Time";
        counter = "Processor(_Total)\\% User Time";
        counter = "Processor(_Total)\\Interrupts/sec";
    }
    clientfile     = "<above-wcat-script>";
    server         = "<host name>";
    clients        = 3;
    virtualclients = 100;
}

当我运行测试时,3x100 = 300 个客户端开始发送请求,但它们以相同的顺序发送请求,因此处理来自第一个客户端的第一个请求,然后来自其他客户端的接下来的 299 个请求不再是唯一的。然后处理来自某个客户端的第二个请求,来自其他客户端的 299 个相同请求不是唯一的。我需要一种方法来随机化请求或以不同的顺序运行它们,或者为每个虚拟客户端设置单独的场景脚本,以便每个请求都带有唯一的电子邮件地址。用 WCAT 可以做到这一点吗?

或者也许有其他工具可以做这样的测试?

4

1 回答 1

3

您是否考虑过使用rand(x,y)WCAT 内部函数将随机整数添加到电子邮件地址?通过这样做,您可以想象使用随机电子邮件地址的单个请求的单个事务。因此,您可以使用单个随机事务 1000 次,而不是手动创建(例如)1000 个具有唯一电子邮件地址的请求。

您的新随机交易可能如下所示:

transaction                        
  {                                  
    id = "1";     
    weight = 1;
    request 
    { 
        verb = POST;
        postdata = "Email=" + rand("100000", "1000000") + "@loadtest.com&...";
        setheader { name="Content-Length"; value="...";
    } 
  } 

如果 usingrand(x,y)不能使其足够随机,那么您可以尝试使用其他函数来使数据更加随机。也许是这样的:

postdata = "Email=" + rand("100000", "1000000") + "@loadtest" + clientindex() + vclientindex() + ".com&...";

您可以在此处找到 WCAT 6.3 文档,包括可用的内部函数列表。如果内置功能不够用,您甚至可以构建自己的功能。

于 2013-11-28T05:53:13.343 回答