使用LoadRunner WinSocket协议监听本地端口实现并发

发表于:2012-5-15 10:48

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:杨明华    来源:51Testing软件测试网原创

  摘要:本文描述了如何使用LoadRunner的WinSocket协议实现负载机本地端口监听,模拟实际项目中授权端被动等待请求报文的并发场景。

  关键词:LoadRunner;WinSocket协议;本地端口监听

  正文

  一、项目概要

  2010年中旬笔者进入银行某项目进行性能测试,项目使用嵌SQL的C开发,服务器和客户端之间使用socket传输报文。被测程序从交易功能上分为两组,一组进行交易申请,一组进行交易授权。数据库记录所有登录的客户端信息(包括申请组和授权组),定时轮询所有授权端当前状态,并将申请端提交上来的任务推送至某个空闲的授权端,同时更改该授权端状态为“授权中”,授权通过后授权端将信息返回服务器,数据库修改交易信息,一个完整交易完成。

  在服务器和授权客户端之间,服务器不是等待客户端的连接,而是主动推送任务。因此需要使用LoadRunner模拟授权端并发接收服务器推送的任务,同时并发将授权完成的任务再返回给服务器端。

  简单事例图如下:

  二、问题描述

  项目性能测试使用LoadRunner同时模拟交易申请客户端和交易授权客户端的并发。交易申请端到服务器之间属于常见的“请求-响应”模式,申请端主动发起交易请求,服务器端响应请求。但交易授权端和服务器之间则正相反,各空闲的授权端监听本地指定端口,服务器在接收到交易请求后轮询数据库中空闲状态的授权端,并和某一空闲授权端指定端口建立连接,授权端监听到本机指定端口的连接后开始从服务器端接收交易信息,处理交易授权并将信息返回给服务器端。

  LoadRunner模拟交易申请端并发时,线程产生的Vuser会在本机随机开立端口,一个Vuser对应一个端口与服务器端进行连接。而LoadRunner模拟交易授权端的并发则很难处理,由于测试环境所限,不能申请多台Agent或使用IP欺骗功能,因此只能通过脚本编写或其他途径处理。

  我们曾经尝试在一台机器上模拟2个Vuser监听本地同一端口:

lrs_create_socket("socket0","TCP","LocalHost=127.0.0.1:5555","Backlog=50",LrsLastArg );
lrs_accept_connection("socket0", "socket1");
lrs_send("socket1","buf0",LrsLastArg);

  ……………………

  查看全文请点击下载:http://www.51testing.com/html/56/n-811856.html

  三、问题解决

  与开发人员协商,将服务端应用程序的推送部分修改为推送到不同端口:根据授权交易人员的ID不同,将交易推送到不同端口上,这样就实现了在同一台机器上模拟多个授权交易Vuser,不同Vuser监听本地不同端口。

lrs_create_socket("socket0", "TCP", "LocalHost={Param_port}", "Backlog=20",  LrsLastArg);
//对本地端口进行参数化,端口号和授权Vuser ID对应====
i = lrs_accept_connection("socket0","socket1");

lrs_receive("socket1", "buf10", LrsLastArg);
// 接收数据====
lrs_save_searched_string("socket1",NULL,"Param_Test1","LB=< Test1>","RB=</ Test1>",1,0,-1);
lrs_save_searched_string("socket1",NULL,"Param_Test2","LB=  < Test2>","RB=</ Test2>",1,0,-1);
lrs_save_searched_string("socket1",NULL,"Param_Test3","LB=  < Test3>","RB=</ Test3>",1,0,-1);
//从真正接收到的数据而非buffer中保存指定字段====

lrs_send("socket1","buf11" , LrsLastArg);
//将上几条语句中获取的参数放到buf11中发送给服务器====
lrs_disable_socket("socket1", DISABLE_SEND_RECV);
lrs_close_socket("socket1");

  ……

  查看全文请点击下载:http://www.51testing.com/html/56/n-811856.html

  版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • zhangfengqun1
    2012-11-12 16:56:31

    请教个问题    我现需要测试ctp协议的性能,这个协议是在socket UDT协议的基础上自主改造的,loadrunner能支持这类协议的测试吗?
    注:CTP的实现方法:
                1.对UDT_“数据包结构,数据管理,发送方法,接收方法,epoll”的修改
                2.对UDS_“数据传输算法”的修改,实现UDS的数据发送和接收,新增UDS的epoll回调接口,并将其绑定到UDT的epoll之上,复用UDT的epoll.

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号