APIテストは近年多くの勢いを得ています。UIが関与していないため、テストが非常に簡単で迅速です。このため、APIテストはシステムのエンドツーエンドテストを実行するための第一選択と見なされています。自動化されたAPIテストをCI/CDパイプラインと統合することで、チームはビルドに関するフィードバックをより迅速に得ることができます。
このブログでは、DELETE APIリクエストについて学び、Playwright Javaを使用してそれらをどのように処理するかを学びます。そして、以下のポイントをカバーします。
- DELETEリクエストとは何ですか?
- Playwright Javaを使用してDELETE APIをどのようにテストしますか?
始めに
前提条件、セットアップ、および構成に関連する詳細を学ぶために以前のチュートリアルブログをチェックすることをお勧めします。
テスト対象のアプリケーション
注文管理機能に関連する複数のAPIを提供する無料利用可能なRESTful e-commerce APIを使用します。これにより、注文の作成、取得、更新、削除が可能です。
このアプリケーションは、DockerまたはNodeJSを使用してローカルにセットアップできます。
DELETEリクエストとは何ですか?
DELETE APIリクエストは、指定されたリソースをサーバーから削除します。一般的に、DELETEリクエストにはレスポンスボディはありません。
リソースはURIによって指定され、サーバーはそれを永久に削除します。DELETEリクエストは安全でも冪等でもないと見なされます。なぜなら、データベースからデータを削除するなど、サーバーに副作用を引き起こす可能性があるからです。
以下は、DELETEリクエストのいくつかの制限です:
- DELETEリクエストを使用して削除されたデータは元に戻せないため、慎重に扱う必要があります。
- これは、安全なメソッドとは見なされず、データベースからリソースを直接削除できるため、システムに対して競合を引き起こす可能性があります。
- これは冪等なメソッドではなく、同じリソースに対して複数回呼び出すと異なる状態になる場合があります。例えば、最初の呼び出しでDELETEが実行されると、リソースが削除されたことを示すステータスコード204が返され、同じリソースに対してDELETEが再度呼び出されると、既にリソースが削除されているため、404 NOT FOUNDが返される可能性があります。
以下は、RESTful eコマースプロジェクトのDELETE APIエンドポイントの例です。
DELETE /deleteOrder/{id}
: IDによる注文の削除

このAPIでは、システムから該当する注文を削除するために、order_id
をパスパラメータとして提供する必要があります。このDELETE APIリクエストには、リクエストボディを提供する必要はありません。ただし、セキュリティ対策として、注文を削除するためにtoken
をヘッダー
として提供する必要があります。
APIが実行されると、指定された注文がシステムから削除され、ステータスコード204が返されます。
注文が見つからない場合、またはトークンが無効であるか提供されていない場合、次のレスポンスが表示されます:
Status Code | Description |
---|---|
400 |
トークンの認証に失敗しました |
404 |
指定された |
403 | リクエストにトークンがありません |
Playwright Javaを使用してDELETE APIをテストする方法
DELETE APIのテストは、アプリケーションの安定性と信頼性を確保するための重要なステップです。DELETE APIの正しい実装は、意図しないデータ損失や不整合を確認するために不可欠であり、DELETE APIはリソースをシステムから削除する役割を担っています。
Playwright Javaを使用してDELETE APIをテストするこのデモでは、/deleteOrder/{id}
を使用してシステムから既存の注文を削除します。
テストシナリオ1:有効な注文を削除する
- RESTful eコマースサービスを開始します。
- POSTリクエストを使用して、システムにいくつかの注文を作成します。
- DELETEリクエストを使用して、
order_id
“1”の注文を削除します。 - レスポンスにステータスコード204が返されることを確認します。


テスト実装
テストシナリオを実装するために必要な手順は次のとおりです:
- 新しい注文をPOSTリクエストを使って追加します。
- トークンを生成するために
/auth
APIにアクセスします。 - トークンと
order_id
を使って/deleteOrder/
APIエンドポイントにアクセスし、注文を削除します。 - レスポンスにステータスコード204 が返されることを確認します。
新しいテストメソッドtestShouldDeleteTheOrder()
,が既存のテストクラスHappyPathTests
. に作成されます。このテストメソッドは、DELETE APIをテストするために上記の3つのステップを実装します。
public void testShouldDeleteTheOrder() {
final APIResponse authResponse = this.request.post("/auth", RequestOptions.create().setData(getCredentials()));
final JSONObject authResponseObject = new JSONObject(authResponse.text());
final String token = authResponseObject.get("token").toString();
final int orderId = 1;
final APIResponse response = this.request.delete("/deleteOrder/" + orderId, RequestOptions.create()
.setHeader("Authorization", token));
assertEquals(response.status(), 204);
}
最初にPOST/auth
APIエンドポイントにアクセスしてトークンを生成します。レスポンスで受け取ったtoken
は、DELETE APIリクエストで使用するためにトークン変数に保存されます。

