HTTP协议方法--GET
web_url()
C Language
int web_url( const chat *StepName, const char *url, <List of Attributes>, [EXTRARES,<List of Resource Attributes> , ] LAST);
const char *Stepname\*url ========定义必填的常量
<> =======可选的 属性参数
[] =======可选的 资源参数
EXTRARES ========分隔符号 标记下一个参数是资源属性的列表
ITEMDATA ========属性和数据字段列表之间分割标识符
ENDITEM ========行资源结束标识符
LAST ===========结束表示符
HTTP协议方法--POST
web_submit_data()
上下文无依赖使用
int web_submit_data(const char *StepName, const chat *Action, <List of Attributes>, ITEMDATA, <List of data>, [EXTRARES, <List of Resource Attributes>,] LAST);
web_submit_form()
上下依赖使用
int web_submit_form(cons char *StepName,<List of Attributes> , <List of Hidden Fields>, ITEMDATA, , [EXTRARES, <List of Resource Attributes>,] LAST);
web_custom_request()
所有HTTP请求都适用
int web_custom_request( const char *RequestName, <List of Attributes>, [EXTRARES, <List of Resource Attributes>,] LAST);
定义变量
常见变量定义
定义字符串
指定长度,超过长度就会报错,一个汉字是2个字符长度:
char parm[];
不限长度:
char *var;
定义整型
int num;
定义浮点型
float fla;
变量之间转换
atoi()
Converts a string to an integer value.
int atoi( const char *String);
itoa()
Converts an integer to a string. Windows only.
int itoa( int value, char *str, int radix);
atof()
Converts a string to a floating point value.
double atof( const char *string);
定义参数
lr_save_string()
Saves a null-terminated string to a parameter.
int lr_save_string( const char *param_value, const char *param_name);
lr_save_int()
Saves an integer to a parameter.
int lr_save_int( int value, const char *param_name);
其他函数
lr_eval_string();
Returns the string argument after evaluating embedded parameters.
char lr_eval_string( const char *instring );
eg:
int param_key = 1000
lr_output_message("=====>param_key转化为%s", lr_eval_string("{param_key}")); ------>讲参数1000转化为字符串打印
注册函数
web_reg_find()
Registers a search for a text string on an HTML page.
int web_reg_find( const char *attribute_list, LAST );
与web_find()函数区别:
web_reg_save_param_ex()
Registers a request to save dynamic data located between specified boundaries. The data is saved to a parameter.
填写左右边界,中间的就是取值。
int web_reg_save_param_ex( "ParamName=", [LB[/IC][BIN]=, ][RB[/IC][BIN]=, ] , ,LAST );
局部/全局变量
局部变量
在action中定义的变量
只能在当前action中被引用,init、end都是区分的
全局变量
在globals.h文件中定义变量
在所有action中,都可以被引用
其他注意事项
变量定义,只能在文件头部进行定义,不然会报错
逻辑运算符
运算符
- == 逻辑等于
- ! 非
- != 不等于
- && 与
- || 或
条件语句
if语句
if(条件)
{
条件成立,执行脚本;
}
else if(条件)
{
}
else
{
}
if常用方法(一)
用web_reg_find函数,查找出现次数,判断SaveCount的变量值
if(atoi(lr_eval_string("{save_count}"))>0)
{
lr_outpurt_message("reg_count = %s", lr_eval_string("{save_count}"));
}
else
{
lr_output_message("预期结果和实际不符,查找到的次数为:%s", lr_eval_string("{reg_count}"));
}
if常用方法(二)
判断一个参数的值,是否与预期结果相同
if(strcmp(lr_eval_string("{reg_count}"),"expect") == 0)
{
lr_outpurt_message("reg_count = %s", lr_eval_string("{save_count}"));
}
else
{
lr_output_message("预期结果和实际不符,查找到的次数为:%s", lr_eval_string("{reg_count}"));
}
if常用方法(三)
判断一个参数的长度,是否与预期结果相同
lr_save_string("loadrunner", "classname");
if(strlen(lr_eval_string("{classname}")) == 0 )
{
lr_outpurt_message("classname的长度为0");
}
else
{
lr_outpurt_message("classname的值为:%s", lr_eval_string("{classname}"));
}
if常用方法(四)
获取请求的响应码,通过响应码判断请求成功
int rspcode;
rspcode = web_get_int_property(HTTP_INFO_RETURN_CODE);
if(respcode == 200)
{
条件成立,执行脚本;
}
else
{
}
循环语句
for循环
int i;
for(i=0;i<=4;i++){
循环体;
}
while循环
int i=1;
while(i<10)
{
lr_output_message();
i++;
}
do...while循环
int i=1;
do{
lr_output_message();
i++;
}
while(i<10);
响应结果转码
编码
中文转码
把内容,转换为当前系统的编码,从而实现响应中文正常显示
lr_convert_string_encoding(lr_eval_string({param}"),LR_ENC_UTF8,LR_ENC_SYSTEM_LOCALE,"convert_reg_rsp");
或者
lr_convert_string_encoding(lr_eval_string("{param}"), "utf-8", NULL, "convert_reg_rsp");
lr_output_message("convert_rsp:%s", lr_eval_string("{convert_reg_rsp}")); //显示结果
**此文档最后的综合样例
采用测试tmall系统的登录、退出,使用到了注册查找函数、注册关联保存函数、if判断、字符串转数字函数atoi()、请求状态码获取函数web_get_int_property()、web_add_header()等
下边直接将action().c脚本放出:
Action()
{
int loginout_rscode;
web_add_auto_header("Accept-Language",
"zh-CN,zh;q=0.9");
lr_save_string("http://47.109.94.131:8081/tmall","url");
web_reg_save_param_ex(
"ParamName=login_info",
"LB={",
"RB=}",
SEARCH_FILTERS,
"Scope=ALL",
LAST);
web_reg_save_param_ex(
"ParamName=login_cookie",
"LB=Set-Cookie: ",
"RB=; Path=",
SEARCH_FILTERS,
"Scope=ALL",
LAST);
web_reg_find("Text={\"success\":true}",
"SaveCount=LoginCount",
LAST);
lr_start_transaction("login");
web_submit_data("doLogin",
"Action={url}/login/doLogin",
"Method=POST",
"RecContentType=application/json",
"Referer={url}/login",
"Snapshot=t6.inf",
"Mode=HTML",
ITEMDATA,
"Name=username", "Value=pangchuan", ENDITEM,
"Name=password", "Value=123456qwer", ENDITEM,
LAST);
if(atoi(lr_eval_string("{LoginCount}")) > 0){
lr_output_message("登录成功!");
lr_end_transaction("login", LR_PASS);
}else{
lr_error_message("登录失败!");
lr_end_transaction("login", LR_FAIL);
}
lr_output_message("登录返回的信息为:%s", lr_eval_string("{login_info}"));
//打印通过关联注册函数获取到的login_cookie值
lr_output_message("login_cookie的值为:%s", lr_eval_string("{login_cookie}"));
// 退出登录增加请求头的cookie
web_add_header("Set-Cookie", "{login_cookie}");
lr_start_transaction("login_out");
web_url("login_out",
"URL={url}/login/logout",
"TargetFrame=",
"Resource=1",
"Referer=",
"Mode=HTML",
LAST);
// 通过请求状态码判断是否退出登录成功,并将事务做一个pass或者是fail
loginout_rscode = web_get_int_property(HTTP_INFO_RETURN_CODE);
if(loginout_rscode == 200){
lr_output_message("退出登录成功,http请求状态码为:%d", loginout_rscode);
lr_end_transaction("login_out", LR_PASS);
}else{
lr_error_message("退出登录失败,http请求状态码为:%d", loginout_rscode);
lr_end_transaction("login_out", LR_FAIL);
}
return 0;
}