Cucumber-quick-guide
キュウリ-概要
ソフトウェアテストをより有効に活用するために、今日の組織は一歩前進しています。 開発中の重要な受け入れテストシナリオを実装します。 このアプローチは、一般的に Behavior Driven Development (BDD)として知られています。
Behavior Driven Developmentは、開発者と顧客の両方の観点からテストスクリプトを作成する機会を提供します。 そのため、最初は、開発者、プロジェクトマネージャー、QA、ユーザー受け入れテスター、製品所有者(株主)が集まり、このソフトウェア/アプリケーションを成功させるためにどのテストシナリオをパスするかについてブレインストーミングを行います。 このようにして、一連のテストシナリオを考え出します。 これらのテストスクリプトはすべて単純な英語で記述されているため、ドキュメント作成の目的にも役立ちます。
例
ユーザー認証機能を開発している場合、次のようないくつかの主要なテストシナリオが成功する可能性があるため、合格する必要があります。
- ユーザーは、正しいユーザー名と正しいパスワードでログインできる必要があります。
- ユーザーは、間違ったユーザー名と正しいパスワードでログインできないはずです。
- ユーザーは、正しいユーザー名と間違ったパスワードでログインできないはずです。
使い方
コードの準備が整うまでに、テストスクリプトも準備できます。 コードは、BDDで定義されたテストスクリプトに合格する必要があります。 発生しない場合は、コードのリファクタリングが必要になります。 定義されたテストスクリプトが正常に実行された後にのみ、コードがフリーズします。
これは非常に単純な概念ですが、この概念を実装するために必要なものです。 答えは、行動駆動開発(BDD)フレームワークです。 Cucumberはそのようなオープンソースツールの1つであり、動作駆動型開発をサポートします。 より正確に言うと、Cucumberはテスト用フレームワークとして定義でき、単純な英語のテキストで駆動されます。 ドキュメント、自動化されたテスト、開発支援として機能します。
それで、キュウリは何をしますか? それは次の手順で説明することができます-
Cucumberは、機能ファイル(後で導入されます)のプレーンな英語テキスト(Language Gherkin-このチュートリアルの後半で導入される)で書かれたコードを読み取ります。
ステップ定義(コードファイル-チュートリアルの後半で詳細を説明)で各ステップの正確な一致を見つけます。
実行されるコードは、 Selenium、Ruby on Rails などのさまざまなソフトウェアフレームワークにすることができます。 すべてのBDDフレームワークツールがすべてのツールをサポートしているわけではありません。
これが、 JBehave、JDave、Easyb などのような他のフレームワークに対するCucumberの人気の理由になっています。
Cucumberは、次のような十数種類の異なるソフトウェアプラットフォームをサポートしています-
- Ruby on Rails
- セレン
- PicoContainer
- 春のフレームワーク
- ワティル
他のツールに対するキュウリの利点
- Cucumberは、Java.netやRubyなどのさまざまな言語をサポートしています。
- これは、ビジネス言語と技術言語の橋渡しとして機能します。 これは、平易な英語のテキストでテストケースを作成することで実現できます。
- これにより、コードの知識がなくてもテストスクリプトを記述できます。また、プログラマ以外の人も関与できます。
- 他のツールとは異なり、エンドツーエンドのテストフレームワークの目的を果たします。
- シンプルなテストスクリプトアーキテクチャにより、Cucumberはコードの再利用性を提供します。
キュウリ-環境
この章では、WindowsマシンでのSelenium WebDriverとJavaを使用したCucumberの環境設定について説明します。
環境設定の前提条件
以下は、セットアップに必要な前提条件です-
Java
必要な理由-Javaは堅牢なプログラミング言語です。 Cucumberは実行のためにJavaプラットフォームをサポートします。
インストール方法-
- ステップ2 *-ライセンス契約に同意します。
- ステップ3 *-JDKおよびJREをインストールします。
- ステップ4 *-次のスクリーンショットに示すように環境変数を設定します。
エクリプス
必要な理由-Eclipseは統合開発環境(IDE)です。 環境をカスタマイズするためのベースワークスペースと拡張可能なプラグインシステムが含まれています。
インストール方法-
- ステップ1 *-JAVAがマシンにインストールされていることを確認します。
- ステップ3 *-解凍してEclipseをインストールします。
メーベン
必要な理由-Mavenは、主にJavaプロジェクトに使用されるビルド自動化ツールです。 ソースコードの生成、コードのコンパイル、jarへのコードのパッケージ化などのアクティビティを実行するための共通プラットフォームを提供します。 後でソフトウェアバージョンのいずれかが変更された場合、Mavenはテストプロジェクトを適宜変更する簡単な方法を提供します。
インストール方法-
- ステップ1 *-次のリンクからMavenをダウンロードします-https://maven.apache.org/download.cgi
- ステップ2 *-ファイルを解凍し、場所を覚えておいてください。
- ステップ3 *-次のスクリーンショットに示すように、環境変数MAVEN_HOMEを作成します。
- ステップ4 *-次のスクリーンショットに示すように、パス変数を編集し、Mavenを含めます。
- ステップ5 *-EclipseからMAVENプラグインをダウンロードします。
- ステップ6 *-Eclipseを開きます。
- ステップ7 *-[ヘルプ]→[Eclipse Marketplace]→[Mavenの検索]→[Maven for Eclipse for Eclipse]→[インストール]に移動します。
Mavenでキュウリを構成する
- ステップ1 *-Mavenプロジェクトを作成します。
- ファイル→新規→その他→Maven→Mavenプロジェクト→次へに移動します。
- グループIDを指定します(グループIDは、すべてのプロジェクトでプロジェクトを一意に識別します)。
- アーティファクトIDを提供します(アーティファクトIDは、バージョンのないjarの名前です。 小文字の任意の名前を選択できます)。 完了をクリックします。
- ステップ2 *-pom.xmlを開きます。
- Eclipseの左側にあるパッケージエクスプローラーに移動します。
- プロジェクト CucumberTest を展開します。
- pom.xml ファイルを見つけます。
- 右クリックしてオプションを選択し、「テキストエディター」で開きます。
- ステップ3 *-seleniumの依存関係を追加:これは、MavenがどのSelenium jarファイルを中央リポジトリからローカルリポジトリにダウンロードするかを示します。
- pom.xml を開いて編集モードにし、プロジェクトタグ内に依存関係タグ(<dependencies> </dependencies>)を作成します。
- 依存関係タグ内に、依存関係タグ(<dependency> </dependency>)を作成します。
- 依存関係タグ内に次の情報を提供します。
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.47.1</version>
</dependency>
- ステップ4 *-Cucumber-Javaの依存関係を追加:これはMavenを示します。どのCucumberファイルが中央リポジトリからローカルリポジトリにダウンロードされるかを示します。
- もう1つの依存関係タグを作成します。
- 依存関係タグ内に次の情報を提供します
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
- ステップ5 *-Cucumber-JUnitの依存関係を追加:これはMavenを示します。どのCucumber JUnitファイルが中央リポジトリからローカルリポジトリにダウンロードされます。
- もう1つの依存関係タグを作成します。
- 依存関係タグ内に次の情報を提供します
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
- ステップ6 *-JUnitの依存関係を追加:これはMavenを示し、どのJUnitファイルが中央リポジトリからローカルリポジトリにダウンロードされるかを示します。
- もう1つの依存関係タグを作成します。
- 依存関係タグ内に次の情報を提供します。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
- ステップ7 *-バイナリを確認します。
- pom.xml が正常に編集されたら、保存します。
- [プロジェクト]→[クリーン]に移動します-数分かかります。
次のスクリーンショットに示すように、Mavenリポジトリを表示できます。
- 機能ファイルを作成します(後で説明します)。
- ステップ定義ファイルを作成します(後で説明します)。
- JUnitランナーを作成して、テストを実行します(後で説明します)。
きゅうり-ガーキン
これまでのところ、キュウリとそれが何をするのか理解しています。 機能ファイルで定義されているテストスクリプトを実行します(以降の章で説明します)。 この実行可能な機能ファイルが記述されている言語は、 Gherkin として知られています。 Gherkinは英語のプレーンテキスト言語で、ツール-Cucumberがテストスクリプトを解釈して実行するのに役立ちます。
Cucumberがシンプルな英語のテキストをサポートしているのに、なぜ別の言語であるGherkinsが必要なのか、何度も議論されてきたと思うかもしれません。 答えは、行動駆動型開発の概念にあります。
前に説明したように、BDDにはテストスクリプトの作成中にさまざまな候補が組み込まれていることがわかりました。 開発の見込み、ビジネスの見込みなどです。 ただし、テストスクリプトを開発する際には、開発者、プロジェクトマネージャー、製品所有者、テスターなどのさまざまなコミュニティの人々が必要です。 これらの人々は同じカテゴリに属していないため、テストスクリプトの概念化に共通言語を使用しないリスクがあります。 これがガーキンの進化のポイントでした。
Gherkinは、英語のテキストで共通のキーワードセットを提供します。これは、さまざまなコミュニティの人々が使用できますが、テストスクリプトの形式で同じ出力を取得できます。
例
機能-ソーシャルネットワーキングサイトのログイン機能。 指定*私はソーシャルネットワーキングサイトのユーザーです。 *When username1としてユーザー名を入力します。 そして *password1としてパスワードを入力します。 その後*サイトのホームページにリダイレクトされるはずです。
上記のシナリオは、ユーザーログインと呼ばれる機能です。 太字で強調表示されている単語はすべてガーキンのキーワードです。
他のいくつかのキーワードの例-
- バックグラウンド
- But
- *
- シナリオ概要
- 例
Gherkinは、ステップ定義ファイルに記述されている各ステップを解析します(後で説明します)。 したがって、機能ファイルとステップ定義ファイル(後で説明します)に記載されている手順は一致する必要があります。
Gherkin jarは、Package ExplorerのMaven Dependencyフォルダーにあります。 他のキュウリの瓶と一緒にダウンロードされます。 次のスクリーンショットのようになります-
Gherkinのもう1つの興味深い事実は、英語だけでなく、フランス語、フィンランド語、インドネシア語、ハンガリー語、ヒンディー語、ウルドゥー語、グジャラート語など、他の多くのネイティブ言語をサポートしていることです。
キュウリ-機能
- 機能*は、プロジェクトのスタンドアロンユニットまたは機能として定義できます。 ソーシャルネットワーキングサイトの非常に一般的な例を見てみましょう。 この製品/プロジェクトの機能はどのように見えますか? いくつかの基本的な機能を決定することができます-
- ソーシャルネットワーキングサイトからユーザーを作成および削除します。
- ソーシャルネットワーキングサイトのユーザーログイン機能。
- ソーシャルネットワーキングサイトで写真やビデオを共有する。
- 友達リクエストを送信します。
- ログアウト。
今では、テスト対象の製品の各独立した機能が、Cucumberについて話すときの機能と呼ばれることは明らかです。 後でテストを開始するときのベストプラクティスです。テストスクリプトを作成する前に、テストする機能を決定する必要があります。
通常、機能には、その機能についてテストするシナリオのリストが含まれています。 機能、テストされる機能およびシナリオに関する説明を保存するファイルは、*機能ファイル*と呼ばれます。 機能ファイルの詳細については、次の章で説明します。
Gherkinsでテスト中の機能を表すキーワードは「機能」です。 推奨されるベストプラクティスは、機能ファイルの機能タイトルの下に機能の簡単な説明を書くことです。 これは、優れたドキュメントの必要性も満たします。
例
機能-ソーシャルネットワーキングサイトのログイン機能。
ユーザー名とパスワードが正しい場合、ユーザーはソーシャルネットワーキングサイトにログインできる必要があります。
ユーザー名とパスワードが正しくない場合、ユーザーにエラーメッセージが表示されます。
ユーザー名とパスワードが正しい場合、ユーザーはホームページに移動する必要があります。
機能ファイル
Cucumberテストが書き込まれるファイルは、*機能ファイル*と呼ばれます。 テスト対象の機能ごとに個別の機能ファイルを用意することをお勧めします。 機能ファイルの拡張子は「.feature」である必要があります。
必要な数の機能ファイルを作成できます。 体系化された構造を持つには、各機能に1つの機能ファイルが必要です。
例-
Sr.No | Feature | Feature File name |
---|---|---|
1 | User Login | userLogin.feature |
2 | Share the Post | sharePost.feature |
3 | Create Account | createAccount.feature |
4 | Delete Account | deleteAccount.feature |
機能名、機能ファイル名に使用される命名規則は、個人の選択に依存します。 Cucumberには名前に関する基本的なルールはありません。
シンプルな機能ファイルは、次のキーワード/部分で構成されています-
- 機能-テスト中の機能の名前。
- 説明(オプション)-テスト対象の機能について説明します。
- シナリオ-テストシナリオとは何ですか。
- 指定-テストステップを実行する前の前提条件。
- When -次のステップを実行するために一致する特定の条件。
- Then -WHENに記載されている条件が満たされた場合にどうなるか。
例
機能-ソーシャルネットワーキングサイトでのユーザーログイン。
ユーザー名とパスワードが正しい場合、ユーザーはソーシャルネットワーキングサイトにログインできる必要があります。
ユーザー名とパスワードが正しくない場合、ユーザーにエラーメッセージが表示されます。
ユーザー名とパスワードが正しい場合、ユーザーはホームページに移動する必要があります。
概要-ソーシャルネットワーキングサイトのログイン機能。
指定されたユーザーはFacebookに移動します。 「<ユーザー名>」としてユーザー名を入力し、「<パスワード>」としてパスワードを入力すると。 次に、ログインが失敗します。
| username | password |
| username1 | password1 |
*AND* キーワードは、2つの条件の組み合わせを示すために使用されます。 *AND* は、 *GIVEN、WHEN* 、 *THEN* などの他のキーワードと一緒に使用できます。
機能ファイルにはロジックの詳細は記述されていません。
ステップの定義
テストシナリオを定義した機能ファイルを用意しました。 ただし、これは完了した作業ではありません。 キュウリは、機能ファイルで概説されている特定のシナリオでどのコードが実行されるかを実際には知りません。
これにより、中間のステップ定義ファイルが必要になります。 ステップ定義ファイルは、機能ファイルで定義されたシナリオの各ステップと実行される機能のコードとの間のマッピングを保存します。
そのため、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コマンドの両方を使用できます。 Cucumber-scenarios
キュウリ-注釈
- 注釈*は事前定義されたテキストで、特定の意味を保持しています。 コンパイラー/インタープリターに、実行時に何をすべきかを知らせます。 キュウリは、次のいくつかの注釈を持っています-
- 与えられた-
- テストを実行するための前提条件について説明します。
- 例-私はFacebookユーザーです
- いつ-
- テストシナリオの実行のトリガーポイントを定義します。
- 例-「<username>」と入力した場合
- その後-
- 次に、実行されるテストの期待される結果を保持します。
- 例-THENログインが成功するはずです。
- そして-
- 任意の2つのステートメント間の論理AND条件を提供します。 ANDは、GIVEN、WHENおよびTHENステートメントと組み合わせて使用できます。
- 例-「<username>」を入力し、「<password>」を入力した場合
- しかし-
- 任意の2つのステートメント間の論理OR条件を示します。 ORは、GIVEN、WHEN、およびTHENステートメントと組み合わせて使用できます。
- 例-THENログインが成功するはずです。 しかし、ホームページが欠落しているべきではありません。
- シナリオ-
- テスト対象のシナリオの詳細は、キーワード「シナリオ:」の後にキャプチャする必要があります。
- 例- シナリオ: Facebookユーザーの場合+私が+を入力し、+を入力すると、ログインが成功します。 +しかし、ホームページが欠落してはいけません。
- シナリオの概要-(後で説明します)
- 例-(後で説明します)
- 背景-
- 通常、バックグラウンドには、各シナリオを実行する前に何をセットアップするかについての指示があります。 ただし、「Before」フックの後で実行されます(後で説明します)。 したがって、これは、Webブラウザーをセットアップするとき、またはデータベース接続を確立するときに、コードに使用するのに理想的です。
- 例- 背景: Facebookホームページに移動します。
シナリオ例
アノテーションをよりよく理解するために、シナリオを自動化しましょう。
ステップ1
*AnnotationTest* という名前のMavenテストプロジェクトを作成します。
- ファイル→新規→その他→Maven→Mavenプロジェクト→次へに移動します。
- グループIDを指定します(グループIDは、すべてのプロジェクトでプロジェクトを一意に識別します)。
- アーティファクトIDを提供します(アーティファクトIDは、バージョンのないjarの名前です。 小文字の任意の名前を選択できます)。
- 完了をクリックします。
- * pom.xml-*を開きます
- Eclipseの左側にあるパッケージエクスプローラーに移動します。
- プロジェクトAnnotationTestを展開します。
- pom.xmlファイルを見つけます。
- 右クリックして、「テキストエディター」で開くオプションを選択します。
- Seleniumの依存関係の追加-これは、Mavenを示します。どのSelenium jarファイルが中央リポジトリからローカルリポジトリにダウンロードされるかを示します。
- pom.xmlを開いて編集モードにし、プロジェクトタグ内に依存関係タグ(<dependencies> </dependencies>)を作成します。
- 依存関係タグ内に、依存関係タグ(<dependency> </dependency>)を作成します。
- 依存関係タグ内に次の情報を提供します。
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.47.1</version>
</dependency>
- Cucumber-Javaの依存関係を追加-これはMavenを示します。どのCucumberファイルが中央リポジトリからローカルリポジトリにダウンロードされます。
- もう1つの依存関係タグを作成します。
- 依存関係タグ内で次の情報を提供します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
- Cucumber-JUnitの依存関係を追加-これはMavenを示します。どのCucumber JUnitファイルが中央リポジトリからローカルリポジトリにダウンロードされます。
- もう1つの依存関係タグを作成します。
- 依存関係タグ内に次の情報を提供します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
- JUnitの依存関係を追加-これは、Mavenを示します。どのJUnitファイルが中央リポジトリからローカルリポジトリにダウンロードされます。
- もう1つの依存関係タグを作成します。
- 依存関係タグ内に次の情報を提供します。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
- バイナリを検証します。
- pom.xmlが正常に編集されたら、保存します。
- [プロジェクト]→[クリーン]に移動します-数分かかります。
ステップ2
*src/test/java* の下にAnnotationという名前のパッケージを作成します
- 新しく作成したプロジェクトを選択します。
- 右クリックして「新規」を選択します。
- 「パッケージ」としてオプションを選択します。
- 「注釈」という名前を付けます。
- それを保存。
- ステップ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
- ステップ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();
}
}
- ステップ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 { }
- ステップ6 *
オプションを使用してテストを実行します-
- パッケージエクスプローラーからrunTest.javaファイルを選択します。
- 右クリックして、[*として実行] *オプションを選択します
- JUnitテストを選択します。
このクラスファイルを実行すると、次のことが観察されます-
- Facebookが新しいFirefox Webブラウザーインスタンスで開きます。
- TOMは、ユーザー名フィールドへの入力として渡されます。
- JERRYは、パスワードフィールドへの入力として渡されます。
- ログインをクリックします。
- ログイン失敗に関するメッセージがブラウザに表示されます。
- コンソールには、「テストパス」が印刷されています。
- ステップ結果1。 から5。 ユーザー名が「」、パスワードが「」で再実行されます。
キュウリ-シナリオの概要
- シナリオの概要*は、基本的に変数/キーワードをテーブルの値に置き換えます。 表の各行はシナリオと見なされます。
Facebookログイン機能の同じ例を続けましょう。 これまで、1つのシナリオを実行してきました。正しいユーザー名を提供すると、ログインが成功します。 ここで、ユーザー名、電子メールアドレス、または電話番号である3種類の入力すべてに対してログインが成功したかどうかを確認するとします。 これを達成するには、3つの異なるシナリオを作成する必要があります。各シナリオは入力のタイプによって異なり、ログインは成功します。 この場合、シナリオは次のようになります。
シナリオ:
特定のユーザーがFacebookに移動する
正しいユーザー名とパスワードを入力すると
その後、ログインが成功するはずです
シナリオ:
特定のユーザーがFacebookに移動する
正しいメールアドレスとパスワードを入力すると
その後、ログインが成功するはずです
シナリオ:
特定のユーザーがFacebookに移動する
正しい電話番号とパスワードを入力すると
その後、ログインが成功するはずです
ここで、上記の3つのシナリオについてよく見ると、ステートメントは同じであり、入力パラメーター(ユーザー名/メールアドレス/電話番号)のみが変更されています。 ここで、シナリオの概要の重要性が明らかになります。
シナリオの概要を使用してシナリオを定義する場合、1つのテストシナリオを指定し、その下部にいくつかの入力を提供できます。 シナリオは、提供された入力の数だけ実行されます。
例
シナリオの概要の例を作成しましょう-
ステップ1 *- *ScenarioOutlineTest という名前のMavenテストプロジェクトを作成する
- ファイル→新規→その他→Maven→Mavenプロジェクト→次へに移動します。
- グループIDを指定します(グループIDは、すべてのプロジェクトでプロジェクトを一意に識別します)。
- アーティファクトIDを提供します(アーティファクトIDは、バージョンのないjarの名前です。 小文字の任意の名前を選択できます)。
- 完了をクリックします。
- pom.xml を開きます−
- Eclipseの左側にあるパッケージエクスプローラーに移動します。
- プロジェクトCucumberTestを展開します。
- pom.xmlファイルを見つけます。
- 右クリックして、「テキストエディター」で開くオプションを選択します。
- Seleniumの依存関係の追加-これは、Mavenを示します。どのSelenium jarファイルが中央リポジトリからローカルリポジトリにダウンロードされるかを示します。
- 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の依存関係を追加:これはMavenを示し、どのCucumber JUnitファイルが中央リポジトリからローカルリポジトリにダウンロードされるかを示します。
- もう1つの依存関係タグを作成します。
- 依存関係タグ内に次の情報を提供します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
- JUnitの依存関係を追加-これはMavenを示します。どのJUnitファイルが中央リポジトリからローカルリポジトリにダウンロードされるかを示します。
- もう1つの依存関係タグを作成します。
- 依存関係タグ内に次の情報を提供します。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
- JUnitの依存関係を追加-これはMavenを示します。どのJUnitファイルが中央リポジトリからローカルリポジトリにダウンロードされるかを示します。
- もう1つの依存関係タグを作成します。
- 依存関係タグ内に次の情報を提供します。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
- バイナリを検証します。
- pom.xmlが正常に編集されたら、保存します。
- [プロジェクト]→[クリーン]に移動します-数分かかります。
ステップ2 *- *src/test/java の下に「outline」という名前のパッケージを作成する
ステップ3 *-“ outline.feature” *という名前の機能ファイルを作成します
- パッケージのアウトラインを選択して右クリックします。
- 「新規」ファイルをクリックします。
- “ outline.feature” *などのファイル名を付けます *ファイル内に次のテキストを記述して保存します。 * 機能*-シナリオの概要 *シナリオの概要-ソーシャルネットワーキングサイトのログイン機能。 +ユーザーがFacebookに移動する+ユーザー名を「<username>」として入力し、パスワードを「<password>」として入力した場合+ログインに失敗する
例-
| username | password |
| username1 | password1 |
| username2 | password2 |
注意-ここで、注釈の例は、シナリオの実行時に提供される入力の範囲を示しています。 テストシナリオは、提供された各入力に対して実行されます。 したがって、この例では、テストシナリオが3回実行されます。
- ステップ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();
}
}
注-上記のコードでは、2つの入力引数を持つ関数を定義する必要があります。1つはユーザー名で、もう1つはパスワード用です。 したがって、タグ例で提供される入力の各セットに対して、GIVEN、WHEN、およびTHENのセットが実行されます。
- ステップ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 ファイルを選択します。
- 右クリックして、オプション「実行」*を選択します。
- JUnitテストを選択します。
このクラスファイルを実行すると、次のことが観察されます。
- Facebookが新しいFirefox Webブラウザーインスタンスで開きます。
- ユーザー名1とパスワード1は、ユーザー名とパスワードのフィールドへの入力として渡されます。
- ログインをクリックします。
- ログイン失敗に関するメッセージがブラウザに表示されます。
- コンソールに、「テストパス」が印刷されます。
- username2とpassword2のステップ結果1〜5が再実行されます。
簡単に言えば、シナリオが変更されず、データ値のみが変更される場合、シナリオアウトラインデータテーブルを使用することをお勧めします。
キュウリ-タグ
機能ファイルに1つ、2つ、または5つのシナリオがある場合は、単純に見えます。 しかし、実際にはそれは起こりません。 テスト対象の機能ごとに、1つの機能ファイルに10、20、またはより多くのシナリオがある場合があります。 それらは、異なる目的(煙テスト/回帰テスト)、異なる見込み(開発者/QA/BA)、異なるステータス(実行準備完了/進行中の作業)などを表します。 そのような集団の実行を管理する方法は?
このため、Cucumberは機能ファイルでタグを使用してシナリオの実行を整理する方法をすでに提供しています。 便利なタグを使用して各シナリオを定義できます。 後でランナーファイルで、Cucumberに実行させる特定のタグ(およびシナリオ)を決定できます。 タグは「@」で始まります。 「@」の後に、タグを定義する関連テキストを含めることができます。 例でこれを理解しましょう。
機能ファイルに2つ以上のシナリオがあるとします。 煙テストの一部として1つのシナリオのみを実行します。 そのため、最初にそのシナリオを特定し、2番目にシナリオの先頭に「@SmokeTest」テキストでタグ付けします。 それを深く見てみましょう-
ステップ1 *- *cucumberTag という名前のMavenプロジェクトを作成します。
ステップ2- src/test/java の下に cucumberTag という名前のパッケージを作成します
ステップ3- cucumberTag.feature という名前の機能ファイルを作成します。
ファイル内に次のテキストを記述して保存します。 この機能ファイルには、 SmokeTest タグとしてマークされているシナリオが1つだけある2つのシナリオが含まれています。
機能-キュウリのタグ
シナリオの概要-ソーシャルネットワーキングサイトのログイン機能。
特定のユーザーがFacebookに移動する
「<ユーザー名>」としてユーザー名を入力し、「<パスワード>」としてパスワードを入力すると
その後、ログインは失敗するはずです
例
| username | password |
| username1 | password1 |
| username2 | password2 |
- followingシナリオはSmokeTestとしてタグ付けされており、これが実行されるはずです。 @smokeTest
シナリオ:
特定のユーザーがFacebookに移動する
ユーザー名を「<>」、パスワードを「<>」と入力すると
次に、ユーザーをログイン再試行にリダイレクトする必要があります
- ステップ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();
}
}
- ステップ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 { }
- テストオプションを実行します。
- 右クリックして、オプション「実行」*を選択します。
- JUnitテストを選択します。
このクラスファイルを実行すると、次のことを確認できます。
- Facebookが新しいFirefox Webブラウザーインスタンスで開きます。
- ユーザー名とパスワードのフィールドに値は提供されません。
- ログインをクリックします。
- ログイン再試行ページがロードされます。
機能ファイル内のタグの定義に制限はありません。 必要に応じて、使用するタグと実行するシナリオを導出できます。
タグには主に2つのタイプがあります-
- デフォルトタグ-デフォルトタグには定義済みの意味があります。 例@ Dev、@ Ignore
- カスタムタグ-カスタムタグは、タグを定義するための適切なテキストを選択するための完全な柔軟性を提供します。
タグは機能レベルでも定義できます。 機能レベルでタグを定義すると、その機能ファイル内のすべてのシナリオがそのタグを継承することが保証されます。 シナリオの性質に応じて、単一の機能に複数のタグを使用できます。 Cucumberが適切な呼び出しを見つけるたびに、特定のシナリオが実行されます。
Cucumberは、タグの選択を逆にする方法も提供します。 25の定義されたシナリオのうち、10が煙テストとしてマークされていることを考慮してください。 回帰テストシナリオのみを実行する必要があります。
このために、JUnitランナークラスで「〜」を使用して、煙テストシナリオを除外できます。 次のようになります。
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"}, tags = {"~@SmokeTest"})
public class runTest { }
複数のタグを定義しながら、論理的および/または論理的および操作を定義することもできます。
- 論理クラスまたはランナークラスでの定義- @ dev、@ wip -このタグのいずれかに一致するシナリオを実行する必要があると述べています。
- 論理クラスまたはランナークラスでの定義-* [@ dev、〜@ wip]-*これらのタグの両方に一致するシナリオを実行する必要があると述べています。
キュウリ-データテーブル
自動化に取り組んでいる間、さまざまなシナリオに直面する可能性があります。 各シナリオには、異なる意味とニーズがあります。
初めから、ソーシャルネットワーキングサイトのログイン機能の例を取り上げており、2つの入力パラメーターを渡すだけでした。 もう少し可能性を考えてみましょう。 「新規ユーザー登録」機能はどうですか? 通常、ソーシャルネットワーキングサイトに新しいユーザーを登録する際の入力パラメーターは何ですか? 次のようなもの-
- ユーザー名
- 電子メールアドレス
- パスワード
- パスワード再入力
- 誕生日
- 性別
- 電話番号
機能-新規ユーザー登録。
誤った入力を渡した後、新しいユーザー登録が失敗することを確認します。
私は新しいユーザー登録ページにいます。
ユーザー名と電子メールアドレスを電子メールアドレスとパスワードとして入力し、パスワードとして、誕生日、性別、電話番号を再入力すると、ユーザー登録が失敗するはずです。
一見少し面倒です。 だから、そのような入力の塊を管理するより良い方法はありますか? 答えは「データテーブル」です。 データテーブルは、単一のタグに提供される入力のセットです。 このタグは、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 |
その後、ユーザー登録が成功するはずです。
例
データテーブルの例を自動化しましょう。
- ステップ1 *-「DataTableTest」という名前のMavenテストプロジェクトを作成します。
- ファイル→新規→その他→Maven→Mavenプロジェクト→次へに移動します。
- *グループID *を提供します(グループIDは、すべてのプロジェクトでプロジェクトを一意に識別します)。
- *アーティファクトID *を提供します(アーティファクトIDはバージョンなしのjarの名前です。 小文字の任意の名前を選択できます)。
- 完了をクリックします。
- pom.xmlを開きます-
- Eclipseの左側にあるパッケージエクスプローラーに移動します。
- プロジェクトCucumberTestを展開します。
- pom.xmlファイルを見つけます。
- 右クリックして、「テキストエディター」で開くオプションを選択します。
- Seleniumの依存関係を追加:これはMavenを示します。これは、どのSelenium jarファイルが中央リポジトリからローカルリポジトリにダウンロードされるかを示します。
- pom.xmlを開いて編集モードにし、プロジェクトタグ内に依存関係タグ(<dependencies> </dependencies>)を作成します。
- 依存関係タグ内で、依存関係タグを作成します。 (<dependency> </dependency>)。
- 依存関係タグ内に次の情報を提供します。
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.47.1</version>
</dependency>
- Cucumber-Javaの依存関係を追加-これはMavenを示します。どのCucumberファイルが中央リポジトリからローカルリポジトリにダウンロードされます。
- もう1つの依存関係タグを作成します。
- 依存関係タグ内に次の情報を提供します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
- Cucumber-JUnitの依存関係を追加-これはMavenを示します。どのCucumber JUnitファイルが中央リポジトリからローカルリポジトリにダウンロードされます。
- もう1つの依存関係タグを作成します。
- 依存関係タグ内に次の情報を提供します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
- JUnitの依存関係を追加-これは、Mavenを示します。どのJUnitファイルが中央リポジトリからローカルリポジトリにダウンロードされます。
- もう1つの依存関係タグを作成します。
- 依存関係タグ内に次の情報を提供します
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
- バイナリを検証します。
- pom.xmlが正常に編集されたら、保存します。
- [プロジェクト]→[クリーン]に移動します-数分かかります。
ステップ2 *- *src/test/java の下に dataTable という名前のパッケージを作成する
- ステップ3 *-フィーチャーファイルを作成します。
- パッケージdataTable内に dataTable .featureという名前の機能ファイルを作成します(詳細な手順については、シナリオの概要を参照してください)。 次のテキストを書きます。 + 機能*-データテーブル+間違った入力を渡した後、新しいユーザー登録が失敗することを確認します。 + シナリオ: +新しいユーザー登録ページにいる場合+ページに無効なデータを入力した場合
| Fields | Values |
| First Name | Tom |
| Last Name | Kenny |
| Email Address | [email protected] |
| Re-enter Email Address | [email protected] |
| Password | Password1 |
| Birthdate | 01 |
その後、ユーザー登録は失敗するはずです
- ファイルを保存してください。
- ステップ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();
}
}
- ファイルを保存してください。
- ステップ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 Webサイトがロードされます。
- データは登録ページに入力されます。
- [送信]ボタンをクリックします。
- ホームページが表示されず、コンソールに「テストパス」が書き込まれることがわかります。
きゅうり-コメント
- コメント*は、基本的にはドキュメントの作成を目的としたものであり、実行を目的としたものではありません。 ステップ定義ファイルでも機能ファイルでも、読みやすく理解しやすくなります。 そのため、ファイル内の適切な場所でコメントを使用/配置することが重要です。 これは、コードのデバッグ中にも役立ちます。 キュウリの機能ファイルには、任意の場所にコメントを含めることができます。 コメントを入力するには、ステートメントを「#」記号で開始する必要があります。
異なるプログラミング言語には、コメントを定義するための異なる基準があります。 Cucumberがどのように処理するかを見てみましょう。
- ステップ定義ファイル-プラットフォームとしてJavaを使用している場合は、コメントに「//」を付けます。
- Feature File-機能ファイルの場合、コメントを開始する前に#を付けるだけです。
例
プログラム内の強調表示されたテキストは、コード内のコメントを参照しています。
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
キュウリ-フック
Cucumber hook を使用すると、コードワークフローをより適切に管理でき、コードの冗長性を削減できます。 これは目に見えないステップであり、シナリオやテストを実行できると言えます。
この概念をよりよく理解するために、機能ファイルとステップ定義ファイルの例を見てみましょう。
特定のステートメントで強調表示された部分は、実際にWebドライバーをセットアップし、Webドライバーセッションを終了する役割を果たします。 ですから、実際には「与えられた声明」の本質とは関係がなく、テストのセットアップのようなものです。 また、より広い視野で考えた場合、この機能のシナリオが複数ある場合、特定のステートメントごとにこのWebドライバーのセットアップとクリーンアップが実行されます。 論理的には、セットアップとクリーンアップを一度だけ実行するのが理にかなっています。
そのため、最適化をもたらすために、フックを利用できます。 多くの場合、「Before」フックと「After」フックの2種類のフックを使用します。 Before/Afterフック内で定義されたメソッド/関数/コードは、シナリオが成功または失敗した場合でも常に実行されます。
名前が示すように、フックは他のテストシナリオよりもかなり前に実行され、フックはすべてのシナリオを実行した後に実行されます。
フックは、ステップ定義ファイル内でのみ定義されます。
前後のフックの例を自動化しましょう。
- ステップ1 *-MavenプロジェクトをhookTestとして作成し、pom.xmlに必要な依存関係を追加します。
ステップ2 *- *src/test/java の下にhookTestという名前のJavaパッケージを作成する
ステップ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();
}
}
- ステップ4 *-パッケージの下に「hookTest.feature」という名前の機能ファイルを作成します。
機能-シナリオの概要。
シナリオ概要-フックテスト
特定のユーザーがFacebookに移動する
「<ユーザー名>」としてユーザー名を入力し、「<パスワード>」としてパスワードを入力すると
その後、ログインは失敗するはずです
例
| username | password |
| username1 | password1 |
- ステップ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テストを選択します。
したがって、これを実行すると、実行のシーケンスは次のようになります。
- フックの前-テストを実行するためにwebdriverおよびその他の前提条件を設定します。
- 与えられた声明
- Whenステートメント
- Thenステートメント *フック後-Webdriverを閉じて、クリーンアッププロセスを実行します。
タグ付きフック
前後のフックを特定のタグのみで実行するかどうかを示すこともできます。* 例*-@Before( ‘@ Web’)。 タグ論理および/またはタグの同じ概念は、フックにも適用できます。 例-@Before(@ dev、@ wip)、@ Before(@ dev、〜@ wip)
キュウリ-コマンドラインオプション
キュウリは、ほぼすべてのコンピューターシステムのテストに使用できます。 これまで、Eclipse IDEを使用してテストを実行する方法を見てきました。 コマンドラインインターフェイスを使用してCucumberテストを実行する方法がもう1つあります。 それを行うことの利点は何ですか?
ターミナルからテストフレームワークを実行すると、コードに記載されている実行構成をオーバーライドするなど、独自の利点があります。
コマンドプロンプトでCucumberテストを実行するには、システム構成後に次の手順を使用します。
ステップ1- commandLine という名前のMavenテストプロジェクトを作成します。
- ファイル→新規→その他→Maven→Mavenプロジェクト→次へに移動します。
- グループIDを指定します(グループIDは、すべてのプロジェクトでプロジェクトを一意に識別します)。
- アーティファクトIDを提供します(アーティファクトIDは、バージョンのないjarの名前です。 小文字の任意の名前を選択できます)。
- 完了をクリックします。
- pom.xmlを開きます-
- Eclipseの左側にあるパッケージエクスプローラーに移動します。
- プロジェクトCucumberTestを展開します。
- pom.xml ファイルを見つけます。
- 右クリックして、「テキストエディター」で開くオプションを選択します。
- Seleniumの依存関係の追加-これは、Mavenを示します。どのSelenium jarファイルが中央リポジトリからローカルリポジトリにダウンロードされるかを示します。
- pom.xmlを開いて編集モードにし、プロジェクトタグ内に依存関係タグ(<dependencies> </dependencies>)を作成します。
- 依存関係タグ内で、依存関係タグを作成します。 (<dependency> </dependency>)。
- 依存関係タグ内に次の情報を提供します。
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.47.1</version>
</dependency>
- Cucumber-Javaの依存関係を追加-これはMavenを示します。どのCucumberファイルが中央リポジトリからローカルリポジトリにダウンロードされます。
- もう1つの依存関係タグを作成します。
- 依存関係タグ内に次の情報を提供します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
- Cucumber-JUnitの依存関係を追加-これはMavenを示します。どのCucumber JUnitファイルが中央リポジトリからローカルリポジトリにダウンロードされます。
- もう1つの依存関係タグを作成します。
- 依存関係タグ内に次の情報を提供します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
- JUnitの依存関係を追加-これは、Mavenを示します。どのJUnitファイルが中央リポジトリからローカルリポジトリにダウンロードされます。
- もう1つの依存関係タグを作成します。
- 依存関係タグ内で次の情報を提供します。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
- バイナリを検証します。
- pom.xmlが正常に編集されたら、保存します。
- [プロジェクト]→[クリーン]に移動します-数分かかります。
- ステップ2 *-src/test/javaの下に「outline」という名前のパッケージを作成します
- ステップ3 *-「commandLine.feature」という名前の機能ファイルを作成します。
- パッケージのアウトラインを選択して右クリックします。
- 「新規」ファイルをクリックします。
- ファイルに「commandLine.feature」などの名前を付けます ファイル内のテキストの下に書き込み、保存します。 * 機能*-シナリオの概要 *シナリオの概要-ソーシャルネットワーキングサイトのログイン機能。 +ユーザーがFacebookに移動する場合+ユーザー名を「<username>」として入力し、パスワードを「<password>」として入力した場合+ログインに失敗する
例
| username | password |
| username1 | password1 |
| username2 | password2 |
注意-ここで、注釈の例は、シナリオの実行時に提供される入力の範囲を示しています。 テストシナリオは、提供された各入力に対して実行されます。 したがって、この例では、テストシナリオが3回実行されます。
- ステップ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();
}
}
注意-コードでは、2つの入力引数を持つ関数を定義する必要があります。1つはユーザー名、もう1つはパスワード用です。 したがって、タグ例で提供される入力の各セットに対して、GIVEN、WHEN、およびTHENのセットが実行されます。
- ステップ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
- コマンドmvn testを実行します:機能ファイルに記述されているすべてのシナリオが実行されていることがわかります(エラーがない場合)。 最後に、下部に次の情報があります。
結果
This describes the total test run, along with failure if any.
前のコマンドは、JUnit Runnerクラスで述べたようにすべてを実行します。 ただし、Runnerで説明されている構成をオーバーライドする場合は、以下のいくつかの例を使用してください。
- コマンドプロンプトでコマンド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レポートジェネレーターにフォーマットします。
キュウリ-JUnit Runner
Cucumber JUnit Runnerについての議論を始める前に、Junitが何であるかを理解することが重要です。 JUnit は、Javaプログラミング言語用のオープンソースのユニットテストフレームワークです。 JUnitは、テスト駆動開発の開発において重要であり、ユニットテストフレームワークのファミリーの1つであり、SUnitを起源とするxUnitとして総称されています。
JUnitを使用する利点
- ユニットには Graphical User Interface (GUI)があり、ソースコードをすばやく簡単に記述およびテストできます。
- JUnitを使用すると、開発者はテストスイートを段階的に構築して、進捗を測定し、意図しない副作用を検出できます。
- テストは継続的に実行できます。
- JUnitは、通常は緑色ですが、テストが失敗すると赤色に変わるバーでテストの進行状況を示します。
これまでに、JUnitを使用する利点を確認しましたが、今議論している理由はCucumberフレームワークです。 Cucumberは、非技術者が製品のテストケースを定義する方法を提供する一方で、そのようなテストケースをスムーズかつタイムリーに実行することを期待しています。
JUnitは、これら2つの間のブリッジとして機能します。 だから、実行の流れは次のようになります-
- 利害関係者は機能ファイルを書き留めます。
- それに応じて、ステップ定義ファイルが作成されます。
- JUnitランナークラスを指定して、一連のテストケースを実行します。
- JUnitランナークラスを実行したら-
- Gherkin機能ファイルを解析します。
- 機能ファイルのステートメントに従って、ステップ定義ファイルに記述された機能を実行します。
- JUnitはテストケースの結果を結合します。
- 指定された形式(html/JSONの場合もあります)でテストレポートを作成します。
ここで重要な点は、これらすべてを行うためにJUnitを構成する方法ですか? 手順は次のとおりです-
- ステップ1 *-Javaをインストールします。
- リンクhttp://www.oracle.com/technetwork/java/javase/downloads/indexlからjdkとjreをダウンロードします。
- ライセンス契約に同意します。
- JDKおよびJREをインストールします。
- 次のスクリーンショットに示すように、環境変数を設定します。
- ステップ2 *-Eclipseをインストールします。
- 必要な理由-Eclipseは統合開発環境(IDE)です。 環境をカスタマイズするためのベースワークスペースと拡張可能なプラグインシステムが含まれています。
- インストール方法-
- JAVAがマシンにインストールされていることを確認してください。
- [[1]]
- 解凍するとEclipseがインストールされます。
- ステップ3 *-Mavenをインストールします。
- 必要な理由-Mavenは、主にJavaプロジェクトに使用されるビルド自動化ツールです。 ソースコードの生成、コードのコンパイル、jarへのコードのパッケージ化などのアクティビティを実行するための共通プラットフォームを提供します。 また、後でソフトウェアバージョンのいずれかが変更された場合、Mavenはテストプロジェクトを適宜変更する簡単な方法を提供します。
- インストール方法-
- Mavenのダウンロード-https://maven.apache.org/download.cgi
- ファイルを解凍し、場所を覚えておいてください。
- 次のスクリーンショットに示すように、環境変数MAVEN_HOMEを作成します。
- 次のスクリーンショットに示すように、パス変数を編集し、Mavenを含めます。
- EclipseからMAVENプラグインをダウンロードします。
- Eclipseを開きます。
- ヘルプ→Eclipseマーケットプレイス→検索Maven→Maven Integration for Eclipse→インストールに移動しました。
- ステップ4 *-MavenでCucumberを構成する方法
- EclipseでMavenプロジェクトを作成します。
- ファイル→新規→その他→Maven→Mavenプロジェクト→次へに移動します。
- グループIDを指定します(グループIDは、すべてのプロジェクトでプロジェクトを一意に識別します)。
- アーティファクトIDを提供します(アーティファクトIDは、バージョンのないjarの名前です。 小文字の任意の名前を選択できます)。
- 完了をクリックします。
- pom.xmlを開きます
- Eclipseの左側にあるパッケージエクスプローラーに移動します。
- プロジェクトCucumberTestを展開します。
- pom.xmlファイルを見つけます。
- 右クリックして、「テキストエディター」で開くオプションを選択します。
- Seleniumの依存関係の追加-これは、Mavenを示します。どのSelenium jarファイルが中央リポジトリからローカルリポジトリにダウンロードされるかを示します。
- 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の依存関係を追加:これはMavenを示し、どのCucumber JUnitファイルが中央リポジトリからローカルリポジトリにダウンロードされるかを示します。
- もう1つの依存関係タグを作成します。
- 依存関係タグ内に次の情報を提供します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
- JUnitの依存関係を追加-これは、Mavenを示します。どのJUnitファイルが中央リポジトリからローカルリポジトリにダウンロードされます。
- もう1つの依存関係タグを作成します。
- 依存関係タグ内に次の情報を提供します。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
- バイナリを確認する
- pom.xml が正常に編集されたら、保存します。
- [プロジェクト]→[クリーン]に移動します-数分かかります。
- その後、次のスクリーンショットのようなMavenリポジトリが表示されます。
- ステップ5 *-機能ファイルを作成します(後で説明します)。
- ステップ6 *-ステップ定義ファイルを作成します(後で説明します)。
- ステップ7 *-テストを実行するJunitランナーを作成します(後で説明します)。
きゅうり-レポート
製品の安定性を理解するためにテストを実行するため、手動テストでも自動テストでも、製品の安定性を示す簡潔なレポートを生成することが非常に重要です。 そのため、Cucumberを使用してテストシナリオを自動化していますが、Cucumberテストレポートをどのように生成できるかを知ることが不可欠です。 CucumberはBDDフレームワークであることがわかっているので、派手なレポートメカニズムはありません。
これを達成するには、CucumberをAnt/Junitなどの他のオープンソースツールと統合する必要があります。 ここでは、Java言語のサポートを提供するため、JUnitの例をさらに取り上げます。
利用可能で使いやすいさまざまなレポート形式の詳細を見てみましょう-
Pretty Format(HTMLレポート)
Pretty Formatは、HTML形式でCucumberテストレポートを生成します。 HTMLファイル。 最も読みやすいレポート形式です。 機能ファイルと同じ方法でレポートを生成するため、トレースも簡単になります。 また、テスト実行後にこのレポートを配置する場所を指定できます。 それはすることができます-
- ローカルディレクトリ-テストを実行するマシンのローカルディレクトリとして、レポートのターゲットディレクトリを指定できます。
- サーバーディレクトリ-また、ターゲットディレクトリをサーバー上の任意のディレクトリとして指定するための規定があります。 これは一般に、クライアント/利害関係者に特定の時点でのテスト結果を表示させたいときに役立ちます。
例
きれいなフォーマットの例を自動化しましょう。
ステップ1 *-Eclipseで *cucumberReport という名前のMavenプロジェクトを作成します。
ステップ2 *- *src/test/java の下に CucumberReport という名前のパッケージを作成する
ステップ3 *- *cucumberReport.feature という機能ファイルを作成します
ファイル内に次のテキストを記述して保存します。
機能-キュウリのレポート
#これは、パステストケースのテスト結果を確認するためです
- シナリオ:*ログイン機能があります
私がブラウザを開いたことを考えると
Facebookウェブサイトを開くと
次に、ログインボタンが存在するはずです
#これは、失敗したテストケースのテスト結果を確認するためです
- シナリオ:*パスワードを忘れた場合
私がブラウザを開いていることを考えると
Facebookウェブサイトを開くと
次に、パスワードを忘れた場合のリンクが存在する必要があります
注-ここでは最初のシナリオは合格しますが、2番目のシナリオは失敗します。 合格および不合格のレポートがどのように見えるかを確認できます。
- ステップ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");
}
}
}
- ステップ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という名前のフォルダーが作成されます。
レポートは「Indexl」という名前でそこに表示されます。
WebブラウザーでIndexlを開きます。
次の画像に記載されているレポートが表示されます-
失敗したシナリオの色を正確に強調します。 さらに、そのシナリオで失敗したステップのハイライトが表示されます。 これにより、デバッグが非常に簡単になります。
JSONレポート
これまでに、HTMLレポートがどれほど簡単かを見てきました。 ただし、このレポート情報を他のアプリケーションに渡す場合、HTMLレポートの場合はややこしいです。 ここで、別のレポート形式の必要性が生じます。 JSON-Javaスクリプトオブジェクト表記は、Cucumberテストレポートを生成するためのもう1つの形式です。 JSONは、テキスト形式で保存された多くの情報を含むオブジェクトです。 JSONレポートは、テーブルに異なる値をもたらします。 JSONレポートは、異なるサーバー間で転送される情報のペイロードとしても使用できます。 さらに、Webページとして表示するために使用できます。 簡単に言うと、JSONレポートは他のアプリケーションで使用できます。
- ペイロード情報とは何ですか?*データがインターネット経由で送信される場合、送信される各ユニットにはヘッダー情報と送信される実際のデータの両方が含まれます。 ヘッダーはパケットの送信元と宛先を識別しますが、実際のデータはペイロードと呼ばれます。 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 ファイルを選択します。
- 右クリックして、[として実行]オプションを選択します。
- JUnitテストを選択します。
- このクラスファイルを実行すると、次のことを確認できます。
- 両方のシナリオが1つずつ実行されます。
- レポートは、 cucumber.json (ランナークラスで提供)として名前が付けられます。
- テキストエディタで cucumber.json ファイルを開きます。
- 改行を配置した後、次のスクリーンショットに記載されているレポートが表示されます-
注意-JSONは、HTMLレポート形式と比較して読みにくくなっています。
キュウリ-デバッグ
不明な理由によりテストが失敗する可能性が非常に高くなります。 失敗の原因を特定して修正することは非常に重要です。 このプロセスは*デバッグ*と呼ばれます。 以下は、Cucumberのデバッグを少し簡単にするいくつかのヒントとコツです。
デバッグオプションはEclipseで使用できます。 ブレークポイントを配置します。 ファイルをクリックし、次の手順を使用してデバッグします-
- ステップ1 *-Rubyステップ定義ファイルに手動ブレークポイントを配置します。
例
require 'ruby-debug'
Then/^the process should exit cleanly$/do
breakpoint
assert @exited_cleanly, "Process did not exit cleanly: #{@stdout}"
end
- ステップ2 *-ステップ定義ファイルで次のような個別のデバッグステップを定義することもできます。
Then/^I debug$/do
breakpoint
0
end
ステップ3 *- *Webrat はRailsを使用したキュウリのテストのデフォルトツールです。 リンクのクリック、フォームの入力と送信などを行うことができます。
たとえば、何かをクリックしようとすることがありますが、そこにはありません。 大量の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テスト
JavaでCucumberテストを実行するには、次の手順に従います。
- ステップ1 *-Javaのインストール-
- jdkとjreをダウンロードします + http://www.oracle.com/technetwork/java/javase/downloads/indexl
- ライセンス契約に同意します。
- JDKおよびJREをインストールします。
- 次の図に示すように、環境変数を設定します。
- ステップ2 *-Eclipse IDEをインストールします-
- JAVAがマシンにインストールされていることを確認してください。
- [[2]]
- 解凍し、Eclipseがインストールされます。
- ステップ3 *-Mavenのインストール-
- Mavenのダウンロード-https://maven.apache.org/download.cgi
- ファイルを解凍し、場所を覚えておいてください。
- 次の図に示すように、環境変数MAVEN_HOMEを作成します。
- パス変数を編集し、Mavenを含めます。
- EclipseからMAVENプラグインをダウンロードする
- Eclipseを開きます。
- ヘルプ→Eclipse Marketplace→検索Maven→Maven Integration for Eclipse→INSTALL
- ステップ4 *-MavenでCucumberを構成します。
- Mavenプロジェクトを作成します。
- ファイル→新規→その他→Maven→Mavenプロジェクト→次へに移動します。
- グループIDを指定します(グループIDは、すべてのプロジェクトでプロジェクトを一意に識別します)。
- アーティファクトIDを提供します(アーティファクトIDは、バージョンのないjarの名前です。 小文字の任意の名前を選択できます)。
- 完了をクリックします。
- ステップ5 *-pom.xmlを開く-
- Eclipseの左側にあるパッケージエクスプローラーに移動します。
- プロジェクトCucumberTestを展開します。
- pom.xmlファイルを見つけます。
- 右クリックして、「テキストエディター」で開くオプションを選択します。
- ステップ6 *-Seleniumの依存関係を追加-これはMavenを示します。これは、どのSelenium jarファイルが中央リポジトリからローカルリポジトリにダウンロードされるかを示します。
- pom.xmlを開いて編集モードにし、プロジェクトタグ内に依存関係タグ(<dependencies> </dependencies>)を作成します。
- 依存関係タグ内で、依存関係タグを作成します。 (<dependency> </dependency>)
- 依存関係タグ内に次の情報を提供します。
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.47.1</version>
</dependency>
- ステップ7 *-Cucumber-Javaの依存関係を追加します-これは、中央リポジトリからローカルリポジトリにダウンロードされるCucumberファイルをMavenに示します。
- もう1つの依存関係タグを作成します。
- 依存関係タグ内で次の情報を提供します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
- ステップ8 *-Cucumber-JUnitの依存関係を追加します-これはMavenを示します。どのCucumber JUnitファイルが中央リポジトリからローカルリポジトリにダウンロードされます。
- もう1つの依存関係タグを作成します。
- 依存関係タグ内に次の情報を提供します。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
ステップ9-JUnitの依存関係を追加する-これは、Mavenを示します。これは、どのJUnitファイルが中央リポジトリからローカルリポジトリにダウンロードされるかを示します。
- もう1つの依存関係タグを作成します。
- 依存関係タグ内に次の情報を提供します。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
- ステップ10 *-バイナリを確認します。
- pom.xmlが正常に編集されたら、保存します。
- [プロジェクト]→[クリーン]に移動します-数分かかります。
- Mavenリポジトリーを表示できます。
ステップ11 *- *cucumberJava という名前の src/test/java の下にパッケージを作成します。
- ステップ12 *-機能ファイルを作成する
- パッケージのアウトラインを選択して右クリックします。
- 「新規」ファイルをクリックします。
- ファイルに cucumberJava.feature などの名前を付けます。 *ファイル内に次のテキストを記述して保存します。 * 機能: *CucumberJava +* シナリオ:*ログイン機能が存在する+ブラウザーを開いた場合 Facebook Webサイトを開いた場合+ログインボタンが終了する
- ステップ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();
}
}
- ステップ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 { }
- ステップ15 *-オプションを使用してテストを実行する-
- パッケージエクスプローラーからrunTest.javaファイルを選択します。
- 右クリックして、 Run as オプションを選択します。
- JUnitテストを選択します。
あなたは実行時に次のことを観察します-
- Firefox Webブラウザのインスタンスが開きます。
- ブラウザーでFacebookログインページが開きます。
- ログインボタンを検出します。
- ブラウザが閉じます。
- JUnitウィンドウに、テストの実行が成功したことを示す緑色のチェックマークが付いたシナリオが表示されます。
キュウリ-Rubyテスト
Ruby言語には次の利点があります-
- わかりやすいです。
- これはオブジェクト指向言語です。
- これは強力なクラスライブラリです。
- 大規模なオンラインサポートがあります。
以下は、CucumberがRubyでどのように機能するかの段階的なプロセスです。
- ステップ1 *-Rubyをインストールします。
- RubyInstallerダウンロードページに移動します。
- ご使用のオペレーティングシステムに最適なバージョンをダウンロードします(つまり、 32または64ビット)。
- ダウンロードしたexeを実行します。
- インストール中に、次の図に示すように、「Rubyを追加…」および「Associate…」オプションにチェックマークを付けます。
- ステップ2 *-開発キットをダウンロードして抽出します。
- RubyInstallerダウンロードページに移動します。
- オペレーティングシステムに最適なDevkitバージョンをダウンロードします(つまり、 32または64ビット)。
- c:\ Ruby \ Devkitフォルダーでdevkitを抽出します。
- コマンドプロンプトを開きます。
- Ruby開発キット内で、次のコマンドを実行します。
C:\Ruby\devkit> ruby dk.rb init
C:\Ruby\devkit> ruby dk.rb install
- ステップ3 *-Cucumberとその他のRuby gemをインストールします。
- Cucumberをインストールするには、まず現在のgemセットアップを更新します
C:\Users\Admin> gem update –system
- 次に、Cucumber Webテストに必要な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
- ステップ4 *-IDEをインストールします– KOMODO。
- [[3]]
- 無料試用版インストーラーをダウンロードします。
- ダウンロードしたexeをダブルクリックします。
- インストール手順に従います。
- インストールを完了し、IDEを開きます。
ステップ5 *-インストール *Watir -コマンドプロンプトに移動し、次のコマンドを実行します "gem install watir"
ステップ6 *-インストール *rspec -コマンドプロンプトに移動し、次のコマンドを実行します "gem install rspec"
- ステップ7 *-機能ファイルを作成します。
- KOMODOエディターを開きます。
- 新しいファイルのアイコンをクリックします。 次のテキストを書きます。 + 機能:ユーザーはGoogleを使用してコンテンツを検索できる必要があります。 + *シナリオ:*用語を検索します。 +クエリに *"watir" を入力したとします。 + *「検索」*をクリックすると、結果が表示されます
- *保存*アイコンをクリックします。
- CucumberRuby.featureとして名前を付けます。
- 任意のフォルダーを選択します。例:*“ e:\ WithRuby” *
- ファイルを保存してください。
- ステップ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” *
- ファイルを保存してください。
- ステップ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」などのフォルダーを選択します。
- ファイルを保存してください。
- ステップ10 *-機能ファイルを実行します。
- コマンドプロンプトに移動します。
- ディレクトリ e:\ WithRuby に移動します
- 次のコマンドを実行します。
e:\With Ruby>ruby test.rb
あなたは実行時に次のことを観察します-
- Webブラウザーのインスタンスが開きます。
- Google.com Webページがロードされます。
- 検索テキスト watir が入力されます。
- 検索ボタンが配置されます。
- 検索結果はウェブページに表示されます。
- ブラウザインスタンスが閉じられます。