Robot Frameworkのデモアプリを動かす

## Robot Frameworkとは？

[Robot Framework](https://robotframework.org/) とは、Python製のブラウザオートメーションツールです。
自然言語に近い形式でスクリプトを記述できるのが特徴で、受け入れテストの自動化や、RPAのように定型業務を自動化することを想定しています。

公式サイトはそこそこ情報量が多いのですが、クイックスタートというか「この手順どおりやればとりあえず試せるよ」みたいなのが少なかったので、デモ用のWebアプリケーションを動かして、それをテストするところまでの手順をまとめてみました。

## 環境

- Ubuntu 19.04
    - OS依存の部分はあんまりないと思うのでたぶんWinでもMacでも動くと思います
- Python 3.7.4

## インストール

[pip](https://www.python.jp/install/windows/pip.html)がインストールされていることが前提です。

```bash

$ pip install robotframework
```

インストールが成功すると、 `robot` コマンドが利用できるようになります。

## 動かす

公式が用意してくれている [デモアプリケーション](https://github.com/robotframework/WebDemo) を利用します。

### clone～デモアプリ起動まで

```bash

$ git clone git@github.com:robotframework/WebDemo.git
$ cd WebDemo
$ python demoapp/server.py
```

成功すると、 `http://localhost:7272` を開くとログイン画面が表示されます。
デモアプリを終了したいときは `Ctrl+C` 。

### テスト実行

別のターミナルを開き、下記を実行します。

```bash

$ robot login_tests/
```

ブラウザが自動で動き、テスト結果がターミナルに流れてきます。

```
==============================================================================
Login Tests                                                                   
==============================================================================
Login Tests.Gherkin Login :: A test suite with a single Gherkin style test.   
==============================================================================
Valid Login                                                                                                                                 Valid Login                                                           | PASS |
------------------------------------------------------------------------------
Login Tests.Gherkin Login :: A test suite with a single Gherkin st... | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed

（略）

8 critical tests, 8 passed, 0 failed
8 tests total, 8 passed, 0 failed
==============================================================================
Output:  /home/tsuemura/WebDemo/output.xml
Log:     /home/tsuemura/WebDemo/log.html
Report:  /home/tsuemura/WebDemo/report.html
```

`report.html` を開くと、なんか古臭…………シンプルで見やすい感じのレポートが生成されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112393/4e9a58bd-9163-a095-17da-08e22ed672ca.png)

## （おまけ）トラブルシューティング

主にVMやクラウドサーバなどで動かしている場合向けのハマりどころ。
たぶん普通はハマらないポイントのはずなので読み飛ばしていいはず

### デモアプリを違うサーバで動かしたい

デモアプリケーションでは、以下のように `localhost` からのアクセスにのみ制限されています。
`demoapp/server.py` 内の、`'localhost'` と書かれたところを `''` に置き換えると、異なるサーバからもアクセスすることができます。

```demoapp/server.py

class DemoServer(ThreadingMixIn, HTTPServer):
    allow_reuse_address = True

    def __init__(self, port=PORT):
        HTTPServer.__init__(self, ('localhost', int(port)),  # <<< ここの 'localhost' を空欄にする
                            SimpleHTTPRequestHandler)
```

### Selenium Serverを違うサーバで動かしたい

Robot Frameworkを実行するマシンとは別のマシンでSeleniumを動かす場合、`Open Browser` の引数を追加する必要があります。
`login_tests/resource.robot` を以下のように編集してください。

```login_tests/resource.robot

Open Browser To Login Page
    Open Browser    ${LOGIN URL}    ${BROWSER}  None    http://{Selenium ServerのIP}:4444/wd/hub
```

引数のリストは [Selenium Libraryのkeyword documentation](https://robotframework.org/SeleniumLibrary/SeleniumLibrary.html#Open%20Browser) に記載されています。