conftest.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import os.path
  2. import pytest
  3. import socket
  4. import ssl
  5. def pytest_addoption(parser):
  6. parser.addoption('--server', action='store', default='localhost',
  7. help='memcached server')
  8. parser.addoption('--port', action='store', default='11211',
  9. help='memcached server port')
  10. parser.addoption('--tls-server', action='store', default='localhost',
  11. help='TLS memcached server')
  12. parser.addoption('--tls-port', action='store', default='11212',
  13. help='TLS memcached server port')
  14. parser.addoption('--size', action='store', default=1024,
  15. help='size of data in benchmarks')
  16. parser.addoption('--count', action='store', default=10000,
  17. help='number of iterations to run each benchmark')
  18. parser.addoption('--keys', action='store', default=20,
  19. help='number of keys to use for multi benchmarks')
  20. @pytest.fixture(scope='session')
  21. def host(request):
  22. return request.config.option.server
  23. @pytest.fixture(scope='session')
  24. def port(request):
  25. return int(request.config.option.port)
  26. @pytest.fixture(scope='session')
  27. def tls_host(request):
  28. return request.config.option.tls_server
  29. @pytest.fixture(scope='session')
  30. def tls_port(request):
  31. return int(request.config.option.tls_port)
  32. @pytest.fixture(scope='session')
  33. def size(request):
  34. return int(request.config.option.size)
  35. @pytest.fixture(scope='session')
  36. def count(request):
  37. return int(request.config.option.count)
  38. @pytest.fixture(scope='session')
  39. def keys(request):
  40. return int(request.config.option.keys)
  41. @pytest.fixture(scope='session')
  42. def pairs(size, keys):
  43. return {'pymemcache_test:%d' % i: 'X' * size for i in range(keys)}
  44. @pytest.fixture(scope='session')
  45. def tls_context():
  46. return ssl.create_default_context(
  47. cafile=os.path.join(os.path.dirname(__file__), "certs/ca-root.crt")
  48. )
  49. def pytest_generate_tests(metafunc):
  50. if 'socket_module' in metafunc.fixturenames:
  51. socket_modules = [socket]
  52. try:
  53. from gevent import socket as gevent_socket
  54. except ImportError:
  55. print("Skipping gevent (not installed)")
  56. else:
  57. socket_modules.append(gevent_socket)
  58. metafunc.parametrize("socket_module", socket_modules)
  59. if 'client_class' in metafunc.fixturenames:
  60. from pymemcache.client.base import PooledClient, Client
  61. from pymemcache.client.hash import HashClient
  62. class HashClientSingle(HashClient):
  63. def __init__(self, server, *args, **kwargs):
  64. super(HashClientSingle, self).__init__(
  65. [server], *args, **kwargs
  66. )
  67. metafunc.parametrize(
  68. "client_class", [Client, PooledClient, HashClientSingle]
  69. )