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ます。

同じテスト セットを使用して、2 つの追加モードを持つ新しいハードウェアをテストしたいと考えています。

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

あなたの意見では、これは有効なアプローチですか?

4

1 に答える 1

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

そして古いもの: $ ノードテスト モード_テスト.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は同じトリックを行うのに役立ちます。

于 2014-09-22T02:43:01.763 に答える