テスト自動化ツール 　使い方メモ1(robotframework)

# robotframework使い方
仕事でrobotframework を使ったので使い方の備忘録としてこの記事を書きます。
LGTM押してくれると僕のモチベーションが上がるので押してください。


下記について章立てて説明する

1. RobotFramework とは[(参照)](http://robotframework.org/robotframework/#user-guide)
2. インストール方法
1. 使い方
2. 基本的なライブラリ
1. 作成例
1. 実効結果

ライブラリの自作方法については下記参照
[テスト自動化ツール　使い方メモ2](https://qiita.com/rsm223_rip/items/f68ee8363e6815c6696a)

# RobotFramewrok とは

python ベースの**結合／総合テスト自動化、RPA 化などができるフレームワーク**です。RobotFramewrok は拡張可能で他のツールと組み合わせて柔軟にテストの自動化などに使うことができます。拡張機能を追加することで Selenium などにも対応していてブラウザの操作もできます。
また、使用するライブラリも自作可能で python,java での作成が可能です。

実行後は動作結果を html で返してくれる賢い framework です。
**これを使えば、年末進行の無茶なスケジュールでもテスト消化をこなしてくれます。**
(まぁ、robotframework のソース書くのに時間使う事になるけど)

## インストール方法

1. pip でインストールする。
   (あとはお好みで拡張機能のモジュールもインストールするだけ)

   ```shell
pip install robotframework
   ```

## 使い方

```shell
robot <file名>
robot --log <動作ログ> --report <動作結果>  --name <topLevelSuite名> <file名>
# 詳しくは help オプションで
robot --help
```

---

# 書き方

- Settings(モジュールなどのインポート)、Variables(変数の設定)、Test Cases(テストの実行)、Keywords(関数) の段階に分けて作成するイメージ
- とりあえず関数名、テストケースを日本語でも作成できる

# 基本的なライブラリ
  ここを見ればだいたいわかる
  [Robot Framework documentation 参照](http://robotframework.org/robotframework/#standard-libraries)

  - BuiltIn
    - よく使うもの、shoud contain とかのライブラリ自動で呼ばれる。
  - Collections
    - list,dict 系のライブラリ:[link](http://robotframework.org/robotframework/latest/libraries/Collections.html)
  - DateTime
  - Dialogs
  - OperatingSystem
  - Process
  - Remote( nothing)
  - Screenshot
  - String(String の操作とかやってくれる)
  - Telnet(Telnet で接続してコマンドとかやってくれる)
  - XML

---

# 作成例
例としてファイルの作成、削除が正常に動作しているかの確認を行います。

```robot_framework:sample1.robot
* Settings *
Documentation    このテストソースはコマンドを実行するものです。${\n}
...    case1:touchでファイル作成を行う(ファイルができたことの確認もする)${\n}
...    case2:rmで作成したファイルを削除する(ファイルが消えたことの確認もする)
Library    Process
Library    OperatingSystem

* Variables *
# ファイル削除コマンド
${cmd}  rm  ./hogehoge.txt

* Test Cases *
case1
    [Documentation]  touchでファイル作成を行う\
    ...    (ファイルの有無の確認もする)
    # 基本的にpythonのsubprocessみたいな使い方
    Run Process  touch  ./hogehoge.txt
    File Should Exist  ./hogehoge.txt

case2
    [Documentation]  rmで作成したファイルを削除する\
    ...    (ファイル有無の確認もする)
    # 基本的にpythonのsubprocessみたいな使い方
    Run Process  ${cmd}  shell=True
    File Should Not Exist  ./hogehoge.txt

case3
    [Documentation]  ライブラリを使わずにkeywordで${\n}
    ...    case1,case2を行う
    ファイル作成  ./hogehoge.txt
    ${out} =  ファイルの有無を確認  ./  hogehoge.txt
    Should Be True  ${out}
    ファイル削除  ./hogehoge.txt
    ${out} =  ファイルの有無を確認  ./  hogehoge.txt
    Should Not Be True  ${out}

* Keywords *
ファイル作成
    [Documentation]  ファイル作成を行う関数
    [Arguments]  ${filepath}
    Run Process  touch  ${filepath}

ファイル削除
    [Documentation]  ファイル削除を行う関数
    [Arguments]  ${filepath}
    Run Process  rm  ${filepath}

ファイルの有無を確認
    [Documentation]  ファイル有無を確認する。
    [Arguments]  ${dir}   ${filename}
    Log To Console  ${\n}  [exec cmd]ls  ${dir}${filename}
    ${out} =  Run Process  ls  ${dir}${filename}
    Log To Console  [output]${out.stdout}
    #　文字列の比較には変数にもクオートが必須!!
    ${res} =  Set Variable If  '${out.stdout}' != ""  True  False
    Log To Console  [result]${res}
    [Return]  ${res}
```

# 実行結果


```
user@MacBook Robot % robot sample1.robot
==============================================================================
Sample1 :: このテストソースはコマンドを実行するものです。                     
==============================================================================
case1 :: touchでファイル作成を行う(ファイルができたことの確認もする)  | PASS |
------------------------------------------------------------------------------
case2 :: rmで作成したファイルを削除する(ファイルが消えたことの確認... | PASS |
------------------------------------------------------------------------------
case3 :: ライブラリを使わずにkeywordで                                .
[output]./hogehoge.txt
[result]True
...
[output]
[result]False
case3 :: ライブラリを使わずにkeywordで                                | PASS |
------------------------------------------------------------------------------
Sample1 :: このテストソースはコマンドを実行するものです。             | PASS |
3 critical tests, 3 passed, 0 failed
3 tests total, 3 passed, 0 failed
==============================================================================
Output:  ./output.xml
Log:     ./log.html
Report:  ./report.html
```
コマンドの実行後~~クソダサ~~実行結果と実行ログを出力してくれる。
(デザインもう少しどうにかならなかったのか・・・)

- 実行結果(テストに失敗した場合、赤い画面になる)
![スクリーンショット 2020-12-12 18.36.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276495/df410627-afb8-34d8-81e6-7457adc3f341.png)

- 実行ログ(パスした処理を緑、失敗した処理を赤で表示してくれる。)
![スクリーンショット 2020-12-12 18.36.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276495/35d84c67-e3d7-dbeb-d949-e61a161e35f2.png)

---
とりあえず、robotframeworkの使い方はこんな感じです。
後日、ライブラリの作成方法とか気が向いたらなんか投稿します。