摘要:本文描述了如何使用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); lrs_receive("socket1", "buf10", LrsLastArg); lrs_send("socket1","buf11" , LrsLastArg); |
……
查看全文请点击下载:http://www.51testing.com/html/56/n-811856.html
版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。