2014-09-21 85 views
0

我有一套鼻子测试,我用它来测试一块硬件。例如,下面的测试关注的是系统测试报警每种模式:为不同的测试目标配置鼻子测试

import target 

modes = ("start","stop","restart","stage1","stage2") 
max_alarm_time = 10 

# generate tests for testing each mode 
def test_generator(): 
    for m in modes: 
     yield check_alarm, m, max_alarm_time 

# test alarm for a mode 
def check_alarm(m, max_alarm_time): 
    target.set_mode(m) 
    assert target.alarm() < max_alarm_time 

我的大部分测试都这个样子,我正在测试一个特定功能的系统上的所有modes

我现在想使用同一套测试,以测试新的硬件上有两个额外的模式:

modes = ("start","stop","restart","stage1","stage2","stage3","stage4") 

当然,我希望我的测试仍然是旧的硬件也可以。在运行自动化测试时,我需要为测试环境硬编码我连接的硬件。

我认为要做到这一点的最好办法是创建一个paramaters.py模块如下:

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") 

与test_alarms.py现在看起来像这个:

import target 
import parameters 

# generate tests for testing each mode 
def test_generator(): 
    for m in parameters.modes: 
     yield check_alarm, m, parameters.max_alarm_time 

# test alarm for a mode 
def check_alarm(m, max_alarm_time): 
    target.set_mode(m) 
    assert target.alarm() < max_alarm_time 

然后在我主要我有以下几点:

import nose 
import parameters 

parameters.init("new") 

nose.main() 

这是您认为有效的方法吗?

回答

0

解决类似问题的另一种方式是从以下列方式插件属性滥用@attr装饰:

from nose.plugins.attrib import attr 

max_alarm_time = 10 

# generate tests for testing each mode 
@attr(hardware='old') 
@attr(modes = ("start","stop","restart","stage1","stage2")) 
def test_generator_old(): 
    for 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(): 
    for m in test_generator_new.__dict__['modes']: 
     yield check_alarm, m, max_alarm_time 


# test alarm for a mode 
def check_alarm(m, max_alarm_time): 
    print "mode=", m 

您可以立即“旧”与“新”之间进行切换,就像这样:

$ 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 

而且老一: $ nosetests modes_test.py -a硬件=老-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 

另外,虽然我还没有玩过那么多,nose-testconfig可以帮助你做同样的伎俩。

+0

在我的所有测试中使用它们,在一个地方定义我的模式会更好吗?例如,如果新硬件的模式发生变化,那么我只需要在一个地方更改定义,而不必更改所有测试。 – Baz 2014-09-22 05:06:03

+0

它涉及到测试/硬件类型的比例。我看到你所做的一切都没有错 - 只要它适合你! – Oleksiy 2014-09-22 06:32:09