この記事は「Robot Framework Advent Calendar 2017 - Qiita」の1日目の記事です。
この記事では、Robot Frameworkとは何かというものと、そもそもAdvent Calendarを始めたきっかけを書いていこうと思います。
はじめに
今年、Robot Framework にふれる機会がありました。
幸いなことに、既存のRobot Frameworkを使ったテストコードがあったため、どのように使われるのかが分かりやすい状況でした。
また、Robot Frameworkはドキュメントがしっかりしていたため、既存のソースコードの意味も理解しやすかったです。
一方、新規のテストコードを書こうと思った時には悩みました。
既存のテストコードとドキュメントをきちんと読めば何とか書けたものの、クックブック的な情報がなかったので、時々悩みました。
ということで、クックブック的な記事をいくつか書きました。
- 受け入れテストのフレームワークRobot Frameworkで、組込機能であるBuiltin Libraryを使ってみた - メモ的な思考的な
- Robot Framework + Selenium2Libraryで、静的HTMLをテストする - メモ的な思考的な
- Robot Framework + Selenium2Libraryで、HTMLフォームまわりをテストする - メモ的な思考的な
- Robot Framework + Selenium2Libraryで、HTML + JavaScriptまわりをテストする - メモ的な思考的な
- その他は、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
また、有志の方により日本語訳されたドキュメントもあります。このおかげで、公式ドキュメントで難しいところも理解できました。ありがとうございます。
Robot Framework 和訳・日本語ドキュメント集 — RobotFramework和訳・日本語ドキュメント集
Robot Frameworkについては、日本語訳の「Robot Framework の紹介」のページが大変わかりやすいです。
このページに目を通していただくと、Robot Frameworkとは何かをおさえることができるかと思います。
実際のテストコード
とはいえ、実際にテストコードを見ないとどんなものかが分からないかと思います。
そのため、Python + Selenium のテストコードと、Robot Framework + Selenium のテストコードを掲載しておきます1。
Python + Selenium
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
*** 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
さらに、より日本語っぽく書いてみます。そのテストコードはこちらです。
*** TestCases ***
GoogleでみんなのPython勉強会を検索するテスト
ChromeでGoogleを開く
みんなのPython勉強会を検索する
${links} = 結果を取得する
結果「${links}」をターミナルに出力する
結果「${links}」は10件であること
上記のソースコード中の「ChromeでGoogleを開く」などは、以下のような定義2をすることで、テストコードの中で使えます。
*** 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
こんな感じで進めていきますので、 Robot Framework Advent Calendar 2017 をどうぞよろしくお願いします。
-
みんなのPython勉強会 #29 でLTした時のスライドより流用しています: Robot FrameworkでSeleniumを扱いやすくする - slideship.com。 ↩
-
Robot Frameworkでは、ユーザキーワードと呼びます。Pythonで言えば関数になります。 ↩