Robot Frameworkとは
Robot Frameworkは、オープンソースのテスト自動化フレームワークです。Pythonで開発されており、柔軟性と拡張性があります。Robot Frameworkは、テストケースやテストスイートの作成、実行、およびレポート生成をサポートします。
Robot Frameworkの特徴的な機能の一つは、自然言語に似たドメイン固有言語(DSL)を使用してテストケースを記述することができる点です。このDSLは、人間が理解しやすく、ビジネスステークホルダーとのコミュニケーションを容易にします。
Robot Frameworkは、様々なプラグインやライブラリを使用して機能を拡張することができます。例えば、Seleniumライブラリを使用してWebアプリケーションのテストを行ったり、SSHLibraryを使用してネットワーク機器の自動化を行ったりすることができます。また、Robot Frameworkはさまざまなプラットフォームと統合することも可能です。たとえば、CI/CDパイプラインに組み込んでテストを自動化したり、テスト管理ツールと統合してテスト結果を追跡したりすることができます。
総合的に見て、Robot Frameworkはテスト自動化を効率的かつ柔軟に行うための強力なツールであり、ビジネスドメインのエキスパートから開発者まで、幅広いユーザーに利用されています。
プロジェクト:Robot FrameworkでAPIテスト自動化を実現
プロジェクトの技術スタックは:
- Robot Framework
- RequestsLibrary
- HttpLibrary.HTTP
プロジェクトの構造図は次のようになり:
プロジェクトの説明
このフレームワークでは、APIを階層化して管理しています。階層化のルールは「APIデータとビジネスロジックを分離する」とします。以下のような特徴があります:
- プロジェクトディレクトリを階層化します。
- テストケースを、データとビジネスロジックから分離します。
- テストケースには可変長パラメータを渡すことができ、またテストケースの実行順序を定義することもできます。
ディレクトリ構造の説明
- 共通の設定:設定ファイル、共有メソッド、共有関数を主に格納します。
- ベースモジュール:カプセル化されたリクエスト関数、ユーティリティ関数を主に格納します。
- 機能コンポーネント:カプセル化されたリクエストコンポーネントを主に格納します。
- メインテストケース&プロジェクトテストケース:APIのテストケースを格納します。
Robot Frameworkのインストール
まず、Robot Frameworkをインストールする必要があります。pipを通じてインストールできます。具体的なコマンドは次の通りです:
pip install robotframework
関連のライブラリのインストール
そして、APIテスト自動化に関連するライブラリをインストールする必要があります。次のコマンドでインストールすることができます:
Copy code
pip install robotframework-requests
pip install robotframework-jsonlibrary
pip install robotframework-databaselibrary
この中で、robotframework-requests
はHTTPリクエストを送信する時に使われ、robotframework-jsonlibrary
はJSONフォーマットのデータを処理する時に使われ、robotframework-databaselibrary
は、データベースとのインタラクションに使われます。
リクエストメソッド
リクエストメソッドのカプセル化は次のようなコマンドで行います:
* Settings *
Library RequestsLibrary
Library Collections
Library HttpLibrary.HTTP
Resource ../icmcenterApi/共通の設定/共通の設定_index.txt
* Keywords *
SendPost
[Arguments] ${root_url} ${uri} ${ParameterDict} ${DataType} ${header}
[Documentation] ${root_url}:APIのhost;
... ${uri}:APIのuri;
... ${dict}:APIへのリクエストに渡されるパラメータ、辞書(dictionary)データ型;
... ${DataType}:渡されるパラメータのデータ型、例:dataなど;
... ${header}:リクエストのヘッダー、辞書(dictionary)データ型。
...
... レスポンスのデータはjson型になります。
...
... 独立したリクエストの場合、リクエストが終了した後、接続をすぐに解放することができます。
${RequestData} Create Dictionary
log ${ParameterDict.keys()}
: FOR ${key} IN @{ParameterDict.keys()}
\ set to dictionary ${RequestData} ${key} ${ParameterDict['${key}']}
log ${RequestData}
create session api ${root_url}
${response} post request api ${uri} ${DataType}=${RequestData} headers=${header} timeout=${timeout}
# jsonのstring型のデータをpythonの辞書(dictionary)型に変換します。
Comment ${ResponseBody} To Json ${response.content}
sleep ${sleepTime}
log ${response.text}
[Return] ${response.text}
SendGet
[Arguments] ${root_url} ${uri} ${ParameterDict} ${header}
[Documentation] レスポンスのデータはJson型です
${RequestData} Create Dictionary
log ${ParameterDict.keys()}
: FOR ${key} IN @{ParameterDict.keys()}
\ set to dictionary ${RequestData} ${key} ${ParameterDict['${key}']}
log ${RequestData}
create session api ${root_url}
${response} get request api ${uri} params=${RequestData} headers=${header} timeout=${timeout}
Comment ${ResponseBody} To Json ${response.content}
sleep ${sleepTime}
log ${response.text}
[Return] ${response.text}
re_session
[Arguments] ${host}
[Documentation] Sessionを作成
create session session ${host}
re_post
[Arguments] ${uri} ${ParameterDict} ${DataType} ${header}
[Documentation] Sessionを作成しなく、POSTリクエストのみを送信;
... レスポンスのデータはJson型です
${RequestData} Create Dictionary
log ${ParameterDict.keys()}
: FOR ${key} IN @{ParameterDict.keys()}
\ set to dictionary ${RequestData} ${key} ${ParameterDict['${key}']}
log ${RequestData}
${response} post request session ${uri} ${DataType}=${RequestData} headers=${header} timeout=${timeout}
Comment ${ResponseBody} To Json ${response.content}
sleep ${sleepTime}
log ${response.text}
[Return] ${response}
re_get
[Arguments] ${uri} ${ParameterDict} ${header}
[Documentation] Sessionを作成しなく、GETリクエストのみを送信;
... レスポンスのデータはJson型です
${RequestData} Create Dictionary
log ${ParameterDict.keys()}
: FOR ${key} IN @{ParameterDict.keys()}
\ set to dictionary ${RequestData} ${key} ${ParameterDict['${key}']}
log ${RequestData}
${response} get request session ${uri} params=${RequestData} headers=${header} timeout=${timeout}
Comment ${ResponseBody} To Json ${response.content}
sleep ${sleepTime}
log ${response.text}
[Return] ${response}
テストケースを新規作成
テストスイートに新しいテストケースを作る:
テストケースの情報を記入します:
リクエスト
まずは、RobotFrameworkを使用してSessionを作成する必要があります。このSessionは次のことを実現できます:
- その後のリクエストに「コンテナ」を提供するので、その後の複数のリクエストもこのSessionで開始できます。
- 状態を維持します。例えば、Sessionを作成した後、SessionでログインのAPIリクエストの送信に成功すると、その後の全てのリクエストも「ログイン済み」状態になります。
- Sessionでheadersとcookies情報を設定・取得します:リクエストを送信するたびに使用され、「デフォルト値」の効果があります。
そして、Sessionの画面に移動し、基本情報を記入します:
記入が終わると、リクエストを直接に送信します:
その代わりに、Sessionでリクエストを送信することもできます。
上記のように、RobotFrameworkは非常に優れていたテスト自動化フレームワークなのですが、学習曲線があります。RobotFrameworkを使ってテスト自動化を実現するために、その設定がややこしくなっています。
ApidogでAPIテスト自動化を実現
それでは、APIテスト自動化を実現できるもっと直感的な対策はありませんか?次は、Apidogという包括的なAPI管理ツールを皆さんに紹介します。Apidogは、直感的なUIでAPIテスト自動化を簡単に実現することができます。
強力なテスト自動化機能を使って、テストケースを作成したり、テストのコレクションを作成したりすることができます。また、全ての操作は直感的なUIで行えるので、ノーコードでテスト自動化を実現できるのは何よりです。
ApidogでAPIテスト自動化を行える手順
ステップ⒈ プロジェクトを選択して、左側メニューから「自動テスト」を選択して、「+」ボタンをクリックして、「新規テストケース」を選択します。
ステップ⒉ここで新規テストケースの各項目を設定して、「確認」ボタンを押します。
ステップ⒊ テストのステップを追加します。APIのテストケースから、APIからインポートすることもできますし、カスタムRequestを追加することもできます。また、必要に応じて、グループ、繰り返し、条件分岐、待ち時間などの項目を設定することも可能です。
ステップ⒋ 右側のメニューでテストの設定項目を自分のニーズに応じてカスタマイズすることができます。
往復:設定したテストのステップを繰り返し回数を設定します。
スレッド数:同時に実行状態に置くことができるプログラム数を設定します。
ステップ⒌ 設定が終わると、「実行」ボタンをクリックして、テストを開始します。テストプロセスが終わると、詳細のテストレポートが生成され、各リクエストの詳細情報も確認できます。