@autoweb/domain-models 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +100 -0
- package/index.d.ts +594 -0
- package/index.js +3 -0
- package/package.json +55 -0
- package/python-models/__init__.py +68 -0
- package/python-models/action-configs.py +1112 -0
- package/python-models/build/lib/floweb_models/__init__.py +194 -0
- package/python-models/build/lib/floweb_models/action_configs.py +783 -0
- package/python-models/build/lib/floweb_models/debug.py +209 -0
- package/python-models/build/lib/floweb_models/debug_models.py +141 -0
- package/python-models/build/lib/floweb_models/environment.py +158 -0
- package/python-models/build/lib/floweb_models/execution_results.py +208 -0
- package/python-models/build/lib/floweb_models/flow.py +345 -0
- package/python-models/build/lib/floweb_models/flow_validation.py +316 -0
- package/python-models/build/lib/floweb_models/parallel_execution.py +258 -0
- package/python-models/build/lib/floweb_models/performance_test.py +605 -0
- package/python-models/build/lib/floweb_models/websocket_communication.py +697 -0
- package/python-models/debug.py +209 -0
- package/python-models/dist/floweb_domain_models-1.0.0-py3-none-any.whl +0 -0
- package/python-models/environment.py +158 -0
- package/python-models/execution-results.py +208 -0
- package/python-models/flow-validation.py +316 -0
- package/python-models/flow.py +369 -0
- package/python-models/floweb_domain_models.egg-info/PKG-INFO +9 -0
- package/python-models/floweb_domain_models.egg-info/SOURCES.txt +16 -0
- package/python-models/floweb_domain_models.egg-info/dependency_links.txt +1 -0
- package/python-models/floweb_domain_models.egg-info/requires.txt +1 -0
- package/python-models/floweb_domain_models.egg-info/top_level.txt +1 -0
- package/python-models/floweb_models/__init__.py +194 -0
- package/python-models/floweb_models/__pycache__/__init__.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/action_configs.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/debug.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/debug_models.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/environment.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/execution_results.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/flow.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/flow_validation.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/parallel_execution.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/performance_test.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/websocket_communication.cpython-312.pyc +0 -0
- package/python-models/floweb_models/action_configs.py +1062 -0
- package/python-models/floweb_models/debug.py +209 -0
- package/python-models/floweb_models/debug_models.py +141 -0
- package/python-models/floweb_models/environment.py +158 -0
- package/python-models/floweb_models/execution_results.py +208 -0
- package/python-models/floweb_models/flow.py +345 -0
- package/python-models/floweb_models/flow_validation.py +316 -0
- package/python-models/floweb_models/parallel_execution.py +229 -0
- package/python-models/floweb_models/performance_test.py +605 -0
- package/python-models/floweb_models/websocket_communication.py +697 -0
- package/python-models/floweb_models.egg-info/PKG-INFO +9 -0
- package/python-models/floweb_models.egg-info/SOURCES.txt +16 -0
- package/python-models/floweb_models.egg-info/dependency_links.txt +1 -0
- package/python-models/floweb_models.egg-info/requires.txt +1 -0
- package/python-models/floweb_models.egg-info/top_level.txt +1 -0
- package/python-models/parallel-execution.py +475 -0
- package/python-models/performance-test.py +605 -0
- package/python-models/setup.py +13 -0
- package/python-models/websocket-communication.py +697 -0
- package/schemas/action-configs.json +1501 -0
- package/schemas/debug.json +203 -0
- package/schemas/environment.json +165 -0
- package/schemas/execution-results.json +209 -0
- package/schemas/flow-validation.json +311 -0
- package/schemas/flow.json +381 -0
- package/schemas/parallel-execution.json +219 -0
- package/schemas/performance-test.json +600 -0
- package/schemas/websocket-communication.json +1118 -0
|
@@ -0,0 +1,605 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: performance-test.json
|
|
3
|
+
# timestamp: 2026-01-25T13:38:23+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import StrEnum
|
|
8
|
+
from typing import Annotated, Any
|
|
9
|
+
|
|
10
|
+
from pydantic import AnyUrl, AwareDatetime, BaseModel, ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class Method(StrEnum):
|
|
14
|
+
"""
|
|
15
|
+
HTTP method
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
GET = 'GET'
|
|
19
|
+
POST = 'POST'
|
|
20
|
+
PUT = 'PUT'
|
|
21
|
+
DELETE = 'DELETE'
|
|
22
|
+
PATCH = 'PATCH'
|
|
23
|
+
HEAD = 'HEAD'
|
|
24
|
+
OPTIONS = 'OPTIONS'
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class ResourceType(StrEnum):
|
|
28
|
+
"""
|
|
29
|
+
Type of resource requested
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
document = 'document'
|
|
33
|
+
stylesheet = 'stylesheet'
|
|
34
|
+
script = 'script'
|
|
35
|
+
image = 'image'
|
|
36
|
+
fetch = 'fetch'
|
|
37
|
+
xhr = 'xhr'
|
|
38
|
+
other = 'other'
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class ResponseTiming(BaseModel):
|
|
42
|
+
model_config = ConfigDict(
|
|
43
|
+
populate_by_name=True,
|
|
44
|
+
)
|
|
45
|
+
dns: float
|
|
46
|
+
"""
|
|
47
|
+
DNS lookup time in milliseconds
|
|
48
|
+
"""
|
|
49
|
+
tcp: float
|
|
50
|
+
"""
|
|
51
|
+
TCP connection time in milliseconds
|
|
52
|
+
"""
|
|
53
|
+
ssl: float
|
|
54
|
+
"""
|
|
55
|
+
SSL/TLS handshake time in milliseconds
|
|
56
|
+
"""
|
|
57
|
+
ttfb: float
|
|
58
|
+
"""
|
|
59
|
+
Time to first byte in milliseconds
|
|
60
|
+
"""
|
|
61
|
+
download: float
|
|
62
|
+
"""
|
|
63
|
+
Download time in milliseconds
|
|
64
|
+
"""
|
|
65
|
+
total: float
|
|
66
|
+
"""
|
|
67
|
+
Total request time in milliseconds
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class Status(StrEnum):
|
|
72
|
+
"""
|
|
73
|
+
Test status
|
|
74
|
+
"""
|
|
75
|
+
|
|
76
|
+
draft = 'draft'
|
|
77
|
+
configured = 'configured'
|
|
78
|
+
running = 'running'
|
|
79
|
+
completed = 'completed'
|
|
80
|
+
archived = 'archived'
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
class PerformanceTestMetadata(BaseModel):
|
|
84
|
+
model_config = ConfigDict(
|
|
85
|
+
populate_by_name=True,
|
|
86
|
+
)
|
|
87
|
+
id: str
|
|
88
|
+
"""
|
|
89
|
+
Unique test identifier
|
|
90
|
+
"""
|
|
91
|
+
name: str
|
|
92
|
+
"""
|
|
93
|
+
Test name
|
|
94
|
+
"""
|
|
95
|
+
description: str
|
|
96
|
+
"""
|
|
97
|
+
Test description
|
|
98
|
+
"""
|
|
99
|
+
tags: list[str]
|
|
100
|
+
"""
|
|
101
|
+
Test tags for categorization
|
|
102
|
+
"""
|
|
103
|
+
parentID: str | None = None
|
|
104
|
+
"""
|
|
105
|
+
Parent folder ID
|
|
106
|
+
"""
|
|
107
|
+
createdAt: AwareDatetime
|
|
108
|
+
"""
|
|
109
|
+
Creation timestamp
|
|
110
|
+
"""
|
|
111
|
+
updatedAt: AwareDatetime
|
|
112
|
+
"""
|
|
113
|
+
Last update timestamp
|
|
114
|
+
"""
|
|
115
|
+
createdBy: str
|
|
116
|
+
"""
|
|
117
|
+
Creator identifier
|
|
118
|
+
"""
|
|
119
|
+
version: Annotated[int, Field(ge=1)]
|
|
120
|
+
"""
|
|
121
|
+
Test version number
|
|
122
|
+
"""
|
|
123
|
+
status: Status
|
|
124
|
+
"""
|
|
125
|
+
Test status
|
|
126
|
+
"""
|
|
127
|
+
lastRun: AwareDatetime | None = None
|
|
128
|
+
"""
|
|
129
|
+
Last execution timestamp
|
|
130
|
+
"""
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
class RefreshMethod(StrEnum):
|
|
134
|
+
"""
|
|
135
|
+
HTTP method for refresh request
|
|
136
|
+
"""
|
|
137
|
+
|
|
138
|
+
GET = 'GET'
|
|
139
|
+
POST = 'POST'
|
|
140
|
+
PUT = 'PUT'
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
class TokenRefreshConfig(BaseModel):
|
|
144
|
+
model_config = ConfigDict(
|
|
145
|
+
populate_by_name=True,
|
|
146
|
+
)
|
|
147
|
+
refresh_url: AnyUrl
|
|
148
|
+
"""
|
|
149
|
+
Token refresh endpoint URL
|
|
150
|
+
"""
|
|
151
|
+
refresh_method: RefreshMethod | None = 'POST'
|
|
152
|
+
"""
|
|
153
|
+
HTTP method for refresh request
|
|
154
|
+
"""
|
|
155
|
+
refresh_body: Any | None = None
|
|
156
|
+
"""
|
|
157
|
+
Request body for token refresh
|
|
158
|
+
"""
|
|
159
|
+
refresh_headers: dict[str, str] | None = None
|
|
160
|
+
"""
|
|
161
|
+
Headers for refresh request
|
|
162
|
+
"""
|
|
163
|
+
token_path: str
|
|
164
|
+
"""
|
|
165
|
+
JSON path to extract token from response
|
|
166
|
+
"""
|
|
167
|
+
token_header: str | None = 'Authorization'
|
|
168
|
+
"""
|
|
169
|
+
Header name for token
|
|
170
|
+
"""
|
|
171
|
+
token_prefix: str | None = 'Bearer'
|
|
172
|
+
"""
|
|
173
|
+
Token prefix
|
|
174
|
+
"""
|
|
175
|
+
refresh_interval: int | None = None
|
|
176
|
+
"""
|
|
177
|
+
Refresh interval in seconds
|
|
178
|
+
"""
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
class Credential(BaseModel):
|
|
182
|
+
model_config = ConfigDict(
|
|
183
|
+
populate_by_name=True,
|
|
184
|
+
)
|
|
185
|
+
headers: dict[str, str]
|
|
186
|
+
"""
|
|
187
|
+
Headers for this credential set
|
|
188
|
+
"""
|
|
189
|
+
user_id: str | None = None
|
|
190
|
+
"""
|
|
191
|
+
User identifier
|
|
192
|
+
"""
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
class RotationStrategy(StrEnum):
|
|
196
|
+
"""
|
|
197
|
+
Credential rotation strategy
|
|
198
|
+
"""
|
|
199
|
+
|
|
200
|
+
round_robin = 'round_robin'
|
|
201
|
+
random = 'random'
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
class CredentialRotationConfig(BaseModel):
|
|
205
|
+
model_config = ConfigDict(
|
|
206
|
+
populate_by_name=True,
|
|
207
|
+
)
|
|
208
|
+
credentials: list[Credential]
|
|
209
|
+
"""
|
|
210
|
+
Array of credential sets
|
|
211
|
+
"""
|
|
212
|
+
rotation_strategy: RotationStrategy | None = 'round_robin'
|
|
213
|
+
"""
|
|
214
|
+
Credential rotation strategy
|
|
215
|
+
"""
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
class LoadTestThresholds(BaseModel):
|
|
219
|
+
model_config = ConfigDict(
|
|
220
|
+
populate_by_name=True,
|
|
221
|
+
)
|
|
222
|
+
maxResponseTime: Annotated[int, Field(ge=0)]
|
|
223
|
+
"""
|
|
224
|
+
Maximum acceptable response time in milliseconds
|
|
225
|
+
"""
|
|
226
|
+
maxErrorRate: Annotated[float, Field(ge=0.0, le=1.0)]
|
|
227
|
+
"""
|
|
228
|
+
Maximum acceptable error rate (0-1)
|
|
229
|
+
"""
|
|
230
|
+
minThroughput: Annotated[float, Field(ge=0.0)]
|
|
231
|
+
"""
|
|
232
|
+
Minimum requests per second
|
|
233
|
+
"""
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
class ResponseTimeMetrics(BaseModel):
|
|
237
|
+
model_config = ConfigDict(
|
|
238
|
+
populate_by_name=True,
|
|
239
|
+
)
|
|
240
|
+
min: float
|
|
241
|
+
"""
|
|
242
|
+
Minimum response time
|
|
243
|
+
"""
|
|
244
|
+
max: float
|
|
245
|
+
"""
|
|
246
|
+
Maximum response time
|
|
247
|
+
"""
|
|
248
|
+
mean: float
|
|
249
|
+
"""
|
|
250
|
+
Mean response time
|
|
251
|
+
"""
|
|
252
|
+
median: float
|
|
253
|
+
"""
|
|
254
|
+
Median response time
|
|
255
|
+
"""
|
|
256
|
+
p90: float
|
|
257
|
+
"""
|
|
258
|
+
90th percentile response time
|
|
259
|
+
"""
|
|
260
|
+
p95: float
|
|
261
|
+
"""
|
|
262
|
+
95th percentile response time
|
|
263
|
+
"""
|
|
264
|
+
p99: float
|
|
265
|
+
"""
|
|
266
|
+
99th percentile response time
|
|
267
|
+
"""
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
class BandwidthMetrics(BaseModel):
|
|
271
|
+
model_config = ConfigDict(
|
|
272
|
+
populate_by_name=True,
|
|
273
|
+
)
|
|
274
|
+
sent: int
|
|
275
|
+
"""
|
|
276
|
+
Total bytes sent
|
|
277
|
+
"""
|
|
278
|
+
received: int
|
|
279
|
+
"""
|
|
280
|
+
Total bytes received
|
|
281
|
+
"""
|
|
282
|
+
avgSentPerSecond: float
|
|
283
|
+
"""
|
|
284
|
+
Average bytes sent per second
|
|
285
|
+
"""
|
|
286
|
+
avgReceivedPerSecond: float
|
|
287
|
+
"""
|
|
288
|
+
Average bytes received per second
|
|
289
|
+
"""
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
class RequestExecution(BaseModel):
|
|
293
|
+
model_config = ConfigDict(
|
|
294
|
+
populate_by_name=True,
|
|
295
|
+
)
|
|
296
|
+
timestamp: float
|
|
297
|
+
"""
|
|
298
|
+
Execution timestamp
|
|
299
|
+
"""
|
|
300
|
+
statusCode: int
|
|
301
|
+
"""
|
|
302
|
+
HTTP status code
|
|
303
|
+
"""
|
|
304
|
+
responseTime: float
|
|
305
|
+
"""
|
|
306
|
+
Response time in milliseconds
|
|
307
|
+
"""
|
|
308
|
+
size: int
|
|
309
|
+
"""
|
|
310
|
+
Response size in bytes
|
|
311
|
+
"""
|
|
312
|
+
success: bool
|
|
313
|
+
"""
|
|
314
|
+
Whether the request was successful
|
|
315
|
+
"""
|
|
316
|
+
error: str | None = None
|
|
317
|
+
"""
|
|
318
|
+
Error message if failed
|
|
319
|
+
"""
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
class TimelineDataPoint(BaseModel):
|
|
323
|
+
model_config = ConfigDict(
|
|
324
|
+
populate_by_name=True,
|
|
325
|
+
)
|
|
326
|
+
timestamp: float
|
|
327
|
+
"""
|
|
328
|
+
Data point timestamp
|
|
329
|
+
"""
|
|
330
|
+
activeUsers: int
|
|
331
|
+
"""
|
|
332
|
+
Number of active users at this point
|
|
333
|
+
"""
|
|
334
|
+
requestsPerSecond: float
|
|
335
|
+
"""
|
|
336
|
+
Requests per second at this point
|
|
337
|
+
"""
|
|
338
|
+
avgResponseTime: float
|
|
339
|
+
"""
|
|
340
|
+
Average response time at this point
|
|
341
|
+
"""
|
|
342
|
+
errorRate: float
|
|
343
|
+
"""
|
|
344
|
+
Error rate at this point
|
|
345
|
+
"""
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
class RecordedResponse(BaseModel):
|
|
349
|
+
model_config = ConfigDict(
|
|
350
|
+
populate_by_name=True,
|
|
351
|
+
)
|
|
352
|
+
status: int
|
|
353
|
+
"""
|
|
354
|
+
HTTP status code
|
|
355
|
+
"""
|
|
356
|
+
statusText: str
|
|
357
|
+
"""
|
|
358
|
+
HTTP status text
|
|
359
|
+
"""
|
|
360
|
+
headers: dict[str, str]
|
|
361
|
+
"""
|
|
362
|
+
Response headers
|
|
363
|
+
"""
|
|
364
|
+
body: str | None = None
|
|
365
|
+
"""
|
|
366
|
+
Response body
|
|
367
|
+
"""
|
|
368
|
+
size: int
|
|
369
|
+
"""
|
|
370
|
+
Response size in bytes
|
|
371
|
+
"""
|
|
372
|
+
timing: ResponseTiming
|
|
373
|
+
"""
|
|
374
|
+
Response timing breakdown
|
|
375
|
+
"""
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
class AuthConfig(BaseModel):
|
|
379
|
+
model_config = ConfigDict(
|
|
380
|
+
populate_by_name=True,
|
|
381
|
+
)
|
|
382
|
+
token_refresh: TokenRefreshConfig | None = None
|
|
383
|
+
"""
|
|
384
|
+
Token refresh configuration
|
|
385
|
+
"""
|
|
386
|
+
credential_rotation: CredentialRotationConfig | None = None
|
|
387
|
+
"""
|
|
388
|
+
Credential rotation configuration
|
|
389
|
+
"""
|
|
390
|
+
header_override: dict[str, str] | None = None
|
|
391
|
+
"""
|
|
392
|
+
Header override configuration
|
|
393
|
+
"""
|
|
394
|
+
|
|
395
|
+
|
|
396
|
+
class LoadTestConfiguration(BaseModel):
|
|
397
|
+
model_config = ConfigDict(
|
|
398
|
+
populate_by_name=True,
|
|
399
|
+
)
|
|
400
|
+
targetUrl: AnyUrl
|
|
401
|
+
"""
|
|
402
|
+
Base URL for the load test
|
|
403
|
+
"""
|
|
404
|
+
duration: Annotated[int, Field(ge=1)]
|
|
405
|
+
"""
|
|
406
|
+
Test duration in seconds
|
|
407
|
+
"""
|
|
408
|
+
virtualUsers: Annotated[int, Field(ge=1)]
|
|
409
|
+
"""
|
|
410
|
+
Number of concurrent virtual users
|
|
411
|
+
"""
|
|
412
|
+
rampUpTime: Annotated[int | None, Field(ge=0)] = None
|
|
413
|
+
"""
|
|
414
|
+
Time to ramp up to full load in seconds
|
|
415
|
+
"""
|
|
416
|
+
thinkTime: Annotated[int | None, Field(ge=0)] = None
|
|
417
|
+
"""
|
|
418
|
+
Delay between requests per user in milliseconds
|
|
419
|
+
"""
|
|
420
|
+
includeRequests: list[str]
|
|
421
|
+
"""
|
|
422
|
+
IDs of requests to include in load test
|
|
423
|
+
"""
|
|
424
|
+
thresholds: LoadTestThresholds
|
|
425
|
+
"""
|
|
426
|
+
Pass/fail thresholds
|
|
427
|
+
"""
|
|
428
|
+
authConfig: AuthConfig | None = None
|
|
429
|
+
"""
|
|
430
|
+
Authentication configuration
|
|
431
|
+
"""
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
class AggregateMetrics(BaseModel):
|
|
435
|
+
model_config = ConfigDict(
|
|
436
|
+
populate_by_name=True,
|
|
437
|
+
)
|
|
438
|
+
totalRequests: int
|
|
439
|
+
"""
|
|
440
|
+
Total number of requests executed
|
|
441
|
+
"""
|
|
442
|
+
successfulRequests: int
|
|
443
|
+
"""
|
|
444
|
+
Number of successful requests
|
|
445
|
+
"""
|
|
446
|
+
failedRequests: int
|
|
447
|
+
"""
|
|
448
|
+
Number of failed requests
|
|
449
|
+
"""
|
|
450
|
+
errorRate: float
|
|
451
|
+
"""
|
|
452
|
+
Error rate (0-1)
|
|
453
|
+
"""
|
|
454
|
+
throughput: float
|
|
455
|
+
"""
|
|
456
|
+
Requests per second
|
|
457
|
+
"""
|
|
458
|
+
responseTime: ResponseTimeMetrics
|
|
459
|
+
"""
|
|
460
|
+
Response time statistics
|
|
461
|
+
"""
|
|
462
|
+
bandwidth: BandwidthMetrics
|
|
463
|
+
"""
|
|
464
|
+
Bandwidth usage metrics
|
|
465
|
+
"""
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
class RequestResults(BaseModel):
|
|
469
|
+
model_config = ConfigDict(
|
|
470
|
+
populate_by_name=True,
|
|
471
|
+
)
|
|
472
|
+
requestId: str
|
|
473
|
+
"""
|
|
474
|
+
Request identifier
|
|
475
|
+
"""
|
|
476
|
+
url: AnyUrl
|
|
477
|
+
"""
|
|
478
|
+
Request URL
|
|
479
|
+
"""
|
|
480
|
+
method: str
|
|
481
|
+
"""
|
|
482
|
+
HTTP method
|
|
483
|
+
"""
|
|
484
|
+
executions: list[RequestExecution]
|
|
485
|
+
"""
|
|
486
|
+
Individual execution results
|
|
487
|
+
"""
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
class RecordedRequest(BaseModel):
|
|
491
|
+
model_config = ConfigDict(
|
|
492
|
+
populate_by_name=True,
|
|
493
|
+
)
|
|
494
|
+
id: str
|
|
495
|
+
"""
|
|
496
|
+
Unique request identifier
|
|
497
|
+
"""
|
|
498
|
+
url: AnyUrl
|
|
499
|
+
"""
|
|
500
|
+
Request URL
|
|
501
|
+
"""
|
|
502
|
+
method: Method
|
|
503
|
+
"""
|
|
504
|
+
HTTP method
|
|
505
|
+
"""
|
|
506
|
+
headers: dict[str, str]
|
|
507
|
+
"""
|
|
508
|
+
Request headers
|
|
509
|
+
"""
|
|
510
|
+
body: str | None = None
|
|
511
|
+
"""
|
|
512
|
+
Request body
|
|
513
|
+
"""
|
|
514
|
+
timestamp: float
|
|
515
|
+
"""
|
|
516
|
+
Request timestamp in milliseconds
|
|
517
|
+
"""
|
|
518
|
+
response: RecordedResponse | None = None
|
|
519
|
+
"""
|
|
520
|
+
Response data
|
|
521
|
+
"""
|
|
522
|
+
resourceType: ResourceType
|
|
523
|
+
"""
|
|
524
|
+
Type of resource requested
|
|
525
|
+
"""
|
|
526
|
+
initiator: str | None = None
|
|
527
|
+
"""
|
|
528
|
+
What triggered this request
|
|
529
|
+
"""
|
|
530
|
+
|
|
531
|
+
|
|
532
|
+
class PerformanceTestResults(BaseModel):
|
|
533
|
+
model_config = ConfigDict(
|
|
534
|
+
populate_by_name=True,
|
|
535
|
+
)
|
|
536
|
+
testId: str
|
|
537
|
+
"""
|
|
538
|
+
Test identifier
|
|
539
|
+
"""
|
|
540
|
+
startTime: float
|
|
541
|
+
"""
|
|
542
|
+
Test start timestamp
|
|
543
|
+
"""
|
|
544
|
+
endTime: float
|
|
545
|
+
"""
|
|
546
|
+
Test end timestamp
|
|
547
|
+
"""
|
|
548
|
+
duration: float
|
|
549
|
+
"""
|
|
550
|
+
Test duration in seconds
|
|
551
|
+
"""
|
|
552
|
+
metrics: AggregateMetrics
|
|
553
|
+
"""
|
|
554
|
+
Aggregate performance metrics
|
|
555
|
+
"""
|
|
556
|
+
requestResults: list[RequestResults]
|
|
557
|
+
"""
|
|
558
|
+
Per-request execution results
|
|
559
|
+
"""
|
|
560
|
+
timeline: list[TimelineDataPoint]
|
|
561
|
+
"""
|
|
562
|
+
Time-series data for charts
|
|
563
|
+
"""
|
|
564
|
+
passed: bool
|
|
565
|
+
"""
|
|
566
|
+
Whether the test passed
|
|
567
|
+
"""
|
|
568
|
+
failureReasons: list[str] | None = None
|
|
569
|
+
"""
|
|
570
|
+
Reasons for test failure
|
|
571
|
+
"""
|
|
572
|
+
|
|
573
|
+
|
|
574
|
+
class PerformanceTest(BaseModel):
|
|
575
|
+
"""
|
|
576
|
+
Performance test definition for load testing and API monitoring
|
|
577
|
+
"""
|
|
578
|
+
|
|
579
|
+
model_config = ConfigDict(
|
|
580
|
+
populate_by_name=True,
|
|
581
|
+
)
|
|
582
|
+
metadata: PerformanceTestMetadata
|
|
583
|
+
"""
|
|
584
|
+
Test metadata and configuration
|
|
585
|
+
"""
|
|
586
|
+
recordedRequests: list[RecordedRequest]
|
|
587
|
+
"""
|
|
588
|
+
HTTP requests recorded during test creation
|
|
589
|
+
"""
|
|
590
|
+
loadTestConfig: LoadTestConfiguration
|
|
591
|
+
"""
|
|
592
|
+
Load test execution configuration
|
|
593
|
+
"""
|
|
594
|
+
filterPatterns: list[str] | None = None
|
|
595
|
+
"""
|
|
596
|
+
URL patterns for filtering recorded requests
|
|
597
|
+
"""
|
|
598
|
+
onlySameDomain: bool | None = None
|
|
599
|
+
"""
|
|
600
|
+
Restrict recording to same domain only
|
|
601
|
+
"""
|
|
602
|
+
results: PerformanceTestResults | None = None
|
|
603
|
+
"""
|
|
604
|
+
Results from load test execution
|
|
605
|
+
"""
|