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

Popular posts from this blog

php - Submit Form Data without Reloading page -

linux - Rails running on virtual machine in Windows -