引言:
我们在测试过程中经常会遇到批量添加数据的情况,并且这些数据很多时候是具有唯一性的。
比如说当前项目中需要创建一个添加用户的脚本,这些用户都是唯一的,当时采取的是创建file类型的参数,将参数用excel拖曳下来(tester001-tester1000)保存成dat类型的文档,如果参数数量很小这种方案也还算切实可行,但是如果遇到成百上千万的数据,再用这种方式就非常的吃力,势必会浪费大量的人力物力,也就达不到节约资源、降低成本的目的。
再比如前段时间性能测试中就有一个对数据库的容量和处理能力的验证,主要是通过页面新建用户向数据库中添加数据。在这些需要添加的数据中,email字段要求必须是唯一的。因为需要插入大批量的数据,再使用上面的file类型的文件来参数化就非常困难了。当时的解决方案有两种:一种是使用for循环,再一种是用当前的系统时间,具体到时分秒作为参数处理。使用for循环,可能仅仅只有一个字段需要取唯一值,但是却要循环整个业务,这样势必造成资源的浪费,而且执行效率也不高,进而影响性能测试的准确性。
简介:
从引言中可以看到,参数的处理方式可以多种多样,今天主要介绍Unique Number类型的参数。参数的创建方式跟file类型的一样,在此就不多做赘述。下面主要结合场景看一下Unique Number参数类型的特性,该类型主要包括数据的范围(Number range)、示例(Sample value)、数据格式(Number format)、更新参数的方式(Update value on)、异常情况下的处理(When out of values)。
(------图片稍候上传------)
如上图设置,就表示从001开始取值,每个用户有5个值,按照迭代的方式更新参数,如果参数不够就从第一个值(001)开始取:
如果有5个用户并发,每个用户迭代10次,第一个用户取值为001、002、003、004、005、001、002、003、004、005,第二个用户为006、007、008、009、010、006、007、008、009、010,以此类推,具体可根据实例在场景中执行查看。
实例:
Unique Number参数类型实例:
/*************************************************
*用Unique Number类型对唯一性的数据进行参数化,
*并且计算该方法所耗费的时间
**************************************************/
Action()
{
double time_elapsed;
merc_timer_handle_t timer;
char fullname[1024] = "tester";
timer = lr_start_timer();
strcat(fullname,lr_eval_string("{memberID}"));
lr_log_message("The running username is --- %s:",fullname);
time_elapsed = lr_end_timer(timer);
lr_log_message("===%lf===",time_elapsed);
lr_log_message("memberID:%s",lr_eval_string("{memberID}"));
return 0;
}
For循环实例:
/***********************************************
*用for循环对唯一性的数据进行参数化,
*并且计算该方法所耗费的时间
************************************************/
Action()
{
double time_elapsed;
merc_timer_handle_t timer;
char fullname[1024] = "tester";
char str[10];
int i;
timer = lr_start_timer();
for(i=0;i<5;i++){
itoa(i,str,10);
strcat(fullname,str);
lr_log_message("The running username is --- %s:",fullname);
strcpy(fullname,"tester");
}
time_elapsed = lr_end_timer(timer);
lr_log_message("===%lf===",time_elapsed);
return 0;
}
取系统时间作为参数的实例:
/********************************************
*取系统时间对唯一性的数据进行参数化,
*并且计算该方法所耗费的时间
*********************************************/
Action()
{
double time_elapsed;
merc_timer_handle_t timer;
char fullname[1024] ="tester";
timer = lr_start_timer();
lr_save_datetime("%Y%m%d%H%M%S", DATE_NOW+TIME_NOW,"mydates");
strcat(fullname,lr_eval_string("{mydates}"));
lr_log_message("The running username is --- %s:",fullname);
time_elapsed = lr_end_timer(timer);
lr_log_message("===%lf===",time_elapsed);
return 0;
}