LoadRunner的xml協議使用
思考曾經做過的一個黃金交易系統,裏面針對後端進行報文發送,報文均是採用的xml格式,只不過傳輸和接受前後需要進行加解密,現在想來如果不是由於加解密包採用的是java,那我們完全可以採用LR的原生態C函數和XML協議函數做到更爲優雅的測試腳本,利用LR的xml函數對整個xml報文實現動態封轉。
函數:lr_xml_get_values
Action()
{
char *xml_input=
"<love>"
"<name_man>LHT</name_man>"
"<name_women>PHOEBE</name_women>"
"</love>";
lr_save_string(xml_input,"xml_param");
lr_xml_get_values("XML={xml_param}",
"ValueParam=OutputParam1",
"Query=/love/name_man",
LAST);
lr_xml_get_values("XML={xml_param}",
"ValueParam=OutputParam2",
"Query=/love/name_women",
LAST);
lr_message("husband is:%s",lr_eval_string("{OutputParam1}"));
lr_message("wife is:%s",lr_eval_string("{OutputParam2}"));
return 0;
}
//output
husband is:LHT
wife is:PHOEBE
函數:lr_xml_set_values
Action1() {
char * xml_input =
"<acme_org>"
" <accounts_dept>"
"<employee>"
" <name>John Smith</name>"
"<cubicle>227</cubicle>"
"<extension>2145</extension>"
"</employee>"
"</accounts_dept>"
"<engineering_dept>"
"<employee>"
"<name>Sue Jones</name>"
"<extension>2375</extension>"
"</employee>"
"</engineering_dept>"
"</acme_org>";
int i, NumOfValues;
char buf[64];
lr_save_string(xml_input, "XML_Input_Param"); // Save input as parameter
lr_save_string("lht", "ExtensionParam_1");
lr_save_string("phoebe", "ExtensionParam_2");
lr_xml_set_values("XML={XML_Input_Param}",
"ResultParam=NewXmlParam",
"ValueParam=ExtensionParam",
"SelectAll=yes",
"Query=//extension",
LAST);
NumOfValues= lr_xml_get_values("XML={NewXmlParam}",
"ValueParam=OutputParam",
"Query=//extension",
"SelectAll=yes", LAST);
for ( i = 0; i < NumOfValues; i++) { /* Print the multiple values of MultiParam */
sprintf (buf, "Retrieved value %d : {OutputParam_%d}", i+1, i+1);
lr_output_message(lr_eval_string(buf));
}
lr_message("new xml is:%s",lr_eval_string("{NewXmlParam}"));
return 0;
}
//output:
Virtual User Script started
Starting action vuser_init.
Ending action vuser_init.
Running Vuser...
Starting iteration 1.
Starting action Action.
Action.c(11): "lr_xml_get_values" succeeded, 1 match processed
Action.c(16): "lr_xml_get_values" succeeded, 1 match processed
husband is:LHT
wife is:PHOEBE
Ending action Action.
Starting action Action1.
Action1.c(47): "lr_xml_set_values" succeeded, 2 matches processed
Action1.c(60): "lr_xml_get_values" succeeded, 2 matches processed
Action1.c(73): Retrieved value 1 : lht
Action1.c(73): Retrieved value 2 : phoebe
new xml is:<acme_org> <accounts_dept><employee> <name>John Smith</name><cubicle>227</cubicle><extension>lht</extension></employee></accounts_dept><engineering_dept><employee><name>Sue Jones</name><extension>phoebe</extension></employee></engineering_dept></acme_org>
Ending action Action1.
Ending iteration 1.
Ending Vuser...
Starting action vuser_end.
Ending action vuser_end.
Vuser Terminated.
函數:lr_xml_get_values
Action()
{
char *xml_input=
"<love>"
"<name_man>LHT</name_man>"
"<name_women>PHOEBE</name_women>"
"</love>";
lr_save_string(xml_input,"xml_param");
lr_xml_get_values("XML={xml_param}",
"ValueParam=OutputParam1",
"Query=/love/name_man",
LAST);
lr_xml_get_values("XML={xml_param}",
"ValueParam=OutputParam2",
"Query=/love/name_women",
LAST);
lr_message("husband is:%s",lr_eval_string("{OutputParam1}"));
lr_message("wife is:%s",lr_eval_string("{OutputParam2}"));
return 0;
}
//output
husband is:LHT
wife is:PHOEBE
函數:lr_xml_set_values
Action1() {
char * xml_input =
"<acme_org>"
" <accounts_dept>"
"<employee>"
" <name>John Smith</name>"
"<cubicle>227</cubicle>"
"<extension>2145</extension>"
"</employee>"
"</accounts_dept>"
"<engineering_dept>"
"<employee>"
"<name>Sue Jones</name>"
"<extension>2375</extension>"
"</employee>"
"</engineering_dept>"
"</acme_org>";
int i, NumOfValues;
char buf[64];
lr_save_string(xml_input, "XML_Input_Param"); // Save input as parameter
lr_save_string("lht", "ExtensionParam_1");
lr_save_string("phoebe", "ExtensionParam_2");
lr_xml_set_values("XML={XML_Input_Param}",
"ResultParam=NewXmlParam",
"ValueParam=ExtensionParam",
"SelectAll=yes",
"Query=//extension",
LAST);
NumOfValues= lr_xml_get_values("XML={NewXmlParam}",
"ValueParam=OutputParam",
"Query=//extension",
"SelectAll=yes", LAST);
for ( i = 0; i < NumOfValues; i++) { /* Print the multiple values of MultiParam */
sprintf (buf, "Retrieved value %d : {OutputParam_%d}", i+1, i+1);
lr_output_message(lr_eval_string(buf));
}
lr_message("new xml is:%s",lr_eval_string("{NewXmlParam}"));
return 0;
}
//output:
Virtual User Script started
Starting action vuser_init.
Ending action vuser_init.
Running Vuser...
Starting iteration 1.
Starting action Action.
Action.c(11): "lr_xml_get_values" succeeded, 1 match processed
Action.c(16): "lr_xml_get_values" succeeded, 1 match processed
husband is:LHT
wife is:PHOEBE
Ending action Action.
Starting action Action1.
Action1.c(47): "lr_xml_set_values" succeeded, 2 matches processed
Action1.c(60): "lr_xml_get_values" succeeded, 2 matches processed
Action1.c(73): Retrieved value 1 : lht
Action1.c(73): Retrieved value 2 : phoebe
new xml is:<acme_org> <accounts_dept><employee> <name>John Smith</name><cubicle>227</cubicle><extension>lht</extension></employee></accounts_dept><engineering_dept><employee><name>Sue Jones</name><extension>phoebe</extension></employee></engineering_dept></acme_org>
Ending action Action1.
Ending iteration 1.
Ending Vuser...
Starting action vuser_end.
Ending action vuser_end.
Vuser Terminated.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.