TQLソリューションの 例
                                                この章の例では、典型的な問題がTQLとサンプルアプリケーション「 Vehicle insurance calculator 」を使ってどのように解決されるかを説明します。テストケースとモジュールは以下の例で、プロパティを検索するために選択されています。
下図は、各階層の結果「layer 4 」を返す検索クエリを示しています。
                                                        
                                                    
ソースオブジェクトに依存する検索クエリ
                                                                 
                                                             | 
                                                            
                                                                 個々の検索クエリを、数に関係なく、任意に組み合わせることができます。  | 
                                                        
以下の例では、明示されていない場合は、検索クエリのソースオブジェクトは「 TestCases 」フォルダです。
テストケース名
現在の状況
                                                        
                                                    
例 - 現在の状況
タスク
「 Data Source Excel 」という名前の「 TestCases 」フォルダのすべてのテストケースを検索します。
ソリューション
=>SUBPARTS:TestCase[Name=="Data Source Excel"]
階層レベル
現在の状況
                                                        
                                                    
例 - 現在の状況
タスク
「TestCases」フォルダのちょうど3レベル下に位置する、「 Data Source Excel 」という名前のすべてのテストケースを検索します。
ソリューション
->SUBPARTS->SUBPARTS->SUBPARTS:TestCase[Name=="Data Source Excel"]
レベルを明示的に選択するには、シンプルな arrowOperator -> を使用します。これは、使用回数によってレベルが決まります。
除外
現在の状況
                                                        
                                                    
例 - 現在の状況
タスク
「 DataSource Excel 」という名前を含まないすべてのテストケースを検索します。
ソリューション
=>SUBPARTS:TestCase[Name!="Data Source Excel"]
TestStepValue
現在の状況
                                                        
                                                    
例 - 現在の状況
タスク
「 Motorcycle 」という値のあるTestStepValueを含むすべてのテストケースを検索します。
ソリューション
まず、対応する値を持つすべてのテストステップ値が検索されます。テストケースを検索するため、親オブジェクトは、すべてのレベルで =>SUPERPART を使用して対処する必要があります。
=>SUBPARTS:TestStepValue[Value=="Motorcycle"]=>SUPERPART:TestCase
代替方法
「RETURN」を使用して、どのオブジェクトを返すかを指定できます。
=>RETURN SUBPARTS:TestCase=>SUBPARTS:TestStepValue[Value=="Motorcycle"]
                                                                 
                                                             | 
                                                            
                                                                 自動完了中は「 RETURN 」コマンドは表示されません。そのため、後続のスペースが必要です。  | 
                                                        
