借助面向对象的思路开发多用户模拟类工具

本文是自己在工作中的一些总结,开发语言与工具以C++/C为例。整理比较仓促,后续持续更新。转载或其他操作请通知作者。当然,交流讨论是十分欢迎的。

公司新上了一个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用户类:利用面向对象的思想去考虑完成该类,然后多次生成该类的对象,即可实现多用户的模拟;如,要模拟一个孩子类可以这样写:

//Child.cpp
//lb 2018 3 
//For Multi Users

#include "stdafx.h"
#include "atlstr.h"
#include <iostream>
const int nMaxClientNum = 10;
class child
{
public:
	child() :sName("Tom"), nAge(10), sSex("Male") {};

public:

	CString sName;

	unsigned nAge : 7;

	CString sSex;

};

int main()
{

	/*创建多个客户端*/
	static child* s_pChildList[nMaxClientNum];

	for (int i=0; i < nMaxClientNum; i++)
	{
		s_pChildList[i] = new child();
		child *pTmp = s_pChildList[i];

		pTmp->nAge = i;

		CString sN;
		sN.Format("%d",i);
		pTmp->sName += sN;

		(i % 2 == 0) ? pTmp->sSex = "Male" : pTmp->sSex = "Female";

	}
	/*验证客户端*/
	for (int i = 0; i < nMaxClientNum; i++)
	{
		child *pChild = s_pChildList[i];

		std::cout << "Child" << i << std::endl << "姓名:" << pChild->sName << ";" << std::endl << "性别:" << pChild->sSex << ";"
			<< std::endl << "年龄:" << pChild->nAge << std::endl<<std::endl;
	}
	/*清理客户端*/
	for (int i = 0; i < nMaxClientNum; i++)
	{
		child *pChild = s_pChildList[i];	
		if (pChild != NULL)
		{
			delete pChild;
			pChild = NULL;
		}
	}
	getchar();
	return 0;
}


测试截图:

2 逻辑类:

逻辑类是该工具的核心中的核心,包括基本的业务实现(如socket发包或者WinpCap发包,如报文的解析,回应,ACK,加解密压缩等),用以控制整个工具使用期间的流程以及业务逻辑,需要具体问题具体对待。

3 功能类:

此类是逻辑类与用户类的辅助类,如数据转换,文件读取,日志读写,优化等

(3)输出类

好的文章需要“凤头”“猪肚”“豹尾”,开发一个软件亦是如此。输出类起到一个豹尾的作用;

输出分为多种形式,常见的如下:

1 日志输出;将每一步的执行动作,执行结果打印到界面,或者保存到Log文件中(具体实现形式由用户自己发挥);

2 测试报告输出;将测试的结果输出给用户,需要知道用户的关注点在何处;

实际实行时,可以二者结合。

In a Word,

整个开发过程建议采取瀑布模型,循环反馈,步步为营,持续集成,这样可以保证工具的高集成,高可用和高复用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值