loadrunner 调用dll实现

来源:互联网 发布:淘宝付款限额 编辑:程序博客网 时间:2024/04/29 10:51

     LR 调用 dll 实现,是简单的SOCKET客户端方面的例子,测试了在单用户中可以跑通。

 注:     1. 加载lr的lib 和 头文件

          2. 把编译好的dll放到lr脚本的目录中

 

#include <stdio.h>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")
#include "lrs_api.h"
#include "D:/Program Files/include/lrun.h"

void Perror(char *message){
 lr_output_message(message);
 exit(1);
}


int InitWinsock(){
 int Error;
 WORD VersionRequested;
 WSADATA WsaData;
 VersionRequested = MAKEWORD(2,2);
 Error = WSAStartup(VersionRequested, &WsaData);
 if (Error != 0){
  Perror("init socket error");
  return -1;
 } else {
  if(LOBYTE(WsaData.wVersion) != 2 || HIBYTE(WsaData.wHighVersion) != 2){
   WSACleanup();
   return -1;
  }
 }
 return 1;
}


intCreateSocket(const char *ip,unsigned int port,char *message){
 SOCKET sockfd;
 struct sockaddr_in from;
 sockfd = socket(AF_INET,SOCK_STREAM,0);
 from.sin_family = AF_INET;
 from.sin_port = htons(port);
 from.sin_addr.s_addr = inet_addr(ip);
 int len =sizeof (from);
 memset(from.sin_zero, 0, 8);
 int nCon = connect(sockfd, (struct sockaddr*)& from, sizeof (from));
 if (nCon < 0)
  Perror("connect socket error");
 //for(;;) {
 if(message == NULL)
  Perror("message can't null");
 if(send(sockfd,message,strlen(message),0) != SOCKET_ERROR)
  lr_output_message("sending.../n");
 if(recv(sockfd,message,strlen(message),0) != SOCKET_ERROR)
  lr_output_message("recv from server: %s/n",message);
 //}
 return 0;
}
void Cleanup() {
 //WSADATA WsaData;
 //if(LOBYTE(WsaData.wVersion) != 2 || HIBYTE(WsaData.wHghVersion) != 2){
// closesocket(sockfd);
 WSACleanup();
 return ;
 //}
}

 

把编译好的 DLL 放到脚本目录下或者放到全局环境中就可以在脚本中进行调用了。。

vuser_init()
{
 lr_load_dll("sockdll.dll");
    InitWinsock();
 return 0;
}

Action()
{
 int sockfd = CreateSocket("127.0.0.1",3490,"hello,server");
 lr_output_message("--%d--",sockfd);
 return 0;
}

原创粉丝点击