きゅうり-クイックガイド
ソフトウェアテストをより有効に活用するために、組織は今日、一歩前進しています。開発が進行している間、重要な受け入れテストシナリオを実装します。このアプローチは一般的にとして知られていますBehavior Driven Development (BDD)。
ビヘイビア駆動開発は、開発者と顧客の両方の観点からもテストスクリプトを作成する機会を与えてくれます。そのため、最初は、開発者、プロジェクトマネージャー、QA、ユーザー受け入れテスター、および製品所有者(株主)が全員集まり、このソフトウェア/アプリケーションを成功させるためにどのテストシナリオに合格する必要があるかについてブレインストーミングします。このようにして、彼らは一連のテストシナリオを考え出します。これらのテストスクリプトはすべて単純な英語であるため、ドキュメント化の目的にも役立ちます。
例
ユーザー認証機能を開発している場合、以下はいくつかの重要なテストシナリオであり、成功と呼ぶために合格する必要があります。
ユーザーは、正しいユーザー名と正しいパスワードでログインできる必要があります。
ユーザーは、間違ったユーザー名と正しいパスワードでログインできないようにする必要があります。
ユーザーは、正しいユーザー名と間違ったパスワードでログインできないようにする必要があります。
使い方
コードの準備が整うまでに、テストスクリプトの準備も整います。コードは、BDDで定義されたテストスクリプトに合格する必要があります。それが起こらない場合は、コードのリファクタリングが必要になります。定義されたテストスクリプトが正常に実行された後にのみ、コードがフリーズします。
これは非常に単純な概念ですが、この概念を実装するために必要なものです。答えは、ビヘイビア駆動開発(BDD)フレームワークです。Cucumberは、そのようなオープンソースツールの1つであり、ビヘイビア駆動開発をサポートします。より正確に言うと、Cucumberは、プレーンな英語のテキストによって駆動されるテストフレームワークとして定義できます。これは、ドキュメント、自動テスト、および開発支援としてすべて1つになります。
では、キュウリは何をするのでしょうか?それは次のステップで説明することができます-
Cucumberは、機能ファイル(後で紹介する)のプレーンな英語テキスト(Language Gherkin –このチュートリアルの後半で紹介する)で書かれたコードを読み取ります。
ステップ定義内の各ステップの完全一致を検出します(コードファイル-詳細はチュートリアルの後半で提供されます)。
実行されるコードは、次のようなさまざまなソフトウェアフレームワークにすることができます。 Selenium, Ruby on Railsなど。すべてのBDDフレームワークツールがすべてのツールをサポートしているわけではありません。
これが、Cucumberが他のフレームワークよりも人気がある理由になっています。 JBehave, JDave, Easyb, 等
Cucumberは、次のような12を超えるさまざまなソフトウェアプラットフォームをサポートしています。
- Ruby on Rails
- Selenium
- PicoContainer
- SpringFramework
- Watir
他のツールに対するキュウリの利点
Cucumberは、Java.netやRubyなどのさまざまな言語をサポートしています。
これは、ビジネス言語と技術言語の間の架け橋として機能します。これは、平易な英語のテキストでテストケースを作成することで実現できます。
これにより、コードの知識がなくてもテストスクリプトを記述でき、プログラマー以外の人も参加できます。
他のツールとは異なり、エンドツーエンドのテストフレームワークの目的を果たします。
シンプルなテストスクリプトアーキテクチャにより、Cucumberはコードの再利用性を提供します。
この章では、WindowsマシンでのSeleniumWebDriverとJavaを使用したCucumberの環境設定について説明します。
環境設定の前提条件
以下は、-で設定するために必要な前提条件です。
Java
Why we need−Javaは堅牢なプログラミング言語です。Cucumberは、実行用のJavaプラットフォームをサポートしています。
How to install −
Step 1 −次のリンクからjdkとjreをダウンロードします http://www.oracle.com/technetwork/java/javase/downloads/index.html
Step 2 −使用許諾契約に同意します。
Step 3 −JDKとJREをインストールします。
Step 4 −次のスクリーンショットに示すように、環境変数を設定します。
Eclipse
Why we need− Eclipseは統合開発環境(IDE)です。これには、基本ワークスペースと、環境をカスタマイズするための拡張可能なプラグインシステムが含まれています。
How to install −
Step 1 −マシンにJAVAがインストールされていることを確認します。
Step 2 −Eclipseをからダウンロードする https://eclipse.org/downloads/
Step 3 −解凍するとEclipseがインストールされます。
Maven
Why we need− Mavenは、主にJavaプロジェクトに使用されるビルド自動化ツールです。ソースコードの生成、コードのコンパイル、jarへのコードのパッケージ化などのアクティビティを実行するための共通プラットフォームを提供します。後でソフトウェアバージョンのいずれかが変更された場合、Mavenはそれに応じてテストプロジェクトを変更する簡単な方法を提供します。
How to install −
Step 1 −次のリンクからMavenをダウンロードします− https://maven.apache.org/download.cgi
Step 2 −ファイルを解凍し、場所を覚えておきます。
Step 3 −次のスクリーンショットに示すように、環境変数MAVEN_HOMEを作成します。
Step 4 −次のスクリーンショットに示すように、Path変数を編集し、Mavenを含めます。
Step 5 −EclipseからMAVENプラグインをダウンロードします。
Step 6 −Eclipseを開きます。
Step 7 −「ヘルプ」→「EclipseMarketplace」→「Mavenの検索」→「MavenIntegration forEclipse」→「INSTALL」に移動します。
Mavenでキュウリを構成する
Step 1 −Mavenプロジェクトを作成します。
「ファイル」→「新規」→「その他」→「Maven」→「Mavenプロジェクト」→「次へ」に移動します。
グループIDを提供します(グループIDは、すべてのプロジェクトでプロジェクトを一意に識別します)。
アーティファクトIDを提供します(アーティファクトIDは、バージョンのないjarの名前です。小文字の任意の名前を選択できます)。[完了]をクリックします。
Step 2 −pom.xmlを開きます。
Eclipseの左側にあるパッケージエクスプローラーに移動します。
プロジェクトを展開する CucumberTest。
見つける pom.xml ファイル。
右クリックしてオプションを選択し、「テキストエディタ」で開きます。
Step 3 −セレンの依存関係を追加する:これは、中央リポジトリからローカルリポジトリにダウンロードされるSeleniumjarファイルをMavenに示します。
開いた pom.xml が編集モードの場合、プロジェクトタグ内に依存関係タグ(<dependencies> </ dependencies>)を作成します。
依存関係タグ内に、依存関係タグ(<dependency> </ dependency>)を作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.47.1</version>
</dependency>
Step 4 − Cucumber-Javaの依存関係を追加:これは、中央リポジトリからローカルリポジトリにダウンロードされるCucumberファイルをMavenに示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
Step 5 − Cucumber-JUnitの依存関係を追加:これは、中央リポジトリからローカルリポジトリにダウンロードされるCucumberJUnitファイルであるMavenを示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
Step 6 − JUnitの依存関係を追加する:これは、中央リポジトリからローカルリポジトリにダウンロードされるJUnitファイルをMavenに示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
Step 7 −バイナリを確認します。
一度 pom.xml 正常に編集されたら、保存します。
プロジェクト→クリーンに移動-数分かかります。
次のスクリーンショットに示すようなMavenリポジトリを表示できます。
機能ファイルを作成します(後で説明します)。
ステップ定義ファイルを作成します(後で説明します)。
テストを実行するためのJUnitランナーを作成します(後で説明します)。
これまでのところ、キュウリとその機能について理解しています。機能ファイルで定義されているテストスクリプトを実行します(以降の章で説明します)。この実行可能機能ファイルが書き込まれる言語は、次のように知られています。Gherkin。Gherkinはプレーンな英語のテキスト言語であり、ツールであるCucumberがテストスクリプトを解釈して実行するのに役立ちます。
Cucumberは単純な英語のテキストをサポートしているのに、なぜ別の言語であるGherkinsが必要なのかについて、何度も議論されてきたと思うかもしれません。その答えは、ビヘイビア駆動開発の概念にあります。
前に説明したように、BDDはテストスクリプトの作成中にさまざまな見通しを取り入れていることを確認しました。開発の見通し、ビジネスの見通しなどが考えられます。とはいえ、テストスクリプトを開発する際には、開発者、プロジェクトマネージャー、製品所有者、テスターなど、さまざまなコミュニティの人々が必要になります。これらの人々は同じカテゴリに属していないため、テストスクリプトの概念化に共通言語を使用しないリスクがあります。これがガーキンスの進化のポイントでした。
Gherkinは、英語のテキストで共通のキーワードセットを提供します。これは、さまざまなコミュニティの人々が使用でき、テストスクリプトの形式で同じ出力を取得できます。
例
Feature −ソーシャルネットワーキングサイトのログイン機能。 Given 私はソーシャルネットワーキングサイトのユーザーです。 When username1としてusernameを入力します。 And password1としてpasswordを入力します。 Then サイトのホームページにリダイレクトする必要があります。
上記のシナリオは、ユーザーログインと呼ばれる機能です。太字で強調表示されている単語はすべてGherkinキーワードです。
他のいくつかのキーワードの例-
- Background
- But
- *
- シナリオ概要
- Examples
Gherkinは、ステップ定義ファイル(後で説明します)に書き込まれた各ステップを解析します。したがって、機能ファイルとステップ定義ファイル(後で説明します)に記載されているステップは一致している必要があります。
Gherkin jarは、パッケージエクスプローラーのMavenDependencyフォルダーにあります。他のキュウリの瓶と一緒にダウンロードされます。次のスクリーンショットのようになります-
ガーキンのもう1つの興味深い事実は、英語だけでなく、フランス語、フィンランド語、インドネシア語、ハンガリー語、ヒンドゥー語、ウルドゥー語、グジャラート語など、他の多くの母国語をサポートしていることです。
A Featureスタンドアロンユニットまたはプロジェクトの機能として定義できます。ソーシャルネットワーキングサイトの非常に一般的な例を見てみましょう。この製品/プロジェクトの機能はどのように見えますか?次のように判断できる基本的な機能はほとんどありません。
ソーシャルネットワーキングサイトからユーザーを作成して削除します。
ソーシャルネットワーキングサイトのユーザーログイン機能。
ソーシャルネットワーキングサイトで写真やビデオを共有する。
友達リクエストを送信します。
Logout.
これまでのところ、Cucumberについて話すとき、テスト対象の製品のそれぞれの独立した機能を機能と呼ぶことができることは明らかです。後でテストを開始するときに、テストスクリプトを取得する前に、テストする機能を決定することをお勧めします。
機能には通常、その機能についてテストするシナリオのリストが含まれています。機能、テストする機能およびシナリオに関する説明を保存するファイルは、次のように知られています。Feature File。機能ファイルの詳細については、次の章で説明します。
Gherkinsでテスト中の機能を表すキーワードは、「機能」です。推奨されるベストプラクティスは、機能ファイルの機能タイトルの下に機能の簡単な説明を書き込むことです。これにより、優れたドキュメントの必要性も満たされます。
例
Feature −ソーシャルネットワーキングサイトのログイン機能。
ユーザー名とパスワードが正しければ、ユーザーはソーシャルネットワーキングサイトにログインできるはずです。
ユーザー名とパスワードが正しくない場合、ユーザーにエラーメッセージが表示されます。
ユーザー名とパスワードが正しければ、ユーザーはホームページに移動する必要があります。
機能ファイル
キュウリのテストが書かれているファイルは、として知られています feature files。テスト対象の機能ごとに、個別の機能ファイルを用意することをお勧めします。機能ファイルの拡張子は「.feature」である必要があります。
必要な数の機能ファイルを作成できます。構造を整理するには、各機能に1つの機能ファイルが必要です。
例-
シニア番号 | 特徴 | 機能ファイル名 |
---|---|---|
1 | ユーザーログイン | userLogin.feature |
2 | 投稿を共有する | sharePost.feature |
3 | アカウントを作成する | createAccount.feature |
4 | アカウントを削除する | deleteAccount.feature |
機能名、機能ファイル名に使用される命名規則は、個人の選択によって異なります。キュウリには名前に関する基本的なルールはありません。
シンプルな機能ファイルは、次のキーワード/パーツで構成されています-
Feature −テスト中の機能の名前。
Description (オプション)-テスト中の機能について説明します。
Scenario −テストシナリオは何ですか。
Given −テストステップが実行される前の前提条件。
When −次のステップを実行するために一致する必要がある特定の条件。
Then −WHENに記載されている条件が満たされた場合はどうなりますか。
例
Feature −ソーシャルネットワーキングサイトへのユーザーログイン。
ユーザー名とパスワードが正しい場合、ユーザーはソーシャルネットワーキングサイトにログインできる必要があります。
ユーザー名とパスワードが正しくない場合、ユーザーにエラーメッセージが表示されます。
ユーザー名とパスワードが正しい場合、ユーザーはホームページに移動する必要があります。
Outline −ソーシャルネットワーキングサイトのログイン機能。
指定されたユーザーはFacebookに移動します。ユーザー名を「<ユーザー名>」、パスワードを「<パスワード>」と入力すると。その後、ログインは失敗するはずです。
| username | password |
| username1 | password1 |
* AND キーワードは、2つの条件間の接続詞を示すために使用されます。 AND のような他のキーワードと一緒に使用できます GIVEN, WHEN そして THEN。
機能ファイルに記述されているロジックの詳細はありません。
ステップの定義
テストシナリオを定義した機能ファイルを用意しました。ただし、これは完全な作業ではありません。Cucumberは、機能ファイルで概説されている特定のシナリオに対してどのコードを実行するかを実際には知りません。
これにより、中間のステップ定義ファイルが必要になります。ステップ定義ファイルには、機能ファイルで定義されたシナリオの各ステップ間のマッピングと、実行される機能のコードが格納されます。
そのため、Cucumberは、機能ファイルに記載されているシナリオのステップを実行すると、ステップ定義ファイルをスキャンして、呼び出される関数を特定します。
ステップ定義ファイルの例
public void goToFacebook() {
driver = new FirefoxDriver();
driver.navigate().to("https://www.facebook.com/");
}
@When "^user logs in using Username as \"([^\"]*)\" and Password as \"([^\"]*)\"$" public void I_enter_Username_as_and_Password_as(String arg1, String arg2) { driver.findElement(By.id("email")).sendKeys(arg1); driver.findElement(By.id("pass")).sendKeys(arg2); driver.findElement(By.id("u_0_v")).click(); } @Then"^login should be unsuccessful$"
public void validateRelogin() {
if(driver.getCurrentUrl().equalsIgnoreCase(
"https://www.facebook.com/login.php?login_attempt=1&lwv=110")){
System.out.println("Test Pass");
} else {
System.out.println("Test Failed");
}
driver.close();
}
したがって、各関数で、各テストステップ(つまり、GIVEN / THEN / WHEN)で実行するコードが何であれ、ステップ定義ファイル内に書き込むことができます。各ステップでコード/関数が定義されていることを確認してください。
この関数はJava関数にすることができ、テスト手順を自動化するためにJavaコマンドとSeleniumコマンドの両方を使用できます。
Scenarioコアガーキン構造の1つです。すべてのシナリオは、キーワード「シナリオ:」(またはローカライズされたもの)で始まり、オプションのシナリオタイトルが続きます。各機能には1つ以上のシナリオを含めることができ、すべてのシナリオは1つ以上のステップで構成されます。シナリオの非常に単純な例は次のとおりです。
Scenario −ヘルプ機能を確認します。
特定のユーザーがFacebookに移動します。
ユーザーが[ヘルプ]をクリックすると、[ヘルプ]ページが開きます。
テストシナリオを複数回実行する必要がある場合を考えてみます。ログイン機能がすべてのタイプのサブスクリプション所有者に対して機能していることを確認する必要があるとします。これには、ログイン機能シナリオを複数回実行する必要があります。コードを再実行するために同じ手順をコピーして貼り付けるのは賢明な考えではないようです。このために、Gherkinはシナリオの概要であるもう1つの構造を提供します。
シナリオの概要はシナリオの構造に似ています。唯一の違いは、複数の入力の提供です。次の例でわかるように、テストケースは同じままであり、繰り返すことはできません。下部には、変数「ユーザー名」と「パスワード」に複数の入力値があります。実際のテストの実行中に、Cucumberは変数を指定された入力値に置き換え、テストを実行します。pass-1が実行されると、テストは別の入力値を使用して2回目の反復で再実行されます。このような変数またはプレースホルダーは、ガーキンステートメントで言及しながら「<>」で表すことができます。
例
Scenario Outline−ソーシャルネットワーキングサイトのログイン機能。指定されたユーザーはFacebookに移動します。
ユーザーが「<username>」としてユーザー名を使用し、「<password>」としてパスワードを使用してログインすると、ログインは成功するはずです。
| username | password |
| user1 | password1 |
| user2 | password2 |
キュウリのシナリオをスマートに定義するためのヒントとコツがいくつかあります。
読者に混乱を与えないように、各ステップを明確に定義する必要があります。
テストシナリオを繰り返さないでください。必要に応じて、シナリオの概要を使用して繰り返しを実装してください。
複数のシナリオおよびシナリオの概要内で使用できるように、テストステップを開発します。
可能な限り、各ステップを完全に独立させてください。例:「ユーザーがログインしている場合」。これは2つのステップに分けることができます
- ユーザーがユーザー名を入力するとします。
- ログインをクリックします。
Annotationは事前定義されたテキストであり、特定の意味を持ちます。コンパイラ/インタプリタに、実行時に何をすべきかを知らせます。キュウリには次のいくつかの注釈があります-
Given −
テストを実行するための前提条件について説明します。
例-与えられた私はFacebookユーザーです
When −
これは、テストシナリオ実行のトリガーポイントを定義します。
例-「<username>」と入力した場合
Then −
次に、実行されるテストの期待される結果を保持します。
例-THENログインは成功するはずです。
And −
これは、任意の2つのステートメント間の論理AND条件を提供します。ANDは、GIVEN、WHEN、およびTHENステートメントと組み合わせて使用できます。
例-「<ユーザー名>」を入力し、「<パスワード>」を入力した場合
But −
これは、任意の2つのステートメント間の論理OR条件を示します。ORは、GIVEN、WHEN、およびTHENステートメントと組み合わせて使用できます。
例-THENログインは成功するはずです。しかし、ホームページは見逃してはいけません。
Scenario −
テスト中のシナリオの詳細は、キーワード「シナリオ:」の後にキャプチャする必要があります。
例-
シナリオ:
与えられた私はFacebookユーザーです
私が入るとき
そして私は
その後、ログインは成功するはずです。
しかし、ホームページは見逃してはいけません。
Scenario Outline −(後で説明します)
Examples −(後で説明します)
Background −
バックグラウンドには通常、各シナリオを実行する前に何を設定するかについての指示があります。ただし、「Before」フックの後に実行されます(後で説明します)。したがって、これは、Webブラウザーをセットアップする場合、またはデータベース接続を確立する場合のコードに使用するのに理想的です。
例-
バックグラウンド:
Facebookのホームページに移動します。
シナリオ例
注釈をよりよく理解するために、シナリオを自動化しましょう。
Step 1
次の名前のMavenテストプロジェクトを作成します AnnotationTest。
「ファイル」→「新規」→「その他」→「Maven」→「Mavenプロジェクト」→「次へ」に移動します。
グループIDを提供します(グループIDは、すべてのプロジェクトでプロジェクトを一意に識別します)。
アーティファクトIDを提供します(アーティファクトIDは、バージョンのないjarの名前です。小文字の任意の名前を選択できます)。
[完了]をクリックします。
開いた pom.xml −
Eclipseの左側にあるパッケージエクスプローラーに移動します。
プロジェクトAnnotationTestを展開します。
pom.xmlファイルを見つけます。
右クリックして、「テキストエディタで開く」オプションを選択します。
Seleniumの依存関係を追加する-これは、中央リポジトリからローカルリポジトリにダウンロードされるSeleniumjarファイルであるMavenを示します。
pom.xmlを編集モードで開き、プロジェクトタグ内に依存関係タグ(<dependencies> </ dependencies>)を作成します。
依存関係タグ内に、依存関係タグ(<dependency> </ dependency>)を作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.47.1</version>
</dependency>
Cucumber-Javaの依存関係を追加-これは、中央リポジトリからローカルリポジトリにダウンロードされるCucumberファイルであるMavenを示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
Cucumber-JUnitの依存関係を追加-これは、中央リポジトリからローカルリポジトリにダウンロードされるCucumberJUnitファイルであるMavenを示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
JUnitの依存関係を追加-これは、中央リポジトリからローカルリポジトリにダウンロードされるJUnitファイルをMavenに示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
バイナリを確認します。
pom.xmlが正常に編集されたら、保存します。
プロジェクト→クリーンに移動-数分かかります。
Step 2
下にAnnotationという名前のパッケージを作成します src/test/java
新しく作成したプロジェクトを選択します。
右クリックして「新規」を選択します。
「パッケージ」としてオプションを選択します。
「注釈」という名前を付けます。
それを保存。
Step 3
名前の付いた機能ファイルを作成します annotation.feature。
パッケージのアウトラインを選択して右クリックします。
「新規」ファイルをクリックします。
ファイルに次のような名前を付けます outline.feature。
ファイル内に次のテキストを書き込んで保存します。
Feature: annotation
#This is how background can be used to eliminate duplicate steps
Background:
User navigates to Facebook Given
I am on Facebook login page
#Scenario with AND
Scenario:
When I enter username as "TOM"
And I enter password as "JERRY"
Then Login should fail
#Scenario with BUT
Scenario:
When I enter username as "TOM"
And I enter password as "JERRY"
Then Login should fail
But Relogin option should be available
Step 4
ステップ定義ファイルを作成します。
パッケージのアウトラインを選択して右クリックします。
「新規」ファイルをクリックします。
ファイル名を次のように指定します annotation.java
ファイル内に次のテキストを書き込んで保存します。
package Annotation;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import cucumber.annotation.en.Given;
import cucumber.annotation.en.Then;
import cucumber.annotation.en.When;
public class annotation {
WebDriver driver = null;
@Given("^I am on Facebook login page$") public void goToFacebook() { driver = new FirefoxDriver(); driver.navigate().to("https://www.facebook.com/"); } @When("^I enter username as \"(.*)\"$")
public void enterUsername(String arg1) {
driver.findElement(By.id("email")).sendKeys(arg1);
}
@When ("^I enter password as \"(.*)\"$") public void enterPassword(String arg1) { driver.findElement(By.id("pass")).sendKeys(arg1); driver.findElement(By.id("u_0_v")).click(); } @Then("^Login should fail$")
public void checkFail() {
if(driver.getCurrentUrl().equalsIgnoreCase(
"https://www.facebook.com/login.php?login_attempt=1&lwv=110")){
System.out.println("Test1 Pass");
} else {
System.out.println("Test1 Failed");
}
driver.close();
}
@Then("^Relogin option should be available$")
public void checkRelogin() {
if(driver.getCurrentUrl().equalsIgnoreCase(
"https://www.facebook.com/login.php?login_attempt=1&lwv=110")){
System.out.println("Test2 Pass");
} else {
System.out.println("Test2 Failed");
}
driver.close();
}
}
Step 5
ランナークラスファイルを作成します。
パッケージのアウトラインを選択して右クリックします。
「新規」ファイルをクリックします。
ファイルに次のような名前を付けます runTest.java
ファイル内に次のテキストを書き込んで保存します。
package Annotation;
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})
public class runTest {
}
Step 6
オプション-を使用してテストを実行します
パッケージエクスプローラからrunTest.javaファイルを選択します。
右クリックしてオプションを選択します ‘Run as’
JUnitテストを選択します。
このクラスファイルを実行すると、次のことがわかります。
Facebookは新しいFirefoxWebブラウザインスタンスで開きます。
TOMは、ユーザー名フィールドへの入力として渡されます。
JERRYは、パスワードフィールドへの入力として渡されます。
ログインをクリックします。
ログインに失敗した場合のメッセージがブラウザに表示されます。
コンソールに、「テストパス」が印刷されているのがわかります
手順結果1.〜5。ユーザー名は「」、パスワードは「」で再実行されます。
Scenario outline基本的に、変数/キーワードをテーブルの値に置き換えます。表の各行はシナリオと見なされます。
Facebookのログイン機能の同じ例を続けましょう。これまで、1つのシナリオを実行してきました。正しいユーザー名を入力すると、ログインが成功します。ここで、ユーザー名、電子メールアドレス、または電話番号の3つの可能な入力すべてに対してログインが成功したかどうかを確認するとします。これを実現するには、3つの異なるシナリオを作成する必要があります。各シナリオは入力のタイプによって異なり、ログインは成功します。この場合、シナリオは次のようになります。
Scenario:
特定のユーザーがFacebookに移動します
正しいユーザー名とパスワードを入力すると
その後、ログインは成功するはずです
Scenario:
特定のユーザーがFacebookに移動します
正しいメールアドレスとパスワードを入力すると
その後、ログインは成功するはずです
Scenario:
特定のユーザーがFacebookに移動します
正しい電話番号とパスワードを入力すると
その後、ログインは成功するはずです
ここで、よく見ると、上記の3つのシナリオでは、ステートメントが同じで、入力パラメーター(ユーザー名/電子メールアドレス/電話番号)のみが変更されています。そこで、シナリオの概要の重要性が浮き彫りになります。
シナリオの概要を使用してシナリオを定義する場合、1つのテストシナリオを指定でき、その下部にいくつかの入力を指定できます。シナリオは、提供された入力の数と同じ回数実行されます。
例
シナリオの概要の例を作成しましょう-
Step 1 −という名前のMavenテストプロジェクトを作成します ScenarioOutlineTest
「ファイル」→「新規」→「その他」→「Maven」→「Mavenプロジェクト」→「次へ」に移動します。
グループIDを提供します(グループIDは、すべてのプロジェクトでプロジェクトを一意に識別します)。
アーティファクトIDを提供します(アーティファクトIDは、バージョンのないjarの名前です。小文字の任意の名前を選択できます)。
[完了]をクリックします。
開いた pom.xml −
Eclipseの左側にあるパッケージエクスプローラーに移動します。
プロジェクトCucumberTestを展開します。
pom.xmlファイルを見つけます。
右クリックして、「テキストエディタで開く」オプションを選択します。
Seleniumの依存関係を追加する-これは、中央リポジトリからローカルリポジトリにダウンロードされるSeleniumjarファイルであるMavenを示します。
pom.xmlを編集モードで開き、プロジェクトタグ内に依存関係タグ(<dependencies> </ dependencies>)を作成します。
依存関係タグ内に、依存関係タグ(<dependency> </ dependency>)を作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.47.1</version>
</dependency>
Cucumber-Javaの依存関係を追加します。これは、中央リポジトリからローカルリポジトリにダウンロードされるCucumberファイルをMavenに示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
Cucumber-JUnitの依存関係を追加します。これは、中央リポジトリからローカルリポジトリにダウンロードされるCucumberJUnitファイルであるMavenを示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
JUnitの依存関係を追加-これは、中央リポジトリからローカルリポジトリにダウンロードされるJUnitファイルをMavenに示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
JUnitの依存関係を追加-これは、中央リポジトリからローカルリポジトリにダウンロードされるJUnitファイルをMavenに示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
バイナリを確認します。
pom.xmlが正常に編集されたら、保存します。
プロジェクト→クリーンに移動-数分かかります。
Step 2 −下に「outline」という名前のパッケージを作成します src/test/java
Step 3 −という名前の機能ファイルを作成します “outline.feature”
パッケージのアウトラインを選択して右クリックします。
「新規」ファイルをクリックします。
次のようなファイル名を付けます “outline.feature”
ファイル内に次のテキストを書き込んで保存します。
Feature −シナリオの概要
Scenario Outline −ソーシャルネットワーキングサイトのログイン機能。
特定のユーザーがFacebookに移動します
ユーザー名を「<ユーザー名>」、パスワードを「<パスワード>」と入力すると
その後、ログインは失敗するはずです
Example −
| username | password |
| username1 | password1 |
| username2 | password2 |
Note−ここで、注釈の例は、シナリオの実行時に提供される入力の範囲を示しています。テストシナリオは、提供された入力ごとに実行されます。したがって、この例では、テストシナリオが3回実行されます。
Step 4 −ステップ定義ファイルを作成します。
パッケージのアウトラインを選択して右クリックします。
「新規」ファイルをクリックします。
ファイル名を次のように指定します stepdefinition.java
ファイル内に次のテキストを書き込んで保存します。
package Outline;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import cucumber.annotation.en.Given;
import cucumber.annotation.en.Then;
import cucumber.annotation.en.When;
public class stepdefinition {
WebDriver driver = null;
@Given("^user navigates to facebook$")
public void goToFacebook() {
driver = new FirefoxDriver();
driver.navigate().to("https://www.facebook.com/");
}
@When("^I enter Username as \"([^\"]*)\" and Password as \"([^\"]*)\"$") public void I_enter_Username_as_and_Password_as(String arg1, String arg2) { driver.findElement(By.id("email")).sendKeys(arg1); driver.findElement(By.id("pass")).sendKeys(arg2); driver.findElement(By.id("u_0_v")).click(); } @Then("^login should be unsuccessful$")
public void validateRelogin() {
if(driver.getCurrentUrl().equalsIgnoreCase(
"https://www.facebook.com/login.php?login_attempt=1&lwv=110")){
System.out.println("Test Pass");
} else {
System.out.println("Test Failed");
}
driver.close();
}
}
Note−上記のコードでは、2つの入力引数を持つ関数を定義する必要があります。1つはユーザー名、もう1つはパスワード用です。したがって、サンプルタグで提供される入力のセットごとに、GIVEN、WHEN、およびTHENのセットが実行されます。
Step 5 −ランナークラスファイルを作成します。
パッケージのアウトラインを選択して右クリックします。
「新規」ファイルをクリックします。
次のようなファイル名を付けます runTest.java
ファイル内に次のテキストを書き込んで保存します。
package Outline;
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})
public class runTest { }
オプション-を使用してテストを実行します
選択する runTest.java パッケージエクスプローラーからのファイル。
右クリックしてオプションを選択します ‘Run as’。
JUnitテストを選択します。
このクラスファイルを実行すると、次のことがわかります。
Facebookは新しいFirefoxWebブラウザインスタンスで開きます。
ユーザー名1とパスワード1は、ユーザー名とパスワードのフィールドへの入力として渡されます。
ログインをクリックします。
ログインに失敗した場合のメッセージがブラウザに表示されます。
コンソールに、「テストパス」が印刷されています。
ステップ結果1から5は、username2とpassword2に対して再実行されます。
一言で言えば、シナリオが変更されず、データ値のみが変更される場合は、シナリオのアウトラインデータテーブルを使用することをお勧めします。
機能ファイルにシナリオが1つ、2つ、または5つしかない場合は、単純に見えます。しかし、実際にはそれは起こりません。テスト対象の機能ごとに、10、20、またはそれ以上の数のシナリオが1つの機能ファイルに含まれる場合があります。それらは、さまざまな目的(スモークテスト/回帰テスト)、さまざまな見込み客(開発者/ QA / BA)、さまざまなステータス(実行の準備ができている/進行中の作業)などを表す場合があります。
このため、Cucumberは、機能ファイルのタグを使用してシナリオの実行を整理する方法をすでに提供しています。便利なタグを使用して各シナリオを定義できます。後で、ランナーファイルで、Cucumberに実行させる特定のタグ(およびシナリオなど)を決定できます。タグは「@」で始まります。「@」の後に、タグを定義するための関連テキストを含めることができます。例を挙げてこれを理解しましょう。
機能ファイルに2つ以上のシナリオがあるとします。スモークテストの一部として、1つのシナリオのみを実行したいと思います。したがって、最初にそのシナリオを特定し、次にシナリオの開始時に「@SmokeTest」テキストでタグ付けすることです。それを深く見てみましょう-
Step 1 −という名前のMavenプロジェクトを作成します cucumberTag。
Step 2−という名前のパッケージを作成します cucumberTag 下 src/test/java
Step 3−という名前の機能ファイルを作成します cucumberTag.feature。
ファイル内に次のテキストを書き込んで保存します。この機能ファイルには、1つだけがマークされている2つのシナリオが含まれていますSmokeTest 鬼ごっこ。
Feature −きゅうりタグ
Scenario Outline −ソーシャルネットワーキングサイトのログイン機能。
特定のユーザーがFacebookに移動します
ユーザー名を「<ユーザー名>」、パスワードを「<パスワード>」と入力すると
その後、ログインは失敗するはずです
例
| username | password |
| username1 | password1 |
| username2 | password2 |
#followingシナリオはSmokeTestとしてタグ付けされており、これが実行されるはずです。@SmokeTest
Scenario:
特定のユーザーがFacebookに移動します
ユーザー名を「<>」、パスワードを「<>」と入力すると
次に、ユーザーはログイン再試行にリダイレクトされる必要があります
Step 4 −ステップ定義ファイルを作成します。
パッケージのアウトラインを選択して右クリックします。
「新規」ファイルをクリックします。
ファイルに次のような名前を付けます cucumberTag.java
ファイル内に次のテキストを書き込んで保存します。
package cucumberTag;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import cucumber.annotation.en.Given;
import cucumber.annotation.en.Then;
import cucumber.annotation.en.When;
public class cucumberTag {
WebDriver driver = null;
@Given("^user navigates to facebook$") public void goToFacebook() { driver = new FirefoxDriver(); driver.navigate().to("https://www.facebook.com/"); } @When("^I enter Username as \"([^\"]*)\" and Password as \"([^\"]*)\"$")
public void I_enter_Username_as_and_Password_as(String arg1, String arg2) {
driver.findElement(By.id("email")).sendKeys(arg1);
driver.findElement(By.id("pass")).sendKeys(arg2);
driver.findElement(By.id("u_0_v")).click();
}
@Then("^login should be unsuccessful$") public void validateRelogin() { if(driver.getCurrentUrl().equalsIgnoreCase( "https://www.facebook.com/login.php?login_attempt=1&lwv=110")){ System.out.println("Test Pass"); } else { System.out.println("Test Failed"); } driver.close(); } @Then("^User should be redirected to login retry$")
public void loginRetry() {
if(driver.getCurrentUrl().equalsIgnoreCase(
"https://www.facebook.com/login.php?login_attempt=1&lwv=110")){
System.out.println("Test Pass");
} else {
System.out.println("Test Failed");
}
driver.close();
}
}
Step 5 −ランナークラスファイルを作成します。
次の名前のランナークラスを作成します runTest.java パッケージ内。
次のコードを記述します。
ファイルを保存します。
package cucumberTag;
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})
public class runTest { }
テストオプションを実行します。
右クリックしてオプションを選択します ‘Run as’。
JUnitテストを選択します。
このクラスファイルを実行すると、次のことがわかります。
Facebookは新しいFirefoxWebブラウザインスタンスで開きます。
ユーザー名とパスワードのフィールドには値は提供されません。
ログインをクリックします。
ログイン再試行ページが読み込まれます。
機能ファイル内でのタグの定義に制限はありません。必要に応じて、使用するタグと実行するシナリオを導き出すことができます。
タグには主に2つのタイプがあります-
Default tag−デフォルトのタグには事前定義された意味があります。例@ Dev、@ Ignore
Custom tag −カスタムタグは、タグを定義するための適切なテキストを選択するための完全な柔軟性を提供します。
タグは機能レベルで定義することもできます。機能レベルでタグを定義すると、その機能ファイル内のすべてのシナリオがそのタグを継承するようになります。シナリオの性質に応じて、単一の機能に複数のタグを使用できます。Cucumberが適切な呼び出しを見つけるたびに、特定のシナリオが実行されます。
キュウリは、タグの選択を逆にする方法も提供します。定義された25のシナリオのうち、10がスモークテストとしてマークされていることを考慮してください。回帰テストシナリオのみを実行する必要があります。
このために、JUnitランナークラスで「〜」を使用して、スモークテストシナリオを除外できます。次のようになります。
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"},
tags = {"~@SmokeTest"})
public class runTest { }
複数のタグを定義する一方で、論理または/および論理および操作を定義することもできます。
論理クラスまたはランナークラスの定義- @dev,@wip −このタグのいずれかに一致するシナリオを実行する必要があることを示しています。
論理クラスまたはランナークラスの定義- [@dev,~@wip] − これらの両方のタグに一致するシナリオを実行する必要があると書かれています。
自動化に取り組んでいる間、私たちはさまざまなシナリオに直面する可能性があります。各シナリオには、異なる意味とニーズがあります。
当初から、ソーシャルネットワーキングサイトのログイン機能の例を取り上げてきました。ここでは、2つの入力パラメーターを渡すだけでした。もう少し可能性を考えてみましょう。「新規ユーザー登録」機能はどうですか?通常、ソーシャルネットワーキングサイトに新しいユーザーを登録する際の入力パラメーターは何でしょうか。次のようなもの-
- ユーザー名
- 電子メールアドレス
- Password
- パスワード再入力
- Birthdate
- Gender
- 電話番号
Feature −新規ユーザー登録。
間違った入力を渡した後、新しいユーザー登録が失敗することを確認します。
私が新しいユーザー登録ページにいると仮定します。
ユーザー名と電子メールアドレスを電子メールアドレスとパスワードとして入力し、パスワードと生年月日と性別と電話番号を再入力すると、ユーザー登録が失敗するはずです。
一見少し乱雑に見えます。それで、そのような入力のチャンクを管理するためのより良い方法はありますか?答えは「データテーブル」です。データテーブルは、単一のタグに提供される入力のセットです。このタグには、GIVEN、WHEN、またはTHENを指定できます。
データテーブルを使用して上記のシナリオを記述してみましょう。次のようになります。
新しいユーザー登録ページを表示している場合
ページに有効なデータを入力すると
| Fields | Values |
| First Name | Tom |
| Last Name | Kenny |
| Email Address | [email protected] |
| Re-enter Email Address | [email protected] |
| Password | Password1 |
| Birthdate | 01 |
その後、ユーザー登録が成功するはずです。
例
データテーブルの例を自動化してみましょう。
Step 1 −「DataTableTest」という名前のMavenテストプロジェクトを作成します。
「ファイル」→「新規」→「その他」→「Maven」→「Mavenプロジェクト」→「次へ」に移動します。
提供する group Id (グループIDは、すべてのプロジェクトでプロジェクトを一意に識別します)。
提供する artifact Id (アーティファクトIDは、バージョンのないjarの名前です。小文字の任意の名前を選択できます)。
[完了]をクリックします。
pom.xmlを開く-
Eclipseの左側にあるパッケージエクスプローラーに移動します。
プロジェクトCucumberTestを展開します。
pom.xmlファイルを見つけます。
右クリックして、「テキストエディタで開く」オプションを選択します。
Seleniumの依存関係を追加する:これは、中央リポジトリからローカルリポジトリにダウンロードされるSeleniumjarファイルであるMavenを示します。
pom.xmlを編集モードで開き、プロジェクトタグ内に依存関係タグ(<dependencies> </ dependencies>)を作成します。
依存関係タグ内に、依存関係タグを作成します。(<依存関係> </依存関係>)。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.47.1</version>
</dependency>
Cucumber-Javaの依存関係を追加-これは、中央リポジトリからローカルリポジトリにダウンロードされるCucumberファイルであるMavenを示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
Cucumber-JUnitの依存関係を追加-これは、中央リポジトリからローカルリポジトリにダウンロードされるCucumberJUnitファイルであるMavenを示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
JUnitの依存関係を追加-これは、中央リポジトリからローカルリポジトリにダウンロードされるJUnitファイルをMavenに示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
バイナリを確認します。
pom.xmlが正常に編集されたら、保存します。
プロジェクト→クリーンに移動-数分かかります。
Step 2 −という名前のパッケージを作成します dataTable 下 src/test/java
Step 3 −フィーチャーファイルを作成します。
次の名前の機能ファイルを作成します dataTableパッケージdataTable内の.feature(詳細な手順については、シナリオの概要のセクションを参照してください)。
次のテキストを書いてください。
Feature −データテーブル
間違った入力を渡した後、新しいユーザー登録が失敗することを確認します。
Scenario:
私が新しいユーザー登録ページにいるとすると
ページに無効なデータを入力すると
| Fields | Values |
| First Name | Tom |
| Last Name | Kenny |
| Email Address | [email protected] |
| Re-enter Email Address | [email protected] |
| Password | Password1 |
| Birthdate | 01 |
その後、ユーザー登録は失敗するはずです
ファイルを保存します。
Step 4 −ステップ定義ファイルを作成します。
パッケージdataTable内に「dataTable.java」という名前のステップ定義ファイルを作成します(詳細なステップについては、シナリオの概要のセクションを参照してください)。
次のコードを記述します。
package dataTable;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
import cucumber.annotation.en.Given;
import cucumber.annotation.en.Then;
import cucumber.annotation.en.When;
import cucumber.table.DataTable;
public class stepdefinition {
WebDriver driver = null;
@Given("^I am on new user registration page$") public void goToFacebook() { //Intiate web browser instance. driver = new FirefoxDriver(); driver.navigate().to("https://www.facebook.com/"); } @When("^I enter invalid data on the page$")
public void enterData(DataTable table){
//Initialize data table
List<list> data = table.raw();
System.out.println(data.get(1).get(1));
//Enter data
driver.findElement(By.name("firstname")).sendKeys(data.get(1).get(1));
driver.findElement(By.name("lastname")).sendKeys(data.get(2).get(1));
driver.findElement(By.name("reg_email__")).sendKeys(data.get(3).get(1));
driver.findElement(By.name("reg_email_confirmation__")).
sendKeys(data.get(4).get(1));
driver.findElement(By.name("reg_passwd__")).sendKeys(data.get(5).get(1));
Select dropdownB = new Select(driver.findElement(By.name("birthday_day")));
dropdownB.selectByValue("15");
Select dropdownM = new Select(driver.findElement(By.name("birthday_month")));
dropdownM.selectByValue("6");
Select dropdownY = new Select(driver.findElement(By.name("birthday_year")));
dropdownY.selectByValue("1990");
driver.findElement(By.className("_58mt")).click();
// Click submit button driver.findElement(By.name("websubmit")).click();
}
@Then("^User registration should be unsuccessful$")
public void User_registration_should_be_unsuccessful() {
if(driver.getCurrentUrl().equalsIgnoreCase("https://www.facebook.com/")){
System.out.println("Test Pass");
} else {
System.out.println("Test Failed");
}
driver.close();
}
}
ファイルを保存します。
Step 5 −ランナークラスファイルを作成します。
パッケージ内にrunTest.javaという名前のランナークラスを作成します。
次のコードを記述します。
package dataTable;
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})
public class runTest { }
ファイルを保存します。
オプションを使用してテストを実行します
パッケージエクスプローラからrunTest.javaファイルを選択します。
右クリックして、[実行]オプションを選択します。
JUnitテストを選択します。
正常に実行されると、次のことがわかります。
Facebookのウェブサイトが読み込まれます。
データは登録ページに入力されます。
送信ボタンがクリックされます。
ホームページが表示されず、コンソールに「テストパス」と表示されます。
Comment基本的には、実行ではなく文書化を目的としたコードです。ステップ定義ファイルであろうと機能ファイルであろうと、読みやすく理解しやすくなります。したがって、ファイル内の適切な場所でコメントを使用/配置することが重要です。これは、コードのデバッグ時にも役立ちます。キュウリの機能ファイルには、どこにでもコメントを付けることができます。コメントを付けるには、ステートメントを「#」記号で始める必要があります。
プログラミング言語が異なれば、コメントを定義するための基準も異なります。キュウリがそれをどのように扱うか見てみましょう。
ステップ定義ファイル-プラットフォームとしてJavaを使用している場合は、コメントに「//」のマークを付けます。
機能ファイル-機能ファイルの場合、コメントを開始する前に#を入力する必要があります。
例
プログラムで強調表示されているテキストは、コード内のコメントを参照しています。
Feature: annotation
#This is how background can be used to eliminate duplicate steps
Background:
User navigates to Facebook
Given I am on Facebook login page
#Scenario with AND
Scenario:
When I enter username as "TOM"
And I enter password as "JERRY"
Then Login should fail
#Scenario with BUT
Scenario:
When I enter username as "TOM"
And I enter password as "JERRY"
Then Login should fail
But Relogin option should be available
きゅうり hookコードワークフローをより適切に管理できるようになり、コードの冗長性を減らすことができます。これは目に見えないステップであり、シナリオやテストを実行することができます。
この概念をよりよく理解するために、機能ファイルとステップ定義ファイルの例を見てみましょう。
指定されたステートメントで強調表示されている部分は、実際にはWebドライバーをセットアップし、Webドライバーセッションを終了する役割を果たします。したがって、実際には「与えられたステートメント」の本質とは関係がなく、テストのセットアップのようなものです。また、より広い見通しで考える場合、この機能のシナリオが複数ある場合、このWebドライバーのセットアップとクリーンアップは、指定された各ステートメントで実行されます。論理的には、セットアップとクリーンアップを1回だけ実行することは理にかなっています。
したがって、最適化をもたらすために、フックを利用することができます。多くの場合、「前」フックと「後」フックの2種類のフックを使用します。シナリオが成功または失敗した場合でも、BeforeフックとAfterフック内で定義されたメソッド/関数/コードの一部は常に実行されます。
名前が示すように、フックが実行される前は他のテストシナリオのかなり前であり、フックが実行された後はすべてのシナリオを実行した後です。
フックは、ステップ定義ファイル内でのみ定義されます。
フックの前後の例を自動化しましょう。
Step 1 − MavenプロジェクトをhookTestとして作成し、pom.xmlに必要な依存関係を追加します。
Step 2 −下にhookTestという名前のJavaパッケージを作成します src/test/java
Step 3 −という名前のステップ定義ファイルを作成します hookTest.java パッケージの下。
package hookTest;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import cucumber.annotation.en.Given;
import cucumber.annotation.en.Then;
import cucumber.annotation.en.When;
public class hookTest {
WebDriver driver = null;
@Before public void setUp(){
driver = new FirefoxDriver();
}
@Given("^user navigates to facebook$")
public void goToFacebook() {
driver.navigate().to("https://www.facebook.com/");
}
@When("^I enter Username as \"([^\"]*)\" and Password as \"([^\"]*)\"$") public void I_enter_Username_as_and_Password_as(String arg1, String arg2) { driver.findElement(By.id("email")).sendKeys(arg1); driver.findElement(By.id("pass")).sendKeys(arg2); driver.findElement(By.id("u_0_v")).click(); } @Then("^login should be unsuccessful$")
public void validateRelogin() {
if(driver.getCurrentUrl().equalsIgnoreCase(
"https://www.facebook.com/login.php?login_attempt=1&lwv=110")){
System.out.println("Test Pass");
} else {
System.out.println("Test Failed");
}
driver.close();
}
@After public void cleanUp(){
driver.close();
}
}
Step 4 −パッケージの下に「hookTest.feature」という名前の機能ファイルを作成します。
Feature −シナリオの概要。
Scenario Outline −フックテスト
特定のユーザーがFacebookに移動します
ユーザー名を「<ユーザー名>」、パスワードを「<パスワード>」と入力すると
その後、ログインは失敗するはずです
例
| username | password |
| username1 | password1 |
Step 5 −ランナークラスファイルを作成します。
パッケージdataTable内にrunTest.javaとしてランナークラスを作成します(詳細な手順については、シナリオの概要のセクションを参照してください)。
次のコードを記述します。
package hookTest;
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})
public class runTest { }
ファイルを保存します。
オプション-を使用してテストを実行します
パッケージエクスプローラからrunTest.javaファイルを選択します。
右クリックして、[実行]オプションを選択します。
JUnitテストを選択します。
したがって、これを実行すると、実行のシーケンスは次のようになります。
フックの前-テストを実行するためのWebドライバーおよびその他の前提条件を設定します。
与えられたステートメント
いつステートメント
次にステートメント
フック後-Webドライバーを閉じて、クリーンアッププロセスを実行します。
タグ付きフック
前後のフックを特定のタグのみで実行するかどうかを指定することもできます。 Example− @Before( '@ Web')。タグ論理および/またはフックの同じ概念を適用することもできます。Example − @Before(@ dev、@ wip)、@ Before(@ dev、〜@ wip)
キュウリは、ほとんどすべてのコンピューターシステムのテストに使用できます。これまで、EclipseIDEを使用してテストを実行する方法を見てきました。コマンドラインインターフェイスを介してCucumberテストを実行する方法がもう1つあります。それで、それをすることの利点は何ですか?
ターミナルからテストフレームワークを実行することには、コードに記載されている実行構成をオーバーライドするなど、独自の利点があります。
コマンドプロンプトでキュウリテストを実行するには、システム構成後に次の手順を実行します。
Step 1−という名前のMavenテストプロジェクトを作成します commandLine。
「ファイル」→「新規」→「その他」→「Maven」→「Mavenプロジェクト」→「次へ」に移動します。
グループIDを提供します(グループIDは、すべてのプロジェクトでプロジェクトを一意に識別します)。
アーティファクトIDを提供します(アーティファクトIDは、バージョンのないjarの名前です。小文字の任意の名前を選択できます)。
[完了]をクリックします。
pom.xmlを開く-
Eclipseの左側にあるパッケージエクスプローラーに移動します。
プロジェクトCucumberTestを展開します。
見つける pom.xml ファイル。
右クリックして、「テキストエディタで開く」オプションを選択します。
Seleniumの依存関係を追加する-これは、中央リポジトリからローカルリポジトリにダウンロードされるSeleniumjarファイルであるMavenを示します。
pom.xmlを編集モードで開き、プロジェクトタグ内に依存関係タグ(<dependencies> </ dependencies>)を作成します。
依存関係タグ内に、依存関係タグを作成します。(<依存関係> </依存関係>)。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.47.1</version>
</dependency>
Cucumber-Javaの依存関係を追加-これは、中央リポジトリからローカルリポジトリにダウンロードされるCucumberファイルであるMavenを示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
Cucumber-JUnitの依存関係を追加-これは、中央リポジトリからローカルリポジトリにダウンロードされるCucumberJUnitファイルであるMavenを示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
JUnitの依存関係を追加-これは、中央リポジトリからローカルリポジトリにダウンロードされるJUnitファイルをMavenに示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
バイナリを確認します。
pom.xmlが正常に編集されたら、保存します。
プロジェクト→クリーンに移動-数分かかります。
Step 2 − src / test / javaの下に「outline」という名前のパッケージを作成します
Step 3 −「commandLine.feature」という名前の機能ファイルを作成します。
パッケージのアウトラインを選択して右クリックします。
「新規」ファイルをクリックします。
ファイルに「commandLine.feature」などの名前を付けます
ファイル内に以下のテキストを書き込んで保存します。
Feature −シナリオの概要
Scenario Outline −ソーシャルネットワーキングサイトのログイン機能。
ユーザーがFacebookに移動するとします
ユーザー名を「<ユーザー名>」、パスワードを「<パスワード>」と入力すると
その後、ログインは失敗するはずです
例
| username | password |
| username1 | password1 |
| username2 | password2 |
Note−ここで、注釈の例は、シナリオの実行時に提供される入力の範囲を示しています。テストシナリオは、提供された入力ごとに実行されます。したがって、この例では、テストシナリオが3回実行されます。
Step 4 −ステップ定義ファイルを作成します。
パッケージのアウトラインを選択して右クリックします。
「新規」ファイルをクリックします。
ファイルに次の名前を付けます commandLine.java
ファイル内に次のテキストを書き込んで保存します。
package Outline;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import cucumber.annotation.en.Given;
import cucumber.annotation.en.Then; i
import cucumber.annotation.en.When;
public class stepdefinition {
WebDriver driver = null;
@Given("^user navigates to facebook$") public void goToFacebook() { driver = new FirefoxDriver(); driver.navigate().to("https://www.facebook.com/"); } @When("^I enter Username as \"([^\"]*)\" and Password as \"([^\"]*)\"$")
public void I_enter_Username_as_and_Password_as(String arg1, String arg2) {
driver.findElement(By.id("email")).sendKeys(arg1);
driver.findElement(By.id("pass")).sendKeys(arg2);
driver.findElement(By.id("u_0_v")).click();
}
@Then("^login should be unsuccessful$")
public void validateRelogin() {
if(driver.getCurrentUrl().equalsIgnoreCase(
"https://www.facebook.com/login.php?login_attempt=1&lwv=110")){
System.out.println("Test Pass");
} else {
System.out.println("Test Failed");
}
driver.close();
}
}
Note−コードでは、2つの入力引数を持つ関数を定義する必要があります。1つはユーザー名、もう1つはパスワード用です。したがって、サンプルタグで提供される入力のセットごとに、GIVEN、WHEN、およびTHENのセットが実行されます。
Step 5 −ランナークラスファイルを作成します。
パッケージのアウトラインを選択して右クリックします。
「新規」ファイルをクリックします。
ファイルに次のような名前を付けます。 runTest.java
ファイル内に次のテキストを書き込んで保存します。
package Outline;
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})
public class runTest { }
コマンドプロンプトを開きます。
このパッケージ「commandLine」が存在するディレクトリに移動します。e:\ Workspace \ LoginTest \ src> cd test \ java
コマンドmvntestを実行します。機能ファイルに記述されているすべてのシナリオが実行されたことがわかります(エラーがない場合)。最後に、下部に次の情報があります。
結果
This describes the total test run, along with failure if any.
前のコマンドは、JUnitRunnerクラスで説明されているようにすべてを実行します。ただし、ランナーに記載されている構成をオーバーライドする場合は、以下にいくつかの例を示します。
次に、コマンドプロンプトでコマンドmvn test --Dcucumber.options = "-help"を実行します。これを実行すると、使用可能なすべてのオプションが出力されます。
特定のタグのみを実行するには、コマンドプロンプトでコマンドmvn test -Dcucumber.options = "-tags @ SmokeTest"を実行します。@SmokeTestでマークされたタグのみを実行します。
結果の形式を変更するには、コマンドプロンプトでコマンドE:\ Workspace \ LoginTest> mvn test -Dcucumber.options = "-plugin junit:target /cucumber-junit-report.xml"を実行します。レポートを変更します。 JUnitレポートジェネレーターへのフォーマット。
Cucumber JUnit Runnerの説明を始める前に、Junitとは何かを理解することが重要です。 JUnitは、Javaプログラミング言語用のオープンソースの単体テストフレームワークです。JUnitは、テスト駆動開発の開発において重要であり、SUnitに由来するxUnitとして総称される単体テストフレームワークのファミリーの1つです。
JUnitを使用する利点
ユニットには Graphical User Interface (GUI)、ソースコードの記述とテストを迅速かつ簡単に可能にします。
JUnitを使用すると、開発者はテストスイートを段階的に構築して、進行状況を測定し、意図しない副作用を検出できます。
テストは継続的に実行できます。
JUnitは、通常は緑色ですが、テストが失敗すると赤色に変わるバーにテストの進行状況を表示します。
これまで、JUnitを使用する利点を見てきましたが、今それについて議論している理由は、Cucumberフレームワークです。Cucumberは、技術者以外の人が製品のテストケースを定義する方法を提供している一方で、そのようなテストケースをスムーズかつタイムリーに実行することを期待しています。
JUnitは、これら2つの間のブリッジとして機能します。したがって、実行の流れは次のようになります。
利害関係者は機能ファイルを書き留めます。
それに応じてステップ定義ファイルが作成されます。
一連のテストケースを実行するには、JUnitランナークラスを指定します。
JUnitランナークラスを実行したら-
Gherkin機能ファイルを解析します。
フィーチャーファイルのステートメントに従って、ステップ定義ファイルに記述された関数を実行します。
JUnitはテストケースの結果を結合します。
指定された形式(html / JSONの場合もあります)でテストレポートを作成します。
ここで重要な点は、これらすべてのことを実行するようにJUnitを構成する方法です。手順は次のとおりです-
Step 1 −Javaをインストールします。
リンクからjdkとjreをダウンロードします http://www.oracle.com/technetwork/java/javase/downloads/index.html
使用許諾契約に同意します。
JDKとJREをインストールします。
次のスクリーンショットに示すように、環境変数を設定します。
Step 2 −Eclipseをインストールします。
Why we need− Eclipseは統合開発環境(IDE)です。これには、基本ワークスペースと、環境をカスタマイズするための拡張可能なプラグインシステムが含まれています。
How to install −
マシンにJAVAがインストールされていることを確認してください。
Eclipseをからダウンロードする http://www.eclipse.org/downloads
解凍するとEclipseがインストールされます。
Step 3 −Mavenをインストールします。
Why we need− Mavenは、主にJavaプロジェクトに使用されるビルド自動化ツールです。これは、ソースコードの生成、コードのコンパイル、jarへのコードのパッケージ化などのアクティビティを実行するための共通プラットフォームを提供します。また、後でソフトウェアバージョンのいずれかが変更された場合、Mavenはそれに応じてテストプロジェクトを変更する簡単な方法を提供します。
How to install −
Mavenをダウンロード- https://maven.apache.org/download.cgi
ファイルを解凍し、場所を覚えておいてください。
次のスクリーンショットに示すように、環境変数MAVEN_HOMEを作成します。
次のスクリーンショットに示すように、Path変数を編集し、Mavenを含めます。
EclipseからMAVENプラグインをダウンロードします。
Eclipseを開きます。
ヘルプ→EclipseMarketplace→Searchmaven→MavenIntegration forEclipse→INSTALLに移動しました。
Step 4 −Mavenでキュウリを構成する方法
EclipseでMavenプロジェクトを作成します。
「ファイル」→「新規」→「その他」→「Maven」→「Mavenプロジェクト」→「次へ」に移動します。
グループIDを提供します(グループIDは、すべてのプロジェクトでプロジェクトを一意に識別します)。
アーティファクトIDを提供します(アーティファクトIDは、バージョンのないjarの名前です。小文字の任意の名前を選択できます)。
[完了]をクリックします。
pom.xmlを開きます
Eclipseの左側にあるパッケージエクスプローラーに移動します。
プロジェクトCucumberTestを展開します。
pom.xmlファイルを見つけます。
右クリックして、「テキストエディタで開く」オプションを選択します。
Seleniumの依存関係を追加する-これは、中央リポジトリからローカルリポジトリにダウンロードされるSeleniumjarファイルであるMavenを示します。
pom.xmlを編集モードで開き、プロジェクトタグ内に依存関係タグ(<dependencies> </ dependencies>)を作成します。
依存関係タグ内に、依存関係タグを作成します。(<依存関係> </依存関係>)。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.47.1</version>
</dependency>
Cucumber-Javaの依存関係を追加-これは、中央リポジトリからローカルリポジトリにダウンロードされるCucumberファイルであるMavenを示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
Cucumber-JUnitの依存関係を追加します。これは、中央リポジトリからローカルリポジトリにダウンロードされるCucumberJUnitファイルであるMavenを示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
JUnitの依存関係を追加-これは、中央リポジトリからローカルリポジトリにダウンロードされるJUnitファイルをMavenに示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
バイナリを確認する
一度 pom.xml 正常に編集されたら、保存します。
プロジェクト→クリーンに移動-数分かかります。
その後、次のスクリーンショットのようなMavenリポジトリを表示できるようになります。
Step 5 −機能ファイルを作成します(後で説明します)。
Step 6 −ステップ定義ファイルを作成します(後で説明します)。
Step 7 −テストを実行するためのJUnitランナーを作成します(後で説明します)。
製品の安定性を理解するためにテストを実行するため、手動テストでも自動テストでも、製品の安定性を表す簡潔なレポートを生成することが非常に重要です。したがって、Cucumberを使用してテストシナリオを自動化している間、Cucumberテストレポートをどのように生成できるかを知ることが不可欠です。CucumberはBDDフレームワークであることがわかっているため、派手なレポートメカニズムはありません。
これを実現するには、CucumberをAnt / Junitなどの他のオープンソースツールと統合する必要があります。ここでは、Java言語をサポートしているため、JUnitの例をさらに取り上げます。
利用可能で使いやすいさまざまなレポート形式の詳細を見てみましょう-
プリティフォーマット(HTMLレポート)
Pretty Formatは、CucumberテストレポートをHTML形式(HTMLファイル)で生成します。これは最も読みやすいレポート形式です。フィーチャファイルと同じ方法でレポートを生成するため、トレースも簡単になります。また、テスト実行後にこのレポートを配置する場所を指定することもできます。それは-である可能性があります
Local Directory −テストを実行するマシンの任意のローカルディレクトリとして、レポートのターゲットディレクトリを指定できます。
Server Directory−また、パブリックにアクセス可能なサーバー上の任意のディレクトリとしてターゲットディレクトリを指定するための規定があります。これは通常、クライアント/利害関係者に任意の時点でのテスト結果を表示させたい場合に役立ちます。
例
きれいなフォーマットの例を自動化しましょう。
Step 1 −という名前のMavenプロジェクトを作成します cucumberReport Eclipseで。
Step 2 −という名前のパッケージを作成します CucumberReport 下 src/test/java
Step 3 −という名前の機能ファイルを作成します cucumberReport.feature
ファイル内に次のテキストを書き込んで保存します。
Feature −キュウリレポート
#これは、合格テストケースのテスト結果を確認するためのものです
Scenario: ログイン機能があります
ブラウザを開いたので
Facebookのウェブサイトを開くと
次に、ログインボタンが存在する必要があります
#これは、失敗したテストケースのテスト結果を確認するためのものです
Scenario: パスワードを忘れた
ブラウザを開いたとすると
Facebookのウェブサイトを開くと
次に、パスワードを忘れた場合のリンクが存在する必要があります
Note−ここでは、最初のシナリオは成功しますが、2番目のシナリオは失敗します。合格と不合格のレポートがどのように見えるかを確認できるようにします。
Step 4 −ステップ定義ファイルを作成します。
パッケージのアウトラインを選択して右クリックします。
「新規」ファイルをクリックします。
ファイル名を次のように指定します cucumberReport.java
ファイル内に次のテキストを書き込んで保存します。
package CucumberReport;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import cucumber.annotation.en.Given;
import cucumber.annotation.en.Then;
import cucumber.annotation.en.When;
public class cucumberReport {
WebDriver driver = null;
@Given("^I have open the browser$")
public void openBrowser() {
driver = new FirefoxDriver();
}
@When("^I open Facebook website$") public void goToFacebook() { driver.navigate().to("https://www.facebook.com/"); } @Then("^Login button should exits$")
public void loginButton() {
if(driver.findElement(By.id("u_0_v")).isEnabled()) {
System.out.println("Test 1 Pass");
} else {
System.out.println("Test 1 Fail");
}
}
@Then("^Forgot password link should exist$")
public void forgotPWD() {
if(driver.findElement(By.id("")).isEnabled()) {
System.out.println("Test 1 Pass");
} else {
System.out.println("Test 1 Fail");
}
}
}
Step 5 −ランナークラスファイルを作成します。
名前の付いたランナークラスを作成します runTest.java パッケージ内。
次のコードを記述します。ファイルを保存します。
package CucumberReport;
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@Cucumber.Options(
format = {"pretty", "html:target/Destination"} )
//Specifying pretty as a format option ensure that HTML report will be generated.
//When we specify html:target/Destination - It will generate the HTML report
inside the Destination folder, in the target folder of the maven project.
public class runTest { }
オプションを使用してテストを実行します
選択する runTest.java パッケージエクスプローラーからのファイル。
右クリックしてオプションを選択し、 Run as。
JUnitテストを選択します。
このクラスファイルを実行すると、次のことがわかります。
両方のシナリオが1つずつ実行されます。
Destinationという名前のフォルダがターゲットディレクトリ内に作成されます。
レポートは「Index.html」という名前で表示されます。
WebブラウザでIndex.htmlを開きます。
次の画像に記載されているレポートが表示されます-
失敗したシナリオの色を正確に強調します。さらに、そのシナリオで失敗したステップのハイライトが表示されます。これにより、デバッグが非常に簡単になります。
JSONレポート
これまでに、HTMLレポートがいかに簡単であるかを見てきました。ただし、このレポート情報を他のアプリケーションに渡したい場合は、HTMLレポートの場合は注意が必要です。別のレポート形式が必要になります。JSON-Javaスクリプトオブジェクト表記は、Cucumberテストレポートを生成するためのもう1つの形式です。JSONは、テキスト形式で保存された多くの情報を含むオブジェクトです。JSONレポートは、テーブルに異なる値をもたらします。JSONレポートは、異なるサーバー間で転送される情報のペイロードとしても使用できます。また、Webページとして表示することもできます。一言で言えば、JSONレポートは他のアプリケーションで使用できます。
What is payload information?インターネットを介してデータを送信する場合、送信される各ユニットには、ヘッダー情報と実際に送信されるデータの両方が含まれます。ヘッダーはパケットの送信元と宛先を識別し、実際のデータはペイロードと呼ばれます。JSONレポートを生成するには、ランナーファイルに変更を加えるだけです。
ランナーファイルのフォーマットオプションを次のように変更します。
package CucumberReport;
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@Cucumber.Options( format={"json:target/Destination/cucumber.json"})
//When we specify json:target/Destination/cucumber.json - It will generate the JSON
report inside the Destination folder, in the target folder of the maven project.
public class runTest {}
オプション-を使用してテストを実行します
選択する runTest.java パッケージエクスプローラーからのファイル。
右クリックしてオプションを選択します Run as。
JUnitテストを選択します。
このクラスファイルを実行すると、次のことがわかります。
両方のシナリオが1つずつ実行されます。
レポートはそこに名前が付けられます cucumber.json (ランナークラスで提供される)。
開いた cucumber.json テキストエディタでファイル。
改行を配置した後、次のスクリーンショットに記載されているレポートが表示されます-
Note − JSONは、HTMLレポート形式と比較して読みにくくなっています。
不明な理由により、テストが失敗する可能性が非常に高くなります。障害の原因を特定して修正することは非常に重要です。このプロセスは、debugging。以下は、Cucumberのデバッグを少し簡単にするいくつかのヒントとコツです。
デバッグオプションはEclipseで利用できます。ブレークポイントを配置します。ファイルをクリックし、次の手順を使用してデバッグします-
Step 1 −手動ブレークポイントをRubyステップ定義ファイルに配置します。
例
require 'ruby-debug'
Then /^the process should exit cleanly$/ do
breakpoint
assert @exited_cleanly, "Process did not exit cleanly: #{@stdout}"
end
Step 2 −ステップ定義ファイルで、次のような個別のデバッグステップを定義することもできます。
Then /^I debug$/ do
breakpoint
0
end
Step 3 − WebratRailsを使用したキュウリテストのデフォルトツールです。リンクをクリックしたり、フォームを入力して送信したりすることができます。
たとえば、何かをクリックしようとしても、そこにない場合があります。HTMLの大きな塊がスローバックされ、それが正確に何を意味するのかを理解することは、実際のドラッグになる可能性があります。
save_and_open_page
Webratには、現在のHTMLをキャプチャして保存し、ブラウザで開くメソッドsave_and_open_pageが用意されています。非常に便利です。
When /^I follow "(.*)"$/ do |link|
save_and_open_page
click_link(link)
end
JavaでCucumberテストを実行するには、次の手順に従います。
Step 1 − Javaをインストールする−
jdkとjreをからダウンロード
http://www.oracle.com/technetwork/java/javase/downloads/index.html
使用許諾契約に同意します。
JDKとJREをインストールします。
次の図に示すように、環境変数を設定します。
Step 2 − EclipseIDEをインストールします−
マシンにJAVAがインストールされていることを確認してください。
Eclipseをからダウンロードする https://eclipse.org/downloads/
解凍してEclipseをインストールします。
Step 3 − Mavenをインストールします−
Mavenをダウンロード-https://maven.apache.org/download.cgi
ファイルを解凍し、場所を覚えておいてください。
次の図に示すように、環境変数MAVEN_HOMEを作成します。
Path変数を編集し、Mavenを含めます。
EclipseからMAVENプラグインをダウンロードする
Eclipseを開きます。
ヘルプ→EclipseMarketplace→Searchmaven→MavenIntegration forEclipse→INSTALLに移動
Step 4 −MavenでCucumberを構成します。
Mavenプロジェクトを作成します。
「ファイル」→「新規」→「その他」→「Maven」→「Mavenプロジェクト」→「次へ」に移動します。
グループIDを提供します(グループIDは、すべてのプロジェクトでプロジェクトを一意に識別します)。
アーティファクトIDを提供します(アーティファクトIDは、バージョンのないjarの名前です。小文字の任意の名前を選択できます)。
[完了]をクリックします。
Step 5 − pom.xmlを開きます−
Eclipseの左側にあるパッケージエクスプローラーに移動します。
プロジェクトCucumberTestを展開します。
pom.xmlファイルを見つけます。
右クリックして、「テキストエディタで開く」オプションを選択します。
Step 6 − Seleniumの依存関係を追加します−これは、中央リポジトリからローカルリポジトリにダウンロードされるSeleniumjarファイルであるMavenを示します。
pom.xmlを編集モードで開き、プロジェクトタグ内に依存関係タグ(<dependencies> </ dependencies>)を作成します。
依存関係タグ内に、依存関係タグを作成します。(<依存関係> </依存関係>)
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.47.1</version>
</dependency>
Step 7 − Cucumber-Javaの依存関係を追加します。−これは、中央リポジトリからローカルリポジトリにダウンロードされるCucumberファイルであるMavenを示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
Step 8 − Cucumber-JUnitの依存関係を追加します。−これは、中央リポジトリからローカルリポジトリにダウンロードされるCucumberJUnitファイルであるMavenを示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
Step 9− JUnitの依存関係を追加します−これは、中央リポジトリからローカルリポジトリにダウンロードされるJUnitファイルをMavenに示します。
もう1つの依存関係タグを作成します。
依存関係タグ内に次の情報を入力します。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
Step 10 −バイナリを確認します。
pom.xmlが正常に編集されたら、保存します。
プロジェクト→クリーンに移動-数分かかります。
Mavenリポジトリを表示できるようになります。
Step 11 −パッケージを作成する src/test/java 名前は cucumberJava。
Step 12 −フィーチャーファイルを作成する
パッケージのアウトラインを選択して右クリックします。
「新規」ファイルをクリックします。
ファイルに次のような名前を付けます cucumberJava.feature。
ファイル内に次のテキストを書き込んで保存します。
Feature: CucumberJava
Scenario: ログイン機能があります
ブラウザを開いたとすると
Facebookのウェブサイトを開くと
次に、ログインボタンが終了します
Step 13 −ステップ定義ファイルを作成します−
パッケージのアウトラインを選択して右クリックします。
「新規」ファイルをクリックします。
ファイル名に次のような名前を付けます annotation.java。
ファイル内に次のテキストを書き込んで保存します。
package CucumberJava;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import cucumber.annotation.en.Given;
import cucumber.annotation.en.Then;
import cucumber.annotation.en.When;
public class cucumberJava {
WebDriver driver = null;
@Given("^I have open the browser$") public void openBrowser() { driver = new FirefoxDriver(); } @When("^I open Facebook website$")
public void goToFacebook() {
driver.navigate().to("https://www.facebook.com/");
}
@Then("^Login button should exits$")
public void loginButton() {
if(driver.findElement(By.id("u_0_v")).isEnabled()) {
System.out.println("Test 1 Pass");
} else {
System.out.println("Test 1 Fail");
}
driver.close();
}
}
Step 14 −ランナークラスファイルを作成します。
パッケージのアウトラインを選択して右クリックします。
「新規」ファイルをクリックします。
ファイル名を次のように指定します runTest.java。
ファイル内に次のテキストを書き込んで保存します。
package cucumberJava;
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})
public class runTest {
}
Step 15 −オプションを使用してテストを実行します−
パッケージエクスプローラからrunTest.javaファイルを選択します。
右クリックしてオプションを選択し、 Run as。
JUnitテストを選択します。
実行時に次のことを確認します-
FirefoxWebブラウザのインスタンスが開きます。
ブラウザでFacebookのログインページが開きます。
ログインボタンを検出します。
ブラウザが閉じます。
JUnitウィンドウに、テスト実行の成功を示す緑色のチェックマークが付いたシナリオが表示されます。
Ruby言語には次の利点があります-
わかりやすいです。
これはオブジェクト指向言語です。
これは強力なクラスライブラリです。
大規模なオンラインサポートがあります。
以下は、CucumberがRubyとどのように連携するかを段階的に説明したものです。
Step 1 −Rubyをインストールします。
RubyInstallerダウンロードページに移動します。
オペレーティングシステムに最適なバージョン(つまり、32ビットまたは64ビット)をダウンロードします。
ダウンロードしたexeファイルを実行します。
インストール中に、次の図に示すように、「Rubyを追加…」および「関連付け…」オプションにチェックマークを付けます。
Step 2 −開発キットをダウンロードして解凍します。
RubyInstallerダウンロードページに移動します。
オペレーティングシステムに最適なDevkitバージョン(つまり、32ビットまたは64ビット)をダウンロードします。
c:\ Ruby \ Devkitフォルダーにあるdevkitを抽出します。
コマンドプロンプトを開きます。
Ruby devkit内で、次のコマンドを実行します。
C:\Ruby\devkit> ruby dk.rb init
C:\Ruby\devkit> ruby dk.rb install
Step 3 −Cucumberおよびその他のRubygemをインストールします。
Cucumberをインストールするには、最初に現在のgemセットアップを更新します
C:\Users\Admin> gem update –system
次に、CucumberWebテストに必要なgemをインストールします。
C:\Users\Admin> gem install --no-ri --no-rdoc rspec
C:\Users\Admin> gem install --no-ri --no-rdoc win32console
C:\Users\Admin> gem install --no-ri --no-rdoc watir-webdriver
C:\Users\Admin> gem install --no-ri --no-rdoc cucumber
キュウリを実行します
C:\Users\Admin\Documents>cucumber –init
C:\Users\Admin\Documents>cucumber
Step 4 − IDEのインストール–KOMODO。
ページに移動 http://www.activestate.com/komodo-ide/downloads
無料トライアルインストーラーをダウンロードします。
ダウンロードしたexeファイルをダブルクリックします。
インストール手順に従います。
インストールを終了し、IDEを開きます。
Step 5 −インストール Watir −コマンドプロンプトに移動し、次のコマンドを実行します。 "gem install watir"
Step 6 −インストール rspec −コマンドプロンプトに移動し、次のコマンドを実行します。 "gem install rspec"
Step 7 −フィーチャーファイルを作成します。
KOMODOエディターを開きます。
新しいファイルのアイコンをクリックします。
次のテキストを書いてください。
Feature: ユーザーは、Googleを使用してコンテンツを検索できる必要があります。
Scenario: 用語を検索します。
私が入ったことを考えると "watir" クエリに。
クリックすると "search"
その後、私はいくつかの結果を見る必要があります
クリック save アイコン。
CucumberRuby.featureという名前を付けます。
たとえば、任意のフォルダを選択します。 “e:\WithRuby”
ファイルを保存します。
Step 8 −ステップ定義ファイルを作成します。
KOMODOエディターを開きます。
「新規」ファイルアイコンをクリックします。
次のコードを記述します。
require "watir-webdriver"
require "rspec/expectations"
Given /^I have entered "([^"]*)" into the query$/ do |term|
@browser ||= Watir::Browser.new :firefox
@browser.goto "google.com"
@browser.text_field(:name => "q").set term
end
When /^I click "([^"]*)"$/ do |button_name| @browser.button.click end Then /^I should see some results$/ do
@browser.div(:id => "resultStats").wait_until_present
@browser.div(:id => "resultStats").should exist
@browser.close
End
保存アイコンをクリックします。
名前を付けます CucumberRuby.rb
たとえば、任意のフォルダを選択します。 “e:\WithRuby”
ファイルを保存します。
Step 9 −テストファイルを作成します。
KOMODOエディターを開きます。
「新規」ファイルアイコンをクリックします。
次のコードを記述します。
require "rubygems"
require "test/unit"
require "watir-webdriver"
class GoogleSearch < Test::Unit::TestCase
def setup
@browser ||= Watir::Browser.new :firefox
end
def teardown
@browser.close
end
def test_search
@browser.goto "google.com"
@browser.text_field(:name => "q").set "watir"
@browser.button.click
@browser.div(:id => "resultStats").wait_until_present assert
@browser.title == "watir - Google Search"
end
end
保存アイコンをクリックします。
ファイルに次の名前を付けます test.rb たとえば、「e:\ WithRuby」などのフォルダを選択します。
ファイルを保存します。
Step 10 −機能ファイルを実行します。
コマンドプロンプトに移動します。
ディレクトリに移動 e:\WithRuby
次のコマンドを実行します。
e:\With Ruby>ruby test.rb
実行時に次のことを確認します-
Webブラウザインスタンスが開きます。
Google.comのウェブページが読み込まれます。
テキストを検索 watir 入力されます。
検索ボタンが配置されます。
検索結果はウェブページに表示されます。
ブラウザインスタンスが閉じられます。