Performance 负载测试随机化:如何设置WCAT为每个虚拟客户端使用不同的场景?

Performance 负载测试随机化:如何设置WCAT为每个虚拟客户端使用不同的场景?,performance,load-testing,performance-testing,wcat,Performance,Load Testing,Performance Testing,Wcat,我想在我的web应用程序中运行一个POST操作的负载测试。问题是,只有在POST数据中收到唯一的电子邮件地址时,才能完成操作。我生成的wcat脚本包含数千个请求,每个请求都有唯一的电子邮件,如: transaction { id = "1"; weight = 1; request { verb = POST; p

我想在我的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;
}
设置
{
计数器
{
间隔=10;
计数器=“处理器(\u总计)\\%处理器时间”;
计数器=“处理器(\u总计)\\%特权时间”;
计数器=“处理器(\u总计)\\%用户时间”;
计数器=“处理器(\u总数)\\中断/秒”;
}
clientfile=“”;
服务器=”;
客户=3;
虚拟客户=100;
}
当我运行测试3x100=300时,客户机开始发送请求,但它们的发送顺序相同,因此处理来自第一个客户机的第一个请求,然后来自其他客户机的下一个299个请求不再是唯一的。然后处理来自某个客户端的第二个请求,来自其他客户端的299个相同请求不是唯一的。 我需要一种方法来随机化请求或以不同的顺序运行它们,或者为每个虚拟客户端设置单独的场景脚本,以便每个请求都带有唯一的电子邮件地址。 WCAT有可能做到这一点吗


或者可能有其他工具可以进行这样的测试?

您是否考虑过使用
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="...";
    } 
  } 
postdata = "Email=" + rand("100000", "1000000") + "@loadtest" + clientindex() + vclientindex() + ".com&...";
如果使用
rand(x,y)
并不能使数据具有足够的随机性,那么您可以尝试使用其他函数使数据更加随机。也许是这样的:

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

您可以,包括可用的内部函数列表。如果内置函数不够用,您甚至可以构建自己的函数。

这正是我想要的。使用rand()、clientindex()和vclientindex也实现了这一点,只需做一点小小的更改;rand()中的数字应该是这样的字符串“rand”(“100000”、“1000000”)”。不知什么原因,我花了一个小时才弄明白。@DJvanWyk,谢谢你注意到rand()函数中缺少引号。我已经改正了我回答中的错误。