CucumberとGherkinを活用したテスト自動化の効率化方法

## はじめに
テスト自動化はソフトウェア開発において重要なプロセスの一つであり、CucumberとGherkinは、テスト自動化の分野でよく使用されるツールです。この記事では、CucumberとGherkinの役割やそれらの違い、そしてどのように連携して使用するかを詳しく解説します。また、APIテストツールとして注目されているApidogの活用方法についても触れ、より効率的なテスト手法をご紹介します。

:::note info
CucumberとGherkinは、テスト自動化の分野で重要なツールであり、開発者と非技術者が共通の理解を持ち、効率的なフィードバックを提供します。また、[Apidog](http://www.apidog.com/jp/?utm_source=opr&utm_medium=a2takuya)を使用することで、APIテストを簡単に行い、CucumberやGherkinで記述したテストシナリオを迅速に実行できます。
Apidogを使用すれば、ユーザーはAPIを設計、テスト、文書化、モックする力を持ちます。カスタムスクリプトの実装、クライアントコードの生成、CI/CD統合と組み合わせることで、Apidogを使用したスムーズなAPI開発が期待できます！
:::

## Cucumberとは？
Cucumberは、BDD（Behavior-Driven Development）に基づいたテスト自動化ツールで、仕様をコードとして表現することを目的としています。Cucumberは、テストケースを人間が読める形式で記述し、開発者と非開発者が共通の理解を持つことを助けます。テストケースは、実行可能なステップにマッピングされ、開発チームが機能を実装しやすくなります。

https://en.wikipedia.org/wiki/Cucumber_(software)

**Cucumberは主に以下の特徴を持っています：**

- BDDを基盤としたテストツール
- 自然言語でテストケースを記述可能
- 開発者とビジネスユーザーのコミュニケーションを支援

## Gherkinとは？
Gherkinは、Cucumberで使用されるドメイン固有言語（DSL）で、テストケースを人間にとって読みやすく書くための形式を提供します。Gherkinを使うことで、テストケースが自然言語のように見えるため、テストの内容が非技術者でも理解できるようになります。Gherkinは主に次の構成要素で構成されています：

- **Feature（機能）**: テストケース全体の説明
- **Scenario（シナリオ** : 特定のテストのシナリオ
- **Given、When、Then** : テストの前提条件、実行するアクション、期待する結果


**例えば、以下のようなGherkinシナリオがあります**：
``` 
Feature: ユーザーがログインできることを確認する

Scenario: 正しいユーザー名とパスワードでログイン
  Given ユーザーはログインページを開いている
  When ユーザーが正しいユーザー名とパスワードを入力する
  Then ユーザーはダッシュボードにリダイレクトされる
```

## CucumberとGherkinの主な違い
CucumberとGherkinの違いは、その役割にあります。Cucumberは実行可能なテストフレームワークであり、テストステップをコードとして実行します。一方、Gherkinはそのテストケースの記述方法を提供するための言語です。簡単に言うと、Gherkinは「どう書くか」、Cucumberは「どう実行するか」を担当します。

- Cucumber: テストフレームワーク、実行可能
- Gherkin: テストケースの記述フォーマット

| **側面** | **Cucumber** | **Gherkin** |
|:-:|:-:|:-:|
| **目的**	  | Gherkinで記述されたテストを実行する|人間が読める形式でテストケースを定義する|
|**型**|  ソフトウェアツール	 |  ドメイン固有の言語|
| **BDDにおける役割**	  | 自動テストを促進する	  |テストシナリオを書くための構文を提供する|
|**技術的な難易度**| 実装にはプログラミング知識が必要|非技術的な利害関係者向けに設計されている|


## CucumberとGherkinの連携方法
CucumberはGherkinで記述されたテストケースを実行します。Gherkinシナリオの「**Given**」「**When**」「**Then**」ステップに対応するコードは、Cucumberのステップ定義ファイルに記述されます。これにより、テストケースを人間が読める形式で記述し、実行可能なコードとして実行できるようになります。

**連携手順**：

- 1. Gherkinでテストシナリオを記述する
- 2. Cucumberでそのテストシナリオに対応するステップ定義を作成する
- 3. Cucumberを実行して、Gherkinシナリオをテストとして実行する

## CucumberとGherkinを使用する利点
CucumberとGherkinの組み合わせは、以下の利点を提供します：

- **テストの可読性**: 非技術者でも理解できる自然言語形式のテストケースを使用することで、開発者とビジネスユーザーが同じ理解を共有できます
- **迅速なフィードバック**: Cucumberでの自動テスト実行により、開発中に早期に問題を発見し、迅速に対応できます
- **自動化による効率化**: テストの自動化により、手動テストの手間を削減し、開発速度を向上させます


### 課題と考慮事項
CucumberとGherkinを導入する際にはいくつかの課題があります：

- **学習コスト**: GherkinとCucumberの使い方を学ぶには、一定の学習が必要です
- **スクリプトの保守**: テストシナリオが増えると、ステップ定義の保守が難しくなります
- **複雑なテストケースの扱い**: 複雑なビジネスロジックをテストする場合、Gherkinのシンプルな構文だけでは不十分になることがあります

## APIテストが必要ですか？ Apidogを使用してください！
APIテストも自動化の重要な部分ですが、[Apidog](http://www.apidog.com/jp/?utm_source=opr&utm_medium=a2takuya)はAPIのテスト、設計、文書化を支援するツールとして非常に便利です。Apidogを使用することで、CucumberやGherkinで記述したテストシナリオを基に、APIの挙動を効率的にテストすることができます。

[Apidog](https://apidog.com/jp/download/)は、APIのリクエストやレスポンスをシミュレートし、テストケースを迅速に実行することができます。また、Postmanと同様に、テスト結果を視覚的に確認でき、テストプロセスの簡素化に貢献します。
![apidog-client-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/44904f54-c5c4-0435-b14e-b518427ac66a.png)

## Apidogテストシナリオ

![apidog-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/6365d2c3-baaf-bf8c-c3a8-57ba103b45c5.png)

Apidogは、複数のAPIを連続して視覚的にテストすることを容易にします。この方法は、機能を果たすために相互依存するAPIのチェーンを作成した開発者に特に便利です。

## Apidogテストシナリオ結果

![apidog-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/bae4565c-2183-5662-073b-8033247ab4cc.png)

Apidogは、テストシナリオに関する包括的なレポートを提供し、成功したリクエストと失敗したリクエストの数、すべてのAPIが完了するまでにかかった総時間を詳しく示します。

## Apidogでポストプロセッサースクリプトを実装する

![apidog-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/48e278ca-13c4-4614-ead2-b0423654d32c.png)

Apidogを使用すると、任意の方法でポストプロセッサーを実装できます。
![apidog-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/7fad911f-343a-6c3a-7ddc-de177a8faed7.png)


アサーション、カスタム、パブリックスクリプトなど、さまざまなポストプロセッサーから選択できます。


## 終わりに
CucumberとGherkinは、テスト自動化において非常に強力なツールです。これらを使用することで、開発者と非技術者が同じ理解を持ち、迅速なフィードバックを得ることができます。また、Apidogを使うことで、APIのテストを効率的に行い、CucumberやGherkinで記述したテストシナリオをより簡単に実行できます。

**最後まで読んでくださり、ありがとうございました！
この記事を読んで少しでも理解を深めていただければ幸いです！**