Skip to content

Commit 29e9414

Browse files
authored
feat(pytest): Set and log random seed used in pytest (#5391)
Set and print random seed used in python testing for tests that use Seeder and DflySeederFactory classes for generating commands. Signed-off-by: mkaruza <[email protected]>
1 parent 115a3fa commit 29e9414

File tree

3 files changed

+18
-4
lines changed

3 files changed

+18
-4
lines changed

tests/dragonfly/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ def df_seeder_factory(request) -> DflySeederFactory:
9595
seed = random.randrange(sys.maxsize)
9696

9797
random.seed(int(seed))
98-
print(f"--- Random seed: {seed}, check: {random.randrange(100)} ---")
98+
logging.debug(f"Random seed: {seed}, check: {random.randrange(100)}")
9999

100100
return DflySeederFactory(request.config.getoption("--log-seeder"))
101101

tests/dragonfly/seeder/__init__.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import redis.asyncio as aioredis
88
from dataclasses import dataclass
99
import time
10+
import sys
1011

1112
try:
1213
from importlib import resources as impresources
@@ -20,11 +21,18 @@ class SeederBase:
2021
CACHED_SCRIPTS = {}
2122
DEFAULT_TYPES = ["STRING", "LIST", "SET", "HASH", "ZSET", "JSON", "STREAM"]
2223

23-
def __init__(self, types: typing.Optional[typing.List[str]] = None):
24+
def __init__(self, types: typing.Optional[typing.List[str]] = None, seed=None):
2425
self.uid = SeederBase.UID_COUNTER
2526
SeederBase.UID_COUNTER += 1
2627
self.types = types if types is not None else SeederBase.DEFAULT_TYPES
2728

29+
self.seed = random.randrange(sys.maxsize)
30+
if seed is not None:
31+
self.seed = seed
32+
33+
random.seed(int(self.seed))
34+
logging.debug(f"Random seed: {self.seed}, check: {random.randrange(100)}")
35+
2836
@classmethod
2937
async def capture(
3038
clz, client: aioredis.Redis, types: typing.Optional[typing.List[str]] = None
@@ -81,8 +89,9 @@ def __init__(
8189
samples=10,
8290
collection_size=None,
8391
types: typing.Optional[typing.List[str]] = None,
92+
seed=None,
8493
):
85-
SeederBase.__init__(self, types)
94+
SeederBase.__init__(self, types, seed)
8695
self.key_target = key_target
8796
self.data_size = data_size
8897
self.variance = variance
@@ -140,8 +149,9 @@ def __init__(
140149
types: typing.Optional[typing.List[str]] = None,
141150
huge_value_target=5,
142151
huge_value_size=100000,
152+
seed=None,
143153
):
144-
SeederBase.__init__(self, types)
154+
SeederBase.__init__(self, types, seed)
145155
self.key_target = key_target
146156
self.data_size = data_size
147157
if collection_size is None:
@@ -174,6 +184,7 @@ async def run(self, client: aioredis.Redis, target_ops=None, target_deviation=No
174184
self.collection_size,
175185
self.huge_value_target / len(self.units),
176186
self.huge_value_size,
187+
self.seed,
177188
]
178189

179190
sha = await client.script_load(Seeder._load_script("generate"))

tests/dragonfly/seeder/script-generate.lua

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ local collection_size = tonumber(ARGV[9])
2121
-- Probability of each key in key_target to be a big value
2222
local huge_value_target = tonumber(ARGV[10])
2323
local huge_value_size = tonumber(ARGV[11])
24+
local seed = tonumber(ARGV[12])
25+
26+
math.randomseed(seed)
2427

2528
-- collect all keys belonging to this script
2629
-- assumes exclusive ownership

0 commit comments

Comments
 (0)