テンプレートを入力する
現在の状況
                                                            
                                                        
例 - 現在の状況
タスク
テンプレートであるすべてのテストケースを検索します。クエリは大文字と小文字を区別する必要はありません。
ソリューション
=>SUBPARTS:TestCase[IsTemplate=i="true"]
必要な要素はテストケースのプロパティを用いて見つけられます。
「 =i= 」オペレータは大文字小文字を区別しない比較を表します。
リンク検索
現在の状況
                                                            
                                                        
例 - 現在の状況
タスク
テンプレートであり、「 Truck 01 」というテストケース名のすべてのテストケースを検索します。
ソリューション
=>SUBPARTS:TestCase[(IsTemplate=="True") AND (Name=="Truck 01")]
LockedBy
タスク
特定のユーザーのみのOwnedItem(ExecutionLists、ExecutionLogs)のチェックアウトを取り消します。
ソリューション
=>RETURN SUBPARTS:OwnedItem[CheckOutState=="CheckedOut"]->LockedBy[Name=="samuel_smith"]
Substring
現在の状況
                                                        
                                                    
例 - 現在の状況
タスク
「 Truck 」という名前のすべてのテストケースを検索します。
ソリューション
=>SUBPARTS:TestCase[Name=?"Truck"]
正規表現
現在の状況
                                                        
                                                    
例 - 現在の状況
タスク
「 automobile 」で始まる名前のすべてのテストケースを検索します。
ソリューション
=>SUBPARTS:TestCase[Name=~"^automobile"]
特定のモジュールを使用するすべてのテストケースを検索する
現在の状況
                                                        
                                                    
例 - 現在の状況(「TestCases」)
                                                        
                                                    
例 - 現在の状況(「Modules」)
タスク
「 Vehicle data 」モジュールを使用するすべてのテストケースを検索します。
ソリューション
検索の開始点は Module フォルダとなります。
=>SUBPARTS:Module[Name=="Vehicle data"]
=>AllReferences=>SUPERPART:TestCase
                                                    
                                                
ソリューション - 説明
まず、「 Vehicle data 」という名前のすべてのモジュールが検索されます。2番目のアロー演算子は、参照されるすべてのオブジェクト(テストステップ、モジュール属性、ObjectMap、フォルダおよびユーザー)を指します。このタスクには、検索されたテストケースに明示的にリンクされているため、テストステップだけに関連性があります。これらの上位要素には、"=>SUPERPART:TestCase" でアクセスできます。
代替ソリューション
検索の開始点は Module フォルダとなります。
=>SUBPARTS:Module[Name=="Vehicle data"]->TestSteps=>SUPERPART:TestCase
備考
合併集合を使用すると、検索クエリで指定されたモジュールを少なくとも1つ使用しているすべてのテストケースを検索できます。
タスク
「Module1」および/または「Module2」を使用しているすべてのテストケースを検索します。
ソリューション
検索の開始点は TestCases フォルダです。
->UNION(=>return SUBPARTS:TestCase=>SUBPARTS:TestStep->Module[Name=="Module1"],=>return SUBPARTS:TestCase=>SUBPARTS:TestStep->Module[Name=="Module2"])
すべてのXModulesを検索します。
タスク
すべてのXモジュールを検索します。
ソリューション
=>SUBPARTS:XModules
                                                                 
                                                             | 
                                                            
                                                                 Tricentis ToscaはModulesとXModulesを使用します。詳細は、こちらをご覧ください。see chapter "モジュールを作成および管理する"  | 
                                                        
