次のエディターは、効率的なテストケース構成アルゴリズムの Python 実装方法をペアごとに提供します。編集者はこれがとても良いものだと思ったので、皆さんの参考として今から共有します。エディターをフォローして見てみましょう
冒頭:
テストプロセスでは、複数のパラメータと複数の値の状況に合わせてテストケースが整理されます。テストケースを整理するとは、各パラメータのすべての値と他のパラメータの値を完全に組み合わせて、それを製品メソッドである Python スクリプトで実装することを意味します。デカルト積法として知られています) を itertools モジュール内で使用します。
直交分析手法のメリットは、テストケースカバー率が100%であることですが、デメリットは、テストケースの数が膨大で、ユースケースの実行にかかる労力が膨大であることです。
ペアワイズ アルゴリズムは、従来の直交分析手法の最適化から派生し、その理論は数学的統計に由来しています。正直なところ、私は数理統計に関する学術論文を理解することができないので、その基本的な意味を理解するには、インターネット上で一般的で簡単な説明をいくつか見つけるしかありません。
インターネット上の多くの人は [オペレーティング システム、ブラウザ、言語環境] を例として使用します。私も同じ例を使用します。
オペレーティング システム: W (Windows)、L (Linux)、Mac (Mac)。 (Firefox)、O (Opera)、IE; 言語環境: C (中国語)、E (英語)
直交解析法によると、3x3x2=18 個の組み合わせが生成され、テスト ケースのカバー率は 100% になります。
ペアワイズペアテストケース編成メソッドは、9 つの組み合わせメソッドに圧縮できます。そのため、テストケースの数が少なく、テスト漏れが必ず発生してしまうというデメリットがあります。
概要:
Pairwise アルゴリズムの中心概念
1 一連のテスト ケース (各ユース ケースは [W、M、C] などの 3 つのパラメーター値で構成されます)。 2 つの要素のペアの各組み合わせには 3 つの組み合わせがあります (位置は [W,M][W,C][M,C])。この最初のテスト セットが使用される場合、ペアの組み合わせは 3 つあります。比較原則は次のとおりです。[W, M] は他のグループの最初の要素とのみ比較され、[W, C] は他のグループの 2 番目の要素とのみ比較されます。 。 。 。 ;
[W,M][W,C][M,C] これら 3 つの要素は、残りの有効なグループ内の同じ位置の要素に出現します。このグループの Case は重複しているとみなして削除できます。
名詞の説明: [実効グループ]とは、削除されていないグループおよび比較されていないグループを意味します。例: グループ 1 と 3 が削除された場合、グループ 4 と比較される有効なグループはグループ 2、5、6、7...18 です。効果的なグループはここでピットを通過しました%>_
3. 最後に、ペアリング アルゴリズムによって計算された最適なテスト ケースのセットであるテスト ケースが取得されます。
驚くべき学術的証明ペアワイズは、1927 年に L. L. サーストン (1887 年 5 月 29 日 – 1955 年 9 月 30 日) によって初めて提案されました。彼はアメリカの精神統計学者です。ペアワイズは、数学的統計と従来の直交分析手法の最適化に基づいた製品でもあります。
ペアワイズは次の 2 つの仮定に基づいています: (1) 各次元は直交しています。つまり、各次元は互いに交差しません。
(2) 数学的統計分析によると、欠陥の 73% (単一要因の場合は 35%、二重要因の場合は 38%) は、単一要因または 2 つの要因の相互作用によって引き起こされます。欠陥の 19% は 3 つの要因の相互作用によって発生します。
したがって、ペアワイズは、2 つの要素すべての相互作用によって生成される最も費用対効果の高いユースケースのセットに基づいて生成されます。
テキスト
1.アイデア テストシナリオにおいて、テスト条件の入力からペアワイズテストケースの作成までを行う方法、Pythonプログラミングを使用するアイデアは次のとおりです。
1. allparams を変更 =[['M','O','P'],['W','L','I'],['C','E']] の完全な組み合わせ処理を実行します。分析メソッドによって生成されたテスト ケースの完全なセットの正規の 1 次元配列 (len=N) を生成するデカルト積。 2. テスト ケースの完全なセット内の各テスト ケースは、2 つの組み合わせに分解されます。テスト ケースの完全なセットと同じ長さのセット (1 次元 len=N) 3. Python バージョンのペアワイズ アルゴリズムを使用して、最終的に のセットを取得します。効果的なペアテストケース; コードの 1 番目と 2 番目の関数は Python 独自の数学計算ライブラリを使用します。 itertools で書かれたコードの 3 番目の関数は私が思いついたコードです。 2 番目に、コードに直接移動します# -*- coding: utf-8 -*- from datetime import * import random,os,copy,time import logging import itertools ''' #Author:Kuzaman #Time:2017-07-18 ''' class utils2 : #1、笛卡尔积 对参数分组全排列 def product(self,tuple1): newlist=[] for x in eval('itertools.product'+str(tuple(tuple1))): newlist.append(x) return newlist #2、对笛卡尔积处理后的二维原始数据进行N配对处理,得到Pairwise计算之前的数据 def get_pairslist(self,lista): pwlist = [] for i in lista: subtemplist = [] for sublista in itertools.combinations(i, 2): subtemplist.append(sublista) pwlist.append(subtemplist) return pwlist #3、进行Pirwise算法计算 def pairwise(self,listb): sublistlen = len(listb[1]) flag = [0]*sublistlen templistb = copy.deepcopy(listb) delmenu = [] holdmenu=[] self.pprint (listb) print ('--'*25) for lb in listb: for sublb in lb: for k in templistb: Xa = lb.index(sublb) Ya = listb.index(lb) if k != lb and sublb == k[Xa]: # print (sublb,'===>' ,k[Xa],'相等了。。。') flag[Xa] = 1 break else: # print (sublb,'===>' ,k[Xa],'不不不等了。。。') flag[Xa] = 0 # print ('下标%d,子元素 %s 双匹配对比结果flag:%s'%(listb.index(lb),lb,flag)) if 0 not in flag: num = listb.index(lb) delmenu.append(num) templistb.remove(lb) # print ('下标为%d行应删除,内容=%s,'%(num,lb)) # print ('delmenu:',delmenu) else: num2 = listb.index(lb) holdmenu.append(num2) # print ('下标为%d行应保留,内容=%s,'%(num2,lb)) # print('holdmenu=',holdmenu) # print ('***'*20) print ('保留元素列表:%s \n匹配重复元素列表:%s'%(holdmenu,delmenu)) return templistb def pwresult(self,slist,delmenu): for x in delmenu: slist.remove(slist[x]) return slist def pprint(self,list): for i in list: print ('line %d:'%(list.index(i)+1),i) if __name__ == '__main__': u2 = utils2() allparams=[['M','O','P'],['W','L','I'],['C','E']]#,'K'],[1,2,3],['Yes','No']] str = u2.product(allparams) strpc = u2.get_pairslist(str) finallist = u2.pairwise(strpc) print('最终保留测试用例个数:%d 个'%(len(finallist))) u2.pprint(finallist)
3 番目の for ループ コード 39 ~ 48 行目は、主に、検出される要素と、同じ位置にある要素は同じです
2 番目の for ループ コード 38 ~ 48 行目は、一連のテスト ケースで 2 つをペアにし、同じ位置にある要素と左から右に比較します最初の forループ コード行 37 ~ 48、テスト ケースの各セットを横断します。第50~58行代码,判断一组用例的两两配对在其他组同位置上从上到下都能找到相同元素,则将改无效Case从templistb中删除,保持templistb的有效性。
执行结果:
line 1: [('M', 'W'), ('M', 'C'), ('W', 'C')] <---第二个函数get_pairslist(self,lista)处理后的两两配对组合 line 2: [('M', 'W'), ('M', 'E'), ('W', 'E')] <---同第一行解释 line 3: [('M', 'L'), ('M', 'C'), ('L', 'C')] line 4: [('M', 'L'), ('M', 'E'), ('L', 'E')] line 5: [('M', 'I'), ('M', 'C'), ('I', 'C')] line 6: [('M', 'I'), ('M', 'E'), ('I', 'E')] line 7: [('O', 'W'), ('O', 'C'), ('W', 'C')] line 8: [('O', 'W'), ('O', 'E'), ('W', 'E')] line 9: [('O', 'L'), ('O', 'C'), ('L', 'C')] line 10: [('O', 'L'), ('O', 'E'), ('L', 'E')] line 11: [('O', 'I'), ('O', 'C'), ('I', 'C')] line 12: [('O', 'I'), ('O', 'E'), ('I', 'E')] line 13: [('P', 'W'), ('P', 'C'), ('W', 'C')] line 14: [('P', 'W'), ('P', 'E'), ('W', 'E')] line 15: [('P', 'L'), ('P', 'C'), ('L', 'C')] line 16: [('P', 'L'), ('P', 'E'), ('L', 'E')] line 17: [('P', 'I'), ('P', 'C'), ('I', 'C')] line 18: [('P', 'I'), ('P', 'E'), ('I', 'E')] <----同第一行解释 -------------------------------------------------- 保留元素列表:[1, 3, 4, 7, 9, 10, 12, 14, 17] <----有效用例在数组中下标 匹配重复元素列表:[0, 2, 5, 6, 8, 11, 13, 15, 16] <----被剔除的无效测试用例在数组中下标 最终保留测试用例个数:9 个 line 1: [('M', 'W'), ('M', 'E'), ('W', 'E')] line 2: [('M', 'L'), ('M', 'E'), ('L', 'E')] line 3: [('M', 'I'), ('M', 'C'), ('I', 'C')] line 4: [('O', 'W'), ('O', 'E'), ('W', 'E')] line 5: [('O', 'L'), ('O', 'E'), ('L', 'E')] line 6: [('O', 'I'), ('O', 'C'), ('I', 'C')] line 7: [('P', 'W'), ('P', 'C'), ('W', 'C')] line 8: [('P', 'L'), ('P', 'C'), ('L', 'C')] line 9: [('P', 'I'), ('P', 'E'), ('I', 'E')] [Finished in 0.2s]
三、代码核心内容白话解释
pairwise(self,listb)函数包含3层for循环,先画一个二维数组:
i[0] i[1] i[2] listb.index(i)=0 : [('M', 'W'), ('M', 'C'), ('W', 'C')] listb.index(i)=1 : [('M', 'W'), ('M', 'E'), ('W', 'E')] listb.index(i) : [('M', 'L'), ('M', 'C'), ('L', 'C')] listb.index(i) : [('M', 'L'), ('M', 'E'), ('L', 'E')] listb.index(i) : [('M', 'I'), ('M', 'C'), ('I', 'C')] listb.index(i) : [('M', 'I'), ('M', 'E'), ('I', 'E')] listb.index(i) : [('O', 'W'), ('O', 'E'), ('W', 'E')] listb.index(i) : [('O', 'L'), ('O', 'C'), ('L', 'C')] listb.index(i) : [('O', 'L'), ('O', 'E'), ('L', 'E')] listb.index(i) : [('O', 'I'), ('O', 'C'), ('I', 'C')] listb.index(i)=n : [('O', 'I'), ('O', 'E'), ('I', 'E')]
二维列表 listb ,其中的行(发音:hang,二声。横着的那排)从上到下就是第一层for循环 ;每一行中的i[0],i[1],i[2]就是第二层for循环从左至右;第三次for循环元素i[x]从上之下与有效组 templistb通位置元素的对比。
1、第n行的i[0]要和有效templistb的其他行的i[0]元素对比(第三for),如果有相等的,记录一个标识 如 flag1=True,如果没有相等的记录falg1=False;
2、直到第二for中的i[0],i[1],i[2]都进行对比后,会得到 [flag1,flag2,flag3 ],所有flag=True则该行为无效用例
3、第一for遍历全部组合,最终得到保留下来的有效templistb
见图:
完结篇
以上是自己编写的pairwise的全部内容,此算法共耗时3天:
第一天在确定这究竟是什么算法,看了很多学术文献,看不懂;
第二天开始写程序,for的嵌套循环设计耽误很久;
第三天程序成型,有执行结果,发现与参考文章结论不同,随后再仔细研读参考文章,发现掉坑里了。重新推翻代码按照正确思路,用1个小时完成最终结果。
本人做测试的,还不是专业的测试开发,写代码比较费劲,真正应了设计占70%,编码占30%的理。如果像基础在差点,逻辑在乱点,就只能用时间堆了。
以上がPython が組織アルゴリズムをペアごとに実装する方法 (効率的なテスト ケース)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

Python 3.6のピクルスファイルのロードレポートエラー:modulenotFounderror:nomodulenamed ...


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SublimeText3 中国語版
中国語版、とても使いやすい

WebStorm Mac版
便利なJavaScript開発ツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター
