1.簡介
正交試驗法是研究多因素、多水平的一種試驗法,它是利用正交表來對試驗進行設計,通過少數的試驗替代全面試驗,根據正交表的正交性從全面試驗中挑選適量的、有代表性的點進行試驗,這些有代表性的點具備了“均勻分散,整齊可比”的特點。
正交實驗法設計測試用例,基本步驟如下:
- 提取測試需求功能說明,確定因素數和水平數
- 根據因素數和水平數確定n值
- 選擇合適的正交表
- 根據正交表把變量的值映射到表中,設計測試用例數據集
本文參考如上步驟,使用Python實現了正交表自動設計測試用例的完整流程。
GitHub地址:https://github.com/lovesoo/OrthogonalArrayTest
2.示例demo
輸入case1,case2,case3,分別計算m(水平數),k(因素數目),n(實驗次數),然后查詢選擇合適的正交表,裁剪最終生成相關測試集
# encoding: utf-8 from OAT import * import json if __name__ == "__main__": oat = OAT() case1 = OrderedDict([('K1', [0, 1]), ('K2', [0, 1]), ('K3', [0, 1])]) case2 = OrderedDict([('A', ['A1', 'A2', 'A3']), ('B', ['B1', 'B2', 'B3', 'B4']), ('C', ['C1', 'C2', 'C3']), ('D', ['D1', 'D2'])]) case3 = OrderedDict([(u'對比度', [u'正常', u'極低', u'低', u'高', u'極高']), (u'色彩效果', [u'無', u'黑白', u'棕褐色', u'負片', u'水綠色']), (u'感光度', [u'自動', 100, 200, 400, 800]), (u'白平衡', [u'自動', u'白熾光', u'日光', u'熒光', u'陰光']), (u'照片大小', ['5M', '3M', '2M', '1M', 'VGA']), (u'閃光模式', [u'開', u'關'])]) case4 = OrderedDict([('A', ['A1', 'A2', 'A3', 'A4', 'A5', 'A6']), ('B', ['B1']), ('C', ['C1'])]) print json.dumps(oat.genSets(case1)) print json.dumps(oat.genSets(case2)) print json.dumps(oat.genSets(case3)) print json.dumps(oat.genSets(case4)) print json.dumps(oat.genSets(case4, 1, 0)) print json.dumps(oat.genSets(case4, 1, 1)) print json.dumps(oat.genSets(case4, 1, 2)) print json.dumps(oat.genSets(case4, 1, 3))
運行結果如下:
[{"K1": 0, "K2": 0, "K3": 0}, {"K1": 0, "K2": 1, "K3": 1}, {"K1": 1, "K2": 0, "K3": 1}, {"K1": 1, "K2": 1, "K3": 0}] [{"A": "A1", "B": "B1", "C": "C1", "D": "D1"}, {"A": "A1", "B": "B2", "C": "C2", "D": "D2"}, {"A": "A1", "B": "B3", "C": "C3", "D": null}, {"A": "A1", "B": "B4", "C": null, "D": null}, {"A": "A2", "B": "B1", "C": "C2", "D": null}, {"A": "A2", "B": "B2", "C": "C1", "D": null}, {"A": "A2", "B": "B3", "C": null, "D": "D1"}, {"A": "A2", "B": "B4", "C": "C3", "D": "D2"}, {"A": "A3", "B": "B1", "C": "C3", "D": null}, {"A": "A3", "B": "B2", "C": null, "D": null}, {"A": "A3", "B": "B3", "C": "C1", "D": "D2"}, {"A": "A3", "B": "B4", "C": "C2", "D": "D1"}, {"A": null, "B": "B1", "C": null, "D": "D2"}, {"A": null, "B": "B2", "C": "C3", "D": "D1"}, {"A": null, "B": "B3", "C": "C2", "D": null}, {"A": null, "B": "B4", "C": "C1", "D": null}] [{"對比度": "正常", "色彩效果": "無", "感光度": "自動", "白平衡": "自動", "照片大小": "5M", "閃光模式": "開"}, {"對比度": "正常", "色彩效果": "黑白", "感光度": 200, "白平衡": "熒光", "照片大小": "VGA", "閃光模式": "關"}, {"對比度": "正常", "色彩效果": "棕褐色", "感光度": 800, "白平衡": "白熾光", "照片大小": "1M", "閃光模式": null}, {"對比度": "正常", "色彩效果": "負片", "感光度": 100, "白平衡": "陰光", "照片大小": "2M", "閃光模式": null}, {"對比度": "正常", "色彩效果": "水綠色", "感光度": 400, "白平衡": "日光", "照片大小": "3M", "閃光模式": null}, {"對比度": "極低", "色彩效果": "無", "感光度": 800, "白平衡": "熒光", "照片大小": "2M", "閃光模式": null}, {"對比度": "極低", "色彩效果": "黑白", "感光度": 100, "白平衡": "白熾光", "照片大小": "3M", "閃光模式": "開"}, {"對比度": "極低", "色彩效果": "棕褐色", "感光度": 400, "白平衡": "陰光", "照片大小": "5M", "閃光模式": "關"}, {"對比度": "極低", "色彩效果": "負片", "感光度": "自動", "白平衡": "日光", "照片大小": "VGA", "閃光模式": null}, {"對比度": "極低", "色彩效果": "水綠色", "感光度": 200, "白平衡": "自動", "照片大小": "1M", "閃光模式": null}, {"對比度": "低", "色彩效果": "無", "感光度": 400, "白平衡": "白熾光", "照片大小": "VGA", "閃光模式": null}, {"對比度": "低", "色彩效果": "黑白", "感光度": "自動", "白平衡": "陰光", "照片大小": "1M", "閃光模式": null}, {"對比度": "低", "色彩效果": "棕褐色", "感光度": 200, "白平衡": "日光", "照片大小": "2M", "閃光模式": "開"}, {"對比度": "低", "色彩效果": "負片", "感光度": 800, "白平衡": "自動", "照片大小": "3M", "閃光模式": "關"}, {"對比度": "低", "色彩效果": "水綠色", "感光度": 100, "白平衡": "熒光", "照片大小": "5M", "閃光模式": null}, {"對比度": "高", "色彩效果": "無", "感光度": 200, "白平衡": "陰光", "照片大小": "3M", "閃光模式": null}, {"對比度": "高", "色彩效果": "黑白", "感光度": 800, "白平衡": "日光", "照片大小": "5M", "閃光模式": null}, {"對比度": "高", "色彩效果": "棕褐色", "感光度": 100, "白平衡": "自動", "照片大小": "VGA", "閃光模式": null}, {"對比度": "高", "色彩效果": "負片", "感光度": 400, "白平衡": "熒光", "照片大小": "1M", "閃光模式": "開"}, {"對比度": "高", "色彩效果": "水綠色", "感光度": "自動", "白平衡": "白熾光", "照片大小": "2M", "閃光模式": "關"}, {"對比度": "極高", "色彩效果": "無", "感光度": 100, "白平衡": "日光", "照片大小": "1M", "閃光模式": "關"}, {"對比度": "極高", "色彩效果": "黑白", "感光度": 400, "白平衡": "自動", "照片大小": "2M", "閃光模式": null}, {"對比度": "極高", "色彩效果": "棕褐色", "感光度": "自動", "白平衡": "熒光", "照片大小": "3M", "閃光模式": null}, {"對比度": "極高", "色彩效果": "負片", "感光度": 200, "白平衡": "白熾光", "照片大小": "5M", "閃光模式": null}, {"對比度": "極高", "色彩效果": "水綠色", "感光度": 800, "白平衡": "陰光", "照片大小": "VGA", "閃光模式": "開"}] [{"A": "A1", "B": "B1", "C": "C1"}, {"A": "A1", "B": null, "C": null}, {"A": "A2", "B": "B1", "C": null}, {"A": "A2", "B": null, "C": null}, {"A": "A2", "B": null, "C": "C1"}, {"A": "A3", "B": "B1", "C": null}, {"A": "A3", "B": null, "C": "C1"}, {"A": "A3", "B": null, "C": null}, {"A": "A4", "B": "B1", "C": null}, {"A": "A4", "B": null, "C": null}, {"A": "A4", "B": null, "C": "C1"}, {"A": "A5", "B": "B1", "C": null}, {"A": "A5", "B": null, "C": null}, {"A": "A5", "B": null, "C": "C1"}, {"A": "A6", "B": "B1", "C": null}, {"A": "A6", "B": null, "C": null}, {"A": "A6", "B": null, "C": "C1"}, {"A": null, "B": "B1", "C": null}, {"A": null, "B": null, "C": null}, {"A": null, "B": null, "C": "C1"}] [{"A": "A1", "B": "B1", "C": "C1"}] [{"A": "A1", "B": "B1", "C": "C1"}, {"A": "A2", "B": "B1", "C": null}, {"A": "A2", "B": null, "C": "C1"}, {"A": "A3", "B": "B1", "C": null}, {"A": "A3", "B": null, "C": "C1"}, {"A": "A4", "B": "B1", "C": null}, {"A": "A4", "B": null, "C": "C1"}, {"A": "A5", "B": "B1", "C": null}, {"A": "A5", "B": null, "C": "C1"}, {"A": "A6", "B": "B1", "C": null}, {"A": "A6", "B": null, "C": "C1"}] [{"A": "A1", "B": "B1", "C": "C1"}, {"A": "A1", "B": null, "C": null}, {"A": "A2", "B": "B1", "C": null}, {"A": "A2", "B": null, "C": null}, {"A": "A2", "B": null, "C": "C1"}, {"A": "A3", "B": "B1", "C": null}, {"A": "A3", "B": null, "C": "C1"}, {"A": "A3", "B": null, "C": null}, {"A": "A4", "B": "B1", "C": null}, {"A": "A4", "B": null, "C": null}, {"A": "A4", "B": null, "C": "C1"}, {"A": "A5", "B": "B1", "C": null}, {"A": "A5", "B": null, "C": null}, {"A": "A5", "B": null, "C": "C1"}, {"A": "A6", "B": "B1", "C": null}, {"A": "A6", "B": null, "C": null}, {"A": "A6", "B": null, "C": "C1"}, {"A": null, "B": "B1", "C": null}, {"A": null, "B": null, "C": "C1"}] [{"A": "A1", "B": "B1", "C": "C1"}, {"A": "A1", "B": null, "C": null}, {"A": "A2", "B": "B1", "C": null}, {"A": "A2", "B": null, "C": null}, {"A": "A2", "B": null, "C": "C1"}, {"A": "A3", "B": "B1", "C": null}, {"A": "A3", "B": null, "C": "C1"}, {"A": "A3", "B": null, "C": null}, {"A": "A4", "B": "B1", "C": null}, {"A": "A4", "B": null, "C": null}, {"A": "A4", "B": null, "C": "C1"}, {"A": "A5", "B": "B1", "C": null}, {"A": "A5", "B": null, "C": null}, {"A": "A5", "B": null, "C": "C1"}, {"A": "A6", "B": "B1", "C": null}, {"A": "A6", "B": null, "C": null}, {"A": "A6", "B": null, "C": "C1"}, {"A": null, "B": "B1", "C": null}, {"A": null, "B": null, "C": null}, {"A": null, "B": null, "C": "C1"}]
3.后續計划
- 判定表查詢邏輯優化
- 測試用例集裁剪優化
4.參考
- 測試用例設計-正交實驗法詳解: https://wenku.baidu.com/view/a54724156edb6f1aff001f79.html
- 用正交實驗法設計測試用例:http://blog.csdn.net/fangnannanf/article/details/52813498
- Dr. Genichi Taguchi 設計的正交表:http://www.york.ac.uk/depts/maths/tables/orthogonal.htm
- Technical Support com:http://support.sas.com/techsup/technote/ts723_Designs.txt