• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 通用服務器樁-Receiver使用說明文檔

    發表于:2012-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描述如下:

      struct header{

      int cmd;

      char provider[200];

      int len;

      };

      struct req1{

      int id;

      };

      Struct item{

      Int a;

      Int b;

      };

      struct resp1{

      int result;

      char name[50];

      int count;

      struct item items[];

      };

      那么我們需要先構造三個xml描述

       ※header1.xml

       ※req1.xml

      ※ resp1.xml

      注:endian用來描述字節序,0為主機序(默認)

      Repeat用于指定該數據段重復數字,用于數組定義,也可以用在struct的描述上

      Type為該字段類型,工具內置類型見附錄

      #flowlen()為內置函數,指定此處自動計算,根據后面所有結構體的長度計算,其他關鍵字見附錄

      $TEMPRESULT表示從環境變量TEMPRESULT中讀取數據

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

      回包值可以指定固定值、從環境變量中讀取或者利用random內置函數隨機生成

      運行receiver:./receiver –p 3306 –r ./header.xml –r req1.xml –s header.xml –s resp1.xml -l 1 -u 0 -n -1 即可模擬這個服務器的接口

      那么當receiver收到一個header+req1的請求,它會回一個header+resp1的應答(result為對應系統變量實際值,name 為hello world),-l 1表示長連接, -u 0 表示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@db-testing-cs33.db01.baidu.com receiver]$ cat xml/config.xml

      運行receiver:./receiver –p 3306 –b config.xml -l 1 -u 0 -n -1 –t 5即可模擬這個服務器的多個接口

      4.3 so模式

      如果以上兩種方式不能滿足用戶需求,用戶可以繼承receiver提供的plugin基類,實現自己的包處理函數

      class IPlugin

      {

      public:

      IPlugin( const std::string& name) ;

      virtual ~IPlugin();

      virtual const std::string& GetPluginName();

      virtual void Process( void *);

      protected:

      std::string m_strPluginName;

      };

      Receiver使用了Epool和線程池模型,當有socket可讀,會立刻回調用戶的Process( void *)函數,傳給用戶socket句柄,用戶可自行執行收包及處理函數

      一個簡單示例如下:

      testplugin.h:

      #include “plugin.h”

      class TestPlugin: public IPlugin{

      public:

      TestPlugin():IPlugin(“testplugin”){

      printf(“create TestPlugin\n”);

      }

      void Process( void *);

      };

      testplugin.cpp:

      #include “testplugin.h”

      #include “mysocket.h”

      #include

      using namespace std;

      extern “C”

      TestPlugin* create_testplugin()

      {

      return new TestPlugin();

      }

      void TestPlugin::Process(void * p){

      int sock = (int)p;

      cout << ” handle epool event , socket= ” << sock << endl;

      SocketLayer::close_delepoll(sock);

      }

      5 工具參數

      receiver三種模式: xml模式(A),邏輯xml模式(B),so模式(C),參數含義如下:

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>