次に、testShouldCreateNewOrders()
メソッドを使用して新しい注文が生成されます。このメソッドは、前のチュートリアルで既に説明したもので、Playwright Javaを使ったPOSTリクエストのテストについて話しました。
注文が生成された後、次のステップは特定の注文を削除するために有効なorder_id
を使ってDELETEリクエストを送信することです。

私たちはorder_id
「1」を使って、 delete()
メソッドを使用して注文を削除します。
注文が削除された後、ステータスコード204が応答として返されます。削除アクションが成功したことを確認するために、ステータスコードに対してアサーションが行われます。応答にリクエストボディが返されないため、これが確認できる唯一のことです。
テスト実行
テスト実装で議論した手順の順番でテストを実行するために、新しいtestng.xmlをtestng-restfulecommerce-deleteorders.xml
という名前で作成します。
<suite name="Restful ECommerce Test Suite">
<test name="Testing Happy Path Scenarios of Creating and Updating Orders">
<classes>
<class name="io.github.mfaisalkhatri.api.restfulecommerce.HappyPathTests">
<methods>
<include name="testShouldCreateNewOrders"/>
<include name="testShouldDeleteTheOrder"/>
</methods>
</class>
</classes>
</test>
</suite>
まず、testShouldCreateNewOrders()
テストメソッドが実行され、新しい注文が作成されます。次に、testShouldDeleteTheOrder()
テスト メソッドの順番が実行され、削除注文APIがテストされます。
IntelliJ IDEを使用して実行されたテストのスクリーンショットは、テストが成功裏に実行されたことを示しています。

次に、削除されたorder_id
を持つGET /getOrder
APIエンドポイントを呼び出す新しいテストを作成して、注文が正しく削除されたかどうかを確認しましょう。
テストシナリオ2:削除された注文の取得
order_id
“1”の有効な注文を削除します。- GET
/getOrder
APIを使用して、order_id
“1”の注文を取得しようとします。 - 応答にメッセージ“指定されたパラメータに一致する注文は見つかりません!” とともに、ステータスコード404が返されることを確認します。
テスト実装
新しいテストメソッドtestShouldNotRetrieveDeletedOrder()
を既存のクラスHappyPathTests
に作成しましょう。
public void testShouldNotRetrieveDeletedOrder() {
final int orderId = 1;
final APIResponse response = this.request.get("/getOrder", RequestOptions.create().setQueryParam("id", orderId));
assertEquals(response.status(), 404);
final JSONObject jsonObject = new JSONObject(response.text());
assertEquals(jsonObject.get("message"), "No Order found with the given parameters!");
}
このシナリオのテスト実装は非常にシンプルです。order_id
「1」で削除された注文を取得するためにGET /getOrder
APIを実行します。
次に、GET APIがステータスコード404を返し、メッセージが「指定されたパラメーターで注文が見つかりません!」であることを確認するアサーションを適用します。
このテストは、削除注文APIが正常に機能し、注文がシステムから削除されたことを確認します。
テスト実行
testng.xml
ファイルを更新し、このテストシナリオを削除テストの後に追加しましょう。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Restful ECommerce Test Suite">
<test name="Testing Happy Path Scenarios of Creating and Updating Orders">
<classes>
<class name="io.github.mfaisalkhatri.api.restfulecommerce.HappyPathTests">
<methods>
<include name="testShouldCreateNewOrders"/>
<include name="testShouldDeleteTheOrder"/>
<include name="testShouldNotRetrieveDeletedOrder"/>
</methods>
</class>
</classes>
</test>
</suite>
これで、すべてのテストが順番に実行されるはずです。最初のテストは注文を作成し、2番目のテストはorder_id
「1」の注文を削除し、最後のテストはorder_id
「1」でGET APIを実行してステータスコード404を返します。

上のスクリーンショットは、すべてのテストが正常に実行され、DELETE APIが期待通りに正常に動作したことを示しています。
まとめ
DELETE APIリクエストは、システムからリソースを削除することを可能にします。削除は重要なCRUD機能であるため、テストしてシステムが期待通りに動作していることを確認することが重要です。ただし、DELETEは不可逆的なプロセスであるため、常に注意して使用する必要があります。
私の経験によれば、DELETEリクエストを実行した後にGET APIを呼び出して、指定されたリソースがシステムから正常に削除されたかどうかを確認するのは良いアプローチです。
テストを楽しんでください!
Source:
https://dzone.com/articles/test-delete-requests-for-api-testing-with-playwright-java