2

可能なすべてのインストール構成をテストする必要があります。構成は、ネストされた配列を含む場合があるディクショナリ配列に保持されます。

構成情報のサンプルを次に示します (実際の構成はもっと長くなります)。

config = {'database': 'sqlite',
          'useExisting': False,
          'userCredentials': {'authType': 'windows', 
                              'user': r'.\Testing', 
                              'password': 'testing'
                             }
         }

の場合database、オプションは['sqlite','mysql','oracle']、および のuseExisting場合、オプションは[True, False]です。それらのすべての順列を通過する方法を理解できます。

しかし、userCredentialsの場合、オプションはまったく異なる場合があります。の場合、追加のパラメーターが必要ですauthTypedatabaseループしてすべての有効な組み合わせを作成する関数を作成できますが、それらを結合するにはどうすればよいですか? または、構成を生成するより良い方法はありますか?

userCredentials設定も異なる場合があります。たとえば、testing1 と testing2 という 2 つのユーザー アカウントがあります。両方のユーザー アカウントでテストを実行する必要があります。できればすべての可能な構成でテストを実行する必要があります。このようにネストされている場合、すべての構成を再帰的に生成する方法を理解するのに苦労しています。

4

1 に答える 1

3

これはあなたが探しているものですか?intertools.productを使用してリストされたデータベース、useExisting、および authType のすべての組み合わせを構築します。authType が「database」の場合、userCredentials を追加のパラメーターで更新します。必要に応じて変更します。

from itertools import product

def build_config(db,flag,authType,userPass):
    config = dict(database=db,useExisting=flag)
    config['userCredentials'] = {
        'authType': authType, 
        'user': userPass[0], 
        'password': userPass[1]
    }
    if authType == 'database':
        config['userCredentials'].update(
            dict(extra=1,param=2))
    return config

database = ['sqlite','mysql','oracle']
useExisting = [True, False]
authType = ['windows','database']
userPass = [('testing1','pass1'),('testing2','pass2')]

for options in product(database,useExisting,authType,userPass):
    config = build_config(*options)
    print config
于 2012-08-29T13:16:55.153 に答える