I’m trying to figure out how to use pytest-randomly
properly, but the problem is I always get the same set of random numbers for every test. All I did was install pytest-randomly
(3.15.0) and run tests normally.
Here’s an example code:
import random
def generate_random_numbers(size):
return [random.randint(1, 100) for _ in range(size)]
def test_random_numbers_size_1():
numbers = generate_random_numbers(10)
print(f"test_random_numbers_size 1.1: Generated numbers = {numbers}")
numbers = generate_random_numbers(10)
print(f"test_random_numbers_size 1.2: Generated numbers = {numbers}")
assert len(numbers) == 10
def test_random_numbers_size_2():
numbers = generate_random_numbers(10)
print(f"test_random_numbers_size 2.1: Generated numbers = {numbers}")
numbers = generate_random_numbers(10)
print(f"test_random_numbers_size 2.2: Generated numbers = {numbers}")
assert len(numbers) == 10
The result:
...
Using --randomly-seed=2523483435
test_example.py::test_random_numbers_size_2 PASSED [ 50%]
test_random_numbers_size 2.1: Generated numbers = [26, 52, 25, 95, 2, 69, 11, 94, 74, 48]
test_random_numbers_size 2.2: Generated numbers = [72, 41, 6, 27, 60, 28, 54, 48, 100, 76]
test_example.py::test_random_numbers_size_1 PASSED [100%]
test_random_numbers_size 1.1: Generated numbers = [26, 52, 25, 95, 2, 69, 11, 94, 74, 48]
test_random_numbers_size 1.2: Generated numbers = [72, 41, 6, 27, 60, 28, 54, 48, 100, 76]
As you can see the numbers are repeated for each test method. Shouldn’t they be different? Is it possible to change the pytest-randomly
seed for each test method?
I’ve tried with some fixtures but nothing worked.
The docs say:
- Resets the global
random.seed()
at the start of every test case and test to a fixed number – this defaults totime.time()
from the
start of your test run, but you can pass in--randomly-seed
to
repeat a randomness-induced failure.
1