Robot Frameworkとは

この記事は「[Robot Framework Advent Calendar 2017 - Qiita](https://qiita.com/advent-calendar/2017/robotframework)」の1日目の記事です。

この記事では、Robot Frameworkとは何かというものと、そもそもAdvent Calendarを始めたきっかけを書いていこうと思います。

　  
#### はじめに

今年、Robot Framework にふれる機会がありました。

幸いなことに、既存のRobot Frameworkを使ったテストコードがあったため、どのように使われるのかが分かりやすい状況でした。

また、Robot Frameworkはドキュメントがしっかりしていたため、既存のソースコードの意味も理解しやすかったです。

一方、新規のテストコードを書こうと思った時には悩みました。

既存のテストコードとドキュメントをきちんと読めば何とか書けたものの、クックブック的な情報がなかったので、時々悩みました。

ということで、クックブック的な記事をいくつか書きました。

- [受け入れテストのフレームワークRobot Frameworkで、組込機能であるBuiltin Libraryを使ってみた - メモ的な思考的な](http://thinkami.hatenablog.com/entry/2017/07/13/225814)
- [Robot Framework + Selenium2Libraryで、静的HTMLをテストする - メモ的な思考的な](http://thinkami.hatenablog.com/entry/2017/08/05/071504)
- [Robot Framework + Selenium2Libraryで、HTMLフォームまわりをテストする - メモ的な思考的な](http://thinkami.hatenablog.com/entry/2017/08/06/094230)
- [Robot Framework + Selenium2Libraryで、HTML + JavaScriptまわりをテストする - メモ的な思考的な](http://thinkami.hatenablog.com/entry/2017/08/07/082117)
- その他は、RobotFrameworkカテゴリーを参照ください
  - http://thinkami.hatenablog.com/archive/category/RobotFramework

　  
とはいえ、まだまだRobot Frameworkに関する記事、特に日本語の記事は少ない状況です。

そのため、

- Robot Frameworkに詳しい方
- Robot Frameworkを実際に使っている方
- Robot Frameworkを試してみた方

からもRobot Frameworkに関する日本語の記事があれば嬉しいなと思い、このAdvent Calendarを始めました。

やってみた系の記事でも大歓迎ですので、ぜひAdvent Calendarへの登録をお願いします！

　  
#### Robot Frameworkとは

ここからが本題です。

Robot Frameworkとは、Python製テスト自動化フレームワークになります。受け入れテストなどに使用されています。
http://robotframework.org/


また、オープンソースで開発されています。ソースコードはGitHubで公開されています。
https://github.com/robotframework/robotframework

2017/12/1現在のStar数は1,800超でした。10月頃に調べた時は1,700超でしたので、2ヶ月で100ほど増えているようです。

公式ドキュメントは英語ですが、とても充実しています。だいたいのことはドキュメントに記載されています。
[Documentation - Robot Framework](http://robotframework.org/#documentation)

また、有志の方により日本語訳されたドキュメントもあります。このおかげで、公式ドキュメントで難しいところも理解できました。ありがとうございます。
[Robot Framework 和訳・日本語ドキュメント集 — RobotFramework和訳・日本語ドキュメント集](http://robotframework-ja.readthedocs.io/ja/latest/index.html)

Robot Frameworkについては、日本語訳の「Robot Framework の紹介」のページが大変わかりやすいです。

- [Robot Framework の紹介 — RobotFramework和訳・日本語ドキュメント集](http://robotframework-ja.readthedocs.io/ja/latest/userguide/GettingStarted/Introduction.html)
- 英語版はこちら
  - http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#getting-started

このページに目を通していただくと、Robot Frameworkとは何かをおさえることができるかと思います。

　  
#### 実際のテストコード

とはいえ、実際にテストコードを見ないとどんなものかが分からないかと思います。

そのため、Python + Selenium のテストコードと、Robot Framework + Selenium のテストコードを掲載しておきます[^1]。

[^1]: みんなのPython勉強会 #29 でLTした時のスライドより流用しています： [Robot FrameworkでSeleniumを扱いやすくする - slideship.com](https://slideship.com/users/@thinkami/presentations/2017/09/Uxmuddyd6EuB5jkpEeRDBd/)。

__Python + Selenium__

```py3

def test_GoogleでみんなのPython勉強会を検索する(self):
    browser = webdriver.Chrome()
    browser.get('https://google.co.jp')
    query_input = browser.find_element_by_name('q')
    query_input.send_keys('みんなのPython勉強会' + Keys.ENTER)
    # 結果出力と検証
    links = browser.find_elements_by_css_selector('h3 > a')
    for link in links:
        print(link.text)
    self.assertEqual(len(links), 10)
```

　  
次に上記のコードをRobot Framework + Selenium に移植してみます。

__Robot Framework + Selenium__

```robotframework
*** TestCases ***
GoogleでみんなのPython勉強会を検索するテスト
    Open Browser  https://google.co.jp  Chrome
    Input Text  name=q  みんなのPython勉強会
    Press Key  name=q  \\13
    # 結果出力と検証
    ${links} =  Get Webelements  css=h3 > a
    :For  ${link}  In  @{links}
        \  ${text} =  Get Text  ${link}
        \  Log To Console  ${text}
    Length Should Be  ${links}  10
```

　  
さらに、より日本語っぽく書いてみます。そのテストコードはこちらです。

```robotframework

*** TestCases ***
GoogleでみんなのPython勉強会を検索するテスト
    ChromeでGoogleを開く
    みんなのPython勉強会を検索する
    ${links} =  結果を取得する
    結果「${links}」をターミナルに出力する
    結果「${links}」は10件であること
```

上記のソースコード中の「ChromeでGoogleを開く」などは、以下のような定義[^2]をすることで、テストコードの中で使えます。

[^2]: Robot Frameworkでは、ユーザキーワードと呼びます。Pythonで言えば関数になります。

```robotframework
*** Keywords ***
ChromeでGoogleを開く
    Open Browser  https://google.co.jp  Chrome
#...
結果「${links}」は10件であること
    Length Should Be  ${links}  10
```

　  
Qiitaには、より実践的なテストコードを書かれた方もいらっしゃいますので、こちらも参照してみてください。
[Robot drives on the web: Robot Framework & Selenium2Library - Qiita](https://qiita.com/totutiteta/items/e7b99a76231dbfb0aaf1)

　  
こんな感じで進めていきますので、 Robot Framework Advent Calendar 2017 をどうぞよろしくお願いします。