run test cases parallel generate reports using karate tool
このチュートリアルでは、APIでいくつかの基本的な操作を実行し、テストケースを並行して実行し、KarateFrameworkを使用してレポートを生成する方法について説明します。
前のチュートリアルで基本的なテストスクリプトを作成する方法を学習しました。これで、APIと空手フレームワークの操作中に実行できるいくつかの基本的な操作の学習に進むことができます。このような操作は多数あります。このチュートリアルでは、一般的に使用される操作について説明します。
また、段階的なアプローチに従って、テストケースを並行して実行するプロセスについても詳しく説明します。また、自動的に生成される現在のレポートについて説明し、プラグインを統合して生成できるCucumberレポートと比較します。
学習内容:
APIと空手テストツールの操作
前のチュートリアルで説明したように、 。特徴 作成したファイルでは、さまざまなキーワードを使用してAPIでさまざまな操作を実行できます。 空手 フレームワークは、さまざまなアクションを実行するために使用できるいくつかのキーワードを提供します。
=>推奨読書: Karateフレームワークを使用したAPIテスト
さまざまな操作の実行
#1)コンソールでの応答の印刷
印刷 は、コンソールまたはファイルに結果を出力するためにKarateFrameworkによって提供されるキーワードです。最も一般的な使用法の1つは、APIの応答を出力することです。これは、ユーザーにとって非常に便利です。
これは、次のコード行を使用して実行できます。
Feature: fetching User Details Scenario: testing the get call for User Details Given url 'https://reqres.in/api/users/2' When method GET Then status 200 #We are printing the Response of the API using the print keyword# Then print response
上記のコード行は、次の出力を提供します。
18:15:44.495 [main] INFO com.intuit.karate - [print] { 'ad': { 'company': 'StatusCode Weekly', 'text': 'A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things.', 'url': 'http://statuscode.org/' }, 'data': { 'last_name': 'Weaver', 'id': 2, 'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg', 'first_name': 'Janet', 'email': 'janet.weaver@reqres.in' } }
これは、デバッグ時に使用できる読み取り目的で、コンソールにAPIの応答を出力する方法です。
#2)変数の宣言
キーワードを使用して変数を宣言できます def Karateフレームワークで、必要に応じてコードで宣言された変数を使用します。
以下の例では、既存のコードにさらに数行のコードを追加しています。 userDetails.feature スクリプトで変数を宣言するのに役立つファイル。
Feature: fetching User Details Scenario: testing the get call for User Details Given url 'https://reqres.in/api/users/2' When method GET Then status 200 #We are printing the Response of the API using the print keyword Then print response # Declaring and assigning a string value: Given def varName = 'value' # using a variable Then print varName
#3)期待される応答に対する実際の応答を主張する
Karate Frameworkは、を使用してアサーション関連の操作を実行するのに役立ちます。 一致 キーワード。ザ・ 一致 空白は関係なく、キーの順序は重要ではないため、スマートです。
使用する場合 キーワードに一致、 比較を表す二重等号「==」を使用する必要があります。
次に、のいくつかの使用法について詳しく説明します。 一致 キーワード。
a)予想される応答全体が.featureファイル自体に記載されている場合。
場合によっては、ファイル自体にすぐに検証したいデータがあります。通常、このような種類のデータは、コードのデバッグ中に言及されます。
以下に示すように、.featureファイル自体でも同じことができます。
Feature: fetching User Details Scenario: testing the get call for User Details Given url 'https://reqres.in/api/users/2' When method GET Then status 200 #Asserting the reponse #response variable is holding the Actual response from API #Right hand side value is holding the expected Response And match response == {'ad':{'company':'StatusCode Weekly','text':'A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things.','url':'http://statuscode.org/'},'data':{'last_name':'Weaver','id':2,'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg','first_name':'Janet', 'email':'janet.weaver@reqres.in'}}
URLにリクエストを送信した場合 「https://reqres.in/api/users/2」 ブラウザで、次に 次の応答が返されます。
{ 'ad': { 'company': 'StatusCode Weekly', 'text': 'A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things.', 'url': 'http://statuscode.org/' }, 'data': { 'last_name': 'Weaver', 'id': 2, 'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg', 'first_name': 'Janet', 'email': 'janet.weaver@reqres.in' } }
* .featureファイルを使用して、上記の応答を検証しようとしています。
私たちは使用しました 一致 Karate Frameworkによって提供されるキーワードで、さまざまな種類の実行に役立ちます アサーション API応答で。
注意 :上記の手順を実行するには、API応答を1行で変換する必要があります。利用可能なツールのいずれかを使用できます オンライン。
b)期待される出力が外部JSONファイルに保持されている場合。
上記の例では、データが限られていて、同じ応答を処理しやすいシナリオについて説明しましたが、実際のシナリオでは、評価する必要のある膨大なJSON応答のセットがあります。
したがって、そのような場合は、応答を外部ファイルに保持してから、同じことを確認することをお勧めします。
以下の例では、同じことについてさらに説明します。
- を作成する必要があります ExpectedOutput.json 次の画像に示すように、Projectフォルダー内のファイル。
新しいパッケージリソースを作成する->新しいファイルを作成する ExpectedOutput.json
そして、JSON応答をこのファイルに保存して保存します。
あなたはあなたに次のコードを書く必要があるでしょう userDetails.feature ファイル:
Feature: fetching User Details Scenario: testing the get call for User Details Given url 'https://reqres.in/api/users/2' When method GET Then status 200 #Verifying the JSON response by providing same in feature file And match response == {'ad':{'company':'StatusCode Weekly','text':'A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things.','url':'http://statuscode.org/'},'data':{'last_name':'Weaver','id':2,'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg','first_name': 'Janet','email':'janet.weaver@reqres.in'}} #Reading the file ExpectedOutput.json and storing same response in variable expectedResult Given expectedResult=read('./resources/ExpectedOutput.json') #Asserting the Actual Response with the Expected Response And match response == expectedResult
上記の例では、最初にファイルを読み取っています ExpectedOutput.json そしてそれの応答を変数に保存します 期待される結果 を使用して 次のコード行:
Given expectedResult=read('./resources/ExpectedOutput.json')
次に、次のコード行を使用してアサーションを配置します。ここで、 実際の対応 とともに 期待される結果 「 == ' オペレーター。
And match response == expectedResult
c)応答からの特定の値の照合/検証
これまで、APIの応答全体を検証してきましたが、毎回、応答全体を検証する必要はありません。場合によっては、応答の一部のみを評価したいことがあります。通常、APIテストに他のツールを使用するとき、またはフレームワークを作成するときに同じことを行います。
それをさらに理解するために、例として次のJSON応答を取り上げましょう。
{ 'ad': { 'company': 'StatusCode Weekly' } }
パラメータを確認したい場合 会社 次のような値を持つ必要があります StatusCode Weekly、 次に、JSONパスを作成する必要があります。これは、JSONファイルをトラバースして「。」を使用することで実行できます。 (ドット演算子)
上記の応答のJSONパスは次のようになります。
ad.company ==“ StatusCode Weekly”
以下は、特定のパラメーターの値を評価するのに役立つコードスニペットです。このコードはに属します 。特徴 ファイル。
Feature: fetching User Details Scenario: testing the get call for User Details Given url 'https://reqres.in/api/users/2' When method GET Then status 200 #Verifying the JSON response by providing same in feature file And match response == {'ad':{'company':'StatusCode Weekly', 'text':'A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things.', 'url':'http://statuscode.org/'},'data':{'last_name':'Weaver','id':2,'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg', 'first_name':'Janet','email':'janet.weaver@reqres.in'}} #Reading the file ExpectedOutput.json and storing same response in variable expectedResult Given expectedResult=read('./resources/ExpectedOutput.json') #Asserting the Actual Response with the Expected Response And match response == expectedResult ##Creating JSON path to verify the values of particular parameters## And match response.ad.url == 'http://statuscode.org/' And match response.data.first_name == 'Janet'
以下は、パラメトリックアサーションを実行しているコード行です。
And match response.ad.url == 'http://statuscode.org/' And match response.data.first_name == 'Janet'
JSONパスを使用して、パラメーターの値を評価しています。
事後操作の実行
これまで、メソッドが「」であったときにAPIをテストする基本的なシナリオについて説明してきました。 取得する'。 しかし、実際の環境で作業しているときは、サーバーに多くの情報を送信する必要があるため、その場合は「 役職' 方法 。
このセクションでは、基本的なPOSTリクエストの操作について説明します。
POSTリクエストを送信するために必要なパラメータについて簡単に説明しましょう。
#1)JSON本文が* .featureファイルに記載されている場合のPOSTリクエストの作成
- 前のチュートリアルで説明したのと同様の手順を使用して、userDetailsPost.featureを作成します。
- 次のコード行を記述します。
Feature: Posting User Details Scenario: testing the POST call for User Creation Given url 'https://reqres.in/api/users' And request '{'name': 'morpheus','job': 'leader'}' When method POST Then status 201
これはPOSTリクエストであり、特定の応答のためにサーバーに送信する必要のある本文を常に伴う必要があるため、次のコンポーネントで説明しました。
リクエスト: POSTメソッドで必要なリクエストとしてJSON本文を取ります。
#2)JSON本文が外部ファイルに記載されている場合のPOSTリクエストの作成
通常、私たちは巨大なリクエストボディを持っているでしょう、それはで言及するのが難しいでしょう *。特徴 ファイル。したがって、外部ファイルに保存することをお勧めします。
- 以下に示すように、ProjectフォルダーにPostBody.jsonファイルを作成する必要があります。新しいパッケージリソースを作成する->新しいファイルPostBody.jsonを作成し、JSON本文をこのファイルに保存して保存します。
注意: 上記のJSONファイルでPOSTメソッドの本文について説明しました。
- userDetailsPostに次のコードを記述する必要があります 。特徴 ファイル:
Feature: Posting User Details Scenario: testing the POST call for User Creation using External File Given url 'https://reqres.in/api/users' Given postBody=read('./resources/PostBody.json') And request postBody When method POST Then status 201
次のコード行を使用して、PostBody.jsonからJSON本文を読み取っています。
Given postBody=read('./resources/PostBody.json')
注意: 全ての userDeatils.feature これまでに作成したファイルには、基本的なものが必要です TestRunner.java 以下に示すように、基本的なテストスクリプトチュートリアルで作成したファイルを実行します。
import org.junit.runner.RunWith; import com.intuit.karate.junit4.Karate; @RunWith(Karate.class) public class TestRunner { }
テストケースを並行して実行する
これで、基本的なテストスクリプトを作成する手順を学び、APIでいくつかの基本的な操作を実行したので、実際の環境での作業を開始します。
通常、実行を高速化するために、テストケースを並行して実行する必要があります。基本的に、アイデアはより短い時間でより多くの出力を取得することです。
これはフレームワークのコア機能であり、JUnit、Maven、またはGradeに依存しません。これにより、次のことが可能になります。
- 簡単な方法でテストスイートを実行するための機能とタグを簡単に選択します。
- surefire-pluginフォルダーの下の並列結果を表示します。
- Cucumber JSONレポートを統合してUIを改善することもできます(これについては後で説明します)。
空手フレームワークでは、テストケースの並列実行を開始するために多くの手順を実行する必要はありません。次の手順を実行する必要があります。
1) 今、変更する必要があります TestRunner.java これまで使用してきたファイル。並列実行のコードは、上記のファイルに記述する必要があります。
コードを並列で実行するときは、次の行に注意してください。
csqa試験の質問と回答pdf
**並列環境で作業しようとしている場合、@ RunWith(Karate.class)アノテーションを使用することはできません。
オリジナルを開く TestRunner.java ファイルを作成し、次のコードを今すぐ使用します。
import com.intuit.karate.Results; import com.intuit.karate.Runner; import org.junit.Test; // important: do not use @RunWith(Karate.class) ! public class TestRunner { @Test public void testParallel() { Results results = Runner.parallel(getClass(),5); } }
**次のコードが適用されます JUnit 4Mavenの依存関係
上記のコードスニペットには、以下のコード行が含まれています-
結果結果= Runner.parallel(getClass()、5);
この行は、ランタイムでクラスを動的にフェッチすることにより、テストケースのインスタンスを並列で実行するように指示しています。
二) 複製を作成する userDetails.feature 下記のファイル src / test / java フォルダ。
これで、並列実行の準備が整いました。 二 。 特徴 ファイル。
3) に移動 TestRunner.java 上記の手順で作成されたファイルと JUnitテストとして実行します。 これにより、テストケースを並列形式で実行します。
読みやすくするために、テストの実行が完了するたびに、コンソールのKarateFrameworkによって一部の情報が表示されます。
結果は次のようになります。
並列実行では、すべての機能が並列で実行され、シナリオも並列形式で実行されます。
上記の手順に従うと、Karate Frameworkを使用して、APIテストの非常に基本的な並列実行を開始できます。
**** ページ上のさまざまなフィルターをトラバースすることで、並列テストについて学習できます。 並列実行
レポート用にCucumberプラグインを統合する
私たちが使用しているので JUnitランナー さまざまなシナリオで言及されているさまざまなシナリオの実行 *。特徴 ファイルの場合、パスに保存されている機能ファイルごとにレポートが自動的に作成されます。 target / surefire-レポート。
それは生成します 基本的なUI形式のレポート 実行されたテストケースを提示するため。
ただし、生成されるレポートはUIの点ではあまり満足のいくものではなく、レポートを利害関係者と共有するには、よりユーザーフレンドリーで理解しやすいものが必要です。
このようなレポート形式を実現するために、KarateFrameworkは統合するオプションを提供します キュウリ報告プラグイン これは、より見栄えのするグラフィック形式のレポートを生成するのに役立ちます。
同じものを統合する手順は次のとおりです。
#1) 以下を追加します きゅうり-報告 POM.xmlへの依存関係
net.masterthought cucumber-reporting 3.8.0 test
#二) 単一の場合は、TestRunner.javaファイルを編集します *。特徴 プロジェクト内のファイル。
TestRunner.javaファイルを、Cucumberプラグイン用の次のgenerateReport()メソッドで更新する必要があります。
public class TestRunner { @Test public void testParallel() { generateReport(results.getReportDir()); assertTrue(results.getErrorMessages(), results.getFailCount() == 0); } public static void generateReport(String karateOutputPath) { Collection jsonFiles = FileUtils.listFiles(new File(karateOutputPath), new String[] {'json'}, true); final List jsonPaths = new ArrayList(jsonFiles.size()); jsonFiles.forEach(file -> jsonPaths.add(file.getAbsolutePath())); Configuration config = new Configuration(new File('target'), 'demo'); ReportBuilder reportBuilder = new ReportBuilder(jsonPaths, config); reportBuilder.generateReports(); } }
上記のコードでは、次のアクションを実行しています。
- ファイルの新しいインスタンスを作成する
- ターゲットフォルダの下にファイルを保存するためのパスを提供する
- 新しいCucumberレポートを作成するReportBuilderオブジェクトの作成
注意 :上記のコードは、シングルを使用している場合は正常に機能します *。特徴 私たちのプロジェクトのファイル。
#3) ある場合は、TestRunner.javaファイルを編集します 複数の* .feature プロジェクト内のファイル。
レポート生成のためにシナリオが実行されている間、並列実行が確実に処理されるようにするには、コード行を追加する必要があります(以下で太字で強調表示されています)。
public class TestRunner { @Test public void testParallel() { System.setProperty('karate.env', 'demo'); // ensure reset if other tests (e.g. mock) had set env in CI Results results = Runner.parallel(getClass(),5); generateReport(results.getReportDir()); assertTrue(results.getErrorMessages(), results.getFailCount() == 0); } public static void generateReport(String karateOutputPath) { Collection jsonFiles = FileUtils.listFiles(new File(karateOutputPath), new String[] {'json'}, true); final List jsonPaths = new ArrayList(jsonFiles.size()); jsonFiles.forEach(file -> jsonPaths.add(file.getAbsolutePath())); Configuration config = new Configuration(new File('target'), 'demo'); ReportBuilder reportBuilder = new ReportBuilder(jsonPaths, config); reportBuilder.generateReports(); } }
上記の手順を実行すると、次のコマンドを使用して、適切に表現されたグラフィカルUIレポートを正常に作成できるようになります。 きゅうり–レポート プラグイン。
次の画像に示すように、プロジェクトの次のパスでレポートを見つけることができます。
次のレポートは、このKarate Frameworkチュートリアルでこれまでに実行したすべての操作について、プロジェクト用に生成されました。
結論
要約すると、このチュートリアルでは、を使用して日常的に役立つ基本的な操作について説明しました。 空手フレームワーク と実行方法 複数の* .featureファイル 並行して。また、を使用してユーザー向けのグラフィカルレポートを作成する方法も学びました。 きゅうりレポート プラグイン。
最初に、APIで実行できる基本的な操作について説明しました。 * .featureファイル自体に本文を記載する(通常は推奨されない方法です)か、外部ファイルを使用する(推奨される方法です)ことにより、POST本文/リクエストをサーバーに送信する方法について説明しました。クリーンなコードを維持します)。
次に、いくつかの基本的な手順を実行した後、2つのテスト結果を正常に実行できました。 *。特徴 に数行のコードを追加するだけで、並行して実行されたファイル TestRunner.java 並列実行の開始を可能にするファイル。
これに加えて、ネイティブのJUnitテストレポートをCucumberレポートに変換する方法を学びました。 きゅうり報告 プラグイン。プラグインを使用すると、UIが優れ、ユーザーにとってはるかに理解しやすいレポートを生成できるため、これらのレポートを共有する利害関係者により良いユーザーエクスペリエンスを提供できます。
これで、いくつかの基本的な操作を実行し、テストケースを並行して実行し、ユーザー向けの読みやすいレポートを生成できるようになります。
推奨読書
- 空手フレームワークチュートリアル:空手による自動APIテスト
- 2021年の10の最高のAPIテストツール(SOAPおよびREST APIテストツール)
- Jenkinsでキュウリを実行する方法:例を含むチュートリアル
- SeleniumWebDriverでエクステントレポートを生成するためのガイド
- Specflowレポート:テストレポートを生成して選択テストを実行する方法
- TestLinkを使用して要件を管理し、テストケースを実行し、レポートを生成する方法–チュートリアル#2
- Appium Studio forEclipseを使用してAppiumテストを並行して実行する
- Appiumテストの大規模な実行を並行して実行する方法