Python: Faking the random module for testing a forking process

random testing

examples/python/selectnames.py

import random
import multiprocessing



def select_name(filename):
    with open(filename) as fh:
        names = fh.read().splitlines()

    return names[ random.randrange(len(names)) ]


def select_names(filename, count):
    selected_names = []
    with multiprocessing.Pool(count) as p:
        selected_names = p.map(select_name, [filename] * count)
    return selected_names


examples/python/forked-random/test_select_name.py

import sys
sys.path.append('..')
import selectnames
import random

def test_select_name():
    random.seed(1)
    name = selectnames.select_name('../../data/names.txt')
    assert name  == 'JESSICA'

    random.seed(2)
    name = selectnames.select_name('../../data/names.txt')
    assert name  == 'RUBY'

    random.seed(11)
    name = selectnames.select_name('../../data/names.txt')
    assert name  == 'JOSHUA'

examples/python/forked-random/test_select_names.py

import sys
sys.path.append('..')
import selectnames
import random

def test_select_names():
    random.seed(1)
    names = selectnames.select_names('../../data/names.txt', 3)
    print(names)

examples/python/forked-random-override/test_select_names.py

import sys
sys.path.append('..')
print(sys.path)
import selectnames
import random

def test_select_names():
    random.seed(1)
    names = selectnames.select_names('../../data/names.txt', 3)
    print(names)

examples/python/forked-random-override/random.py


##if __name__ == '__main__':
#def load():
#import sys
#print(sys.path)
#me = sys.path.pop(0)
#print(me)
#sys.path.append('/usr/lib/python2.7')
#print(sys.path)
#import random as rnd

import imp
print('xxx')
#rnd = imp.load_source('rnd', '/usr/lib/python2.7/random.py')
rnd = imp.load_source('rnd', '/usr/lib/python3.6/random.py')

first = True

def random():
    global first
    if first:
        rnd.seed(42)
        first = False
    return rnd.random()

examples/python/forked-random-override/a.py

import random

print(random.random())
print(random.random())
print(random.random())

Author

Gabor Szabo (szabgab)

Gabor Szabo, the author of the Python Maven web site.

Gabor Szabo