Django【Django入門】自動化されたtestを使ってみようryo2017/8/132019/5/26こんにちは。今回は、Djangoで作ったWebアプリケーションをテストする方法について解説したいと思います。この記事では、WebアプリケーションのテストとはPythonに付属しているunittestの使い方について解説します。Seleniumを使ったブラウザ操作の自動化についての解説を通して、今のテストの流行りであるSeleniumについても知っておきましょう。まとめWebアプリケーションのテストとはこれから学習するWebアプリケーションのテストとは、一体どのようなものなのでしょうか。普段使っているGoogleやYahoo、AmazonなどのWebアプリケーションは、とても多くの機能を持っています。それらの機能がしっかりと期待する動作をしてくれるかどうかを調べるのがテストです。それ以外にも性能テスト(ページが表示されるまでに時間が掛かり過ぎていないか。)負荷テスト(アクセスが見込めるサイトでどの程度の負荷まで耐えることが出来るのか。)UI・UXテスト(ユーザーインターフェイス・ユーザーエクスペリエンスがサイトの方針に合っているか。)セキュリティテスト(悪質な攻撃に備えて脆弱性を修正。)など、様々なテスト項目があります。これらの項目についてそれぞれ手動でテストをしていく方法もあります。大規模なサイトではそれぞれのテストに対する項目が多すぎて、時間も労力も途方が無いものになってしまいます。そこでテストを自動化するツールも出てきました。Pythonにはunittestというテスト自動化ツールが付属しています。今回はunittestを使って、DjangoのWebアプリケーションのテストを行っていきましょう。unittestを使ったテストの実行ここからは実際にWebアプリケーションのテストを行っていきます。ここから動作させるコードやコマンドはすべてMacで実行したものになります。WindowsやLinuxで動かす場合は、コマンドを置き換えて見てください。1.11.2となっています。新しいバージョンでも動作するはずですが、もしも上手く行かなかったら、バージョンを合わせて試してみてください!Djangoの下準備まずはDjangoの環境を整えましょう。Djangoはプロジェクトを作成して、その中にWebアプリケーションを作成するのが基本の流れになっています。プロジェクトを作りたいディレクトリに移動して、このコマンドを実行しましょう。mySiteこれでmySiteというディレクトリが出来上がります。次にmySiteディレクトリに移動して、このコマンドを実行しましょう。myappこれでmySiteプロジェクトの中に、myappというWebアプリケーションが出来上がりました。現在のディレクトリ構成はこのようになっています。files次に、mySite/settings.pyのINSTALLED_APPSを編集していきます。'myapp',]INSTALLED_APPSに、myappを追加しました。これでDjangoの下準備は出来ました。次にmyapp/models.pyを編集していきます。passmodelsにPersonクラスを追加しました。次にこのコマンドを実行してマイグレーションファイルを作成します。myapp続いてマイグレートを実行します。migrateマイグレーションファイルなど、modelsについての解説はこちらの記事をご覧ください。2019年1月29日unittestを作るDjangoのユニットテストではPython付属のunittestを拡張したDjango独自のTestCaseクラスを使います。基本的な流れとしてはdjango.testをimportしてTestCaseを継承してテストケースを作っていきます。myapp/tests.pyを編集して保存することで、ユニットテストとして実行することが出来ます。今回は先程作ったPersonのmodelsに登録されているレコードの数をユニットテストします。0)次にこのコマンドを実行しましょう。test結果を見てみましょう。'default'...これでユニットテストが実行できました。ここまでのことを振り返ってみましょう。myapp/tests.pyに書いたself.assertEqual関数の第二引数に指定した数と、レコードの数を確認してみてください。レコードには何も追加されていません。第二引数とレコードに追加された数が同じなので、ユニットテストの結果に「OK」返ってきたことが分かるかと思います。このようにmyapp/tests.pyにテストケースを追加していくことで、それぞれのmodelsに対してユニットテストをしていくことが出来ます。それぞれのテストケース(クラス)はいくつ追加しても構いませんが、TestCaseクラスを継承しましょう。テストケースの数が多くなってくる場合はmyapp/testsというディレクトリを作ってテストケースを分けて書くことで管理がしやすくなります。一歩進んだテストの方法Webアプリケーションのテストはunittestを使った方法だけではありません。テスト自動化の代表的なツールとしてSeleniumがあります。Seleniumは自動でブラウザを操作するためのツールです。今回はSeleniumがどのようなものなのかを簡単に紹介します。SeleniumのインストールSeleniumはPythonのパッケージマネージャであるpipでインストールすることが出来ます。seleniumまた、各ブラウザ向けに配布しているドライバを使う必要があります。今回はChromeを想定して解説します。ドライバはこちらからダウンロード、インストールしましょう。アクセスして見ようと思います。pythonを実行するディレクトリにchromedriverを置いておきましょう。ターミナルを開いてPythonのコンソールを開きましょう。下のコマンドを1行づつ実行してみると、PythonでChromeが操作出来ることが分かるかと思います。アクセス出来たでしょうか。Model)と呼ばれるページの構造についてを知る必要があります。DOMとはHTMLなどの文書のためのインターフェイスのことです。上のサンプルコードにある「t=browser.find_element_by_id('lst-ib')」では、IDでlst-ibというエレメント(要素)を探しています。今回はPythonのコンソールを使って一つ一つ確認しました。これらのファイルを.pyファイルにまとめることによって、しっかりと自動化することが出来ます。「テストを自動化する」という意味がよくわからなかった方も、Seleniumを使った方法でなんとなくは理解していただけましたか?まとめDjangoで作ったWebアプリケーションのテスト方法について解説しました。unittestはPythonに標準で付属しているので内部的な機能に特化しています。多くの言語から使えるSeleniumはブラウザから動きを見ることが出来ます。した挙動のテストから実際のユーザーが実行すると思われる挙動まで、幅広くカバーできます。イメージがつかめない方はSeleniumを使ってみて、視覚的にテストについて実感していくと良いと思います。TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。