假设脚本向服务器发送请求的脚本如下:
ret = lrt_tpcall("EAIHINCSMW",(char *)pFml,0,(char **)&recvBuf,&recvlen,0);
服务器处理请求后返回:
<?xml version="1.0" encoding="GBK"?><Transaction><Transaction_Header><tran_response><response_code>2000</response_code><respone_msg>组件处理:组件[SDATA_GetSerialNo]执行失?/respone_msg></tran_response></Transaction_Header><Transaction_Body><response/>
</Transaction_Body></Transaction>
以上信息保存在recvBuf中。其中<response_code>字段值'2000'就是我们需要用来判断的字段值,那么在后续的脚本中如何获取该值并做相应的判断呢?
首先声明两个用于取值的字符串指针和一个表示响应码的字符串:
char *response1;
char *response2;
char response_code[5];
接下来是取值的方法:
//判断返回结果是否成功:响应码respone_code '0000'表示处理成功。返回码的其余取值表示出错
response1 = (char *)strstr(recvBuf,"<response_code>");
response1 =response1 + 15;
response2 = (char *)strstr(response1,"</response_code>");
说明:
strstr()函数的作用是:返回一个字符串在另一个字符串中首次出现的位置到后者末尾的子字符串(大小写敏感)。如果这个函数执行成功,将返回剩余字符串(存在相匹配的字符);如果没有找到相匹配的字符,则返回False。
因此strstr(recvBuf,"<response_code>");表示查找在recvBuf中查找<response>字符串,并将其后的字符都赋给response1,故response1的值为:“<response_code>2000</response_code><respone_msg>组件处理:组件[SDATA_GetSerialNo]执行失?/respone_msg></tran_response></Transaction_Header><Transaction_Body><response/>
</Transaction_Body></Transaction>”
response2的值为:</response_code><respone_msg>组件处理:组件[SDATA_GetSerialNo]执行失?/respone_msg></tran_response>< /Transaction_Header><Transaction_Body><response/>
</Transaction_Body></Transaction>
15是“<response_code>”的字符串长度
最后是判断:
if(strncmp(response1,"0000",response2-response1)==0)
{
//返回码0000,处理成功
lr_message("Success!");
}
else
{
//返回码不为0000,处理失败
lr_message("Fail!");
}
说明:strncmp()函数的作用是:比较字符串的前n个字符(大小写敏感)。返回值:
- 0 – 如果字符串相等
- <0 – 如果string1小于string2
- >0 – 如果string1大于string2
如果想打印返回码,则可以用memcpy函数:
memcpy(response_code,response1,4);
lr_error_message("response_code:%s",response_code);
注:以上代码均是从我的实际工作中选取的例子,其中所使用的方法并不一定是最好的解决方案。如果各位同仁有其它更好的方法或建议,请不吝指教!
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/