chore(bench.bench): allow benchmarking apps implemented as generators (#876)

Change create_bench to support WSGI applications implemented as Python
generators (i.e. that yield strings or bytes).
This commit is contained in:
Kurt Griffiths
2016-08-25 16:28:32 -06:00
committed by GitHub
parent 5493bf8a9b
commit e0f059378b

View File

@@ -18,9 +18,10 @@
from __future__ import print_function from __future__ import print_function
import argparse import argparse
from collections import defaultdict from collections import defaultdict, deque
from decimal import Decimal from decimal import Decimal
import gc import gc
import inspect
import random import random
import sys import sys
import timeit import timeit
@@ -99,6 +100,11 @@ def profile(name, env, filename=None, verbose=False):
sort='tottime', filename=filename) sort='tottime', filename=filename)
def exhaust(iterator_or_generator):
# from https://docs.python.org/dev/library/itertools.html#itertools-recipes
deque(iterator_or_generator, maxlen=0)
BODY = helpers.rand_string(10240, 10240) # NOQA BODY = helpers.rand_string(10240, 10240) # NOQA
HEADERS = {'X-Test': 'Funky Chicken'} # NOQA HEADERS = {'X-Test': 'Funky Chicken'} # NOQA
@@ -114,7 +120,15 @@ def create_bench(name, env):
if srmock.status != '200 OK': if srmock.status != '200 OK':
raise AssertionError(srmock.status + ' != 200 OK') raise AssertionError(srmock.status + ' != 200 OK')
return bench def bench_generator():
exhaust(app(env, srmock))
if srmock.status != '200 OK':
raise AssertionError(srmock.status + ' != 200 OK')
if inspect.isgeneratorfunction(app):
return bench_generator
else:
return bench
def consolidate_datasets(datasets): def consolidate_datasets(datasets):