Help us understand the problem. What is going on with this article?

テストで個人的によく使うツール7選

はじめに

こんにちは。みなさん、テストしてますか?
開発者にとってはもちろん、テスターやQAにとっても、時にソフトウェアテストは退屈で辛い作業になりがちです。
特にメールや外部サービスが絡む部分はテストがしづらい分面倒ですね。

そこで今回は、テスタビリティを高めるために自分がよく使うサービスやライブラリを紹介していこうと思います。

mailhog

https://github.com/mailhog/MailHog

SMTPサーバとして動き、送られたメールを全てキャッチしてWebUIから見ることが出来ます。メールの絡むテストには必須。
mail = env === 'honban' ? mail : 'hoge@example.com' みたいなifををこの世から滅殺したり、うっかりステージングサーバから本物のメールを送って事故死するリスクを無くすことが出来ます。
特徴的なのが、SMTPではなくPHPの mail() 関数などを使いsendmail, postfixなどで自サーバからメールを送っているパターンにも対応できる点。これで古のLAMPシステムも安全に改修できますね。

同様のことが出来るSaaSで mailtrap などがあります(前述のsendmailの代替のような機能はない)。
また、Railsだとletter openerというgemがあるのでそちらを使うほうが楽です。

Postman

https://www.getpostman.com/

APIテストのためのいわゆるRESTクライアント(HTTPリクエストを送るためのツール)です。有名どころなので知ってる人も多そう。
自動テストツールやモックとしても使えますが、なんやかんや手動テストで一番良く使うイメージがあります。

意外と使いこなせてない人が多い印象ですが、実は環境変数を使って一つのテストを複数の環境に送信したり、フォルダ内の全てのテストに特定のヘッダをつける(例えばAuthorizationヘッダを複数のテストで共有する)ような事ができ、かゆいところに手が届く便利ツールです。
curlで頑張ってた人は反省してPostman使いましょう。

CodeceptJS & Puppeteer

言わずとしれた超有名ブラウザテスト自動化フレームワークです。
ちょっとした手順を自動化するときに、ロケータが書きやすいのとWaitが勝手にかかるので重宝します。

詳しい使い方はこことか こことか を見てもらえれば完璧に理解できると思いますが、時間がない人向けに簡単にサンプルコードを貼っておきます。

# インストール
$ npm install -g codeceptjs puppeteer
// テストコード
fixture('sample')
test('sample', (I) => {
    I.amOnPage('https://github.com')
    I.fillField('Username', 'foo@example.com')
    I.fillField('Email', 'foo')
    I.fillField('Password', 'P@ssw0rd!')
    I.click('Sign up for GitHub')
})

このように、表示されている文字列を使って要素を探索してくれるので、ブラウザのDOM Inspectorを使ってクラス名をコピペしたりしなくても自動化ができます。楽。
SPA対応してるので何もしなくてもよしなに待ってくれます(要 retryFailedStep プラグイン)。

スクリプトを書くまででもないが自動化したい、例えばフォーム入力のようなタスクは、これではなく iMacros というChromeエクステンションを使う事が多いです。

Lightshot

https://app.prntscr.com/en/index.html

Excelスクリーンショットおじさん向け。
PrintScreen キーにバインドして、画面の任意の箇所を切り取って、その場で矢印や文字入れなどの簡単な加工をし、それを直接クリップボードにブチこんでくれます。
この使い勝手の良さは文章では説明できないので、是非一度試してみていただきたい……スクショの生産性が圧倒的に高まります。

LightshotはWindowsとMacOSで使えますが、Linuxデスクトップユーザーには Flameshot という似たような名前のものがあり、こちらは文字挿入ができない代わりにモザイクがかけられます。

jq

https://stedolan.github.io/jq/

コマンドです。
JSONファイルをきれいに表示したり、JSONPathを使って抽出したりすることが出来るのですが、意外と便利なのが -ac オプションです。
これは入力をUnicodeエスケープして表示させてくれます。スペースがただのスペースかどうかを判定したりするときによく使います。

echo '"space space"' | jq -ac
"space\u2003space"  # ただのスペースと思いきや だったことがわかる

Vimium

image.png

https://chrome.google.com/webstore/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb

Chrome Extensionで、VimキーバインドでChromeを操作できるというコンセプトなのですが、 F キーを押すとページ内の各要素に対応する文字が表示されて、文字をタイプすることでその要素をクリックすることが出来ます。
Webアプリのテストをしていて、ページ内をマウスであっちこっちやるのが辛い時に非常に便利。
他にも、Bookmark内をインクリメンタルサーチしたりも出来ます。

あとはマクロ機能があれば最強なんだけどな……

big-list-of-naughty-strings

https://github.com/minimaxir/big-list-of-naughty-strings

