Python
robotframework

この記事は「Robot Framework Advent Calendar 2017 - Qiita」の1日目の記事です。

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

 

はじめに

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

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

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

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

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

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

 

とはいえ、まだまだ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 をどうぞよろしくお願いします。


  1. みんなのPython勉強会 #29 でLTした時のスライドより流用しています: Robot FrameworkでSeleniumを扱いやすくする - slideship.com。 

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