-
Notifications
You must be signed in to change notification settings - Fork 0
/
load_test.js
184 lines (153 loc) · 6.77 KB
/
load_test.js
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
import http from 'k6/http';
import { check, sleep, group } from 'k6';
// Configuration from environment variables
const config = {
apiUrl: 'https://deep-index.moralis.io/api/v2.2',
walletAddress: '0xff3879b8a363aed92a6eaba8f61f1a96a9ec3c1e',
apiKey: 'YOU API KEY',
site1Endpoint: 'SetSite1EndPoint',
site2Endpoint: 'SetSite2EndPoint',
};
// Function to execute RPC method
const executeRpcMethod = (endpoint, method, params = []) => {
const payload = JSON.stringify({
jsonrpc: '2.0',
method: method,
params: params,
id: 1
});
const response = http.post(endpoint, payload, {
headers: {
'Content-Type': 'application/json',
},
});
return response.json();
};
// Test for Fetching NFTs
export function testFetchNFTs() {
const nftUrl = `${config.apiUrl}/${config.walletAddress}/nft?chain=eth&format=decimal&media_items=false`;
const nftResponse = http.get(nftUrl, {
headers: {
'X-API-Key': config.apiKey,
},
});
check(nftResponse, {
'nft fetch status is 200': (r) => r.status === 200,
'nft fetch response contains data': (r) => r.body.length > 0,
});
console.log('NFT fetch response:', nftResponse.status, nftResponse.body);
sleep(1); // Shorter sleep for load testing
}
// Test for Getting Block Number from Site 1
export function testGetBlockNumberSite1() {
const blockNumberData = executeRpcMethod(config.site1Endpoint, 'eth_blockNumber');
check(blockNumberData, {
'block number response has result': (r) => r.result !== undefined,
'block number response status is 200': (r) => r.error === undefined,
});
const blockNumber = blockNumberData?.result;
if (blockNumber) {
console.log('Site 1 Block Number:', blockNumber);
} else {
console.log('Failed to get block number from Site 1.');
}
sleep(1); // Shorter sleep for load testing
}
// Test for Fetching Block Details and Transaction from Site 1
export function testFetchBlockDetailsSite1() {
const blockNumberData = executeRpcMethod(config.site1Endpoint, 'eth_blockNumber');
check(blockNumberData, {
'block number response has result': (r) => r.result !== undefined,
'block number response status is 200': (r) => r.error === undefined,
});
const blockNumber = blockNumberData?.result;
if (blockNumber) {
const blockData = executeRpcMethod(config.site1Endpoint, 'eth_getBlockByNumber', [blockNumber, true]);
check(blockData, {
'block details response has result': (r) => r.result !== undefined,
'block details response status is 200': (r) => r.error === undefined,
'block details response contains transactions': (r) => r.result.transactions.length > 0,
});
if (blockData && blockData.result && blockData.result.transactions.length > 0) {
const transactionHash = blockData.result.transactions[0].hash;
console.log('Site 1 Transaction Hash:', transactionHash);
const transactionData = executeRpcMethod(config.site1Endpoint, 'eth_getTransactionByHash', [transactionHash]);
check(transactionData, {
'transaction data response has result': (r) => r.result !== undefined,
'transaction data response status is 200': (r) => r.error === undefined,
});
console.log('Site 1 Transaction Data:', transactionData);
} else {
console.log('No transactions found in the block for Site 1.');
}
} else {
console.log('Failed to get block number from Site 1.');
}
sleep(1); // Shorter sleep for load testing
}
// Test for Getting Block Number from Site 2
export function testGetBlockNumberSite2() {
const blockNumberData = executeRpcMethod(config.site2Endpoint, 'eth_blockNumber');
check(blockNumberData, {
'block number response has result': (r) => r.result !== undefined,
'block number response status is 200': (r) => r.error === undefined,
});
const blockNumber = blockNumberData?.result;
if (blockNumber) {
console.log('Site 2 Block Number:', blockNumber);
} else {
console.log('Failed to get block number from Site 2.');
}
sleep(1); // Shorter sleep for load testing
}
// Test for Fetching Block Details and Transaction from Site 2
export function testFetchBlockDetailsSite2() {
const blockNumberData = executeRpcMethod(config.site2Endpoint, 'eth_blockNumber');
check(blockNumberData, {
'block number response has result': (r) => r.result !== undefined,
'block number response status is 200': (r) => r.error === undefined,
});
const blockNumber = blockNumberData?.result;
if (blockNumber) {
const blockData = executeRpcMethod(config.site2Endpoint, 'eth_getBlockByNumber', [blockNumber, true]);
check(blockData, {
'block details response has result': (r) => r.result !== undefined,
'block details response status is 200': (r) => r.error === undefined,
'block details response contains transactions': (r) => r.result.transactions.length > 0,
});
if (blockData && blockData.result && blockData.result.transactions.length > 0) {
const transactionHash = blockData.result.transactions[0].hash;
console.log('Site 2 Transaction Hash:', transactionHash);
const transactionData = executeRpcMethod(config.site2Endpoint, 'eth_getTransactionByHash', [transactionHash]);
check(transactionData, {
'transaction data response has result': (r) => r.result !== undefined,
'transaction data response status is 200': (r) => r.error === undefined,
});
console.log('Site 2 Transaction Data:', transactionData);
} else {
console.log('No transactions found in the block for Site 2.');
}
} else {
console.log('Failed to get block number from Site 2.');
}
sleep(1); // Shorter sleep for load testing
}
// Load Testing Configuration
export let options = {
stages: [
{ duration: '1m', target: 10 }, // Ramp up to 10 VUs over 1 minutes
{ duration: '3m', target: 10 }, // Stay at 10 VUs for 3 minutes
{ duration: '1m', target: 0 }, // Ramp down to 0 VUs over 1 minutes
],
thresholds: {
http_req_duration: ['p(95)<500'], // 95% of requests should be below 500ms
},
};
// Default function to run all tests
export default function () {
group('Fetch NFTs', testFetchNFTs);
group('Get Block Number Site 1', testGetBlockNumberSite1);
group('Fetch Block Details Site 1', testFetchBlockDetailsSite1);
group('Get Block Number Site 2', testGetBlockNumberSite2);
group('Fetch Block Details Site 2', testFetchBlockDetailsSite2);
}