Robot FrameworkでCライブラリを使用


RobotフレームワークのCライブラリの使用方法
紹介する
ここでは、Robot FrameworkのテストライブラリでC言語を使用する方法を簡単な例で示します.以前のPythonバージョンでは統合されていない可能性があり、別途インストールする必要があるPython標準ライブラリのctypesモジュールを使用しています.このモジュールでは、Cコードで記述された共有ライブラリを呼び出す必要があります.現在の例では、OSXでのみテストを実現しています.UnixとLinuxプラットフォームについては大きく異なり、Windowsプラットフォームについては、共有ライブラリのフォーマットと呼び出し方法に注意するだけで、現在は他のプラットフォームに関するテストをしていません.
共有ライブラリ
まず、Cの共有ライブラリを作成する必要があります.
私たちが作成した例は、入力したユーザー名とパスワードで検証し、検証結果を返す非常に簡単なログインシステム(login.c)です.ここでは、demo/modeとjohn/longの2つの合法的なユーザー名パスワードの組み合わせがあります.他の組み合わせはエラーです.以下はlogin.cの完全なコードです.
/*
Simple system that validates passwords and user names. There are two users in
system with valid user name and password. "demo mode" and "john long". All
other user names are invalid. Except that there are bugs. Can you spot them?
*/

#include <string.h>
#define NR_USERS 2

struct User {
    const char* name;
    const char* password;
};
const struct User VALID_USERS[NR_USERS] = { "john", "long", "demo", "mode" };

int validate_user(const char* name, const char* password) {
    int i;
    for (i = 0; i < NR_USERS; i++) {
        if (0 == strncmp(VALID_USERS[i].name, name, strlen(VALID_USERS[i].name)))
            if (0 == strncmp(VALID_USERS[i].password, password,     strlen(VALID_USERS[i].password)))
                return 1;
    }
     return 0;
}

このファイルを共有ライブラリliblogin.so.にコンパイルし、現在のディレクトリの下でMakefileファイルを作成します.Makefileは次のように記述されています.
CC=gcc
SRC=login.c
SO=liblogin.so

$(SO): $(SRC)
    $(CC) -fPIC -shared -o $(SO) $(SRC)

clean:
    rm -f $(SO)

現在のディレクトリでmakeコマンドを実行すると、共有ライブラリliblogin.so.が作成されます.次に、Robot Frameworkテストライブラリを作成してC共有ライブラリを呼び出す方法について説明します.
テストライブラリ
ここでは、Robotフレームワークの仕様に従って、テストライブラリLoginLibrary.py.LoginLibraryを作成する簡単なテストライブラリであり、ctypesモジュールを介して最下位のC共有ライブラリとインタラクティブである.このライブラリには、Check Userというキーワードが1つしか提供されていない.
次はLoginLibrary.pyの完全なコードです.
"""Robot Framework test library example that calls C code.

This example uses Python's standard `ctypes` module, which requires
that the C code is compiled into a shared library.

It is also possible to execute this file from the command line 
to test the C code manually.
"""

from ctypes import CDLL, c_char_p

LIBRARY = CDLL('./liblogin.so')  # On Windows we'd use '.dll'


def check_user(username, password):
    """Validates user name and password using imported shared C library."""
    if not LIBRARY.validate_user(c_char_p(username), c_char_p(password)):
        raise AssertionError('Wrong username/password combination')


if __name__ == '__main__':
    import sys
    try:
        check_user(*sys.argv[1:])
    except TypeError:
        print 'Usage:  %s username password' % sys.argv[0]
    except AssertionError, err:
        print err
    else:
        print 'Valid password'
if __name__ == '__main__'文ブロックはテストライブラリではありません.ここでは、テストライブラリを容易にするために、次のテストコマンドを実行できます.
python LoginLibrary.py demo mode
python LoginLibrary.py demo invalid

私たちのテストライブラリの作成が正しいかどうかを検証しますが、正式なテストライブラリについては、ユニットテストutestと検収テストatestを行う必要があります.ここではあまり紹介しません.テストライブラリを作成してから、テストライブラリから提供されたキーワードの作成例を利用することができます.
テストケース
Robotフレームワークの仕様に従って、テスト用例login_tests.robotを作成します.用例の完全なコードは以下の通りです.
*** Settings ***
Library           LoginLibrary.py

*** Test Case ***
Validate Users
    [Template]    Check Valid User
    johns    long
    demo     mode

Login With Invalid User Should Fail
    [Template]    Check Invalid User
    de          mo
    invalid     invalid
    long        invalid
    ${EMPTY}    ${EMPTY}

*** Keyword ***
Check Valid User
    [Arguments]    ${username}    ${password}
    Check User    ${username}    ${password}

Check Invalid User
    [Arguments]    ${username}    ${password}
    Run Keyword And Expect Error    Wrong username/password combination    Check    User    ${username}    ${password}

私たちのテストセットには、独立した有効なログインテストと無効なログインテストを含むすべてのテストが含まれています.注意してください.私たちのテストサンプルファイルは.robot拡張の末尾を表示していますが、実際にはテキストファイルでもあります.私たちは.txtで終わり、Robotフレームワークも同様に実行できます.サンプル編集が終わり、テストサンプルの実行を開始します.
テストの実行
まず、Robot Frameworkがインストールされていることを確認します.ここでは、インストール方法について説明しません.みんなインストールに成功したと思います.pybot-versionで確認すればいいです.
コンソールに次のコマンドを入力し、テストを実行します.
>pybot login_tests.robot

pybotコマンドには多くのパラメータがオプションですが、ここでは便宜上、デフォルトを選択します.
実行結果は次のとおりです.
==============================================================================
Login Tests                                                                   
==============================================================================
Validate Users                                                        | PASS |
------------------------------------------------------------------------------
Login With Invalid User Should Fail                                   | PASS |
------------------------------------------------------------------------------
Login Tests                                                           | PASS |
2 critical tests, 2 passed, 0 failed
2 tests total, 2 passed, 0 failed
==============================================================================
Output:  ../output.xml
Log:     ../log.html
Report:  ../report.html

出力されたhtmlログとレポートファイルを表示することで、使用例の実行状況を表示できます.
ここでは、Robot FrameworkテストライブラリでCライブラリを呼び出す方法について簡単に説明します.