Mercari Engineering Blog

We're the software engineers behind Mercari. Check out our blog to see the tech that powers our marketplace.

SeleniumConf Chicagoに参加してきました

f:id:arminmin:20181018093448j:plain

こんにちは。メルカリの自動化&品質保証グループ(Automation & QA Group:通称AQA)でQAエンジニアとしてテスト自動化をぶりぶりしている @arminmin です。 先日、シカゴにて開催された SeleniumConf Chicago に参加してきましたので、その様子をレポートします。

SeleniumConfについて

SeleniumConf は Selenium や、その関連技術に関するカンファレンスです。 Selenium や Appium などを使ってテスト自動化を推進または検討している人々が集まって最新の動向を共有します。 今年は約600人が参加しました。 また2019年4月には東京にて SeleniumConf が開催されることが決定しています。

なぜ SeleniumConf にいったのか

メルカリの AQA では Android アプリケーションのテスト自動化にAppium を使っています。 SeleniumConf は Selenium だけに限らず、Appium などの周辺技術についても発表されるため最新の技術を収集することができると考えました。 また「テスト自動化」といえば「Selenium」が連想されるくらい Selenium は普及しているため、テスト自動化に対する多くの知見を持ち帰れるのではないかという期待も大きかったです。

セッションについて

今回のカンファレンスでは2日間で16のセッションに参加しました。 その中でも特に興味深かったセッションを2つご紹介します。

AI for element selection

f:id:arminmin:20181025134851j:plain

ai で cart の要素を取得するコード
Test.aiのJason Abonさんによる、AI で画面内の要素を取得できるようになるという発表です。 通常、テストを自動化するために id や xpath などを用いて要素を取得していると思いますが、AI に 様々なアプリで使われているアイコン画像を学習させることにより上の画像のように cart や search などのラベルを書くだけで要素が取得できるようになります。
※ AI 学習に使っているアイコン画像はスクレイピングで収集していて、AI が自動的に収集して学習しているわけではありません
このセッションで紹介された Test.ai Classifier Plugin for Appium を実際に使ってみた記事を @AHA-oretama が既に書いているので、使い方や動作速度などはこちらで確認してください。

tech.mercari.com

一昨年くらいから Appium + OpenCV という構成でゲームの自動テストに取り組まれている方が増えてきています。 その技術に AI を組み合わせることでここまでやれるのか!と非常に未来を感じました。 一方で AI の精度が100%にはならないと仰っていたので、状況によっては AI を使ったテストは flaky なテストになるのかな?とも思いました。

今後の動向に注目したいと思います。

Jump starting your testing with Selenium Grid Docker Containers, Selene, and pytest

f:id:arminmin:20181026191526j:plain

make test-env-up
make test
make test-env-down

このセッションの最大のポイントが上記コマンドです。 このコマンドを実行するだけで誰でもテスト環境の構築・テスト実行・テスト環境の廃棄が簡単にできるようにしています。 メルカリの AQA でも自動化にチャレンジしたいというメンバーは非常に多いのですが、環境構築で躓いて先に進めないことが多々あるので非常に学びあるセッションでした。 詳細については発表者の Derrick Kearney さんの Github にて、発表されたスライド含め公開されているのでご確認いただければと思います。 テストを実行することはもちろんですが、デバッグをどうするか?新しいテストを書く際にはどうするか?など、使う人のことを考え抜かれて仕組みが作られています。

特に私が気に入ったのはテスト実行中の状態をVNC経由で実際に画面で見ることができる点です。 メルカリでも以前から「テストが自動化されているのは知っているけど、具体的にどのようなことが自動化されているのかわからない」といった意見が多く上がり、問題になっていました。 このような問題が発生した際に自分のローカル環境で実際にテストの動きをみることができるので、「自動テストがどのように動いているのか」が非常に理解しやすくなると思います。 メルカリではこの問題に対して Turnip を導入することによって解決しようとしていますが、最終的に誰でもローカルで動かして確認できる環境は重要だと再認識しました。

先に記載したとおり、メルカリの AQA でも環境構築の複雑さは問題になっています。 このセッションを聴講するより前から環境構築を改善しようという話はあがっており、改善を進めていました。 しかしながら本セッションを聴講したことで環境構築だけでなくデバッグや新規実装など、運用についても考慮するべきと再認識することができました。 セッションで発表された内容はアプリの自動化には使えなかったので同じ手法は取っていないのですが、非常に良い影響をもらったと思います。

まとめ

いよいよ自動テストに AI を導入できる未来を身近に感じることができて非常に興奮しました。 それと同時に日本のテスト自動化は世界と比べても遅れをとっていないなと感じることができました。 全く同じ内容ではありませんが、発表されていた内容と類似の発表が既に日本国内の勉強会で展開されています。 また AQA の @tadashi も 発表を聞く前から Docker 上で Android Emulator を起動させテストを動かすチャレンジしています。 これは Jump starting your testing with Selenium Grid Docker Containers, Selene, and pytest と似たような構想で、もしかしたらいずれ記事が公開されるかもしれません。

世界がすごく進んでいて、自分たちが遅れていると悲観する必要はないのです。
気を抜いたりすればすぐに置いていかれるという状況ではあると思いますが、引き続き切磋琢磨して世界基準のテスト自動化をメルカリで実現し続けたいなと感じました。

現場で感じたことを文字だけでは伝えきれないので、 AQA POP TALK 内で SeleniumConf Chicago の報告を行うことにしました! よかったら参加してください。

mercaridev.connpass.com

おまけ

f:id:arminmin:20181017123306j:plain
1日に2回も食べたシカゴピザ