lr 函数--lr_save_string
2017-06-13 11:07
155 查看
lr_eval_string 返回脚本中一个参数当前的值
Returns the string argument after evaluating embedded parameters.一般都用在调试脚本时输出参数的值。
lr_save_string ——Saves a null-terminated string to a parameter.
帮助文档里:
char *lr_eval_string( const char *instring );
例子:下面的例子使用lr_eval_string来代替参数row_cnt的当前值。使用lr_output_message把这个值输出到输出窗口。
lrd_stmt(Csr1, "select count(*) from employee", -1, 1 /*Deferred*/, 2 /*Ora V7*/, 0);
lrd_bind_col(Csr1, 1, &COUNT_D1, 0, 0);
lrd_exec(Csr1, 0, 0, 0, 0, 0);
lrd_save_col(Csr1, 1, 1, 0, "row_cnt");
lrd_fetch(Csr1, 1, 1, 0, PrintRow2, 0);
lr_output_message("value : %s", lr_eval_string("The row count is: {row_cnt}"));
lr_log_message(lr_eval_string("{row_cnt}"));
注:lr_eval_string是内部地分配内存。在每一次迭代之后会释放。如果你在循环中给参数赋值,不要使用lr_eval_string保存内存。你需要使用lr_eval_string_ext,并且在每个循环迭代中使用lr_eval_string_ext_free释放内存。
lr_eval_string_ext在关联的数据是二进制数据,例如,数据包含嵌入的NULL字符时是非常有用的。
问题:常量参数?
示例代码1:
修改代码,将data的定义中const去掉,则可直接运行成功。
问题来了,那这个data参数就是这样定义的,不能改变呢。如果用lr_eval_string函数,
运行结果有误:
将data保存成一个参数,再对值转换。
结果:
总结:
1)遇到const 取值时,去掉const
2)将const值保存成另一个参数,通过对新值操作。
这里只是简单的使用例子,这里为啥会用到要对参数值转换呢?比如乱码需要转码时。
问题:在对服务器返回值重命名时部分值被去掉了
具体描述:通过关联取值str,str中带%2等字符,在用函数值重命名后的新字符串中的%2没有了。在新脚本中尝试一下。
测试版本:LR12.02
测试代码:自定义字符串、参数列表中取值,分别使用sprintf、lr_save_string函数转换并输出结果
View Code
测试结论:新字符串%2正确显示的,并未被去掉。在后续测试时,这项再注意下。
Returns the string argument after evaluating embedded parameters.一般都用在调试脚本时输出参数的值。
lr_save_string ——Saves a null-terminated string to a parameter.
帮助文档里:
char *lr_eval_string( const char *instring );
例子:下面的例子使用lr_eval_string来代替参数row_cnt的当前值。使用lr_output_message把这个值输出到输出窗口。
lrd_stmt(Csr1, "select count(*) from employee", -1, 1 /*Deferred*/, 2 /*Ora V7*/, 0);
lrd_bind_col(Csr1, 1, &COUNT_D1, 0, 0);
lrd_exec(Csr1, 0, 0, 0, 0, 0);
lrd_save_col(Csr1, 1, 1, 0, "row_cnt");
lrd_fetch(Csr1, 1, 1, 0, PrintRow2, 0);
lr_output_message("value : %s", lr_eval_string("The row count is: {row_cnt}"));
lr_log_message(lr_eval_string("{row_cnt}"));
注:lr_eval_string是内部地分配内存。在每一次迭代之后会释放。如果你在循环中给参数赋值,不要使用lr_eval_string保存内存。你需要使用lr_eval_string_ext,并且在每个循环迭代中使用lr_eval_string_ext_free释放内存。
lr_eval_string_ext在关联的数据是二进制数据,例如,数据包含嵌入的NULL字符时是非常有用的。
问题:常量参数?
示例代码1:
const char * data="abcd"; char * data1,data2,data3 ; lr_message("data value: %s",data); lr_save_string(data,"data1"); lr_message("data1 value: %s",lr_eval_string("{data1}")); lr_convert_string_encoding(data,LR_ENC_UTF8,LR_ENC_SYSTEM_LOCALE,"data2"); lr_message("data2 value : %s",lr_eval_string("{data2}"));
lr_convert_string_encoding这行时,编译不通过,type error in argument 1 to `lr_convert_string_encoding'; found `pointer to const char' expected `pointer to char'
修改代码,将data的定义中const去掉,则可直接运行成功。
Starting action Action. data value: abcd Action.c(6): Notify: Saving Parameter "data1 = abcd". Action.c(7): Notify: Parameter Substitution: parameter "data1" = "abcd" data1 value: abcd Action.c(9): Notify: Saving Parameter "data2 = abcd\x00". Action.c(10): Notify: Parameter Substitution: parameter "data2" = "abcd\x00" data2 value : abcd Ending action Action.
问题来了,那这个data参数就是这样定义的,不能改变呢。如果用lr_eval_string函数,
const char * data="abcd"; char * data1,data2,data3 ; lr_message("data value: %s",data); lr_convert_string_encoding(lr_eval_string("{data}"),LR_ENC_UTF8,LR_ENC_SYSTEM_LOCALE,"data2"); lr_message("data2 value : %s",lr_eval_string("{data2}"));
运行结果有误:
Starting action Action. data value: abcd Action.c(6): Warning: The string 'data' with parameter delimiters is not a parameter. Action.c(6): Notify: Saving Parameter "data2 = {data}\x00". Action.c(7): Notify: Parameter Substitution: parameter "data2" = "{data}\x00" data2 value : {data} Action.c(9): Notify: Saving Parameter "data1 = abcd". Action.c(10): Notify: Parameter Substitution: parameter "data1" = "abcd" data1 value: abcd
将data保存成一个参数,再对值转换。
const char * data="abcd"; char * data1,data2,data3 ; lr_message("data value: %s",data); // lr_convert_string_encoding(lr_eval_string("{data}"),LR_ENC_UTF8,LR_ENC_SYSTEM_LOCALE,"data2"); // lr_message("data2 value : %s",lr_eval_string("{data2}")); lr_save_string(data,"data1"); lr_message("data1 value: %s",lr_eval_string("{data1}")); lr_convert_string_encoding(lr_eval_string("{data1}"),LR_ENC_UTF8,LR_ENC_SYSTEM_LOCALE,"data3"); lr_message("data3 value : %s",lr_eval_string("{data3}"));
结果:
Starting action Action. data value: abcd Action.c(9): Notify: Saving Parameter "data1 = abcd". Action.c(10): Notify: Parameter Substitution: parameter "data1" = "abcd" data1 value: abcd Action.c(11): Notify: Parameter Substitution: parameter "data1" = "abcd" Action.c(11): Notify: Saving Parameter "data3 = abcd\x00". Action.c(12): Notify: Parameter Substitution: parameter "data3" = "abcd\x00" data3 value : abcd Ending action Action.
总结:
1)遇到const 取值时,去掉const
2)将const值保存成另一个参数,通过对新值操作。
这里只是简单的使用例子,这里为啥会用到要对参数值转换呢?比如乱码需要转码时。
问题:在对服务器返回值重命名时部分值被去掉了
具体描述:通过关联取值str,str中带%2等字符,在用函数值重命名后的新字符串中的%2没有了。在新脚本中尝试一下。
测试版本:LR12.02
测试代码:自定义字符串、参数列表中取值,分别使用sprintf、lr_save_string函数转换并输出结果
Starting iteration 1. Maximum number of concurrent connections per server: 6 [MsgId: MMSG-26989] Starting action Action. Action.c(7): str value : sdf%2Fdcdegdfs%2opied Action.c(8): strnew value : sdf%2Fdcdegdfs%2opied Action.c(11): file value : sdf%2Fdcdegdfs%2opied Action.c(14): value : sdf%2Fdcdegdfs%2opied Action.c(16): strnew1 value : sdf%2Fdcdegdfs%2opied Action.c(18): file1 value : sdf%2Fdcdegdfs%2opied Ending action Action. Ending iteration 1.
View Code
测试结论:新字符串%2正确显示的,并未被去掉。在后续测试时,这项再注意下。
相关文章推荐
- loadrunner使用lr_save_string()函数保存服务器IP地址
- LoadRunner中Lr_save_string()函数和Itoa()函数的使用
- loadrunner Lr_类函数之 lr_save_string()
- loadrunner Lr_类函数之 lr_save_searched_string()
- loadrunner使用lr_save_string()函数保存服务器IP地址
- LoadRunner中Lr_save_string()函数和Itoa()函数的使用
- LR中Lr_save_string()函数和Itoa()函数的使用
- 转:lr_eval_string,lr_save_string 和 sprintf 的使用
- lr_convert_string_encoding 函数使用详解
- lr_save_string和sprintf的使用
- LoadRunner函数学习--lr_convert_string_encoding
- 关于函数lr_eval_string
- 性能测试培训总结-关联后如何使用该值?lr_save_string帮你
- lr_save_string 和 sprintf 的使用
- LoadRunner字符串编码转换的函数lr_convert_string_encoding
- lr_eval_string和lr_save_string 使用注意事项
- 性能测试培训总结-关联后如何使用该值?lr_save_string帮你
- lr_eval_string()函数以及LR中参数、变量的简单使用
- lr_save_string和sprintf的使用
- LoadRunner lr_eval_string() 函数使用及LR中变量、参数的简单使用