7
7
from datetime import datetime
8
8
9
9
class AgentGroup ():
10
- def __init__ (self , queue , num_threads , run_time , rampup ):
11
- self .queue = queue
12
- self .num_threads = num_threads
13
- self .run_time = run_time
14
- self .rampup = rampup
15
- self .details = []
16
-
17
- def run (self ):
18
- self .start_time = time .time ()
19
- threads = []
20
- for idx in range (self .num_threads ):
21
- spacing = 1.0 * self .rampup / self .num_threads
22
- if idx > 0 :
23
- time .sleep (spacing )
24
-
25
- agent = Agent (self .queue , idx , self .run_time , self .start_time )
26
- agent .daemon = True
27
- threads .append (agent )
28
- agent .start ()
29
-
30
- for agent in threads :
31
- agent .join ()
32
- self .details .append ("%5d\t %9.2f\t %8d\t %6d\t %14d\t %23.3f\t %23.3f" % (agent .thread_num , agent .real_start_time - self .start_time , agent .trans_count , agent .errors , agent .received_data , agent .avg_resp_time , agent .avg_throughput ))
10
+ def __init__ (self , queue , num_threads , run_time , rampup ):
11
+ self .queue = queue
12
+ self .num_threads = num_threads
13
+ self .run_time = run_time
14
+ self .rampup = rampup
15
+ self .details = []
16
+
17
+ def run (self ):
18
+ self .start_time = time .time ()
19
+ threads = []
20
+ for idx in range (self .num_threads ):
21
+ spacing = 1.0 * self .rampup / self .num_threads
22
+ if idx > 0 :
23
+ time .sleep (spacing )
24
+
25
+ agent = Agent (self .queue , idx , self .run_time , self .start_time )
26
+ agent .daemon = True
27
+ threads .append (agent )
28
+ agent .start ()
29
+
30
+ for agent in threads :
31
+ agent .join ()
32
+ self .details .append ("%5d\t %9.2f\t %8d\t %6d\t %14d\t %23.3f\t %23.3f" % (agent .thread_num , agent .real_start_time - self .start_time , agent .trans_count , agent .errors , agent .received_data , agent .avg_resp_time , agent .avg_throughput ))
33
33
34
34
class Agent (threading .Thread ):
35
- """
36
- Every single thread to run the test code.
37
- Test stastics put into threads queue.
38
- """
39
- def __init__ (self , queue , thread_num , run_time , start_time ):
40
- threading .Thread .__init__ (self )
41
- self .queue = queue
42
- self .thread_num = thread_num
43
- self .run_time = run_time
44
- self .start_time = start_time
45
- self .real_start_time = time .time ()
46
- self .trans_count = 0
47
- self .received_data = 0
48
- self .errors = 0
49
- self .avg_resp_time = 0
50
- self .avg_throughput = 0
51
-
52
- def run (self ):
53
- elapsed_time = 0
54
- total_resp_time = 0
55
- while elapsed_time < self .run_time :
56
- error = ''
57
- start = time .time ()
58
- resp_data = 0
59
-
60
- try :
61
- connect = urllib2 .urlopen (url )
62
- content = connect .read ()
63
- resp_data = len (content )
64
- except Exception , e :
65
- error = str (e )
66
-
67
- run_time = time .time () - start
68
- elapsed_time = time .time () - self .start_time
69
-
70
- self .trans_count += 1
71
- self .received_data += resp_data
72
- if error != '' :
73
- self .errors += 1
74
- total_resp_time += run_time
75
-
76
- fields = (self .thread_num , elapsed_time , run_time , resp_data , error )
77
- # print fields
78
- self .queue .put (fields )
79
-
80
- self .avg_resp_time = 1.0 * total_resp_time / self .trans_count
81
- self .avg_throughput = 1.0 * self .trans_count / (time .time () - self .real_start_time )
35
+ """
36
+ Every single thread to run the test code.
37
+ Test stastics put into threads queue.
38
+ """
39
+ def __init__ (self , queue , thread_num , run_time , start_time ):
40
+ threading .Thread .__init__ (self )
41
+ self .queue = queue
42
+ self .thread_num = thread_num
43
+ self .run_time = run_time
44
+ self .start_time = start_time
45
+ self .real_start_time = time .time ()
46
+ self .trans_count = 0
47
+ self .received_data = 0
48
+ self .errors = 0
49
+ self .avg_resp_time = 0
50
+ self .avg_throughput = 0
51
+
52
+ def run (self ):
53
+ elapsed_time = 0
54
+ total_resp_time = 0
55
+ while elapsed_time < self .run_time :
56
+ error = ''
57
+ start = time .time ()
58
+ resp_data = 0
59
+
60
+ try :
61
+ connect = urllib2 .urlopen (url )
62
+ content = connect .read ()
63
+ resp_data = len (content )
64
+ except Exception , e :
65
+ error = str (e )
66
+
67
+ run_time = time .time () - start
68
+ elapsed_time = time .time () - self .start_time
69
+
70
+ self .trans_count += 1
71
+ self .received_data += resp_data
72
+ if error != '' :
73
+ self .errors += 1
74
+ total_resp_time += run_time
75
+
76
+ fields = (self .thread_num , elapsed_time , run_time , resp_data , error )
77
+ # print fields
78
+ self .queue .put (fields )
79
+
80
+ self .avg_resp_time = 1.0 * total_resp_time / self .trans_count
81
+ self .avg_throughput = 1.0 * self .trans_count / (time .time () - self .real_start_time )
82
82
83
83
class QueueReader (threading .Thread ):
84
- def __init__ (self , queue ):
85
- threading .Thread .__init__ (self )
86
- self .queue = queue
87
- self .trans_count = 0
88
- self .error_count = 0
89
- self .elapsed_time = 0.0
90
-
91
- def run (self ):
92
- with open ("results.csv" , "w" ) as f :
93
- while True :
94
- try :
95
- agent_num , elapsed_time , run_time , resp_data , error = self .queue .get (False )
96
- self .trans_count += 1
97
- if error != '' :
98
- error = '\\ n' .join (error .splitlines ())
99
-
100
- self .error_count += 1
101
- f .write ('%d, %d, %0.3f, %f, %d, %s,\n ' % (self .trans_count , agent_num , elapsed_time , run_time , resp_data , error ))
102
- # print agent_num, self.trans_count, elapsed_time, run_time, resp_data, error
103
- if elapsed_time > self .elapsed_time :
104
- self .elapsed_time = elapsed_time
105
-
106
- if elapsed_time < test_duration :
107
- # print int(elapsed_time / interval_time), elapsed_time, interval_time
108
- interval_run_time [int (elapsed_time / interval_time )].append (run_time )
109
- f .flush ()
110
- except Queue .Empty :
111
- time .sleep (.05 )
84
+ def __init__ (self , queue ):
85
+ threading .Thread .__init__ (self )
86
+ self .queue = queue
87
+ self .trans_count = 0
88
+ self .error_count = 0
89
+ self .elapsed_time = 0.0
90
+
91
+ def run (self ):
92
+ with open ("results.csv" , "w" ) as f :
93
+ while True :
94
+ try :
95
+ agent_num , elapsed_time , run_time , resp_data , error = self .queue .get (False )
96
+ self .trans_count += 1
97
+ if error != '' :
98
+ error = '\\ n' .join (error .splitlines ())
99
+
100
+ self .error_count += 1
101
+ f .write ('%d, %d, %0.3f, %f, %d, %s,\n ' % (self .trans_count , agent_num , elapsed_time , run_time , resp_data , error ))
102
+ # print agent_num, self.trans_count, elapsed_time, run_time, resp_data, error
103
+ if elapsed_time > self .elapsed_time :
104
+ self .elapsed_time = elapsed_time
105
+
106
+ if elapsed_time < test_duration :
107
+ # print int(elapsed_time / interval_time), elapsed_time, interval_time
108
+ interval_run_time [int (elapsed_time / interval_time )].append (run_time )
109
+ f .flush ()
110
+ except Queue .Empty :
111
+ time .sleep (.05 )
112
112
113
113
def average (seq ):
114
114
avg = (float (sum (seq )) / len (seq ))
@@ -159,7 +159,7 @@ def percentile(seq, percentile):
159
159
160
160
all_run_time = []
161
161
for interval_time_list in interval_run_time :
162
- all_run_time .extend (interval_time_list )
162
+ all_run_time .extend (interval_time_list )
163
163
164
164
print "\n ===Summary==="
165
165
print "transactions: %d hits" % (queue_reader .trans_count )
@@ -180,14 +180,14 @@ def percentile(seq, percentile):
180
180
print "Interval Details (secs):"
181
181
print "%8s\t %7s\t %7s\t %7s\t %7s\t %7s\t %7s\t %7s\t %7s" % ("interval" , "count" , "avg" , "min" , "50pct" , "80pct" , "90pct" , "max" , "stdev" )
182
182
for interval_num in range (interval ):
183
- interval_list = interval_run_time [interval_num ]
184
- print "%8d\t %7d\t %7.3f\t %7.3f\t %7.3f\t %7.3f\t %7.3f\t %7.3f\t %7.3f" % (interval_num , len (interval_list ), average (interval_list ), min (interval_list ), percentile (interval_list , 50 ),\
183
+ interval_list = interval_run_time [interval_num ]
184
+ print "%8d\t %7d\t %7.3f\t %7.3f\t %7.3f\t %7.3f\t %7.3f\t %7.3f\t %7.3f" % (interval_num , len (interval_list ), average (interval_list ), min (interval_list ), percentile (interval_list , 50 ),\
185
185
percentile (interval_list , 80 ), percentile (interval_list , 90 ), max (interval_list ), standard_dev (interval_list ))
186
186
187
187
print "\n ===Agent Details==="
188
188
print "Agent\t Starttime\t Requests\t Errors\t Bytes received\t Avg Response Time(secs)\t Avg throughput(req/sec)"
189
189
for agent_detail in ag .details :
190
- print agent_detail
190
+ print agent_detail
191
191
192
192
193
193
0 commit comments