python - Configuring nose tests for different test targets -
i have set of nose tests use test piece of hardware. example, test below concerned testing alarm each mode on system:
import target modes = ("start","stop","restart","stage1","stage2") max_alarm_time = 10 # generate tests testing each mode def test_generator(): m in modes: yield check_alarm, m, max_alarm_time # test alarm mode def check_alarm(m, max_alarm_time): target.set_mode(m) assert target.alarm() < max_alarm_time
most of tests have appearance testing particular function modes
on system.
i wish use same set of tests test new piece of hardware has 2 modes:
modes = ("start","stop","restart","stage1","stage2","stage3","stage4")
of course, want tests still work old hardware also. when running automated test need hardcode, test environment, hardware connected to.
i believe best way create paramaters.py module follows:
def init(hardware): global max_alarm_time global modes max_alarm_time = 10 if hardware == "old": modes = ("start","stop","restart","stage1","stage2") elif hardware == "new": modes = ("start","stop","restart","stage1","stage2","stage3","stage4")
with test_alarms.py looking instead:
import target import parameters # generate tests testing each mode def test_generator(): m in parameters.modes: yield check_alarm, m, parameters.max_alarm_time # test alarm mode def check_alarm(m, max_alarm_time): target.set_mode(m) assert target.alarm() < max_alarm_time
then in main have following:
import nose import parameters parameters.init("new") nose.main()
is valid approach in opinion?
an alternative way solve similar problem abuse @attr
decorator attribute plugin in following way:
from nose.plugins.attrib import attr max_alarm_time = 10 # generate tests testing each mode @attr(hardware='old') @attr(modes = ("start","stop","restart","stage1","stage2")) def test_generator_old(): m in test_generator_old.__dict__['modes']: yield check_alarm, m, max_alarm_time @attr(hardware='new') @attr(modes = ("start","stop","restart","stage1","stage2", "stage3","stage4")) def test_generator_new(): m in test_generator_new.__dict__['modes']: yield check_alarm, m, max_alarm_time # test alarm mode def check_alarm(m, max_alarm_time): print "mode=", m
you can switch between 'old' , 'new',like this:
$ nosetests modes_test.py -a hardware=new -v modes_test.test_generator_new('start', 10) ... ok modes_test.test_generator_new('stop', 10) ... ok modes_test.test_generator_new('restart', 10) ... ok modes_test.test_generator_new('stage1', 10) ... ok modes_test.test_generator_new('stage2', 10) ... ok modes_test.test_generator_new('stage3', 10) ... ok modes_test.test_generator_new('stage4', 10) ... ok ---------------------------------------------------------------------- ran 7 tests in 0.020s ok
and old one: $ nosetests modes_test.py -a hardware=old -v
modes_test.test_generator_old('start', 10) ... ok modes_test.test_generator_old('stop', 10) ... ok modes_test.test_generator_old('restart', 10) ... ok modes_test.test_generator_old('stage1', 10) ... ok modes_test.test_generator_old('stage2', 10) ... ok ---------------------------------------------------------------------- ran 5 tests in 0.015s ok
also, although have not played much, nose-testconfig same trick.
Comments
Post a Comment