オブジェクトのプロパティを検索する
現在の状況
                                                        
                                                    
例 - 現在の状況
タスク
ユーザー定義のテストケースプロパティの名前は「 TestProp1 」です。「 Test-01 」という値のプロパティのあるすべてのテストケースを検索します。クエリは大文字と小文字を区別する必要はありません。
ソリューション
この検索の開始点は TestCases フォルダです。
=>SUBPARTS:TestCase[TestProp1=i="test-01"]
現在の状況
                                                        
                                                    
例 - 現在の状況
タスク
ユーザー定義のテストケースフォルダプロパティの名前は「 TestProp2 」です。「 Test-02 」という値のプロパティのあるすべてのテストケースフォルダを検索します。クエリは大文字と小文字を区別する必要はありません。
ソリューション
この検索の開始点はプロジェクトルート要素です。
=>SUBPARTS:TCFolder[TestProp2=i="test-02"]
現在の状況
                                                        
                                                    
例 - 現在の状況
タスク
ユーザー定義のモジュールプロパティの名前は「 TestProp3 」です。「 Test-03 」という値のプロパティのあるすべてのモジュールを検索します。クエリは大文字と小文字を区別する必要はありません。
ソリューション
この検索の開始点は「 Modules 」フォルダです。
=>SUBPARTS:Module[TestProp3=i="test-03"]
テクニカルIDを 検索します。
現在の状況
                                                        
                                                    
例 - 現在の状況
                                                        
                                                    
例 - 現在の状況
タスク
「 TechnicalID=YearOfConstruction」というTechnicalID を検索します。
ソリューション
この検索の開始点は「 Modules 」フォルダです。
=>SUBPARTS[TechnicalId=="ID=YearOfConstruction"]
追加タスク
親モジュールが見つかるはずです。
ソリューション
この検索の開始点は「 Modules 」フォルダです。末尾は =>SUPERPART:Module です。
最終ソリューション
=>SUBPARTS[TechnicalId=="ID=select_YearOfConstruction"]=>SUPERPART:Module
備考
いくつかの異なるオブジェクトには、「TechnicalID」属性があります。したがって、「TechnicalID」の位置はオブジェクトに依存せず、異なる場合があります。
現在の状況
                                                        
                                                    
例 - 現在の状況
タスク
モジュールの「TechnicalID」を検索します。この「TechnicalID」は「ObjectMap」の下にあります。
ソリューション
この検索の開始点は「 Modules 」フォルダです。
=>SUBPARTS:ObjectMap[TechnicalId=="Caption=TRICENTIS Vehicle insurance calculator*"]
現在の状況
                                                        
                                                    
例 - 現在の状況
タスク
ModuleAttributes の TechnicalIDs を検索します。この「TechnicalID」は「ObjectControl」の下にあります。
ソリューション
この検索の開始点は「 Modules 」フォルダです。
=>SUBPARTS:ObjectControl[TechnicalId=="ID=edit_price"]
テストケースで使用されていないModulesを検索
現在の状況
                                                        
                                                    
例 - 現在の状況(「Modules」)
                                                        
                                                    
例 - 現在の状況(「TestCases」)
タスク
まだテストケースで使用されていないすべてのモジュールを検索します。
ソリューション
この検索の開始点は「 Modules 」フォルダです。
=>COMPLEMENT(=>SUBPARTS:Module,=>RETURN SUBPARTs:Module->TestSteps)
ソリューション - 説明
「COMPLEMENT 」では、補集合を検索できます。最初のクエリはすべてのモジュールを検索し、2番目のクエリはテストケースで使用されているすべてのモジュールを検索します。この2つのクエリの補集合には、テストケースでまだ使用されていない、すべてのモジュールが含まれます。
「Requirements」にリンクされていないテストケースを検索する
現在の状況
                                                            
                                                        
例 - 現在の状況(「Requirements」)
                                                            
                                                        
例 - 現在の状況(「TestCases」)
タスク
まだ「Requirements」にリンクされていないすべてのテストケースを検索します。(検索にはTosca Requirements Management AddInが必要です。)
ソリューション
この検索の開始点はプロジェクトルート要素です。
=>COMPLEMENT(=>SUBPARTS:TestCase, =>SUBPARTS:RequirementTestCaseLink->TestedBy)
ソリューション - 説明
「COMPLEMENT 」では、補集合を検索できます。最初のクエリはすべてのテストケースを検索し、2番目のクエリは「RequirementTestCaseLink」を含むすべてのテストケースを検索します。この2つのクエリの補集合には、「Requirement」にリンクされていない、すべてのテストケースが含まれます。TestedBy は、テストケースを直接参照するのに使用されます。
実行リストに割り当てられていないテストケースを検索する
現在の状況
                                                        
                                                    
例 - 現在の状況
タスク
まだ実行リストに割り当てられていないすべてのテストケースを検索します。
ソリューション
この検索の開始点は「 TestCases 」フォルダです。
=>COMPLEMENT(=>SUBPARTS:TestCase, =>RETURN SUBPARTS:TestCase->ExecutionEntries)
ソリューション - 説明
「COMPLEMENT 」では、補集合を検索できます。最初のクエリはすべてのテストケースを検索し、2番目のクエリは実行エントリにリンクされているすべてのテストケースを検索します。この2つのクエリの補集合には、まだ実行エントリが定義されていない、すべてのテストケースが含まれます。
最近結果が別の実行と比較して変化している、すべての実行エントリを検索する
タスク
2つのテスト実行の間に、実行状態が「 Passed 」から「 Failed 」に変更されたすべての実行エントリを検索します。
ソリューション
この検索の開始点は「 ExecutionLists 」フォルダとなります。
=>return SUBPARTS:ExecutionEntry->INTERSECTION 
                                                    
->TestCase, 
=>SUPERPART:ExecutionList->ExecutionLogs[Name == "ActualLog"]->TestCaseLogs[Result == "Failed"]->ExecutedTestCase,=>SUPERPART:ExecutionList->ExecutionLogs[Name == "Run1"]->TestCaseLogs[Result == "Passed"]->ExecutedTestCase
)
ソリューション - 説明
検索は、 INTERSECTION で定義された要素を指す実行エントリのすべてのサブ要素を返します。
INTERSECTION とは、3つの部分結果の交差を意味します。
- 
                                                        
すべてのテストケースの集合
 - 
                                                        
ActualLog で「 Failed 」とマークされたすべてのテストケースの集合
 - 
                                                        
