经常会有性能测试新手问这样的问题:

  C/S的系统如何录制,应该选择什么协议呢?

  待测系统A的一个功能,是由B系统调用的,也需要搭建B系统的测试环境并对其录制么?

  我的回答是,先弄清楚你想测的是什么?对它而言,压力又是什么?

  新手总是想着如何录制客户端的操作,如何模拟客户端的点击。这种想法应该是受到了主流测试工具影响,性能测试的入门基本都是从工具开始,比如使用广的LR,其方便好用的功能应该是录制了。但是需要清楚的是,录制只是为性能测试提供便利的一个功能(可以傻瓜式的产生向服务器施加压力的脚本),录制本身并不是性能测试的根本或者所必需,能够产生压力的那些脚本或是程序才是关键所在。

  第一个问题,比如一个即时通讯类的软件如何测试?

  首先要明确你想测的是客户端还是服务端,如果是服务端,那么服务端承受的压力是什么呢?

  是每一条消息都要经过服务器么?

  服务器是要将消息进行存储,还是仅仅转发?

  不同的功能,如普通会话和多人会话,从服务端来看的区别是什么?

  客户端是如何同服务端通信的,是采用了一些标准的开源协议(如XMPP),还是经过了自己的重新扩展?

  ……

  为了回答那两个看似很简单的问题(想测什么?压力是什么?),其实你需要了解整个系统的运行方式。这些信息完全可以从一些设计文档或者开发人员的口中获取到,并不需要你能读懂源码。

  如果我知道了这个软件使用了XMPP协议,一条普通的会话是客户端向服务器发送了这样一条信息:

消息类型:普通
接收人:A
消息内容:XXX

  而多人会话是客户端发送了这样的信息:

消息类型:多人
接收人:A, B, C
消息内容:XXX

  那么应该会知道,表面上这些不同的功能,其实只是客户端发送信息中个别字段的区别而已。那么我可以想办法直接向服务器发送这些信息,让服务器根据接收信息的内容去完成相应的功能。也许根本没有必要去想如何录制客户端发起一个会话并发送消息这个动作,或者发送文件、群消息等等其他操作。