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