ExecutionLog Run1 で「 Passed 」とマークされたすべてのテストケースの集合
 
=>SUPERPART という表現は、「実行エントリ」から「実行リスト」への移動に使われます。
この検索は、「 ActualLog 」では「 Failed 」とマークされ、「 Run1 」が実行されたときには「 Passed 」となったすべてのテストケースを返します。逆検索は別の文脈で役に立つ場合があります。
同様の検索により、「 ActualLog 」内で、まだ実行されていないが、ログ「 Run1 」に結果があるテストケースを検索することができます。
=>return SUBPARTS:ExecutionEntry->INTERSECTION(
->TestCase,
=>SUPERPART:ExecutionList->ExecutionLogs[Name == "ActualLog"]
->TestCaseLogs[(Result != "Failed") AND (Result != "Passed")]->ExecutedTestCase,
=>SUPERPART:ExecutionList->ExecutionLogs[Name == "Run1"]
->TestCaseLogs[(Result == "Passed") OR (Result == "Failed")]->ExecutedTestCase
)
「Requirements」にリンクされているが、まだ「ExecutionList」にリンクされていないテストケースを検索する
タスク
「Requirements」にリンクされているが、まだ「ExecutionList」に「ExecutionEntry」がないテストケースを検索します。
ソリューション
この検索の開始点はプロジェクトルート要素です。
->PROJECT->COMPLEMENT(=>SUBPARTS:RequirementSet[NodePath=="/Requirements/RS"]=>SUBPARTS:RequirementTestCaseLink->TestedBy, 
=>SUBPARTS:RequirementSet[NodePath=="/Requirements/RS"]->UnconfiguredExecutionListLinks->ExecutedBy=>SUBPARTS:ExecutionEntry->TestCase)
ソリューション - 説明
COMPLEMENT コマンドは、補集合を検索するために使用されます。
最初のクエリはプロジェクトルート要素から開始し、「 RS 」要件セットに存在し、テストケースにリンクされている要件を再帰的に検索します。
2番目のクエリもプロジェクトルート要素から開始し、「 RS 」要件セットにリンクされているExecutionListsを検索します。検索は、リンクされた実行リストの実行エントリにリンクされているすべてのテストケースを返します。
                                                            
                                                        
ExecutionEntriesにリンクされていないテストケース
特定の値の出現のために を検索する
タスク
「値」に特定の値を持つオブジェクトを検索します。
ソリューション
->SUBPARTS:OwnedItem['<ANY>'=="letter" OR '<ANY>'=="number"]
ソリューション - 説明
このクエリは、「値」に文字、数字、またはその両方の値が含まれるすべてのオブジェクトについて、選択した要素の1つ下のレベルを検索します。
特定の値の テストコンフィギュレーションパラメータを検索する
タスク
テストコンフィギュレーションパラメータに特定の値が含まれるすべてのテストケースを検索します。検索では、継承された値を考慮する必要があります。
ソリューション
=>SUBPARTS:TestCase[EVALCP("Browser") == "InternetExplorer"]
ソリューション - 説明
このクエリは、 InternetExplorer という値を持つテストコンフィギュレーションパラメータブラウザを含むすべてのテストケースについて、選択された要素の下のすべてのレベルを検索します。
タスク
最初に作成された特定の値のテストコンフィギュレーションパラメータを含むすべてのテストケースを検索します。継承された値は検索で考慮されるべきではありません。
ソリューション
=>SUBPARTS:TestCase[Browser == "InternetExplorer"]
ソリューション - 説明
このクエリは、 InternetExplorer という値を持つ最初に作成されたテストコンフィギュレーションパラメータブラウザを含むすべてのテストケースについて、選択された要素の下のすべてのレベルを検索します。
テストケースに割り当てられていないモジュールを検索する
タスク
テストケースに割り当てられていないモジュールがあるかどうかを調べます。
ソリューション
=>SUBPARTS:Module[COUNT("TestSteps")==0]
ソリューション - 説明
選択された要素の下にあるすべてのモジュールは、 =>SUBPARTS:Module を使用して検索されます。
表現 [COUNT("TestSteps")==0] は、どのTestStepsにもリンクされていないすべてのモジュールを検索するために使用されます。