読者です 読者をやめる 読者になる 読者になる

Mercari Engineering Blog

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

QAのためのChatOps!テストデータを作成するSlackコマンドを作ってみた

f:id:daipresents2:20170307184721p:plain

こんにちは。メルカリのテスト自動化エンジニアとして、スマホアプリのテスト自動化をぶりぶりしている@daipresentsです。

ChatOpsが運用の効率化として誕生したのであれば、それはソフトウェア開発に関連するどんな手作業にでも適用できそう。そう思いついたので、Slackから簡単にテストデータを作れるSlack Commandを作ってみました。QAエンジニア、テストエンジニアにモテそう。

なぜChatOpsなのか

僕は今、スマホアプリのテスト自動化のお仕事をしていて、テストエンジニアと働いています。彼らは僕のユーザーでもあります。

そのなかで、どのあたりから自動化していくとハッピーかをヒアリングしたところ、一番人気がリグレッションテスト。まぁ、そりゃそうだ。それ以外だと「日々のテストデータ作成」という意見が多く出てきました。

たしかに、ユニットテストレベルであれば、プログラムで簡単に実行できますし、プログラムなので速い。でも、手作業でテストする場合は、画面やアプリをいちいち経由してデータ登録するのでとても手間です。

さらに、プログラミング経験のないテスターは多く(そもそもテスターとプログラマはいろいろ違うしね)、「ユニットテストのコードを参考にプログラム書けば簡単にテストデータ作れるよ」というのも厳しいもの。

そこでChatOpsですよみなさん。

テストデータ作成用Slack Commands

f:id:daipresents2:20170307185153p:plain

できるだけ作らない方法にしたかったのでAPI等は作らず、SlackからJenkinsのジョブをキックする形にしました。簡単にジョブをキックできるように、Build Token Root Pluginを使い、Slack Commandsの設定から以下のようなURLを叩いています。

http://server_name:8080/buildByToken/buildWithParameters?job=qalove&token=XXXXXXXX&slack_token=ZZZZZZZZZZ&text=createitem

これによって、まず、コントローラージョブ(ここではqaloveジョブ)が呼び出されます。コントローラージョブでは、Tokenのチェックといった前処理行い、引数にマッチしたコマンド(ここではcreateitem)を呼び出します。

呼び出されたコマンドでは、テストデータ作成スクリプトをCallするだけ。今回はとても簡単な仕組みで作れました。

 

f:id:daipresents2:20170307185336p:plain

呼び出し方も簡単。Slack上で「/qalove  createitem」のように叩くだけです。

f:id:daipresents2:20170307185356p:plain

実行結果は上のように返ってきます。将来的には、作りたいテストデータの数を引数に与えられたり、作ったテストデータの名前も表示するとよさげ。

Slackは社内全体で使われているツールなので、これで誰でも簡単にテストデータ作成できるようになるはずです。

おまけ機能として、ある人の誕生日には、その人の画像になって、テストデータに「おめでとう!」とか入れる機能も考え中。

ChatOpsのいいところ

ChatOpsを試す前に、テストデータを作成するスクリプトをテスターに試してもらいに行きました。しかし、ライブラリが足りず動きませんでした。

スクリプトを作って環境構築を簡単にする方法もありますが、ユーザがスクリプトを実行する負担は残ります。その負担にはテスターにとってあまり価値がない。

もともと僕は、ChatOpsの良さがわかっていませんでした。ターミナルを使えばできることを、わざわざチャットでやるメリットを感じなかったからです。

でも実はそこにニーズがありました。今回はテストエンジニア向けのアイデアとなりましたが、このフレンドリーなインターフェースの活用はまだまだできそうです。

*

こういう環境をさっくり試せる・作れるフットワークの軽さがメルカリの魅力でもあります。スマホアプリの自動テストに興味のある方は、採用会食といった制度もあるのでぜひ@daipresentsまでメンションくださいませー。