diff options
author | John Anderson <sontek@gmail.com> | 2015-07-16 09:50:54 -0700 |
---|---|---|
committer | John Anderson <sontek@gmail.com> | 2015-07-16 09:50:54 -0700 |
commit | 6ef4ab0f455eea7c53c67368c18b3a0d92c9001d (patch) | |
tree | 43e15f338c2569be899119167a3d1a8af2dbd75f | |
parent | 75bba314e8a084c40a806f6e6c13906aaa3f96e5 (diff) | |
parent | 21e1bda51cf0473108c35a03df8b265aa40e3d4b (diff) | |
download | pymemcache-6ef4ab0f455eea7c53c67368c18b3a0d92c9001d.tar.gz |
Merge branch 'master' of github.com:pinterest/pymemcache into add_hashing_client
Conflicts:
docs/apidoc/pymemcache.test.rst
-rw-r--r-- | docs/apidoc/pymemcache.test.rst | 20 | ||||
-rw-r--r-- | pymemcache/test/benchmark.py | 96 | ||||
-rw-r--r-- | pymemcache/test/conftest.py | 18 | ||||
-rw-r--r-- | pymemcache/test/test_benchmark.py | 77 | ||||
-rw-r--r-- | setup.cfg | 1 |
5 files changed, 102 insertions, 110 deletions
diff --git a/docs/apidoc/pymemcache.test.rst b/docs/apidoc/pymemcache.test.rst index 4cf6ba1..8b1e17b 100644 --- a/docs/apidoc/pymemcache.test.rst +++ b/docs/apidoc/pymemcache.test.rst @@ -4,14 +4,6 @@ pymemcache.test package Submodules ---------- -pymemcache.test.benchmark module --------------------------------- - -.. automodule:: pymemcache.test.benchmark - :members: - :undoc-members: - :show-inheritance: - pymemcache.test.conftest module ------------------------------- @@ -20,18 +12,18 @@ pymemcache.test.conftest module :undoc-members: :show-inheritance: -pymemcache.test.test_client module ----------------------------------- +pymemcache.test.test_benchmark module +------------------------------------- -.. automodule:: pymemcache.test.test_client +.. automodule:: pymemcache.test.test_benchmark :members: :undoc-members: :show-inheritance: -pymemcache.test.test_client_hash module ---------------------------------------- +pymemcache.test.test_client module +---------------------------------- -.. automodule:: pymemcache.test.test_client_hash +.. automodule:: pymemcache.test.test_client :members: :undoc-members: :show-inheritance: diff --git a/pymemcache/test/benchmark.py b/pymemcache/test/benchmark.py deleted file mode 100644 index 2fbda51..0000000 --- a/pymemcache/test/benchmark.py +++ /dev/null @@ -1,96 +0,0 @@ -# Copyright 2012 Pinterest.com -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import argparse -import time - - -def test_client(name, client, size, count): - client.flush_all() - - value = 'X' * size - - start = time.time() - - for i in range(count): - client.set(str(i), value) - - for i in range(count): - client.get(str(i)) - - duration = time.time() - start - print("{0}: {1}".format(name, duration)) - - -def test_pylibmc(host, port, size, count): - try: - import pylibmc - except Exception: - print("Could not import pylibmc, skipping test...") - return - - client = pylibmc.Client(['{0}:{1}'.format(host, port)]) - client.behaviors = {"tcp_nodelay": True} - test_client('pylibmc', client, size, count) - - -def test_memcache(host, port, size, count): - try: - import memcache - except Exception: - print("Could not import pymemcache.client, skipping test...") - return - - client = memcache.Client(['{0}:{1}'.format(host, port)]) - test_client('memcache', client, size, count) - - -def test_pymemcache(host, port, size, count): - try: - import pymemcache.client - except Exception: - print("Could not import pymemcache.client, skipping test...") - return - - client = pymemcache.client.Client((host, port)) - test_client('pymemcache', client, size, count) - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument('-s', '--server', - metavar='HOST', - required=True) - parser.add_argument('-p', '--port', - metavar='PORT', - type=int, - required=True) - parser.add_argument('-z', '--size', - metavar='SIZE', - default=1024, - type=int) - parser.add_argument('-c', '--count', - metavar='COUNT', - default=10000, - type=int) - - args = parser.parse_args() - - test_pylibmc(args.server, args.port, args.size, args.count) - test_memcache(args.server, args.port, args.size, args.count) - test_pymemcache(args.server, args.port, args.size, args.count) - - -if __name__ == '__main__': - main() diff --git a/pymemcache/test/conftest.py b/pymemcache/test/conftest.py index 3f45d75..9928a22 100644 --- a/pymemcache/test/conftest.py +++ b/pymemcache/test/conftest.py @@ -11,6 +11,14 @@ def pytest_addoption(parser): default='11211', help='memcached server port') + parser.addoption('--size', action='store', + default=1024, + help='size of data in benchmarks') + + parser.addoption('--count', action='store', + default=10000, + help='amount of values to use in benchmarks') + @pytest.fixture(scope='session') def host(request): @@ -22,6 +30,16 @@ def port(request): return int(request.config.option.port) +@pytest.fixture(scope='session') +def size(request): + return int(request.config.option.size) + + +@pytest.fixture(scope='session') +def count(request): + return int(request.config.option.count) + + def pytest_generate_tests(metafunc): if 'socket_module' in metafunc.fixturenames: socket_modules = [socket] diff --git a/pymemcache/test/test_benchmark.py b/pymemcache/test/test_benchmark.py new file mode 100644 index 0000000..39357cf --- /dev/null +++ b/pymemcache/test/test_benchmark.py @@ -0,0 +1,77 @@ +# Copyright 2012 Pinterest.com +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import time +import pytest + +try: + import pylibmc + HAS_PYLIBMC = True +except Exception: + HAS_PYLIBMC = False + +try: + import memcache + HAS_MEMCACHE = True +except Exception: + HAS_MEMCACHE = False + + +try: + import pymemcache.client + HAS_PYMEMCACHE = True +except Exception: + HAS_PYMEMCACHE = False + + +def run_client_test(name, client, size, count): + client.flush_all() + + value = 'X' * size + + start = time.time() + + for i in range(count): + client.set(str(i), value) + + for i in range(count): + client.get(str(i)) + + duration = time.time() - start + print("{0}: {1}".format(name, duration)) + + +@pytest.mark.benchmark() +@pytest.mark.skipif(not HAS_PYLIBMC, + reason="requires pylibmc") +def test_pylibmc(host, port, size, count): + client = pylibmc.Client(['{0}:{1}'.format(host, port)]) + client.behaviors = {"tcp_nodelay": True} + run_client_test('pylibmc', client, size, count) + + +@pytest.mark.benchmark() +@pytest.mark.skipif(not HAS_MEMCACHE, + reason="requires python-memcached") +def test_memcache(host, port, size, count): + client = memcache.Client(['{0}:{1}'.format(host, port)]) + run_client_test('memcache', client, size, count) + + +@pytest.mark.benchmark() +@pytest.mark.skipif(not HAS_PYMEMCACHE, + reason="requires pymemcache") +def test_pymemcache(host, port, size, count): + client = pymemcache.client.Client((host, port)) + run_client_test('pymemcache', client, size, count) @@ -16,6 +16,7 @@ addopts = markers = unit integration + benchmark [flake8] show-source = True |