Test: Multiple concurrent connections.
(
config: StressTestConfig, results: StressTestResults
)
| 145 | |
| 146 | |
| 147 | def stress_test_concurrent( |
| 148 | config: StressTestConfig, results: StressTestResults |
| 149 | ) -> None: |
| 150 | """Test: Multiple concurrent connections.""" |
| 151 | console.print("\n[bold cyan]Test 1: Concurrent Connections[/bold cyan]") |
| 152 | console.print(f"Making {config.num_connections} concurrent requests...") |
| 153 | |
| 154 | with Progress( |
| 155 | SpinnerColumn(), |
| 156 | TextColumn("[progress.description]{task.description}"), |
| 157 | BarColumn(), |
| 158 | TaskProgressColumn(), |
| 159 | console=console, |
| 160 | ) as progress: |
| 161 | task = progress.add_task("Requesting...", total=config.num_connections) |
| 162 | |
| 163 | threads: list[threading.Thread] = [] |
| 164 | with httpx.Client() as client: |
| 165 | for _ in range(config.num_connections): |
| 166 | thread: threading.Thread = threading.Thread( |
| 167 | target=make_request, args=(config, results, client) |
| 168 | ) |
| 169 | thread.start() |
| 170 | threads.append(thread) |
| 171 | |
| 172 | for thread in threads: |
| 173 | thread.join() |
| 174 | progress.update(task, advance=1) |
| 175 | |
| 176 | success_rate = ( |
| 177 | (results.successful_requests / results.total_requests * 100) |
| 178 | if results.total_requests > 0 |
| 179 | else 0 |
| 180 | ) |
| 181 | console.print( |
| 182 | f" Success rate: {success_rate:.1f}% ({results.successful_requests}/{results.total_requests})" |
| 183 | ) |
| 184 | |
| 185 | |
| 186 | def stress_test_rapid(config: StressTestConfig, results: StressTestResults) -> None: |