フォームに入力されると困りそうな文字列集です。
普通の2バイト文字からASCII制御文字、UNICODEフォント、絵文字などヤバそうなのが盛りだくさん。
以下に一部抜粋します。

#   Zalgo Text
#
#   Strings which contain "corrupted" text. The corruption will not appear in non-HTML text, however. (via http://www.eeemo.net)

Ṱ̺̺̕o͞ ̷i̲̬͇̪͙n̝̗͕v̟̜̘̦͟o̶̙̰̠kè͚̮̺̪̹̱̤ ̖t̝͕̳̣̻̪͞h̼͓̲̦̳̘̲e͇̣̰̦̬͎ ̢̼̻̱̘h͚͎͙̜̣̲ͅi̦̲̣̰̤v̻͍e̺̭̳̪̰-m̢iͅn̖̺̞̲̯̰d̵̼̟͙̩̼̘̳ ̞̥̱̳̭r̛̗̘e͙p͠r̼̞̻̭̗e̺̠̣͟s̘͇̳͍̝͉e͉̥̯̞̲͚̬͜ǹ̬͎͎̟̖͇̤t͍̬̤͓̼̭͘ͅi̪̱n͠g̴͉ ͏͉ͅc̬̟h͡a̫̻̯͘o̫̟̖͍̙̝͉s̗̦̲.̨̹͈̣
̡͓̞ͅI̗̘̦͝n͇͇͙v̮̫ok̲̫̙͈i̖͙̭̹̠̞n̡̻̮̣̺g̲͈͙̭͙̬͎ ̰t͔̦h̞̲e̢̤ ͍̬̲͖f̴̘͕̣è͖ẹ̥̩l͖͔͚i͓͚̦͠n͖͍̗͓̳̮g͍ ̨o͚̪͡f̘̣̬ ̖̘͖̟͙̮c҉͔̫͖͓͇͖ͅh̵̤̣͚͔á̗̼͕ͅo̼̣̥s̱͈̺̖̦̻͢.̛̖̞̠̫̰
̗̺͖̹̯͓Ṯ̤͍̥͇͈h̲́e͏͓̼̗̙̼̣͔ ͇̜̱̠͓͍ͅN͕͠e̗̱z̘̝̜̺͙p̤̺̹͍̯͚e̠̻̠͜r̨̤͍̺̖͔̖̖d̠̟̭̬̝͟i̦͖̩͓͔̤a̠̗̬͉̙n͚͜ ̻̞̰͚ͅh̵͉i̳̞v̢͇ḙ͎͟-҉̭̩̼͔m̤̭̫i͕͇̝̦n̗͙ḍ̟ ̯̲͕͞ǫ̟̯̰̲͙̻̝f ̪̰̰̗̖̭̘͘c̦͍̲̞͍̩̙ḥ͚a̮͎̟̙͜ơ̩̹͎s̤.̝̝ ҉Z̡̖̜͖̰̣͉̜a͖̰͙̬͡l̲̫̳͍̩g̡̟̼̱͚̞̬ͅo̗͜.̟
̦H̬̤̗̤͝e͜ ̜̥̝̻͍̟́w̕h̖̯͓o̝͙̖͎̱̮ ҉̺̙̞̟͈W̷̼̭a̺̪͍į͈͕̭͙̯̜t̶̼̮s̘͙͖̕ ̠̫̠B̻͍͙͉̳ͅe̵h̵̬͇̫͙i̹͓̳̳̮͎̫̕n͟d̴̪̜̖ ̰͉̩͇͙̲͞ͅT͖̼͓̪͢h͏͓̮̻e̬̝̟ͅ ̤̹̝W͙̞̝͔͇͝ͅa͏͓͔̹̼̣l̴͔̰̤̟͔ḽ̫.͕
Z̮̞̠͙͔ͅḀ̗̞͈̻̗Ḷ͙͎̯̹̞͓G̻O̭̗̮


#   Unicode Upsidedown
#
#   Strings which contain unicode with an "upsidedown" effect (via http://www.upsidedowntext.com)

˙ɐnbᴉlɐ ɐuƃɐɯ ǝɹolop ʇǝ ǝɹoqɐl ʇn ʇunpᴉpᴉɔuᴉ ɹodɯǝʇ poɯsnᴉǝ op pǝs 'ʇᴉlǝ ƃuᴉɔsᴉdᴉpɐ ɹnʇǝʇɔǝsuoɔ 'ʇǝɯɐ ʇᴉs ɹolop ɯnsdᴉ ɯǝɹo˥
00˙Ɩ$-

#   Script Injection
#
#   Strings which attempt to invoke a benign script injection; shows vulnerability to XSS

<script>alert(123)</script>
&lt;script&gt;alert(&#39;123&#39;);&lt;/script&gt;
<img src=x onerror=alert(123) />
<svg><script>123<1>alert(123)</script>
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away