conftest.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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. # noinspection PyUnresolvedReferences
  47. return ssl.create_default_context(
  48. cafile=os.path.join(os.path.dirname(__file__), "certs/ca-root.crt")
  49. )
  50. def pytest_generate_tests(metafunc):
  51. if 'socket_module' in metafunc.fixturenames:
  52. socket_modules = [socket]
  53. try:
  54. # noinspection PyUnresolvedReferences
  55. from gevent import socket as gevent_socket
  56. except ImportError:
  57. print("Skipping gevent (not installed)")
  58. else:
  59. socket_modules.append(gevent_socket)
  60. metafunc.parametrize("socket_module", socket_modules)
  61. if 'client_class' in metafunc.fixturenames:
  62. from library.pymemcache.client.base import PooledClient, Client
  63. from library.pymemcache.client.hash import HashClient
  64. class HashClientSingle(HashClient):
  65. def __init__(self, server, *args, **kwargs):
  66. super(HashClientSingle, self).__init__(
  67. [server], *args, **kwargs
  68. )
  69. metafunc.parametrize(
  70. "client_class", [Client, PooledClient, HashClientSingle]
  71. )