LoadRunner解决动态验证码问题

对于这个问题,通常我们可以采取以下三个途径来解决该问题: 


     1、第一种方法,也是最容易想到的,在被测系统中暂时屏蔽验证功能,也就是说,临时修改应用,无论用户输入的是什么验证码,都认为是正确的。这种方法最容易实现,对测试结果也不会有太大的影响(当然,这种方式去掉了“验证验证码”这个环节,不过这个环节本来就很难成为系统性能瓶颈)。但这种方法有一个致命的问题:如果被测系统是一个实际已上线的系统,屏蔽验证功能会对已经在运行的业务造成非常大的安全性的风险,因此,对于已上线的系统来说,用这种方式就不合适了;     

2、第二种方法,在第一种方法的基础上稍微进行一些改进。第一种方法带来了很大的安全性问题,那么我们可以考虑,不取消验证,但在其中留一个后门,我们设定一个所谓的“万能验证码”,只要用户输入这个“万能验证码”,我们就验证通过,否则,还是按照原先的验证方式进行验证。这种方式仍然存在安全性的问题,但由于我们可以通过管理手段将“万能验证码”控制在一个小的范围内,而且只在性能测试期间保留这个小小的后门,相对第一种方法来说,在安全性方面已经有较大的改进了;     

3、如果安全性对应用来说真的是至关重要的,不容许有一丝一毫的闪失,那我们还可以用更进一步的方法来处理这个问题。一般的性能测试工具(MI的LR、Seague的Silk performer等)都能够调用外部的DLL或是组件接口,因此,可以考虑获得“验证码验证”部分的实现,写一个验证码获取的DLL,在测试脚本中进行调用即可。  

   经过这段时间的学习,我学会了在脚本里添加函数解决验证码的问题,当然这种方法绕过服务器,但还是可行的

步骤一:编写一个GUID.h的头文件,里面包含一个由26个字母和9个数字随机产生的一串随机数的GUID方法,代码如下:

//GUID.h

char* lr_guid_gen(char* paramName){                         //生成GUID方法
typedef struct _GUID    {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[8];
} GUID;
GUID m_guid;
char buf[50];
char pNameStr[50];
CoCreateGuid(&m_guid);
// 定义输出格式
sprintf (buf, "{%08lX-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", // 大写
// sprintf (buf, "{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",// 小写
//sprintf (buf, "%08lX%04X%04X%02X%02X%02X%02X%02X%02X%02X%02X",// 小写
m_guid.Data1, m_guid.Data2, m_guid.Data3,
m_guid.Data4[0], m_guid.Data4[1], m_guid.Data4[2], m_guid.Data4[3],
m_guid.Data4[4], m_guid.Data4[5], m_guid.Data4[6], m_guid.Data4[7]);
lr_save_string(buf, paramName);
sprintf(pNameStr,"{%s}",paramName);
return lr_eval_string(pNameStr);
}

步骤二:然后再编写一个头文件verify.h,里面包含一个获取上面生成随机字符串的验证码,比如下面代码(获取上述字符串的第5位开始截取六个长度的验证码)

//verify.h  验证码头文件

#define VALIDATESTART5//default 5
#define VALIDATENUM6//default 6


//!!!!!warn: must free the return point in your own program, or it will leak memory
char* GetValidate(char *str)
{
// init some var
char *pSrc = str;  
char *pDst = NULL;
char *pHeader = NULL;
int cnt = 0; //the current num of character in the pHeader


if (pSrc == NULL) //chech the string is validate or not 
{
return NULL;
}
pDst = (char *)malloc(sizeof(char)*(VALIDATENUM + 1)); //malloc dynamic memory
pHeader= pDst;//record the head addr
pSrc = pSrc + (VALIDATESTART - 1);//find the start pos
while (*pSrc != '\0' && cnt != VALIDATENUM) 
{
if ( *pSrc != '-')
{
*pDst++ = *pSrc;
cnt++;
}
pSrc++;
}
*pDst = '\0';//add the last end character '\0'
return pHeader;
}

步骤三:将两个头文件加入globals.h里,我们就可以调用这两个函数了,不如在action调用,可以再脚本前面加上如下代码:

   char *test;char *test1;
    lr_load_dll("ole32.dll");      //引用windows生成GUID的API
    test=lr_guid_gen("GUID");      //调用上面lr_guid_gen()方法
    lr_save_string(test,"GUID");
    lr_output_message(test);
    lr_output_message("xxxxxxxxxxxxx:%s",lr_eval_string("{GUID}"));    //生成随机字符串
   test1=GetValidate(test);         //获取验证码

   lr_save_string(test1,"ID");

   lr_output_message("%s",lr_eval_string("{ID}"));

这样就算完成了,记得加入一句获取验证码图片的脚本哦!



http://www.51testing.com/html/66/15050766-864710.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!针对使用LoadRunner进行验证码登录的测试,您可以按照以下步骤进行操作: 1. 首先,您需要录制一个正常的验证码登录过程。使用LoadRunner的录制功能,可以记录下您在网站或应用程序中进行验证码登录时的所有交互过程。 2. 在录制过程中,确保输入正确的用户名和密码,并在验证码输入框中输入正确的验证码。这将作为一个正常的登录过程。 3. 录制完成后,您可以回放录制的脚本,以确保能够成功重现正常的验证码登录过程。在回放过程中,LoadRunner会向服务器发送与录制时相同的请求,并检查服务器的响应是否与录制时一致。 4. 接下来,您可以通过参数化来处理验证码验证码通常是动态生成的,因此每次登录时都会有不同的验证码。您可以使用LoadRunner提供的参数化功能,将验证码作为一个变量进行处理。这样,每次回放脚本时,LoadRunner会自动替换验证码的值。 5. 在参数化过程中,可以使用LoadRunner内置的函数或自定义函数来生成随机的验证码值。这样可以模拟不同的验证码情况,并测试系统在不同验证码输入下的稳定性和准确性。 6. 最后,您可以根据需要添加其他测试步骤和验证点,例如检查登录成功后是否跳转到正确的页面,或者验证登录失败时是否出现相应的错误提示信息。 总结来说,使用LoadRunner进行验证码登录测试的关键是录制正常的登录过程、参数化验证码值,并添加其他必要的验证点。这样可以模拟真实的用户行为,测试系统在验证码登录场景下的性能和稳定性。希望以上信息对您有所帮助!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值