シナリオ間の状態共有

行わないでください。

シナリオは互いに独立している必要があるため、シナリオ間で状態を共有しないことが重要です。誤ってあるシナリオから別のシナリオに状態が漏洩すると、シナリオが脆くなり、個別に実行することが困難になります。

シナリオ間での状態の意図しない漏洩を防ぐために

  • グローバル変数または静的変数の使用を避けてください。
  • Beforeフックでデータベースをクリーンアップしてください。
  • シナリオ間でブラウザを共有する場合は、BeforeフックでCookieを削除してください。

ステップ間の状態共有

シナリオ内では、ステップ間で状態を共有したい場合があります。

ステップ定義内で変数に状態を格納することができます。

状態には注意してください

状態によって、ステップがより密結合になり、再利用が困難になる可能性があります。

依存性注入

PicoContainer

Spring

Guice

OpenEJB

Weld

Needle

DI の使用方法

カスタムインジェクターの使用

Cucumberオブジェクトファクトリ

コマンドラインからのCucumberオブジェクトファクトリの使用

プロパティファイルによるCucumberオブジェクトファクトリの使用

テストランナー(JUnit 5/JUnit 4/TestNG)を使用したCucumberオブジェクトファクトリの使用

イベントバス

UUIDジェネレーターの設定

独自のUUIDジェネレーターの定義

データベース

シナリオ間での状態のリークを防ぐために、データベースから状態を削除する方法はいくつかあります。

Beforeフックアプローチ

シナリオ間でデータベースをクリーンアップする推奨されるアプローチは、シナリオの開始前にすべてのデータを削除するBefore フックを使用することです。これは、After フックを使用するよりも通常は優れており、シナリオが失敗した場合にデータベースの事後検査を実行できます。

別の方法として、データベーストランザクションを使用できます。

データベーストランザクションアプローチ

データベースがサポートしている場合、各シナリオの周囲にトランザクションをラップできます。

これにより、シナリオが高速化される可能性がありますが、コストがかかります。事後検査を実行できなくなり、ブラウザの自動化を使用できなくなります。

このアプローチを使用するには、Beforeフックでトランザクションを開始し、後でAfterフックでロールバックするようにCucumberに指示する必要があります。

これは非常に一般的なことなので、いくつかのCucumber拡張機能は、@txnというタグを使用した、すぐに使用できる条件付きフックを提供しています。

有効にするには、トランザクションが必要なすべてのフィーチャまたはシナリオ@txnタグを付ける必要があります。

@txn
Feature: Let's write a lot of stuff to the DB

  Scenario: I clean up after myself
    Given I write to the DB

  Scenario: And so do I!
    Given I write to the DB

JUnit 5とSpringを使用

ブラウザの自動化とトランザクション

HTTP経由でアプリケーションと通信するブラウザの自動化ツールを使用している場合、ステップ定義とHTTPリクエストを提供するWebアプリケーションがそれぞれ独自のデータベース接続を持っている場合、トランザクションアプローチは機能しません。トランザクションがオンの場合、トランザクションはデータベースに決してコミットされません(ただし、各シナリオの最後にロールバックされます)。したがって、Webサーバーの接続はCucumberからのデータを確認せず、したがってブラウザも確認しません。同様に、Cucumberの接続はWebサーバーからのデータを確認しません。

この場合、データベーストランザクションをオフにし、各シナリオの前にテストデータが明示的に削除されるようにする必要があります。

トランザクションのオフにする

データベースのクリーンアップ

このドキュメントの改善にご協力いただけます。このページを編集