| 215 | |
| 216 | @asyncio.coroutine |
| 217 | def run(test, count, concurrency, *, loop, verbose, profile): |
| 218 | if verbose: |
| 219 | print("Prepare") |
| 220 | else: |
| 221 | print('.', end='', flush=True) |
| 222 | host, port = find_port() |
| 223 | barrier = Barrier(2) |
| 224 | server = Process(target=test, args=(host, port, barrier, profile)) |
| 225 | server.start() |
| 226 | barrier.wait() |
| 227 | |
| 228 | url = 'http://{}:{}'.format(host, port) |
| 229 | |
| 230 | connector = aiohttp.TCPConnector(loop=loop) |
| 231 | with aiohttp.ClientSession(connector=connector) as client: |
| 232 | |
| 233 | for i in range(10): |
| 234 | # make server hot |
| 235 | resp = yield from client.get(url+'/prepare') |
| 236 | assert resp.status == 200, resp.status |
| 237 | yield from resp.release() |
| 238 | |
| 239 | if verbose: |
| 240 | test_name = test.__name__ |
| 241 | print("Attack", test_name) |
| 242 | rps, data = yield from attack(count, concurrency, client, loop, url) |
| 243 | if verbose: |
| 244 | print("Done") |
| 245 | |
| 246 | resp = yield from client.get(url+'/stop') |
| 247 | assert resp.status == 200, resp.status |
| 248 | yield from resp.release() |
| 249 | |
| 250 | server.join() |
| 251 | return rps, data |
| 252 | |
| 253 | |
| 254 | def main(argv): |