生産性向上ブログ

継続的な生産性向上を目指すエンジニアのためのブログ

なぜSeleniumテストは不安定なのかとその対策

この記事は、Selenium/Appium Advent Calendar 2016の18日目の記事です。17日目は、xshsakuさんのAppiumとSTFを使ったAndroid実機テストでした。

はじめに

Seleniumテストを運用する上で安定性は大事です。テストが不具合以外の原因で頻繁に失敗してしまうと、チームメンバーは段々テスト結果を気にかけなくなってしまいます。そうなってしまうと、いざ不具合でテストが落ちても気づかれずに後回しになってしまう恐れがあります。自動テストの目的が問題の早期発見であることを考えると、これは深刻な問題になります。

この記事では、Seleniumテストが不安定になりやすい要因とその対策を、自分の経験の中からまとめてみます。

続きを読む

JavaScript in Selenium Test (3): selenium-webdriverをCircleCIで動かす

概要

前回: JavaScript in Selenium Test (2): selenium-webdriverでhookとページオブジェクト

今回は、前回までに実装したテストをCircleCIに乗せてみようと思います。

CircleCI

これまでのテストが入ったリポジトリをCircleCIで有効化してみました。circle.ymlを置かなくても npm test が自動で実行されるのでそのまま動くかと思われましたが、次のようなエラーになりました。

npm test

> selenium-webdriver-samples@1.0.0 test /home/ubuntu/selenium-webdriver-samples
> mocha --require intelli-espower-loader --timeout 300000

SyntaxError: Unexpected token ...
    ...

npm install のログを見てみると、どうやらselenium-webdriverが最新のLTSのnodeのバージョンに依存しているようです。

npm install
WARN engine selenium-webdriver@3.0.1: wanted: {"node":">= 6.9.0"} (current: {"node":"4.2.6","npm":"2.14.12"})

というわけで、次のように circle.yml を記述してnodeのバージョンを指定します。CircleCIのドキュメントを見ると6.1.0までしか対応してなさそうなのですが、どうやら実際にはLTSまで対応しているらしいことがコミュニティに書かれていました

machine:
  node:
    version: 6.9.1

これでグリーンになりました。CircleCIはデフォルトでchromedriverへのパスも通っているので、最小限の設定でSeleniumテストを動かすことができます。

しかし、Test Summaryを見てみるとまだなにも表示されていません。CircleCIにテスト結果を拾ってもらうためには、 $CIRCLE_TEST_REPORTS 環境変数で指定できるディレクトリ下にJUnit形式のXMLファイルを置かないといけません。このために、まず mocha-junit-reporter パッケージをインストールします。

npm install mocha-junit-reporter --save-dev

さらに、 package.jsonnpm test コマンドの内容を修正します。

  "scripts": {
    "test": "./node_modules/.bin/mocha --reporter mocha-junit-reporter --require intelli-espower-loader --timeout 300000"
  },

そして、 circle.yml で環境変数を設定してmochaのテスト結果出力先を設定します。

machine:
  node:
    version: 6.9.1
  environment:
    MOCHA_FILE: $CIRCLE_TEST_REPORTS/junit/test-result.xml

すると、無事にTest Summaryにテスト結果が表示されるようになりました。

Your build ran 1 tests in junit with 0 failures
Slowest test: should work Reserve App should work (took 1.66 seconds).

今回の変更のプルリクエストを作成したところ、ちゃんとCircleCIのチェックの結果がリポジトリ上で確認できました。

f:id:miya-jan:20161206000800p:plain

念のために失敗させたらちゃんと赤くなったので、今回はこれにて完成です。CircleCIの設定の簡単さを実感できました。

まとめ

今回は、selenium-webdriverで記述したSeleniumテストをCircleCI上で動かしてみました。CircleCIが優秀なので設定に困ることはほとんどありませんでした。

今回の修正もGitHubのサンプルリポジトリに取り込んであるので、ご自由にお使いください。

次回は、Seleniumテストで重要になりやすいテストの並列実行について書こうかと思います。

JavaScript in Selenium Test (2): selenium-webdriverでhookとページオブジェクト

概要

前回: JavaScript in Selenium Test (1): selenium-webdriver & Mocha & power-assert

今回は、selenium-webdriverで実際のメンテナンスを意識したコードを書いてみます。

コードをメンテナンスしやすくするために重要なのは、なんらかの変更が発生したときに修正するポイントを最小にすることです。そのためには、各テストで重複しがちなコードを可能な限り意味があるコードとして切り出すことが重要です。今回は、hookとページオブジェクトを使って前回書いたテストコードをリファクタしていきます。

続きを読む

JavaScript in Selenium Test (1): selenium-webdriver & Mocha & power-assert

概要

JavaScriptを使ったSeleniumテストに興味が出てきたので、調査したことを何回かに分けて記事にまとめていきます。

今回は、selenium-webdriverMochapower-assertを使ってSeleniumテストに入門してみます。

環境

この記事は、以下の環境で実行しています。

  • OS: Mac 10.12.1
  • node.js: v6.9.1
  • Chrome: 54.0.2840.98 (64-bit)
  • chromedriver: 2.25
続きを読む

1Kの部屋でエンジニアの開発環境を整えてみた話

はじまり

一人暮らしを始めてから長らく、自宅に本格的な開発環境というものは整えてこなかった。開発環境というのは、主に机、椅子、モニタといったものである。

理由は簡単で、部屋が狭いから。1Kの部屋にはすでにベッド、テレビ、ソファーやカラーボックスがあって、まだギリギリPCデスクを置けなくもないけど、置いたら誰か人を呼んだりとかはできなくなるので嫌だった。昔からの友人と麻雀したり、飲んだりとかそういうことができなくなるのが嫌だった。

しかし、なぜか最近になってそういうことはどうでもいいかなと考えるようになった。別に、麻雀とか飲みとかなら外でやればいい話だし、そもそも30も近づいてくると周囲が家庭持ちとかになってきて、休日にそんなことやろうと言い出す友人も減ってきた。むしろ、がっつりコードなり文章なり書きたいときにノートPCを膝の上に置いた窮屈な姿勢をとることの辛さのほうが増してきた。

というわけで、簡易的に1Kの部屋で開発環境を整えてみたので、今回はそれについて書いてみる。主に、1Kの部屋でコスパ重視で開発環境を整えるということに主眼を置いている。広いL字型デスク置きたいとか、本格的なアーロンチェア購入したい、みたいな人にはあまり参考にならないと思うのであしからず。

続きを読む