how develop test scripts using top 5 most popular test automation frameworks
テスト自動化について学び始めるとき、「テスト自動化フレームワーク」という用語に出くわす必要があります。たぶん、この用語に不快感を覚え、理解するのが難しく、実装するのがさらに難しいものだと感じ始める人もいるかもしれません。
このチュートリアルは、テスト自動化フレームワークをできるだけ簡単に理解できるようにすることを目的として作成されています。この中のすべてのチュートリアルを読む ' 自動化テストチュートリアルのシリーズはこちら 。
テスト自動化フレームワーク (非常に単純な言語で)は「ルールのセット」です。ルールは、「メンテナンスが少なくて済む」ような方法でスクリプトを作成するのに役立ちます。
フレームワークの概念を完全に理解するには、最初に簡単なスクリプトを作成する方法を学び、次にそれらにフレームワークを実装する方法を学ぶ必要があります。
テスト自動化では、スクリプトを作成します。スクリプティングは基本的に3つの「A」です。
- 配置
- アクション
- アサーション
以下は、各Aの詳細と例です。
#1。配置またはオブジェクトの識別
オブジェクト(ボタン、ドロップダウンなど)は、ID、名前、またはウィンドウタイトルなどで識別されます。
Webアプリケーションの場合、ユーザーID、XPath、CSS、クラス名などで識別します。何も機能しない場合は、マウス座標を使用してオブジェクトを識別します(ただし、オブジェクトの識別には信頼できる方法ではありません)。
IDを使用してオブジェクトを識別するSeleniumWebDriver(C#を使用)のこの例を見てください。 (ウェブアプリケーション)
IWebElement txtServer = _webDriver.FindElement(By.Id('tfsServerURL'));
MSコード化UIの別の例(デスクトップアプリケーション)
WinButton btnAdd = new WinButton(calWindow); btnAdd.SearchProperties[WinButton.PropertyNames.Name] = 'Add';
識別後、これらのオブジェクトをUIMapまたはオブジェクトリポジトリに配置または保存して、スクリプトで再利用します。そのため、このステップはARRANGEMENTと呼ばれます。
#二。アクション識別されたオブジェクト
オブジェクトが識別されると、マウスまたはキーボードのいずれかによってオブジェクトに対して何らかのアクションを実行します。例えば、クリックするか、ダブルクリックするか、マウスをその上に置くか、場合によってはドラッグアンドドロップします。テキストボックスに書き込むこともあります。したがって、これらのオブジェクトに対して実行するあらゆる種類のアクションは、この2番目のステップでカバーされます。
例1 :( C#を使用したSelenium WebDriver)
txtServer.Clear(); txtServer.SendKeys(“Some sample text”);
例2 :(C#を使用したMSコード化UI)
Mouse.Click(buttonAdd);
#3。アサーション
アサーションは基本的に、期待される結果でオブジェクトをチェックしています。たとえば、電卓で2 + 3を押すと、画面に5が表示されます。この場合、期待される結果は5です。この概念は最初のチュートリアルですでに説明されています。
ここにアサーションの例を示します。
Assert.AreEqual('5', txtResult.DisplayText);
テスト自動化で記述されたほぼすべてのスクリプトには、アレンジメント、アクション、アサーションの3つが含まれています。
次に、これらすべての手順を含む完全なスクリプトを見てください。スクリプトは電卓を開き、1 + 6を押してから、画面に7が表示されるかどうかを確認します。
例A:
[TestMethod] [TestMethod] public void TestCalculator() { var app = ApplicationUnderTest.Launch('C:\Windows\System32\calc.exe'); //Object identification part (ARRANGEMENT) //----*Calculator Window----*// WinWindow calWindow = new WinWindow(app); calWindow.SearchProperties[WinWindow.PropertyNames.Name] = 'Calculator'; calWindow.SearchProperties[WinWindow.PropertyNames.ClassName] = 'CalcFrame'; //----*Button1 ----*// WinButton btn1 = new WinButton(calWindow); btn1.SearchProperties[WinButton.PropertyNames.Name] = '1'; //----*Button Add ----*// WinButton btnAdd = new WinButton(calWindow); btnAdd.SearchProperties[WinButton.PropertyNames.Name] = 'Add'; //----*Button 6 ----*// WinButton btn6 = new WinButton(calWindow); btn6.SearchProperties[WinButton.PropertyNames.Name] = '6'; //----*Button Equals ----*// WinButton btnEquals = new WinButton(calWindow); btnEquals.SearchProperties[WinButton.PropertyNames.Name] = 'Equals'; //----*Text Box Results----*// WinText txtResult = new WinText(calWindow); txtResult.SearchProperties[WinText.PropertyNames.Name] = 'Result'; //(ACTIONS Part) // Click '1' button Mouse.Click(btn1); // Click 'Add' button Mouse.Click(btnAdd); // Click '6' button Mouse.Click(btn6); // Click 'Equals' button Mouse.Click(btnEquals); //evaluate the results (ASSERTIONS) Assert.AreEqual('7', txtResult.DisplayText, “Screen is not displaying 7); //close the application app.Close(); }
学習内容:
- そのスクリプトの何が問題になっていますか?
- テスト自動化には、5つの一般的なフレームワークがあります。
- #1。線形フレームワーク:
- #2。モジュール性フレームワーク:
- #3。データ駆動型フレームワーク:
- #4。キーワード駆動型フレームワーク:
- #5。ハイブリッドテスト自動化フレームワーク:
- 結論
- 推奨読書
そのスクリプトの何が問題になっていますか?
スクリプトは理解しやすいので、上記の例で3つの「A」の概念を理解していただければ幸いです。しかし、そのスクリプトではすべてがうまくいきません。
このスクリプトでは、簡単なメンテナンスはできません。 もう一度電卓の例を見てみましょう。電卓の各機能のテストケースを作成する必要がある場合、多くのテストケースがあります。 10個のテストケースがあり、各テストで同じオブジェクトを定義する必要がある場合、オブジェクトの名前またはIDに変更が発生した場合は、10個のテストケースでオブジェクト識別部分を変更する必要があります。
例えば、スクリプトのボタンADDの例を見てください。
WinButton btnAdd = new WinButton(calWindow); btnAdd.SearchProperties[WinButton.PropertyNames.Name] = 'Add';
たとえば、この行は10個のテストケースで使用されています。電卓の次のバージョンでは、開発者はボタンの名前を「追加」から「プラス」に変更しました。これで、テストケースを実行すると失敗し、10個のテストケースで上記の行をこれに変更する必要があります。
btnAdd.SearchProperties[WinButton.PropertyNames.Name] = 'Plus';
したがって、このテストケースを改善する必要があります。コーディングでは、有名なDRYの原則に従う必要があります。 DRYは「DonotRepeatYourself」の略です。オブジェクト識別部分は、次のように記述する必要があります。 オブジェクトは1つの場所でのみ識別され、どこでも呼び出される必要があります。
改善されたスクリプトを見てください。
例B:
//defining the objects outside the script and only once. ApplicationUnderTest app = null; public WinWindow calWindow { get { WinWindow _calWindow = new WinWindow(app); _calWindow.SearchProperties[WinWindow.PropertyNames.Name] = 'Calculator'; _calWindow.SearchProperties[WinWindow.PropertyNames.ClassName] = 'CalcFrame'; return _calWindow; } } public WinText txtResult { get { WinText _txtResult = new WinText(calWindow); _txtResult.SearchProperties[WinText.PropertyNames.Name] = 'Result'; return _txtResult; } } //making functions for similar kind of tasks public void ClickButton(string BtnName) { WinButton button = new WinButton(calWindow); button.SearchProperties[WinButton.PropertyNames.Name] = BtnName ; Mouse.Click(button); } public void AddTwoNumbers(string number1, string number2) { ClickButton(number1); ClickButton('Add'); ClickButton(number2); ClickButton('Equals'); } //Test case becomes simple and easy to maintain. [TestMethod] public void TestCalculatorModular() { app = ApplicationUnderTest.Launch('C:\Windows\System32\calc.exe'); //do all the operations AddTwoNumbers('6', '1'); //evaluate the results Assert.AreEqual('7', txtResult.DisplayText, “screen is not displaying 7”); //close the application app.Close(); }
上記の例では、 calWindow そして txtResult オブジェクトを上に移動して、さまざまなテスト方法で使用できるようにします。それらを一度だけ定義し、必要な数のテストケースで使用できます。
また、2つの関数を作成しました。 ClickButton() ボタン名を受け入れてクリックし、 AddTwoNumbers() これは任意の2つの数を取り、を使用してそれらを追加します ボタンをクリック その中の機能。
コードを「改善」し、再利用可能で保守可能にした瞬間、つまり、自動化フレームワークを利用しているということです。今では面白くなります。
関連項目=> テスト自動化のフレームワークが必要なのはなぜですか?
がある テスト自動化における5つの一般的なフレームワーク :
- 線形
- モジュール性
- データ駆動型
- キーワード駆動
- ハイブリッド
次に、各フレームワークの特性を利用して説明します。
#1。線形フレームワーク:
特徴
- スクリプトに関連するものはすべて、スクリプト内で定義されます。
- 抽象化とコードの重複を気にしません
- 記録と再生は通常、線形コードを生成します
- 簡単に始められます
- メンテナンスの悪夢。
線形フレームワークの上記の5つの特性を読み取ることにより、例Aをそれらに簡単に関連付けることができます。この例は基本的に線形フレームワークを使用していますが、スクリプトに関連するものはすべてスクリプト内で定義されています。ザ・ コールウィンドウ そして TxtResult スクリプト内で定義されます。スクリプトは、抽象化とコードの重複を気にしません。先に説明したように、これはメンテナンスの悪夢でもあります。
では、なぜこのフレームワークを使用する必要があるのでしょうか。
このフレームワークは、UI画面が少ない小規模プロジェクトで使用できます。また、自動化ツールを初めて使用するときは、通常、線形形式でコードを生成します。したがって、特定のアクションに対して自動化ツールによって生成されるコードについて知ることができます。これらの理由以外に、このフレームワークはスクリプトで避ける必要があります。
=> QTPの例を使用した線形およびキーワードフレームワークの例をここで参照してください。
#2。モジュール性フレームワーク:
特徴
- オブジェクトは一度定義されると、すべてのテストメソッドで再利用できます。
- 個々の機能に対して、小規模で的確な方法が作成されます
- テストケースは、これらの小さなメソッドと再利用可能なオブジェクトのコレクションです。
- これにより、保守可能なコードを記述できます。
上記の特性を読み取ることにより、例Bをこれらの特性に関連付けることができます。その例では、を移動して抽象化を作成しました calWindow 一番上に配置し、どこでも使用できるプロパティ内で定義します。と呼ばれる2つの小さな独立した関数を作成しました ClickButton() そして AddTwoNumbers() 。これら2つの小さな関数を組み合わせて、電卓の「追加」機能をテストする最終的なスクリプトを作成します。
これにより、メンテナンスが容易になります。電卓のUIに変更があった場合は、関数のみを変更する必要があります。スクリプトはそのまま残ります。このフレームワークは、自動化で非常に使用されています。有名なページオブジェクトフレームワーク(Seleniumで使用される)も一種のモジュール性フレームワークです。 Webアプリケーション全体を別々のページに配布します。各ページのボタン、ドロップダウン、およびチェックボックスは、そのページのクラス内で定義されています。ウェブサイトで変更が発生した場合、そのページクラスでのみ変更する必要があり、他のページはそのまま残ります。これにより、メンテナンスが向上し、スクリプトが読みやすくなります。
このフレームワークの唯一の欠点は、優れたオブジェクト指向の概念と強力な開発スキルが必要なことです。それらがある場合は、このフレームワークを強くお勧めします。
#3。データ駆動型フレームワーク:
特徴:
- テストデータ(入力値と出力値)はスクリプトから分離され、外部ファイルに保存されます。これは、.CSVファイル、Excelスプレッドシート、またはデータベースである可能性があります。
- スクリプトが実行されると、これらの値は外部ファイルから選択され、変数に格納され、ハードコードされた値が存在する場合はそれを置き換えます。
- 同じテストケースを異なる入力で実行する必要がある場所で本当に役立ちます。
例C:
3つの異なる入力を使用してaddテストケースを実行します。
データは
7 + 2 = 9
5 + 2 = 7
3 + 2 = 5
このデータ(入力と出力の両方)を外部CSVファイルに保存しました。
[DataSource('Microsoft.VisualStudio.TestTools.DataSource.CSV', '|DataDirectory|\data.csv', 'data#csv', DataAccessMethod. Sequential ), DeploymentItem('TestCalc\data.csv'), TestMethod] public void TestCalculatorDataDrivsen() { app = ApplicationUnderTest.Launch('C:\Windows\System32\calc.exe'); //do all the operations AddTwoNumbers(FromCSV.ADD1, FromCSV.ADD2); //evaluate the results Assert.AreEqual(FromCSV.Sum, txtResult.DisplayText); //close the application app.Close(); }
上記のスクリプトでは、スクリプトの先頭にデータソースを定義します。これは.csvファイルです。
that.CSVファイルのパスを指定し、スクリプトに「順次」解析するように指示しました。これは、CSVファイルに存在する行の数だけスクリプトが実行されることを意味します。この場合、スクリプトは3回実行されます。実行ごとに、最初の2列で定義された2つの数値を加算し、これら2つの数値の合計が3番目の列にある数値と一致することを確認します。
このフレームワークにはさまざまな利点があります。すべての値はスクリプトの外部に保存されるため、次のビルドで変更が発生した場合は、外部ファイルのデータを変更するだけで、スクリプトはそのまま残ります。
2番目の利点は、同じスクリプトを異なる入力に対して実行できることです。 100人の従業員の登録をテストする必要があるERPの例を見てください。 1つのスクリプトを記述して、従業員に関連する名前やその他のデータを外部ファイルに保存できます。 1つのスクリプトを実行すると、100回実行されます。毎回異なる従業員のデータを使用します。スクリプトが従業員の登録に失敗したデータを簡単に検出できます。あなたが否定的なテストをしているとき、それは追加の利点になります。
=> ここで、QTPの例を使用したデータ駆動型およびハイブリッドフレームワークの例を参照してください。
#4。キーワード駆動型フレームワーク:
特徴:
- データとアクションの両方がスクリプトの外部で定義されます。
- さまざまなタイプのアクションのキーワードを開発する必要がありました。
- テストする必要のある機能は、開発したキーワードとテストデータを使用して、表形式で段階的に記述されています。このテーブルは、データ駆動型フレームワークと同じように外部ファイルに保存されます。
- スクリプトはこのテーブルを解析し、対応するアクションを実行します。
- コーディングについて知らない手動テスト担当者が、ある程度自動化の一部になることを許可します。
例D:
データ(例:1 + 3 = 4)とアクション(例:クリック、クリアなど)を表形式のExcelファイルで定義しました。
スクリプトは次のようになります(以下のコードは理解のために書かれています)
[TestMethod] public void TestCalculator() { app = ApplicationUnderTest.Launch('C:\Windows\System32\calc.exe'); Table tb = ReadFromExcel(); Foreach(WinRow row in tb) { WinCell Window = row.Cells[“Window”]; WinCell Control = row.Cells[“Control”]; WinCell Action = row.Cells[“Action”]; WinCell Arguments = row.Cells[“Arguments”]; UITestControl c = GetControl(Control.Text,Window.Text); If(Action.Text == “Click”) Mouse.Click (c); If (Action.Text == “Clear”) c.Clear(); if(Action.Text == “Verify Result”) Assert.AreEqual(c.Text, Arguments.Text) //….and so on } }
上記のスクリプトは、Excelファイルのパーサーにすぎません。 Excelファイルを1行ずつ解析し、それぞれのアクションを実行するためのキーワードを探します。キーワード「クリック」が見つかった場合は、定義されたオブジェクトをクリックします。 「結果の検証」が見つかると、アサーションを実行します。
キーワード駆動型フレームワークを使用することにはさまざまな利点があります。
最初の利点は、このフレームワークが、テストケースが変更される可能性が高いシナリオで非常に役立つことです。テストケースでステップが変更された場合、コードに触れる必要はありません。 Excelファイルを更新するだけで、スクリプトが更新されます。
makefile c ++の書き方
すべてのスクリプトをExcelファイルで定義し、このExcelファイルを手動テスターに渡して、新しいスクリプトを追加したり、既存のスクリプトを更新したりできます。このように、手動テスターは何もコーディングする必要がないため、テスト自動化の一部になることもできます。必要に応じてこのExcelファイルを更新するだけで、スクリプトは自動的に更新されます。
2番目の利点は、スクリプトがツールに依存しないことです。スクリプトはExcelファイルで管理できます。ある時点で自動化ツールを変更する必要がある場合は、別のツールでExcelパーサーを作成することで簡単に変更できます。
このフレームワークの欠点は、さまざまなタイプのアクションのキーワードを考案する必要があることです。大規模なプロジェクトでは、スクリプトやキーワードを覚えて整理する必要があるほど多くのキーワードがあります。これ自体は、ある時点で面倒な作業になります。
オブジェクトを簡単に識別できず、マウス座標やその他の手法を使用する必要がある複雑なシナリオでは、このフレームワークはあまり役に立ちません。
キーワード駆動型は、依然として多くの自動化テスターにとってお気に入りのフレームワークです。 ロボットフレームワーク by Googleは、活発なコミュニティによってサポートされている人気のあるキーワード駆動型フレームワークです。
#5。ハイブリッドテスト自動化フレームワーク:
特徴:
- 上記のテクニックの2つ以上の組み合わせで、長所を生かし、短所を最小限に抑えます。
- フレームワークは、データ駆動型またはキーワード駆動型のフレームワークとともにモジュラーアプローチを使用できます。
- フレームワークは、スクリプトを使用して、純粋なキーワード駆動型アプローチでは実装が難しすぎる可能性のあるいくつかのタスクを実行できます。
簡単に言えば、ハイブリッドフレームワークは、上記の手法を組み合わせて使用します。本質的にモジュール式でもあるデータ駆動型フレームワークを使用できます。一部のテストケースでは、キーワード駆動型アプローチを使用でき、残りの場合はモジュラーを使用できます。したがって、この記事で説明した2つ以上の手法を組み合わせる場合は常に、実際にはハイブリッドアプローチを使用しています。
結論
テスト自動化フレームワークがあなたにとってもはや怖い用語ではないことを願っています。最も人気のあるフレームワークをできるだけ簡単に説明しようとしました。
フレームワークはあなたの人生を楽にするためにここにあります。これらは、保守可能で信頼性の高いスクリプトを作成するのに役立ちます。フレームワークを使用しない場合、テスト自動化の分野は悪夢です。アプリケーションを少し変更するたびに、何百もの場所でコードを変更する必要があります。
したがって、これらのフレームワークを理解することは、テスト自動化を味わいたいすべてのテスターにとって必須です。
私たちの中で 次のチュートリアル このシリーズでは、「テスト自動化の実行とレポート」について学習します。
この記事の内容を見逃したり、質問が必要な場合は、コメントセクションでお気軽にお問い合わせください。
前のチュートリアル#4 | 次のチュートリアル#6
推奨読書
- QTPフレームワーク-テスト自動化フレームワーク-キーワード駆動型および線形フレームワークの例-QTPチュートリアル#17
- SeeTest Automationコマンド:例を含む詳細な説明
- 2021年に最も人気のある10のロボットプロセス自動化RPAツール
- 手動プロジェクトと自動化プロジェクトでは、テスト計画はどのように異なりますか?
- それぞれの長所と短所を備えた最も人気のあるテスト自動化フレームワーク– Seleniumチュートリアル#20
- スクリプトレステスト自動化フレームワーク:ツールと例
- テスト自動化–それは専門的なキャリアですか?通常のテスターも自動化を行うことができますか?
- 自動化テストに最適な25のJavaテストフレームワークとツール(パート3)