Loadrunner 基于webservice协议的接口压力测试(脚本实例)

接口功能如下:请求接口,报文只有一个参数为证件号码;返回报文中,有证件号码是否能查到对应数据,查到几条数据。

思路:请求webservice接口,将测试数据,测试结果拼装为html文件并保存

---------------------------------------------------------------------------------

vuser_init代码如下:

//定义一个log文件,记录请求参数,期望结果,返回参数,测试结果和查询到的条数

//定义结果文件变量
long file_stream; //定义测试结果变量
char V_Result[]; vuser_init()
{
//取得文件名种子-----系统时间
lr_save_datetime("%Y%m%d%H%M%S",DATE_NOW,"now_date");
//拼接测试结果文件名称
strcpy(V_Result,"D:\\ResultFile\\");
strcat(V_Result,lr_eval_string("{PolValidate}"));
strcat(V_Result,"_");
strcat(V_Result,lr_eval_string("{now_date}"));
strcat(V_Result,".html");
//生成并打开测试结果文件
if ((file_stream = fopen(V_Result, "w+")) == NULL) {
lr_error_message ("创建 %s 文件失败", V_Result);
return -;
}
//写入测试文件头部html信息
strcpy(V_Result,"<html><table border='1'><tr><td>接口名称</td><td>证件号码</td><td>预期值</td><td>实际值</td><td>结果</td><td>保单数量</td></tr>"); fputs(V_Result,file_stream); return ;
} Action代码如下: Action()
{
//存储测试结果状态
char V_testStatus[]; //定义预期值与实际值的比较结果
int result; //取得登录名
char *V_UserName=lr_eval_string("{UserID}"); //获取服务器还回的状态state
//Correlation comment - Do not change!Original value='00' Name ='errorCode'
//errorCode&quot;:&quot;00&quot;,&quot;policyLevel
//
web_reg_save_param_ex(
"ParamName=errorCode",
"LB=errorCode&quot;:&quot;",
"RB=&quot",
"Notfound=warning",
SEARCH_FILTERS,
"Scope=All",
"RequestUrl=*/PolicyValidateTrueByIdService*",
LAST); //保单数量
//Correlation comment - Do not change!Original value='2' Name ='CorrelationParameter_1'
//policyCount&quot;:2,&quot;errorCode
web_reg_save_param_ex(
"ParamName=policyCount",
"LB=policyCount&quot;:",
"RB=,&quot;errorCode",
"Notfound=warning",
SEARCH_FILTERS,
"Scope=All",
"RequestUrl=*/PolicyValidateTrueByIdService*",
LAST); lr_think_time(); lr_start_transaction("保单验真"); web_custom_request("PolicyValidateTrueByIdService",
"URL=http://{UrlAddress}/pcis/services/PolicyValidateTrueByIdService?wsdl",
"Method=POST",
"TargetFrame=",
"Resource=0",
"RecContentType=text/xml",
"Referer=",
"Snapshot=t2.inf",
"Mode=HTML",
"EncType=",
"Body=<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:out=\"http://outer.interfaces.webservice.pcis.isoftstone.com/\">\r\n"
" <soapenv:Header/>\r\n"
" <soapenv:Body>\r\n"
" <out:validateById>\r\n"
" <!--Optional:-->\r\n"
" <arg0><![CDATA[\r\n"
"{\"reqData\": \r\n"
"{\r\n"
"\"insuredFlag\": \"03\",\r\n"
"\"idType\": \"0101\",\r\n"
"\"customerId\": \"{UserID}\",\r\n"
"\"minAmt\": \"1000\",\r\n"
"\"lossDay\": \"7\",\r\n"
"\"serialNo\": \"999999201702180302110001\"\r\n"
"}\r\n"
"}\r\n"
"]]></arg0>\r\n"
" </out:validateById>\r\n"
" </soapenv:Body>\r\n"
"</soapenv:Envelope>",
LAST); lr_end_transaction("保单验真", LR_AUTO); //比较预期值和实际值是否相等
result=strcmp( lr_eval_string(""),
lr_eval_string("{errorCode}") ); if(result==){
strcpy( V_testStatus, " bgcolor=\"#00FF00\">" );
strcat( V_testStatus, "PASS" ); }else{ strcpy( V_testStatus, " bgcolor=\"#FF0000\">" );
strcat( V_testStatus, "FAIL" );
} strcpy( V_Result,"<tr>" );
//写入接口名称
strcat( V_Result,"<td id='interFaceName'>" );
strcat( V_Result,lr_eval_string("PolicyValidateTrue") );
strcat( V_Result,
"</td>" ); //写入测试参数
strcat( V_Result,
"<td id='uname'>" );
strcat( V_Result,
V_UserName );
strcat( V_Result,
"</td>" ); //写入预期结果
strcat( V_Result,
"<td id='expected'>" );
strcat( V_Result,
lr_eval_string("") );
strcat( V_Result,
"</td>" ); //写入实际结果
strcat( V_Result,
"<td id='reality'>" );
strcat( V_Result,
lr_eval_string("{errorCode}") );
strcat( V_Result,
"</td>" ); //写入测试状态
strcat( V_Result,
"<td id='status'" );
strcat( V_Result,
V_testStatus );
strcat( V_Result,
"</td>" ); //写入保单数量
strcat( V_Result,
"<td id='status'>" );
strcat( V_Result,
lr_eval_string("{policyCount}") );
strcat( V_Result,
"</td></tr>" ); fputs( V_Result,
file_stream ); return ;
} vuser_end代码如下: vuser_end()
{
//结束并关闭文件
strcpy(V_Result,"</table></html>"); fputs(V_Result,file_stream); if (fclose(file_stream)) lr_error_message ("文件 %s 关闭出错", V_Result); return ;
}

参考资料:http://blog.csdn.net/jiang1986829/article/details/48368829

最新文章

  1. 密码学应用(DES,AES, MD5, SHA1, RSA, Salt, Pkcs8)
  2. TCP 3次握手和四次挥手
  3. 7.1.1.关闭WebSocket连接
  4. lesson6:java线程中断
  5. sql 练习(3)
  6. 《Head First 设计模式》学习笔记——状态模式
  7. 下载的js文件本地编辑器打开中文乱码如何解决
  8. [Python Study Notes]正则表达式
  9. vim编辑器的命令总结
  10. 性能测试---CPU内存部分
  11. scrapy--分布式爬虫
  12. Python在自动化运维时经常会用到的方法
  13. 如何递归执行view的动画
  14. [mysqld_safe]centos7 mysql 安装与配置
  15. 转 redis使用场景 简介
  16. [知识整理]Linux系统WIFI知识的一些整理
  17. ie6 浏览器的bug
  18. 项目中使用better-scroll实现移动端滚动,报错:Cannot read property &#39;children&#39; of undefined better-scroll
  19. 51nod 1086【背包&#183;DP】
  20. Codeforces 1012A Photo of The Sky

热门文章

  1. Swift 中的Range和NSRange不同
  2. C和C++中动态链接库的创建和链接(原创,装载请注明原处)
  3. 【2018 CCPC网络赛】1004 - 费马大定理&amp;数学
  4. 10. GLOBAL_STATUS 与 SESSION_STATUS
  5. python 2018/8/25
  6. 学习PyQuery库
  7. [第一波模拟\day2\T1] {病毒分裂}(split.cpp)
  8. python基础——5(元组、字典、集合)
  9. python基础——2(基本数据类型及运算符)
  10. js作用域的几个问题