specflow tutorial ultimate guide bdd tool
SpecflowおよびBehaviorDriven Development(BDD)チュートリアルの完全ガイド:
Specflowとは何ですか?
Specflowは、.NETFrameworkでのBDDプラクティスをサポートするテストフレームワークです。これは、GitHubでホストされているオープンソースフレームワークです。 .NETアプリケーションでATDD(受け入れテストドライバー開発)を使用するのに役立ちます。これにより、誰でもはっきりと理解できるガーキン語で定義された平易な英語でシナリオを定義することができます。
Cucumber / JBehave for Java、Lettuce for Python、Jasmine for Javascriptなど、BDDアプローチでテストを作成するためのさまざまなツールがあります。 Specflow .NETの場合。
BDD (ビヘイビア駆動開発)は、製品、開発者、テスターなどのさまざまな利害関係者間のコミュニケーションのギャップを埋めることを目的とした、TDD(テスト駆動開発)と同様の一連のプラクティスまたはアプローチです。
BDDアプローチの最終目標は、誤解を避けるためにチーム全体が理解できるビジネス要件を作成し、開発中の機能を最も受け入れられる方法で出荷するのに役立つことです。
完全なSpecflowチュートリアルシリーズ:
を読んでください 完全なSpecflowトレーニングシリーズ 概念をよりよく理解するために。
チュートリアル#1: SpecflowBDDツールの概要 (このチュートリアル)
チュートリアル#2: SpecflowとSeleniumの例
チュートリアル#3: Specflowバインディングと高度な概念
チュートリアル#4: ステップ引数の変換とSpecflowテーブル
チュートリアル#5: ピクルスを使ったSpecflowリビングドキュメント
チュートリアル#6: Specflowレポートジェネレータ
チュートリアル#7: Specflowインタビューの質問
Specflowシリーズのチュートリアルの概要:
チュートリアル# | 説明 |
---|---|
7 | Specflowインタビューの質問 このチュートリアルには、Specflowの面接で最も人気のある質問と回答のリストと例が含まれており、最初の試行でSpecflowの面接を正常にクラックできます。 |
1 | SpecflowBDDツールの概要 (このチュートリアル) この入門チュートリアルでは、Specflowについて詳しく説明します。 Specflowは、.NETFrameworkでのBDDプラクティスをサポートするテストフレームワークです。これは、GitHubでホストされているオープンソースフレームワークです。 .NETアプリケーションでATDD(受け入れテストドライバー開発)を使用するのに役立ちます。 |
二 | SpecflowとSeleniumの例 このチュートリアルでは、Youtubeアプリケーションでのビデオ検索の簡単なテストシナリオを通じて、SeleniumとSpecflowフレームワークの統合に焦点を当てます。また、プライベートクラスフィールドを介して異なるバインディング間でデータを共有する方法も確認します。 |
3 | SpecflowとSeleniumの例 このチュートリアルでは、Youtubeアプリケーションでのビデオ検索の簡単なテストシナリオを通じて、SeleniumとSpecflowフレームワークの統合に焦点を当てます。また、プライベートクラスフィールドを介して異なるバインディング間でデータを共有する方法も確認します。 |
4 | ステップ引数の変換とSpecflowテーブル この有益なSpecflowチュートリアルでは、Specflow引数のカスタム型変換を可能にしてボイラープレートコードを回避できるステップ引数変換について詳しく説明します。Specflowテーブルは、ユーザーフレンドリーな表で1つのステップで多数のフィールド/データを渡す必要がある場合に役立ちます。フォーマット。 |
5 | ピクルスを使ったSpecflowリビングドキュメント このSpecflowチュートリアルから、既存のSpecflowファイルを使用してpicklesと呼ばれるオープンソースフレームワークを介して見栄えの良い生きたドキュメントを生成する方法を知ることができます。 |
6 | Specflowレポートジェネレータ このSpecflowレポートのチュートリアルでは、Specflow実行可能ファイルを介してHTMLレポートを生成するとともに、Specflow機能テストを実行する方法を学習します。 |
このシリーズの最初のチュートリアルから始めましょう。
学習内容:
SpecflowBDDツールの概要
ビデオチュートリアルを見る:
Specflowとビヘイビア駆動開発に関するビデオチュートリアルは次のとおりです。
BDDの特徴
BDDの主な機能を以下に簡単に説明します。
#1) 例またはシナリオを通じて、開発中のシステムまたは機能の動作を定義しようとします。たとえば、単純な電卓アプリケーションを構築している場合、さまざまな動作には、加算、乗算、除算などが含まれます。
したがって、BDDを介して、すべての利害関係者が最初に集まり、追加などのアプリケーションの動作を決定し、以下に示すシナリオを作成します。
Given, I have 2 numbers 30 and 50 as input When I add these 2 numbers Then I should get an output of 80
上記の表現を見ると、それは誰もが明確に理解でき、機能の要件を明確にする平易な英語のシナリオです(受け入れ基準に従って)。したがって、最初のステップは、これらの要件を明確にすることです。
#二) これらのシナリオのセットで、QAはこれらに対するテストを作成しますが、機能がまだ開発されていないため、これは最初は失敗します。
#3) ここで、開発者は機能コードを記述し、これらのテストを再度実行します。
#4) テストは合格または不合格になる場合があります。それらが失敗した場合–コードをリファクタリングし、プロセスを繰り返します
#5) コードのリファクタリングが完了すると、すべてのシナリオ/テストに合格するはずです。
したがって、本質的に、BDDはTDDアプローチを使用し、シナリオの形でいくつかの一般的な簡単に理解できる仕様を持つことによって、それを次のレベルに引き上げます。また、機能のドキュメント自体も表します。
Cucumber / JBehave for Java、Lettuce for Javaなど、BDDアプローチでテストを作成するためのさまざまなツールがあります。 Python 、Jasmine for Javascript、 Specflow .NETの場合。
Javaで二重リンクリストを作成する
このチュートリアルでは、Specflowに焦点を当てます。
また読む=> トップBDDツールとテストフレームワーク
キーワード–与えられた、いつ、そしてその後
ユニットテストの世界から、私たちのほとんどは3 A、つまりアレンジ、アクト、アサートに精通しています。さて、Given、When、Thenは、BDDの世界におけるこれらの代替品です。
取りましょう 例 これらのそれぞれを理解するため。前提条件としてログインする必要があるeコマースアプリケーションのショッピングカートに追加される製品を検証するためのシナリオをリストアップするとします。
仕様は次のように書くことができます。
Scenario: Products get added to cart for a logged in customer Given I have a logged-in customer on my application When I add 2 quantity of a product to my shopping cart Then the shopping cart should get updated and have the right product and quantity
与えられた :これは、定義されているシナリオの一連の前提条件を説明するために使用されます。たとえば、この例では、シナリオの前提条件はログインしている顧客です。したがって、 アレンジ 単体テストと同様に、ステップの実装では、ログインしている顧客がいることを確認する必要があります。
いつ :これは、アクションまたは実行ステップを説明するために使用されます。この例では、顧客がショッピングカートに商品を追加しようとしていることを示しています。したがって、このステップのステップ実装は、カートに製品を追加するためのシミュレーションコードを処理します。これは、 行為 ユニットテストのステップ。
次に :これは、シナリオの結果と、基本的に検証を配置する場所を説明するために使用されます。これは、 主張する ユニットテストの世界に足を踏み入れます。この例では、ステップの実装により、製品が実際に追加され、数量が顧客が選択したものと同じであるかどうかがアサートされます。
機能ファイル
機能ファイルは、基本的に、開発中またはテスト中のアプリケーションの複数のシナリオをグループ化したものです。また、アプリケーションを論理的に分離できるアプリケーションのさまざまなモジュールと単純に考えることもできます。
例えば:
eコマースアプリケーションは、次のようなさまざまな高レベルの機能ファイルを使用することを決定できます。
- ログイン/ログアウト機能
- ショッピングカート
- お支払い等
Specflowとは何ですか?
Specflowは、.NETFrameworkでのBDDプラクティスをサポートするツールです。これは、GitHubでホストされているオープンソースフレームワークです。 .NETアプリケーションでATDD(受け入れテストドライバー開発)を使用するのに役立ちます。
Specification By Exampleパラダイムを使用してアプリケーションのビジネス要件を拘束することは、すべての利害関係者によるアプリケーションの動作をよりよく理解するのに役立ち、それによって正しい期待を持って製品を出荷することになります。
それは利用します ガーキン 機能とシナリオを作成するための構文。また、活発な議論/開発者がいます フォーラム 。
Specflow –はじめに
このセクションでは、Visual Studio IDEにspecflowをインストールし、単純なStringUtilityアプリケーションの機能ファイルを作成する方法について説明します。
サンプルアプリケーションについて
このチュートリアルでは、次のようなさまざまな操作を提供する関数/インターフェイスを備えた電卓アプリケーションを使用して、Specflowフレームワークのさまざまな機能を説明します。
- 2つの数字を追加します。
- 2つの数を引く。
- 2つの数値の除算と乗算。
- 指定された数の平方根を見つけます。
Specflow インストールガイド
Specflowのインストールは2ステップのプロセスです
#1) Visual StudioIDEに必要なプラグインをインストールします。
- specflowプラグインをインストールするには、(ツール)-> (拡張機能と更新)に移動します。
- 次に、左側のパネルの「オンライン」をクリックします。
- 次に、右側のパネルでスペックフローを検索します。
- 検索結果から「SpecflowforVisualStudio2017」を選択します。
#二) 機能ファイルとステップ定義を使用してプロジェクトを設定します。
- VisualStudioで簡単な新しいプロジェクトを作成します。クラスライブラリ/コンソールアプリケーション/ユニットテストプロジェクトなど、あらゆる種類のプロジェクトを作成できます。簡単にするために、クラスライブラリプロジェクトを取り上げています。プロジェクトに「SpecflowBasic」という名前を付けます。
- 作成するSpecflowシナリオを実行するには、テストランナーが必要です。 Specflowは、Specflow + Runnerと呼ばれるすぐに使用できるランナーを提供します(これは有料バージョンであり、無料バージョンでは遅延が発生します)。
(他のランナーもNUnitとMsTestで利用できます。これについては、このシリーズの今後の記事で説明します)。
Specflow + Runnerをインストールするには– (ツール)-> (NuGetパッケージマネージャー)-> (パッケージマネージャーコンソール)に移動します。
パッケージマネージャーコンソールが開いたら–コマンドを実行します。
Install-Package SpecRun.SpecFlow
- また、値をアサートするには、テストフレームワークの助けが必要になります。 NUnitはオプションの1つであり、他にはMsTestなどが含まれます。NUnitフレームワークをアプリケーションにインストールするには、パッケージマネージャーコンソールを開いてコマンドを入力します。
Install-Package NUnit
#3) 「CalculatorApplication」という名前の新しいクラスを作成します。これがテスト対象のアプリケーションになります。これは、与えられた入力に対して、加算/乗算/除算/平方根などを実行する関数を持つ単純なクラスです。これは、CalculatorApplicationクラスがどのように見えるかです。
#4) パッケージがインストールされたら、プロジェクトに2つのフォルダーを作成し、それらに機能ファイルとステップバインディングを保存するための機能とステップ定義という名前を付けます。機能とステップの定義について、このフォルダー編成の理由について詳しく説明します。
#5) ここで、featuresフォルダーに、新しいFeatureファイルを追加し、CalculatorFeatureという名前を付けます。
デフォルトでは、機能ファイルの機能とシナリオに説明があります。
これをテストするものに置き換えます。
Feature: CalculatorFeature In order to test my application As a developer I want to validate different operations of the application Scenario: Add two numbers Given I have provided 70 and 20 as the inputs When I press add Then the result should be 90 Scenario: Substract two numbers Given I have provided 70 and 20 as the inputs When I press substract Then the result should be 50 Scenario: Multiply two numbers Given I have provided 70 and 20 as the inputs When I press multiply Then the result should be 1400 Scenario: Divide two numbers Given I have provided 70 and 20 as the inputs When I press divide Then the result should be 3.5 Scenario: SquareRoot of number Given I have provided 70 as input When I press squareroot Then the result should be 8.37
#6) ステップ定義の生成:Specflowは、機能ファイルシナリオのさまざまなステップのバインディング/実装を生成する自動化された方法を提供します。これは、機能ファイルを右クリックして(ステップ定義の生成)をクリックすることで実現できます。
このステップは実装を保証するものではありません すべてのステップで使用できますが、シナリオ内の一般的なステップをグループ化し、可能な限り多くのバインディングを再利用するように最善を尽くします。ただし、シナリオのステップを実装する必要があるたびに、定型コードを回避する必要があります。
クリック後 「ステップ定義の生成」 、ウィンドウが表示され、プロセッサが検出した識別されたステップの実装が一覧表示されます。要件に応じて、選択または選択解除できます。
後のセクションでは、上のスクリーンショットに示されている(スタイル)ドロップダウンの詳細について説明します。
今のところ、デフォルト設定ですべてを選択したままにしておきましょう。プレビューをクリックすると、実装がどのように見えるかのスナップショットが表示されます。
ステップ定義を作成した後でも、実装されていないステップがいくつかある場合、機能ファイルには、実装されていないアプリケーションを視覚的に識別する方法があります。まだ実装されていない(またはあいまいなステップ定義がある)ステップがあることを非常に簡単に知ることができるため、これらのステップが異なる色で表示されます。
サンプル画面は以下を示しています:
注意: ステップ定義は手動で作成することもできます– (Binding)属性を持つすべての.csファイルはステップ実装クラスであり、Gherkin構文は指定されたシナリオステップの実装と一致するものを探します
実行
上記のセクションでSpecflow + Runnerをすでに追加しているため、シナリオの実行は非常に簡単です(Specrunの評価バージョンであるため、シナリオが実行される前に10〜20秒の可変遅延が発生します。この遅延は登録済みバリアントには存在しません。およびNUnitやMsTestなどのSpecrunランナーの他のフレーバー)。
すべてのステップに されていません 実装されており、保留状態のバインディングがまだある場合。その後、出力は保留中として表示されます。
バインディングの実装がなく、シナリオがすべて保留中のこの時点で、これらのテスト/シナリオを実行してみましょう。
それでは、テストしたいメソッド、つまり加算、減算、乗算、除算、平方根を使用してCalculatorApplicationクラスを実装してみましょう。
以下に、CalculatorApplicationクラスがどのように見えるかのコードサンプルを示します。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SpecflowBasic { class CalculatorApplication { public int add(int input1, int input2) { return input1 + input2; } public int subsctract(int input1, int input2) { return input1 - input2; } public int multiply(int input1, int input2) { return input1 * input2; } public double divide(double input1, double input2) { return input2 != 0 ? Math.Round(input1 / input2, 2) : 0; } public double squareRoot(int input1) { return input1 != 0 ? Math.Round(Math.Sqrt(input1), 2) : 0; } } }
アプリケーションの準備ができたら、シナリオの各ステップのバインディングを実装する方法を考えてみましょう。
これらを実装するための段階的なアプローチを見てみましょう。
- まず、テストが必要なアプリケーションのインスタンスを用意する必要があります。簡単にするために、ステップバインディングでAUT(Application Under Testクラス)をインスタンス化し、インスタンス化されたインスタンスを使用して、実装されたステップに従って実際にさまざまなメソッド/関数を呼び出すことができます。
- 入力と出力をキャプチャするために、アプリケーションインスタンスで関数を呼び出すために、これらの値を保持する変数を宣言しています。
追加機能の検証に関連するすべてのバインディングのエンドツーエンドの実装を見てみましょう(残りのシナリオは単にこれを拡張しています)。
追加シナリオは次のようになります。
Scenario: Add two numbers Given I have provided 70 and 20 as the inputs When I press add Then the result should
これらの個々のステップのそれぞれのステップの実装を見てみましょう。すべてのステップ実装を使用するために、以下に示すように、テスト対象のアプリケーションのインスタンスと、入力変数と出力変数を保持する変数を宣言しています。
// instantiating application instance CalculatorApplication app = new CalculatorApplication(); // variables to hold input values and the intermeditate result int input1, input2; double output;
シナリオステップの実装を1つずつ見ていきましょう。
ステップ1: 私が70と20を提供したとすると なので 入力。
(Given(@'I have provided (.*) and (.*) as the inputs')) public void GivenIHaveProvidedAndAsTheInputs(int p0, int p1) { input1 = p0; input2 = p1; }
ここでは、シナリオのステップから渡された値を使用して入力変数を初期化しました。 p0とp1は、シナリオステップから渡される値であり、それぞれ70と20として初期化されます。
ステップ2: 追加を押すと。
(When(@'I press add')) public void WhenIPressAdd() { output = app.add(input1, input2); }
これは、テスト対象のアプリケーションで実際のメソッドが呼び出される実行(または実行)ステップです。入力変数input1とinput2には、ステップ1で渡された値がすでに含まれているため、アプリケーションインスタンスはこれらの変数を使用してメソッドを呼び出すことができます。
ステップ3: –その場合、結果は90になります。
(Then(@'the result should be (.*)')) public void ThenTheResultShouldBe(double p0) { Assert.AreEqual(p0, output); }
これは検証(またはアサート)ステップであり、メソッド呼び出しによって出力が生成され、アプリケーションインスタンスが期待される出力に対して検証されます。
注意してください、 主張する 使用されるキーワードはNUnitFrameworkからのものであり、設定されている検証/期待に応じてtrueまたはfalseを返します。 falseが返された場合、Stepの実装が失敗し、シナリオの結果が失敗として表示されます。
ポインタのキューc ++
また、出力変数は、アプリケーションインスタンスで実際のメソッドが呼び出された前のステップからの値を取得することに注意してください。
上記と同様に、残りのシナリオステップのステップ実装は同じ方法で実行されますが、違いは、アプリケーションインスタンスで異なるメソッドを呼び出し、異なる出力値をアサートすることです。
すべてのシナリオステップが実装されると、テストを実行できます。
結果の出力は次のようになります。
個々のステップの出力を一覧表示する個々のシナリオの出力を表示することもできます。
結論
この記事で、BDDとは何か、Specflowで取り上げた.NET用のBDDをサポートするツールについての基本的な理解が得られたことを願っています。
また、サンプルアプリケーションを使用して、Specflow機能ファイルのインストールと実行についても説明しました。
コードファイル
アプリケーションで使用されるコードファイルを以下に示します。
CalculatorFeatureSteps.cs
using System; using TechTalk.SpecFlow; using NUnit; using NUnit.Framework; namespace SpecflowBasic.StepDefinitions { (Binding) public class CalculatorFeatureSteps { // instantiating application instance CalculatorApplication app = new CalculatorApplication(); // variables to hold input values and the intermeditate result int input1, input2; double output; (Given(@'I have provided (.*) and (.*) as the inputs')) public void GivenIHaveProvidedAndAsTheInputs(int p0, int p1) { input1 = p0; input2 = p1; } (Given(@'I have provided (.*) as input')) public void GivenIHaveProvidedAsInput(int p0) { input1 = p0; } (When(@'I press add')) public void WhenIPressAdd() { output = app.add(input1, input2); } (When(@'I press substract')) public void WhenIPressSubstract() { output = app.subsctract(input1, input2); } (When(@'I press multiply')) public void WhenIPressMultiply() { output = app.multiply(input1, input2); } (When(@'I press divide')) public void WhenIPressDivide() { output = app.divide(input1, input2); } (When(@'I press squareroot')) public void WhenIPressSquareroot() { output = app.squareRoot(input1); } (Then(@'the result should be (.*)')) public void ThenTheResultShouldBe(double p0) { Assert.AreEqual(p0, output); } } }
CalculatorApplication.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SpecflowBasic { class CalculatorApplication { public int add(int input1, int input2) { return input1 + input2; } public int subsctract(int input1, int input2) { return input1 - input2; } public int multiply(int input1, int input2) { return input1 * input2; } public double divide(double input1, double input2) { return input2 != 0 ? Math.Round(input1 / input2, 2) : 0; } public double squareRoot(int input1) { return input1 != 0 ? Math.Round(Math.Sqrt(input1), 2) : 0; } } }
packages.config
今後のチュートリアルでは、SpecflowとSeleniumWebdriverの使用例をエンドツーエンドで簡単に説明します。
推奨読書
- 初心者向けの詳細なEclipseチュートリアル
- TestLinkチュートリアル:TestLinkテスト管理ツールのレイマンガイド(チュートリアル#1)
- Bugzillaチュートリアル:欠陥管理ツールのハンズオンチュートリアル
- TestCompleteチュートリアル:初心者向けの包括的なGUIテストツールガイド
- SeeTest Automation Tutorial:Mobile Test Automation Tool Guide
- コンピュータネットワークチュートリアル:究極のガイド
- WAVEアクセシビリティテストツールチュートリアル
- BDD(ビヘイビア駆動開発)フレームワーク:完全なチュートリアル