Python實現正交實驗法自動設計測試用例


1.簡介

正交試驗法是研究多因素、多水平的一種試驗法,它是利用正交表來對試驗進行設計,通過少數的試驗替代全面試驗,根據正交表的正交性從全面試驗中挑選適量的、有代表性的點進行試驗,這些有代表性的點具備了“均勻分散,整齊可比”的特點。

正交實驗法設計測試用例,基本步驟如下:

  1. 提取測試需求功能說明,確定因素數和水平數
  2. 根據因素數和水平數確定n值
  3. 選擇合適的正交表
  4. 根據正交表把變量的值映射到表中,設計測試用例數據集

本文參考如上步驟,使用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.后續計划

  1. 判定表查詢邏輯優化
  2. 測試用例集裁剪優化

4.參考

  1. 測試用例設計-正交實驗法詳解: https://wenku.baidu.com/view/a54724156edb6f1aff001f79.html
  2. 用正交實驗法設計測試用例:http://blog.csdn.net/fangnannanf/article/details/52813498
  3. Dr. Genichi Taguchi 設計的正交表:http://www.york.ac.uk/depts/maths/tables/orthogonal.htm
  4. Technical Support com:http://support.sas.com/techsup/technote/ts723_Designs.txt


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM