1. 线程组,在我们测试方案里面,每个线程模拟一个用户,执行用户的登录、等等等一系列的操作。由于我们的项目是长连接的,如何能实现多个sample公用一个长连接客户端,考虑了很久,后实现方法如下:
1 package tea.client.network;
2 /**
3 * @author Teaey
4 * @creation 2012-8-25
5 */
6 public class NetworkClientHolder
7 {
8 /**
9 * 这里使用ThradLocal存储BaseClient
10 * 方便一轮测试的每个sample都是由同一个socketChannel发送
11 * 更真实的模拟用户
12 */
13 private static ThreadLocal<BaseClient> clientHolder = new ThreadLocal<BaseClient>();
14 public static BaseClient getClient(String ip, String port)
15 {
16 BaseClient client = clientHolder.get();
17 if (null == client)
18 {
19 client = new BaseClient(ip, port);
20 client.connect();
21 clientHolder.set(client);
22 }
23 return client;
24 }
25 }
代码中使用thread_local保存Socket客户端,这样每个sample中发送数据的客户端都是从这里拿的,可以保证长连接的情况下,socket不会重复创建,很好的模拟了用户。
当然不单单是链接可以保存,所有需要在线程中共享的数据都可以通过这种方法来实现。