LoadRunner12测试脚本跳过token,ticket

tech2022-09-16  66

LoadRunner12测试脚本跳过token,ticket。

首先我是一个java开发,前几天领导给我安排了一个性能测试tableau-server的任务。 我找了资料,用jmeter测试软件测试了一下,发现不行。后来就下载了LoadRunner12测试工具,因为每次请求tableau-server页面需要一个ticket才能请求到页面。而且这个ticket是随机的,每次获取到的值都不重复。在程序里是这样写的 然后在我测试的时候,用LoadRunner12录制脚本后,发现他只是把请求和参数拼成了方法。类似下面这种。也就是说,它录制脚本的时候把获取到的ticket拼接到url里了。

因为每次请求程序都会校验ticket,所以这个请求是错误的。然后我看到了录制脚本的时候把返回ticket的方法也录制了。然后我就想办法在LoadRunner脚本里获取到这个方法的返回值,然把获取的ticket动态的拼接到带ticket请求的方法上就成功的绕过ticket校验了。(下图是返回ticket的方法) 接下来的操作是我在网上找的资料整合了一下的操作。

char *ur =""; char delims[] = "/"; char *result = NULL; vuser_init() { //vuser_init()这个是方法,方法上面的是全局变量。 //这4行是自己写的脚本,用来获取请求和响应 web_set_max_html_param_len("262144"); // 默认最大长度为256 web_reg_save_param("ResponseBody", "LB=", "RB=", "Search=Body", LAST); web_save_header(REQUEST, "RequestHeader");// REQUEST为内置变量,保存请求的头信息,需在发送URL请求前注册使用,将请求头信息存入字符串RequestHeader中 web_save_header(RESPONSE, "ResponseHeader");// 将RESPONSE保存响应的头信息在字符串ResponseHeader中 //这个方法是录制的,返回参数带ticket的方法。 web_custom_request("tableauview_2", "URL=http://127.0.0.1:8080/api/tableau/tableauview?t=1598335250764&viewId=khjzfx_rhy", "Method=POST", "Resource=0", "RecContentType=application/json", "Referer=http://127.0.0.1:8001/", "Snapshot=t381.inf", "Mode=HTML", "EncType=", LAST); //录制的方法结束。以下都是自己写的脚本。 //字符转码 lr_convert_string_encoding(lr_eval_string("{RequestHeader}"),LR_ENC_UTF8 ,LR_ENC_SYSTEM_LOCALE,"RequestHeaderUTF8"); lr_convert_string_encoding(lr_eval_string("{ResponseHeader}"),LR_ENC_UTF8 ,LR_ENC_SYSTEM_LOCALE,"ResponseHeaderUTF8"); lr_convert_string_encoding(lr_eval_string("{ResponseBody}"),LR_ENC_UTF8 ,LR_ENC_SYSTEM_LOCALE,"ResponseBodyUTF8"); //输出信息 lr_output_message("# 请求头信息:\n %s", lr_eval_string("{RequestHeaderUTF8}")); lr_output_message("# 响应头信息:\n %s", lr_eval_string("{ResponseHeaderUTF8}")); lr_output_message("# 响应内容体:\n %s", lr_eval_string("{ResponseBodyUTF8}")); //ur是定义的全局变量 吧方法的返回值赋值给全局变量 ur = lr_eval_string("{ResponseBodyUTF8}"); //lr_output_message这个方法是输出控制台的,注意第一个参数一定要带"%s" lr_output_message("%s",ur); //分割字符串 result = (char *)strtok( ur, delims ); while( result != NULL ) { lr_output_message( " \"%s\"\n", result); // lr_output_message( "result is:%s", result ); result = (char *)strtok( NULL, delims ); } lr_output_message("分割以后的字符串下标?%s",ur); //截取字符串的方法 lr_save_string(ur,"timestamp"); lr_output_message(lr_eval_string("{timestamp}")); // 从第50个字符开始截取49个字符,起始字符为0,保存到变量ticket中 lr_save_var(lr_eval_string("{timestamp}")+50,49,0,"ticket"); //截取的字符输出控制台 lr_output_message("截取以后的数:%s",lr_eval_string("{ticket}")); //然后把这个{ticket}变量拼接到需要的URL里即可 例如: //URL=http://127.0.0.1:8080/trusted/{ticket}/views/-_15774230999430/sheet0? }

到这里就结束了。希望能解决你遇到的问题。

最新回复(0)