スポンサーリンク

ReqnrollのStepDefinitionの書き方(C#)

この記事は「Reqnroll × Playwrightで始めるE2Eテスト入門」シリーズの一部です。

ReqnrollのStepDefinitionの書き方(C#)

Reqnrollでは、Featureファイルに書いたシナリオを実際のテストコードに結び付けるために StepDefinition(ステップ定義) を作成します。

StepDefinitionは、Featureファイルの Given / When / Then の文章に対応する C#メソッドです。

この記事では、Reqnrollの StepDefinitionの基本的な書き方を解説します。

この記事でわかること

  • StepDefinitionとは何か
  • StepDefinitionの基本構文
  • Featureファイルとの対応方法
  • パラメータの受け取り方

StepDefinitionとは

StepDefinitionとは、Featureファイルに書かれたステップを C#のコードに対応させる仕組みです。

Featureファイル

Given ログイン画面を開く
When メールアドレス "test@example.com" を入力する
Then ダッシュボード画面が表示される

この文章に対応するC#コードを書きます。

[Given(@"ログイン画面を開く")]
public async Task OpenLoginPage()
{
}

[When(@"メールアドレス ""(.*)"" を入力する")]
public async Task EnterEmail(string email)
{
}

[Then(@"ダッシュボード画面が表示される")]
public async Task DashboardDisplayed()
{
}

StepDefinitionクラスの作成

StepDefinitionは クラスとして作成します。

using Reqnroll;

[Binding]
public class LoginSteps
{
}

[Binding] 属性を付けることで、Reqnrollが StepDefinitionクラスとして認識します。

StepDefinitionの基本構文

StepDefinitionでは 属性(Attribute) を使ってFeatureファイルの文章と対応付けます。

[Given(@"ログイン画面を開く")]
public async Task OpenLoginPage()
{
}

ここで

[Given]

は、Featureファイルの Givenステップに対応します。

同様に以下の属性があります。

属性対応するステップ
[Given]前提条件
[When]操作
[Then]結果

Featureファイルとの対応

Featureファイル

Scenario: 正しい情報でログインできる
Given ログイン画面を開く
When ログインボタンをクリックする
Then ダッシュボード画面が表示される

StepDefinition

[Given(@"ログイン画面を開く")]
public async Task OpenLoginPage()
{
}

[When(@"ログインボタンをクリックする")]
public async Task ClickLoginButton()
{
}

[Then(@"ダッシュボード画面が表示される")]
public async Task DashboardDisplayed()
{
}

Featureファイルの文章と 完全に一致するステップが実行されます。

正規表現によるマッチング

StepDefinitionでは 正規表現を使って文章をマッチさせます。

[When(@"メールアドレス ""(.*)"" を入力する")]
public async Task EnterEmail(string email)
{
}

Featureファイル

When メールアドレス "test@example.com" を入力する

"(.*)" の部分が パラメータとして取得されます。

パラメータの受け取り方

Featureファイル

When メールアドレス "test@example.com" を入力する

StepDefinition

[When(@"メールアドレス ""(.*)"" を入力する")]
public async Task EnterEmail(string email)
{
Console.WriteLine(email);
}

この場合

email = test@example.com

がメソッドに渡されます。

複数のパラメータ

複数の値を受け取ることもできます。

Featureファイル

When ユーザー名 "test" とパスワード "1234" を入力する

StepDefinition

[When(@"ユーザー名 ""(.*)"" とパスワード ""(.*)"" を入力する")]
public async Task EnterLoginInfo(string username, string password)
{
}

Playwrightと組み合わせる例

ReqnrollではStepDefinitionの中で Playwrightなどのテストツールを呼び出します。

[When(@"メールアドレス ""(.*)"" を入力する")]
public async Task EnterEmail(string email)
{
await _page.Locator("#email").FillAsync(email);
}
[When(@"ログインボタンをクリックする")]
public async Task ClickLoginButton()
{
await _page.Locator("#login-button").ClickAsync();
}

このようにして ブラウザ操作を自動化します。

StepDefinitionを書くときのポイント

ステップは短くする

1つのStepDefinitionは 1つの処理にします。

メール入力
パスワード入力
ログインクリック

Featureファイルと同じ文章にする

文章が一致しないとステップが実行されません。

Feature

ログインボタンをクリックする

StepDefinition

ログインボタンをクリックする

共通処理はまとめる

同じステップを複数のScenarioで使うことができます。

ログイン画面を開く

StepDefinitionの配置例

一般的なプロジェクト構成は次のようになります。

Tests
├ Features
│ └ Login.feature

├ Steps
│ └ LoginSteps.cs

└ Hooks
└ PlaywrightHooks.cs

まとめ

ReqnrollのStepDefinitionは、Featureファイルのステップと C#コードを結び付ける重要な仕組みです。

基本的な流れは次の通りです。

  1. Featureファイルにシナリオを書く
  2. StepDefinitionで対応するメソッドを書く
  3. Playwrightなどのテストコードを実装する

この仕組みを使うことで、読みやすいBDD形式のE2Eテストを作成できます。

.NET
スポンサーリンク
シェアする
trelab