性能测试可能有这样一些业务需求,如每秒20次点击、每秒处理5个事务、每分钟下载50个页面、达到虚拟并发用户数500个等等。那么,如何借助工具模拟用户操作来对系统进行加载模拟用户的行为呢?例如,当一个用户使用一个系统的Web服务时,单击按钮、提交一个表单,实际上,就是向Web服务器发出请求、发送数据。我们就可以利用测试工具不断向用户发出请求,这就可以看作对服务器施加的负载。工具所模拟的用户,不是真实的用户,可能就是为服务器连接所创建的一个进程或一个线程,所以称为虚拟用户。可以按以下两种方式模拟虚拟用户。
按进程方式模拟虚拟用户。一般来说,一个进程模拟一个用户,有多少个用户就有多少个进程,而每个进程会占用一定的资源,所以一负载生成器只能生成较少的虚拟用户。缺点是这种方式会占用较多的资源,优点是模拟过程相对稳定。
按照线程方式模拟虚拟用户。一般来说,每个虚拟用户由一个线程来完成模拟,每30~50个线程(用户)共享一个进程(一个内存段),这就节省了大量内存空间,从而可以在一个负载生成器上产生非常多的虚拟用户。缺点是不够稳定,因为线程的资源是从进程资源中分配出来的,线程a要用资源就必须等待线程b释放,而线程b可能在等线程c释放资源......,这样就容易出现问题。

同一个时间所产生的虚拟用户数,就是我们常说的同时在线的用户数、并发连接数。并发连接数(虚拟用户数)越多,负载就越大。
每次请求就是客户端向服务器发送数据包,发送的数据包越大,给服务器带来的压力就大,服务器需要花更多的时间来处理它。所以,每次请求的数据量也是要考虑的重要因素,即测试时请求数据量越大,意味着系统测试负载就越大。不论是进程还是线程来模拟虚拟用户,都需要更贴近用户的行为。例如,用户在不同的操作之间会有所停顿,一群老年人操作比较慢,给服务器的压力就小;一群年轻人操作很快,给服务器的压力就大。这间隔时间可以理解为思考的快慢,所以它被定义为思考时间。例如,在相同的并发用户数的情况下,每秒发出1个请求和每10秒发出1个请求,负载差别挺大的,以100个并发连接数和一分钟单位时间计算,前者发出的请求是6000次,后者发出的请求是600次,前者带给系统的负载是后者的十倍。所以,负载可以定义为并发用户数,即“并发用户数=并发连接数+请求数据量+思考时间”。
按进程方式模拟虚拟用户。一般来说,一个进程模拟一个用户,有多少个用户就有多少个进程,而每个进程会占用一定的资源,所以一负载生成器只能生成较少的虚拟用户。缺点是这种方式会占用较多的资源,优点是模拟过程相对稳定。
按照线程方式模拟虚拟用户。一般来说,每个虚拟用户由一个线程来完成模拟,每30~50个线程(用户)共享一个进程(一个内存段),这就节省了大量内存空间,从而可以在一个负载生成器上产生非常多的虚拟用户。缺点是不够稳定,因为线程的资源是从进程资源中分配出来的,线程a要用资源就必须等待线程b释放,而线程b可能在等线程c释放资源......,这样就容易出现问题。

同一个时间所产生的虚拟用户数,就是我们常说的同时在线的用户数、并发连接数。并发连接数(虚拟用户数)越多,负载就越大。
每次请求就是客户端向服务器发送数据包,发送的数据包越大,给服务器带来的压力就大,服务器需要花更多的时间来处理它。所以,每次请求的数据量也是要考虑的重要因素,即测试时请求数据量越大,意味着系统测试负载就越大。不论是进程还是线程来模拟虚拟用户,都需要更贴近用户的行为。例如,用户在不同的操作之间会有所停顿,一群老年人操作比较慢,给服务器的压力就小;一群年轻人操作很快,给服务器的压力就大。这间隔时间可以理解为思考的快慢,所以它被定义为思考时间。例如,在相同的并发用户数的情况下,每秒发出1个请求和每10秒发出1个请求,负载差别挺大的,以100个并发连接数和一分钟单位时间计算,前者发出的请求是6000次,后者发出的请求是600次,前者带给系统的负载是后者的十倍。所以,负载可以定义为并发用户数,即“并发用户数=并发连接数+请求数据量+思考时间”。