通用服务器桩_第1页
通用服务器桩_第2页
通用服务器桩_第3页
通用服务器桩_第4页
通用服务器桩_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第页通用服务器桩通用服务器桩-Receiver使用说明文档

发表于:2023-11-06来源:百度质量部:不详点击数:标签:Receiver

通用服务器桩-Receiver使用说明文档1背景“驱动+桩”是一种比较成熟的服务器端模块测试模式,易于实施自动化。

通用(服务器)桩-Receiver使用说明文档

1背景

"驱动+桩'是一种比较成熟的服务器端模块(测试)模式,易于实施(自动化)。

Receiver应用于桩构建的场景,提高构建服务器端测试桩的效率,在大多数应用场景下用户可以通过配置xml文件实习桩功能,支持功能和(性能)测试使用

Receiver只支持(linux)环境使用

2名词解释

A模式:普通xml解析模式

B模式:逻辑xml解析模式

C模式:so加载模式

3功能

※能够模拟提供二进制socket接口的服务器程序

※能够支持功能与性能的要求

※提供三种使用模式:

(1)普通xml解析模式(模拟单个接口,指定接口格式及回报数据)

(2)逻辑xml解析模式(模拟多个接口,除指定接口格式及回报数据外,定制部分逻辑)

(3)so加载模式(特殊场景使用,用户可以自己实现包处理函数)

※提供各类辅助函数,帮助更快速的(开发)桩程序

4使用说明

4.1普通xml模式

假设一个服务器模块提供的某个socket接口请求格式为header+req1,回包格式为header+resp1,struct描述如下:

structheader{

intcmd;

charprovider[200];

intlen;

};

structreq1{

intid;

};

Structitem{

Inta;

Intb;

};

structresp1{

intresult;

charname[50];

intcount;

structitemitems[];

};

那么我们需要先构造三个xml描述

※header1.xml

※req1.xml

※resp1.xml

注:endian用来描述字节序,0为主机序(默认)

Repeat用于指定该数据段重复数字,用于数组定义,也可以用在struct的描述上

Type为该字段类型,工具内置类型见附录

#flowlen()为内置函数,指定此处自动计算,根据后面所有结构体的长度计算,其他关键字见附录

$TEMPRESULT表示从环境变量TEMPRESULT中读取数据

@count表示该字段值由值反填,也就是5

回包值可以指定固定值、从环境变量中读取或者利用random内置函数随机生成

运行receiver:./receiverp3306r./header.xmlrreq1.xmlsheader.xmlsresp1.xml-l1-u0-n-1即可模拟这个服务器的接口

那么当receiver收到一个header+req1的请求,它会回一个header+resp1的应答(result为对应系统变量实际值,name为helloworld),-l1表示长连接,-u0表示tcp请求,-n-1表示receiver不会退出,一直处理请求

4.2逻辑xml模式

上个例子给出了模拟一个服务器程序单一接口的使用方法,逻辑xml主要用于模拟一个程序多个接口的场景。

假设说某模块提供的接口格式如下:

header1+header2+reqX

回包格式为:

header1+header2+respX

(X为未知数,具体请求与回应的结构体由header2中的cmd域来定义,例如如果cmd取值为5,则请求为header1+header2+req5,回应为header1+header2+resp5)

我们想启动一个桩实例来模拟这些接口,那么可以使用逻辑xml模式,逻辑xmll的使用方法如下:

首先构造逻辑xml:

[gaowei@receiver]$catxml/config.xml

运行receiver:./receiverp3306bconfig.xml-l1-u0-n-1t5即可模拟这个服务器的多个接口

4.3so模式

如果以上两种方式不能满足用户(需求),用户可以继承receiver提供的plugin基类,实现自己的包处理函数

classIPlugin

{

public:

IPlugin(conststd::stringname);

virtual~IPlugin();

virtualconststd::stringGetPluginName();

virtualvoidProcess(void*);

protected:

std::stringm_strPluginName;

};

Receiver使用了Epool和线程池模型,当有socket可读,会立刻回调用户的Process(void*)函数,传给用户socket句柄,用户可自行执行收包及处理函数

一个简单示例如下:

testplugin.h:

#include"plugin.h'

classTestPlugin:publicIPlugin{

public:

TestPlugin():IPlugin("testplugin'){

printf("createTestPlugin\n');

}

voidProcess(void*);

};

testplugin.cpp:

#include"testplugin.h'

#include"mysocket.h'

#include

usingnamespacestd;

extern"C'

TestPlugin*create_testplugin()

{

returnnewTestPlugin();

}

voidTestPlugin::Process(void*p){

intsock=(int)p;

cout'handlee

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论