-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathartillery-processor.js
More file actions
executable file
·153 lines (133 loc) · 5.02 KB
/
Copy pathartillery-processor.js
File metadata and controls
executable file
·153 lines (133 loc) · 5.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
module.exports = {
generateRandomEmail: function (context, events, done) {
// Ensure context.vars exists
if (!context.vars) {
context.vars = {};
}
const timestamp = Date.now();
const random = Math.floor(Math.random() * 10000);
context.vars.email = `test${timestamp}${random}@example.com`;
context.vars.password = 'testpassword123';
context.vars.name = `Test User ${random}`;
return done();
},
logResponseTime: function (requestParams, response, context, ee, next) {
if (response && response.body && response.body.data) {
console.log(
`Request: ${requestParams.name || 'unknown'}, Response Time: ${response.timings ? response.timings.response : 'unknown'}ms`
);
}
return next();
},
trackRabbitMQMetrics: function (context, events, done) {
console.log('Tracking RabbitMQ metrics...');
return done();
},
assertResponseTime: function (requestParams, response, context, ee, next) {
if (
requestParams.name === 'sendMessage' &&
response &&
response.timings
) {
if (response.timings.response > 500) {
console.warn(
`WARNING: sendMessage took ${response.timings.response}ms (expected < 500ms)`
);
}
}
return next();
},
generateTestMessage: function (context, events, done) {
// Ensure context.vars exists
if (!context.vars) {
context.vars = {};
}
const messages = [
'Hello from performance test!',
'Testing message sending speed',
'Performance test message with some content',
'Quick message for load testing',
'Another test message for performance evaluation',
];
context.vars.testMessage =
messages[Math.floor(Math.random() * messages.length)];
return done();
},
monitorMemory: function (context, events, done) {
const used = process.memoryUsage();
console.log(
`Artillery Memory Usage - RSS: ${Math.round((used.rss / 1024 / 1024) * 100) / 100} MB`
);
return done();
},
setupPhase: function (context, events, done) {
console.log('Setting up performance test...');
if (!global.performanceMetrics) {
global.performanceMetrics = {
sendMessageTimes: [],
authTimes: [],
errors: 0,
startTime: Date.now(),
};
}
return done();
},
recordMetrics: function (requestParams, response, context, ee, next) {
if (!global.performanceMetrics) {
global.performanceMetrics = {
sendMessageTimes: [],
authTimes: [],
errors: 0,
startTime: Date.now(),
};
}
if (response && response.timings && response.timings.response) {
const responseTime = response.timings.response;
if (requestParams.name === 'sendMessage') {
global.performanceMetrics.sendMessageTimes.push(responseTime);
} else if (
requestParams.url &&
requestParams.url.includes('signin')
) {
global.performanceMetrics.authTimes.push(responseTime);
}
}
if (
(response && response.statusCode >= 400) ||
(response && response.body && response.body.errors)
) {
global.performanceMetrics.errors++;
}
return next();
},
printSummary: function (context, events, done) {
if (
global.performanceMetrics &&
global.performanceMetrics.sendMessageTimes.length > 0
) {
const sendTimes = global.performanceMetrics.sendMessageTimes;
const avgSendTime =
sendTimes.reduce((a, b) => a + b, 0) / sendTimes.length;
const maxSendTime = Math.max(...sendTimes);
const minSendTime = Math.min(...sendTimes);
console.log('\n=== PERFORMANCE SUMMARY ===');
console.log(
`Send Message - Avg: ${avgSendTime.toFixed(2)}ms, Min: ${minSendTime}ms, Max: ${maxSendTime}ms`
);
console.log(`Total Errors: ${global.performanceMetrics.errors}`);
console.log(
`Test Duration: ${((Date.now() - global.performanceMetrics.startTime) / 1000).toFixed(2)}s`
);
console.log('===========================\n');
}
return done();
},
logResponse: function (requestParams, response, context, ee, next) {
console.log('\n=== DEBUG RESPONSE ===');
console.log(`URL: ${requestParams.url}`);
console.log(`Status: ${response.statusCode}`);
console.log(`Body:`, JSON.stringify(response.body, null, 2));
console.log('======================\n');
return next();
},
};