本文是自己在工作中的一些总结,开发语言与工具以C++/C为例。整理比较仓促,后续持续更新。转载或其他操作请通知作者。当然,交流讨论是十分欢迎的。(原有所有的CSDN 博客不再更新)
公司新上了一个Server,现在需要对该Server进行压力性能和基本功能测试,需要模拟几千几万的客户端,同时进行上下线,以及其他业务操作(很多时候使用的是自己的私有协议),开发步骤如下:
一 确立开发方案:解决以下几个问题
(1)如何解决用户输入问题?
(2)如何实现工具的业务功能?
(3)如何确定输出?
二 针对1中的三个问题,一 一 回答
(1)用户输入可采用多种形式
1 UI界面:利用QT,MFC等图形化的工具解决图形界面的输入输出问题。QT的好处是可以跨平台,代码比较简洁,但windows上的通信速率以及部分系统函数需要自己编写;MFC的好处是微软自己的一个Lib,封装的是Window平台的API,借助MSDN可以迅速完成开发,缺点是代码比较复杂,想要深入了解需要功夫,跨平台不太容易;
2 加载配置文件:将用户的输入以文本或者CSV(Comma Separated Value)文件的形式保存,并在工具运行之前加载。优点是不需要UI界面,可以以命令行的形式运行,效率高,内存消耗小,缺点是不够直观(Windows已经深入人心,大部分时候我们开发的工具并不是只给自己使用,而大部分使用工具的人并不喜欢Dos界面)。
除此之外,还需要对用户输入的数据进行相应的转换。如String 类型的IP地址转换成BYTE或者DWORD;用户输入的复选框,转换成相应的TRUE OR FALSE 等等,具体的转换情况见C++/C分类;
(2)实现工具的业务功能是工具的核心,可以分成以下几步去完成
1用户类:利用面向对象的思想去考虑完成该类,然后多次生成该类的对象,即可实现多用户的模拟;如,要模拟一个孩子类可以这样写:
1 //Child.cpp 2 //lb 2018 3 3 //For Multi Users 4 5 #include "stdafx.h" 6 #include "atlstr.h" 7 #include8 const int nMaxClientNum = 10; 9 class child10 {11 public:12 child() :sName("Tom"), nAge(10), sSex("Male") {};13 14 public:15 16 CString sName;17 18 unsigned nAge : 7;19 20 CString sSex;21 22 };23 24 int main()25 {26 27 /*创建多个客户端*/28 static child* s_pChildList[nMaxClientNum];29 30 for (int i=0; i < nMaxClientNum; i++)31 {32 s_pChildList[i] = new child();33 child *pTmp = s_pChildList[i];34 35 pTmp->nAge = i;36 37 CString sN;38 sN.Format("%d",i);39 pTmp->sName += sN;40 41 (i % 2 == 0) ? pTmp->sSex = "Male" : pTmp->sSex = "Female";42 43 }44 /*验证客户端*/45 for (int i = 0; i < nMaxClientNum; i++)46 {47 child *pChild = s_pChildList[i];48 49 std::cout << "Child" << i << std::endl << "姓名:" << pChild->sName << ";" << std::endl << "性别:" << pChild->sSex << ";"50 << std::endl << "年龄:" << pChild->nAge << std::endl<
测试截图:
2 逻辑类:
逻辑类是该工具的核心中的核心,包括基本的业务实现(如socket发包或者WinpCap发包,如报文的解析,回应,ACK,加解密压缩等),用以控制整个工具使用期间的流程以及业务逻辑,需要具体问题具体对待。
3 功能类:
此类是逻辑类与用户类的辅助类,如数据转换,文件读取,日志读写,优化等
(3)输出类
好的文章需要“凤头”“猪肚”“豹尾”,开发一个软件亦是如此。输出类起到一个豹尾的作用;
输出分为多种形式,常见的如下:
1 日志输出;将每一步的执行动作,执行结果打印到界面,或者保存到Log文件中(具体实现形式由用户自己发挥);
2 测试报告输出;将测试的结果输出给用户,需要知道用户的关注点在何处;
实际实行时,可以二者结合。
In a Word,
整个开发过程建议采取瀑布模型,循环反馈,步步为营,持续集成,这样可以保证工具的高集成,高可用和高复用。