Я хотел бы создать отдельный сервер Redis, который будет использоваться исключительно для целей модульного тестирования функций чтения / записи в моей кодовой базе.
Причины этого следующие:
- избегать неудачных операций с ошибками, таких как вызов FLUSHALL или DEL на главном сервере
- держать тестовые данные отдельно от "живых" данных
До сих пор у меня была следующая идея; написать функцию RedisDb(host="localhost", port=6379)
, которая оборачивает создание нового соединения с сервером Redis по адресу locahlhost: port. и может использоваться в стандартной инструкции with
. Напишите еще одну функцию RedisTestDb(host="localhost", test_port=36379)
, которая использует функцию RedisDb
, чтобы проверить, работает ли сервер Test Redis, создаст ее, если сервер Test Redis не работает, и предоставит к ней соединение. Для полноты картины функция create_redis_test_server(test_port)
вызывает redis-server --port <test_port>
через модуль подпроцесса Python.
def RedisTestDb(host="localhost", test_port=36379):
with RedisDb(host="localhost", test_port) as redisDb:
if not redisDb.ping():
create_redis_test_server("localhost", test_port)
return RedisDb(host="localhost", port=test_port)
Приведенный выше фрагмент кода можно затем использовать в модульном тесте, т. Е.
def test_my_write_function():
with RedisTestDb() as test_redis:
test_array = numpy.array([0,1,2])
label = "vector0"
test_redis.set(label, test_array.tobytes())
vector_bytes = test_redis.get(label)
test_redis.delete(label)
assert numpy.frombuffer(vector_bytes) == test_array
Любые идеи о том, как я мог бы сделать это лучше?