Apidog

オールインワン協働API開発プラットフォーム

API設計

APIドキュメント

APIデバッグ

APIモック

API自動テスト

完全ガイド:RobotFrameworkによるテスト自動化対策

Robot Frameworkはテスト自動化を効率的かつ柔軟に行うための強力なツールです。本文では、Robot Frameworkを使ってテスト自動化を実現する対策を皆さんに紹介します。

中村 拓也

中村 拓也

Updated on 11月 12, 2024

Robot Frameworkとは

Robot Frameworkは、オープンソースのテスト自動化フレームワークです。Pythonで開発されており、柔軟性と拡張性があります。Robot Frameworkは、テストケースやテストスイートの作成、実行、およびレポート生成をサポートします。

Robot Frameworkの特徴的な機能の一つは、自然言語に似たドメイン固有言語(DSL)を使用してテストケースを記述することができる点です。このDSLは、人間が理解しやすく、ビジネスステークホルダーとのコミュニケーションを容易にします。

Robot Frameworkは、様々なプラグインやライブラリを使用して機能を拡張することができます。例えば、Seleniumライブラリを使用してWebアプリケーションのテストを行ったり、SSHLibraryを使用してネットワーク機器の自動化を行ったりすることができます。また、Robot Frameworkはさまざまなプラットフォームと統合することも可能です。たとえば、CI/CDパイプラインに組み込んでテストを自動化したり、テスト管理ツールと統合してテスト結果を追跡したりすることができます。

Robot Framework

総合的に見て、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の画面に移動し、基本情報を記入します:

Session画面で情報を記入

記入が終わると、リクエストを直接に送信します:

リクエストを送信

その代わりに、Sessionでリクエストを送信することもできます。

Sessionでリクエストを送信

上記のように、RobotFrameworkは非常に優れていたテスト自動化フレームワークなのですが、学習曲線があります。RobotFrameworkを使ってテスト自動化を実現するために、その設定がややこしくなっています。

ApidogでAPIテスト自動化を実現

それでは、APIテスト自動化を実現できるもっと直感的な対策はありませんか?次は、Apidogという包括的なAPI管理ツールを皆さんに紹介します。Apidogは、直感的なUIでAPIテスト自動化を簡単に実現することができます。

強力なテスト自動化機能を使って、テストケースを作成したり、テストのコレクションを作成したりすることができます。また、全ての操作は直感的なUIで行えるので、ノーコードでテスト自動化を実現できるのは何よりです。

button

ApidogでAPIテスト自動化を行える手順

ステップ⒈ プロジェクトを選択して、左側メニューから「自動テスト」を選択して、「」ボタンをクリックして、「新規テストケース」を選択します。

Apidogで新規テストーケースを作成

ステップ⒉ここで新規テストケースの各項目を設定して、「確認」ボタンを押します。

新規テストケースの情報を入力

ステップ⒊ テストのステップを追加します。APIのテストケースから、APIからインポートすることもできますし、カスタムRequestを追加することもできます。また、必要に応じて、グループ、繰り返し、条件分岐、待ち時間などの項目を設定することも可能です。

テストステップの追加

ステップ⒋ 右側のメニューでテストの設定項目を自分のニーズに応じてカスタマイズすることができます。

テストの設定

往復:設定したテストのステップを繰り返し回数を設定します。

スレッド数:同時に実行状態に置くことができるプログラム数を設定します。

ステップ⒌ 設定が終わると、「実行」ボタンをクリックして、テストを開始します。テストプロセスが終わると、詳細のテストレポートが生成され、各リクエストの詳細情報も確認できます。

テストのレポートの取得
初心者必読!ApidogでのPOSTリクエスト作成法効果的な戦略

初心者必読!ApidogでのPOSTリクエスト作成法

Apidogを使用してPOSTリクエストを作成するプロセスは簡単で、API開発とテストを合理化する幅広い機能を提供します。初心者から経験豊富な開発者まで、Apidogは強力なツールとして役立ちます。

中村 拓也

10月 21, 2024

手動テスト完全解説:品質を保証する最後の砦効果的な戦略

手動テスト完全解説:品質を保証する最後の砦

手動テストはソフトウェアテストライフサイクルに欠かせない要素であり、アプリケーションの品質、使いやすさ、機能を保証します。自動化の利点がある一方で、手動テストは機械では得られない貴重な洞察と創造性を提供し、包括的なテスト戦略として重要です。

中村 拓也

10月 18, 2024

PostmanでHTTP 405 メソッドなしエラーを修正する方法効果的な戦略

PostmanでHTTP 405 メソッドなしエラーを修正する方法

HTTP 405エラーコードは、無効なAPIキーまたはアクセストークンを使用してサーバーにアクセスしようとすると発生します。この記事では、405エラーについて学び、それを修正する方法について、段階的に解説します。

中村 拓也

8月 11, 2024