def test_2_way(): """Test 2-way combination of three parameters.""" data = { "p1": ["v1_1", "v1_2", "v1_3"], "p2": ["v2_1", "v2_2", "v2_3", "v2_4"], "p3": ["v3_1", "v3_2", "v3_3", "v3_4", "v3_5"] } constraints = [] result = t_ways(data, 2) # this is 3x4 + 3x5 + 4x5 = 47 gold = [ {"p1": "v1_1", "p2": "v2_1"}, {"p1": "v1_2", "p2": "v2_1"}, {"p1": "v1_3", "p2": "v2_1"}, {"p1": "v1_1", "p2": "v2_2"}, {"p1": "v1_2", "p2": "v2_2"}, {"p1": "v1_3", "p2": "v2_2"}, {"p1": "v1_1", "p2": "v2_3"}, {"p1": "v1_2", "p2": "v2_3"}, {"p1": "v1_3", "p2": "v2_3"}, {"p1": "v1_1", "p2": "v2_4"}, {"p1": "v1_2", "p2": "v2_4"}, {"p1": "v1_3", "p2": "v2_4"}, {"p1": "v1_1", "p3": "v3_1"}, {"p1": "v1_2", "p3": "v3_1"}, {"p1": "v1_3", "p3": "v3_1"}, {"p1": "v1_1", "p3": "v3_2"}, {"p1": "v1_2", "p3": "v3_2"}, {"p1": "v1_3", "p3": "v3_2"}, {"p1": "v1_1", "p3": "v3_3"}, {"p1": "v1_2", "p3": "v3_3"}, {"p1": "v1_3", "p3": "v3_3"}, {"p1": "v1_1", "p3": "v3_4"}, {"p1": "v1_2", "p3": "v3_4"}, {"p1": "v1_3", "p3": "v3_4"}, {"p1": "v1_1", "p3": "v3_5"}, {"p1": "v1_2", "p3": "v3_5"}, {"p1": "v1_3", "p3": "v3_5"}, {"p2": "v2_1", "p3": "v3_1"}, {"p2": "v2_2", "p3": "v3_1"}, {"p2": "v2_3", "p3": "v3_1"}, {"p2": "v2_4", "p3": "v3_1"}, {"p2": "v2_1", "p3": "v3_2"}, {"p2": "v2_2", "p3": "v3_2"}, {"p2": "v2_3", "p3": "v3_2"}, {"p2": "v2_4", "p3": "v3_2"}, {"p2": "v2_1", "p3": "v3_3"}, {"p2": "v2_2", "p3": "v3_3"}, {"p2": "v2_3", "p3": "v3_3"}, {"p2": "v2_4", "p3": "v3_3"}, {"p2": "v2_1", "p3": "v3_4"}, {"p2": "v2_2", "p3": "v3_4"}, {"p2": "v2_3", "p3": "v3_4"}, {"p2": "v2_4", "p3": "v3_4"}, {"p2": "v2_1", "p3": "v3_5"}, {"p2": "v2_2", "p3": "v3_5"}, {"p2": "v2_3", "p3": "v3_5"}, {"p2": "v2_4", "p3": "v3_5"} ] check_combinations(result, gold)
def test_sut(): """Use grandma to test the SUT.""" data = { "p1": ["v1_1", "v1_2", "v1_3"], "p2": ["v2_1", "v2_2", "v2_3", "v2_4"], "p3": ["v3_1", "v3_2", "v3_3", "v3_4", "v3_5"] } constraints = [] # 3-way test: with three parameters this is a full test tests = t_ways(data, 3) # run all the tests on the SUT for t in tests: ok_(sut(**t), '%s test failed!' % t)
def test_1_way(): """Test 1-way combination of three parameters.""" data = { "p1": ["v1_1", "v1_2", "v1_3"], "p2": ["v2_1", "v2_2", "v2_3", "v2_4"], "p3": ["v3_1", "v3_2", "v3_3", "v3_4", "v3_5"] } constraints = [] result = t_ways(data, 1) # this is just all values 3+4+5 = 12 gold = [ {"p1": "v1_1"}, {"p1": "v1_2"}, {"p1": "v1_3"}, {"p2": "v2_1"}, {"p2": "v2_2"}, {"p2": "v2_3"}, {"p2": "v2_4"}, {"p3": "v3_1"}, {"p3": "v3_2"}, {"p3": "v3_3"}, {"p3": "v3_4"}, {"p3": "v3_5"} ] check_combinations(result, gold)
def test_powerfull(): """Demonstrate application of combinatorial testing.""" spec = { 'font': ['arial', 'tahoma', 'brushScript', 'monotypeCorsive'], 'bold': [True, False], 'italic': [True, False], 'strikethrough': [True, False], 'underline': [True, False], 'color': ['black', 'yellow', 'white', 'blue', 'red', 'green'], 'size': ['small', 'nominal', 'large', 'xLarge', 'xxLarge', 'xxxLarge', 'ridiculouslyLarge'] } # combinations I must NOT test incompats = [ {'font': ['brushScript', 'monotypeCorsive'], 'italic': False, 'bold': True}, {'font': 'monotypeCorsive', 'italic': True, 'bold': False}] reqs = [] for t in t_ways(spec, 5, incompats=incompats, reqs=reqs): print 'test: ' + str(t) yield check_single_testcase, t
def test_incompats(): """ Test incompatibilities. All possible combinations must be contained! """ data = { "p1": ["v1_1", "v1_2", "v1_3"], "p2": ["v2_1", "v2_2", "v2_3", "v2_4"], "p3": ["v3_1", "v3_2", "v3_3", "v3_4", "v3_5"] } incompats = [{ #"p1": ["v1_3"], "p2": ["v2_4"], "p3": ["v3_4", "v3_5"] }] constraints = [] result = t_ways(data, 3, incompats=incompats) # this should be 3x4x5 - 6 = 54 combinations gold = [ {"p1": "v1_1", "p2": "v2_1", "p3": "v3_1"}, {"p1": "v1_1", "p2": "v2_1", "p3": "v3_2"}, {"p1": "v1_1", "p2": "v2_1", "p3": "v3_3"}, {"p1": "v1_1", "p2": "v2_1", "p3": "v3_4"}, {"p1": "v1_1", "p2": "v2_1", "p3": "v3_5"}, {"p1": "v1_1", "p2": "v2_2", "p3": "v3_1"}, {"p1": "v1_1", "p2": "v2_2", "p3": "v3_2"}, {"p1": "v1_1", "p2": "v2_2", "p3": "v3_3"}, {"p1": "v1_1", "p2": "v2_2", "p3": "v3_4"}, {"p1": "v1_1", "p2": "v2_2", "p3": "v3_5"}, {"p1": "v1_1", "p2": "v2_3", "p3": "v3_1"}, {"p1": "v1_1", "p2": "v2_3", "p3": "v3_2"}, {"p1": "v1_1", "p2": "v2_3", "p3": "v3_3"}, {"p1": "v1_1", "p2": "v2_3", "p3": "v3_4"}, {"p1": "v1_1", "p2": "v2_3", "p3": "v3_5"}, {"p1": "v1_1", "p2": "v2_4", "p3": "v3_1"}, {"p1": "v1_1", "p2": "v2_4", "p3": "v3_2"}, {"p1": "v1_1", "p2": "v2_4", "p3": "v3_3"}, {"p1": "v1_2", "p2": "v2_1", "p3": "v3_1"}, {"p1": "v1_2", "p2": "v2_1", "p3": "v3_2"}, {"p1": "v1_2", "p2": "v2_1", "p3": "v3_3"}, {"p1": "v1_2", "p2": "v2_1", "p3": "v3_4"}, {"p1": "v1_2", "p2": "v2_1", "p3": "v3_5"}, {"p1": "v1_2", "p2": "v2_2", "p3": "v3_1"}, {"p1": "v1_2", "p2": "v2_2", "p3": "v3_2"}, {"p1": "v1_2", "p2": "v2_2", "p3": "v3_3"}, {"p1": "v1_2", "p2": "v2_2", "p3": "v3_4"}, {"p1": "v1_2", "p2": "v2_2", "p3": "v3_5"}, {"p1": "v1_2", "p2": "v2_3", "p3": "v3_1"}, {"p1": "v1_2", "p2": "v2_3", "p3": "v3_2"}, {"p1": "v1_2", "p2": "v2_3", "p3": "v3_3"}, {"p1": "v1_2", "p2": "v2_3", "p3": "v3_4"}, {"p1": "v1_2", "p2": "v2_3", "p3": "v3_5"}, {"p1": "v1_2", "p2": "v2_4", "p3": "v3_1"}, {"p1": "v1_2", "p2": "v2_4", "p3": "v3_2"}, {"p1": "v1_2", "p2": "v2_4", "p3": "v3_3"}, {"p1": "v1_3", "p2": "v2_1", "p3": "v3_1"}, {"p1": "v1_3", "p2": "v2_1", "p3": "v3_2"}, {"p1": "v1_3", "p2": "v2_1", "p3": "v3_3"}, {"p1": "v1_3", "p2": "v2_1", "p3": "v3_4"}, {"p1": "v1_3", "p2": "v2_1", "p3": "v3_5"}, {"p1": "v1_3", "p2": "v2_2", "p3": "v3_1"}, {"p1": "v1_3", "p2": "v2_2", "p3": "v3_2"}, {"p1": "v1_3", "p2": "v2_2", "p3": "v3_3"}, {"p1": "v1_3", "p2": "v2_2", "p3": "v3_4"}, {"p1": "v1_3", "p2": "v2_2", "p3": "v3_5"}, {"p1": "v1_3", "p2": "v2_3", "p3": "v3_1"}, {"p1": "v1_3", "p2": "v2_3", "p3": "v3_2"}, {"p1": "v1_3", "p2": "v2_3", "p3": "v3_3"}, {"p1": "v1_3", "p2": "v2_3", "p3": "v3_4"}, {"p1": "v1_3", "p2": "v2_3", "p3": "v3_5"}, {"p1": "v1_3", "p2": "v2_4", "p3": "v3_1"}, {"p1": "v1_3", "p2": "v2_4", "p3": "v3_2"}, {"p1": "v1_3", "p2": "v2_4", "p3": "v3_3"} ] # this should be 1x2 = 2 combinations gold_invalid = [ {"p2": "v2_4", "p3": "v3_4"}, {"p2": "v2_4", "p3": "v3_5"}, ] check_invalid_combinations(result, gold_invalid)
def test_3_way(): """ Test 3-way combination of three parameters. All possible combinations must be contained! """ data = { "p1": ["v1_1", "v1_2", "v1_3"], "p2": ["v2_1", "v2_2", "v2_3", "v2_4"], "p3": ["v3_1", "v3_2", "v3_3", "v3_4", "v3_5"] } constraints = [] result = t_ways(data, 3) # this should be 3x4x5 = 60 combinations gold = [ {"p1": "v1_1", "p2": "v2_1", "p3": "v3_1"}, {"p1": "v1_1", "p2": "v2_1", "p3": "v3_2"}, {"p1": "v1_1", "p2": "v2_1", "p3": "v3_3"}, {"p1": "v1_1", "p2": "v2_1", "p3": "v3_4"}, {"p1": "v1_1", "p2": "v2_1", "p3": "v3_5"}, {"p1": "v1_1", "p2": "v2_2", "p3": "v3_1"}, {"p1": "v1_1", "p2": "v2_2", "p3": "v3_2"}, {"p1": "v1_1", "p2": "v2_2", "p3": "v3_3"}, {"p1": "v1_1", "p2": "v2_2", "p3": "v3_4"}, {"p1": "v1_1", "p2": "v2_2", "p3": "v3_5"}, {"p1": "v1_1", "p2": "v2_3", "p3": "v3_1"}, {"p1": "v1_1", "p2": "v2_3", "p3": "v3_2"}, {"p1": "v1_1", "p2": "v2_3", "p3": "v3_3"}, {"p1": "v1_1", "p2": "v2_3", "p3": "v3_4"}, {"p1": "v1_1", "p2": "v2_3", "p3": "v3_5"}, {"p1": "v1_1", "p2": "v2_4", "p3": "v3_1"}, {"p1": "v1_1", "p2": "v2_4", "p3": "v3_2"}, {"p1": "v1_1", "p2": "v2_4", "p3": "v3_3"}, {"p1": "v1_1", "p2": "v2_4", "p3": "v3_4"}, {"p1": "v1_1", "p2": "v2_4", "p3": "v3_5"}, {"p1": "v1_2", "p2": "v2_1", "p3": "v3_1"}, {"p1": "v1_2", "p2": "v2_1", "p3": "v3_2"}, {"p1": "v1_2", "p2": "v2_1", "p3": "v3_3"}, {"p1": "v1_2", "p2": "v2_1", "p3": "v3_4"}, {"p1": "v1_2", "p2": "v2_1", "p3": "v3_5"}, {"p1": "v1_2", "p2": "v2_2", "p3": "v3_1"}, {"p1": "v1_2", "p2": "v2_2", "p3": "v3_2"}, {"p1": "v1_2", "p2": "v2_2", "p3": "v3_3"}, {"p1": "v1_2", "p2": "v2_2", "p3": "v3_4"}, {"p1": "v1_2", "p2": "v2_2", "p3": "v3_5"}, {"p1": "v1_2", "p2": "v2_3", "p3": "v3_1"}, {"p1": "v1_2", "p2": "v2_3", "p3": "v3_2"}, {"p1": "v1_2", "p2": "v2_3", "p3": "v3_3"}, {"p1": "v1_2", "p2": "v2_3", "p3": "v3_4"}, {"p1": "v1_2", "p2": "v2_3", "p3": "v3_5"}, {"p1": "v1_2", "p2": "v2_4", "p3": "v3_1"}, {"p1": "v1_2", "p2": "v2_4", "p3": "v3_2"}, {"p1": "v1_2", "p2": "v2_4", "p3": "v3_3"}, {"p1": "v1_2", "p2": "v2_4", "p3": "v3_4"}, {"p1": "v1_2", "p2": "v2_4", "p3": "v3_5"}, {"p1": "v1_3", "p2": "v2_1", "p3": "v3_1"}, {"p1": "v1_3", "p2": "v2_1", "p3": "v3_2"}, {"p1": "v1_3", "p2": "v2_1", "p3": "v3_3"}, {"p1": "v1_3", "p2": "v2_1", "p3": "v3_4"}, {"p1": "v1_3", "p2": "v2_1", "p3": "v3_5"}, {"p1": "v1_3", "p2": "v2_2", "p3": "v3_1"}, {"p1": "v1_3", "p2": "v2_2", "p3": "v3_2"}, {"p1": "v1_3", "p2": "v2_2", "p3": "v3_3"}, {"p1": "v1_3", "p2": "v2_2", "p3": "v3_4"}, {"p1": "v1_3", "p2": "v2_2", "p3": "v3_5"}, {"p1": "v1_3", "p2": "v2_3", "p3": "v3_1"}, {"p1": "v1_3", "p2": "v2_3", "p3": "v3_2"}, {"p1": "v1_3", "p2": "v2_3", "p3": "v3_3"}, {"p1": "v1_3", "p2": "v2_3", "p3": "v3_4"}, {"p1": "v1_3", "p2": "v2_3", "p3": "v3_5"}, {"p1": "v1_3", "p2": "v2_4", "p3": "v3_1"}, {"p1": "v1_3", "p2": "v2_4", "p3": "v3_2"}, {"p1": "v1_3", "p2": "v2_4", "p3": "v3_3"}, {"p1": "v1_3", "p2": "v2_4", "p3": "v3_4"}, {"p1": "v1_3", "p2": "v2_4", "p3": "v3_5"} ] check_combinations(result, gold)