【性能测试】:关于Sockets协议的脚本的开发
一,关于Sockets协议的脚本,首先对报文的解析是一个关键,
报文的解析一般对着接口文档,弄清楚每个字段代表什么意思,如下一段报文,放在data.ws中
"\x00\x00\x01\x5C" // 报文长度348=15c,加上自己总长度
""
""
""
""
"AUMS"
"IBS "
"" // 发起方流水,22位
"" // 发起方日期,8位
"" // 发起方时间,6位
"G50704" //交易代码 6位
"" //网关错误标识2
" " // 网关错误代码 7
" " //编码1
" " //重发标志1
" " //保留位1 6
"" //交易码5
"" //交易发生日期8
"12:12:12" //交易发生时间8
"17982790034 " //交易流水号22
"" //交易日8
"" //代理标志1
"" //联网行编号4
"8888 " //交易网点10
" " //柜员10
" " //出纳员号4
" " //授权柜员1 10
" " //授权柜员2 10
"" //交易渠道 1
"0000 " //终端号 10
" " //返回码类型 1
"T" //请求类型 1
"" //授权级别 2
"1 " //当前第几页 8
"10 " //每页记录数 8
" " //备用1 20
" " //备用2 20
" " //备用3 20
" " //备用4 20
"6225683528000346164 " //银行账号 32
"Au99.99 " //合约代码 10
"" //交易类型 4
"" //委托价格 8 2
"1 " // 委托手数 6
"" // 指令类型 1
二,是关于Sockets通信协议,有必要了解一下长链接,短链接的区别
sockets报文如下
#include "lrs.h"
Action()
{
int rc = ;
int RecBufLen; // 接收报文长度
char *RecBuf = NULL; // 接收报文内容
RecBuf = (char*)calloc(, sizeof(char));
lrs_set_connect_timeout(, );
lr_start_transaction("01_50704_委托报单"); // 完整事务
lr_start_transaction("01_50704_委托报单_建立发送通道连接");
rc = lrs_create_socket("MySocket","TCP","RemoteHost=21.96.22.56:14000",LrsLastArg); // 黄金系统ip:端口
if(rc == )
{
lr_end_transaction("01_50704_委托报单_建立发送通道连接", LR_PASS);
}
else
{
lr_end_transaction("01_50704_委托报单_建立发送通道连接", LR_FAIL);
lr_error_message("01_50704_委托报单_建立发送通道连接失败,错误码是:%d", rc);
lr_end_transaction("01_50704_委托报单", LR_FAIL);
lrs_free_buffer(RecBuf); // 释放空间
lrs_disable_socket("MySocket", DISABLE_SEND_RECV); // 关闭接口
lrs_close_socket("MySocket");
lr_exit(LR_EXIT_ITERATION_AND_CONTINUE, LR_FAIL);
}
lrs_set_send_timeout(, );
lrs_set_recv_timeout(, );
lrs_set_recv_timeout2(, );
lr_start_transaction("01_50704_委托报单_发送报文");
rc = lrs_send("MySocket", "SendBuf", LrsLastArg);
if(rc == )
{
lr_end_transaction("01_50704_委托报单_发送报文", LR_PASS);
}
else
{
lr_end_transaction("01_50704_委托报单_发送报文", LR_FAIL);
lr_error_message("01_50704_委托报单_发送报文失败;错误码是:%d;", rc);
lr_end_transaction("01_50704_委托报单", LR_FAIL);
lrs_free_buffer(RecBuf); // 释放空间
lrs_disable_socket("MySocket", DISABLE_SEND_RECV); // 关闭接口
lrs_close_socket("MySocket");
lr_exit(LR_EXIT_ITERATION_AND_CONTINUE, LR_FAIL);
}
// 接受报文=====================================================================
lr_start_transaction("01_50704_委托报单_接收报文");
rc = lrs_receive("MySocket", "ReceiveBuf", LrsLastArg);
if((rc == )||(rc == ))
{
lrs_get_last_received_buffer("MySocket", &RecBuf, &RecBufLen);
if(RecBufLen>)
{
lrs_save_param_ex("MySocket", "user", RecBuf, , RecBufLen, "ascii", "NewRecBuf"); // 接收的完整报文
lrs_save_param_ex("MySocket", "user", RecBuf, , , "ascii", "RetStatus"); // 接收的交易状态
lrs_save_param_ex("MySocket", "user", RecBuf, , , "ascii", "RetCode"); // 接收的返回码
lrs_save_param_ex("MySocket", "user", RecBuf, , , "ascii", "RetMsg"); // 接收的返回信息
lrs_save_param_ex("MySocket", "user", RecBuf, , , "ascii", "RetID"); // 接收返回的流水号
//lr_error_message("======接收的完整报文是:%s", lr_eval_string("<NewRecBuf>"));
//lr_error_message("======发送的流水号是:%s", lr_eval_string("<DateTime><VuID><Num>"));
//lr_error_message("======接收的流水号是:%s", lr_eval_string("<RetID>"));
if (strcmp(lr_eval_string("<RetCode>"),"HJ0000 ") == )
//if (strcmp(lr_eval_string("<RetStatus>"),"N") == 0) // N-交易成功;E-交易失败;A-需要授权,交易未成功;W-警告(交易成功,返回提示信息);U-表示超时
{
if (strcmp(lr_eval_string("<RetID>"),lr_eval_string("<DATE><TIME><VUER><UNIQ>")) == ) // 发送流水号和接收流水号相同,防止串包
{
lr_end_transaction("01_50704_委托报单_接收报文", LR_PASS);
lr_end_transaction("01_50704_委托报单", LR_PASS);
}
else
{
lr_end_transaction("01_50704_委托报单_接收报文", LR_FAIL);
lr_end_transaction("01_50704_委托报单", LR_FAIL);
lr_error_message("01_50704_委托报单接收报文串包了!!!发送流水号是:%s,接收流水号是:%s,接收的完整报文是:%s", lr_eval_string("<DateTime><VuID><Num>"),lr_eval_string("<RetID>"),lr_eval_string("<NewRecBuf>"));
}
}
else
{
lr_end_transaction("01_50704_委托报单_接收报文", LR_FAIL);
lr_end_transaction("01_50704_委托报单", LR_FAIL);
lr_error_message("01_50704_委托报单接收报文出错!交易状态是:%s,返回码是:%s,返回信息是:%s,接收的完整报文是:%s", lr_eval_string("<RetStatus>"),lr_eval_string("<RetCode>"),lr_eval_string("<RetMsg>"),lr_eval_string("<NewRecBuf>"));
}
}
else
{
lr_end_transaction("01_50704_委托报单_接收报文", LR_FAIL);
lr_end_transaction("01_50704_委托报单", LR_FAIL);
lr_error_message("01_50704_委托报单接收报文为空!发送流水号是:%s", lr_eval_string("<DateTime><VuID><Num>"));
}
}
else
{
lr_end_transaction("01_50704_委托报单_接收报文", LR_FAIL);
lr_error_message("01_50704_委托报单_接收报文失败;错误码是:%d;", rc);
lr_end_transaction("01_50704_委托报单", LR_FAIL);
}
lrs_free_buffer(RecBuf); // 释放空间
lrs_disable_socket("MySocket", DISABLE_SEND_RECV); // 关闭接口
lrs_close_socket("MySocket");
return ;
}
【性能测试】:关于Sockets协议的脚本的开发的更多相关文章
- Loadrunner 脚本开发-利用loadrunner开发Windows Sockets协议脚本
脚本开发-利用loadrunner开发Windows Sockets协议脚本 by:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436 实践举例 Socket服务端简单实 ...
- JMeter5.1开发Java协议接口脚本【待完成】
JMeter5.1开发Java协议接口脚本
- LoadRunner录制Web协议的脚本 (by网络)
LoadRunner录制Web协议的脚本 http://itindex.net/detail/50530-loadrunner-web-脚本
- ESP8266 LUA脚本语言开发: 准备工作-LUA开发是怎么来的
前言 当前8266有各种开发 1.在官方已经封装好的C库上开发(SDK开发) 2.官方在SDK的基础上封装的AT指令程序(AT指令开发) 3.在SDK的基础上嵌入脚本语言(Lua,Python等开发方 ...
- shell编程系列26--大型脚本工具开发实战
shell编程系列26--大型脚本工具开发实战 大型脚本工具开发实战 拆分脚本功能,抽象函数 .function get_all_group 返回进程组列表字符串 .function get_all_ ...
- [性能测试]:关于消费类ISO8583协议脚本的开发
一,要发送的报文,转化成16进制的,报文如下 "\x01\x52"//报文长度338 "\x60\x00\x24\x00\x00"//TPDU "\x ...
- [LoadRunner]性能测试实践_Hessian协议脚本编写
第一步,新建LR的脚本,选择Java Vuser协议: 第二步,编写hessian测试脚本,如下: import lrapi.lr; import java.net.MalformedURLExcep ...
- [LoadRunner]性能测试实践_Hessian协议脚本编写2
协议选取和运行配置请参考:http://www.cnblogs.com/whylaughing/p/5430821.html 这次直接贴代码让大家参考: import lrapi.lr; import ...
- 使用LR编写windows sockets协议xml报文格式脚本实战
以下是测试脚本Demo: #include "lrs.h" Action() { char * resultCode;//结果代码 char * time; //系统时间 char ...
随机推荐
- 第十届国际用户体验创新大赛携Mockplus走进校园
今日立夏,万木并秀,生生不息,第十届国际用户体验创新大赛即将拉开序幕.5月5日下午,一场用户体验设计经验分享活动携带众多嘉宾降临成都理工大学,为西南赛区首站赛事宣讲. 本次宣讲活动邀请了华为技术有限公 ...
- 在Linux下使用logrotate管理日志(转)
原文地址:http://www.tuicool.com/articles/ieAnMjN logrotate是日志循环管理工具,可以分割日志文件,删除旧的日志文件,创建新的日志文件,循环管理日志从而节 ...
- CodeForces 681B Economy Game (暴力)
题意:给定一个数,问能不能 找到非负 a, b, c,使得 a × 1 234 567 + b × 123 456 + c × 1 234 = n. 析:二重循环,去确定c. 代码如下: #inclu ...
- 用Swift实现一款天气预报APP(二)
这个系列的目录: 用Swift实现一款天气预报APP(一) 用Swift实现一款天气预报APP(二) 用Swift实现一款天气预报APP(三) 上篇中主要讲了界面的一些内容,这篇主要讨论网络请求,获得 ...
- An Introduction to Text Mining using Twitter Streaming
Text mining is the application of natural language processing techniques and analytical methods to t ...
- mysql导入数据load data infile用法(转)
们常常导入数据!mysql有一个高效导入方法,那就是load data infile 下面来看案例说明 基本语法: load data [low_priority] [local] infile ' ...
- 手动编译安装lamp之php
转自马哥教育讲课文档 三.编译安装php-5.4.8 1.解决依赖关系: 请配置好yum源(可以是本地系统光盘)后执行如下命令: # yum -y groupinstall "X Softw ...
- Solr(一) 安装部署环境
Solr运行环境 第一步:安装java jdk 第二步:安装tomcat服务器 安装过程:参考http://jingyan.baidu.com/article/870c6fc33e62bcb03fe4 ...
- .net core 2.1-----Sql Server数据库初体验
刚开始接触asp.net core,在学习的过程中遇到了一些小问题,在这里记录一下! 在我们项目的开发过程中,肯定会和数据库打交道,所以我尝试了一下用asp.net core链接数据库,并读取表中的数 ...
- HTTP协议基础(未完待续)
一.超文本传输协议 超文本传输协议(Hypertext Transfer Protocol,HTTP)是一种用于分布式.协作式和超媒体信息系统的应用层协议.HTTP是万维网的数据通信的基础. 设计HT ...