想像してみてください。あなたはスタートアップの従業員で、すぐにプロトタイプを叩き、徐々に開発を始めます。 そして、次の急なリリースの間に、サイトのすべてのセクションを手動で(製品ディレクターの手によって)再確認する必要がないように、すでに必要です。 もちろん、別のテスターを雇うこともできますが、LEANのスタートアップにはこのための予算がありません-「コーヒーマシンを最後に購入しましょう」。 おなじみですか?
そして、誰かが「自動テスト」という言葉を言います。
それはすぐに始まります:それは物語全体であり、非常に困難であり、非常に高価であり、それよりも害があります。
必要なのは、何らかのプログラムがブラウザを開いてそこにリンクを挿入し、テキストを入力して何が起こるかを確認することだけです。 本当にそんなに複雑で高価ですか?
今、自信を持って言うことができます:いいえ。
最近、すべてが変更されました。HeadlessChromeの登場により、Chromeの次のバージョンでは、「ヘッドレス」モードで(つまり、インターフェイスなしで)実行することを学びました。
そして、PhantomJSのメイン開発者でさえ、これに関連して次のように書いています。
これで終わりです-https : //t.co/GVmimAyRB5 #phantomjs 2.5はリリースされません。 ごめんなさい!
-Vitaly Slobodin(@Vitalliumm) 2017年4月13日
ビジネスに取り掛かる
したがって、現代の世界で自動テストを実行するために必要なものは次のとおりです。
1)Chromeバージョン59(現在
ベータ版 )またはChromium Browser
2)nodejs + npm
それだけです!
(もちろん、別のブラウザーでチェックする必要がある特定のことをしている場合は、悲しいかな。これ以上読むことはできません。)
このバンドルのChromeは、明らかに、リンクを開いてページをレンダリングするヘッドレスブラウザーとして表示されます。 (ブラウザー自体よりもヘッドレスブラウザーの役割の方が優れている可能性があります。!)Ubuntuに同じChromiumブラウザーを簡単にインストールする方法を次に示します。
sudo apt-get install chromium-browser
「リンクを突いてテキストを駆動する」APIを提供する、いわゆるWebDriverとして、Chromedriverを使用します。 npmを介してインストールします。
npm install chromedriver
もちろん、テスト自体を純粋なJavaScript(ヤードで2k17年)で記述します。 これには、自動テストを作成および実行するための非常に有名なライブラリ(LinkedIn開発者による)であるNightwatch.jsを使用してください。 当初、Nightwatch.jsは同じSeleniumで動作するように設計されていました。 ただし、Chromedriverを直接操作する方法を知っているとは限りません。 インストール:
npm install nightwatch
簡単に言えば、スキーム全体は次のようになります(Nightwatch.jsでテスト→Chromedriverへの一連のリクエスト→Headless Chromeでリンクを突く):
→Chromedriver→
そして、何かを構成する方法は?
デフォルトでは、Nightwatchの構成は
node_modules / nightwatch / binフォルダーの
nightwatch.jsonファイルから取得され
ます 。
独自の構成が必要です。 これを行うには、プロジェクトのルートで
nightwatch.jsonファイルを作成し、
Chromedriverが直接(Seleniumなしで)使用され、Chromiumが「ヘッドレス」モードで起動するように、必要なものをすべて書き込みます。
nightwatch.json { "src_folders": ["tests"], // "output_folder": "reports", "custom_commands_path": "", "custom_assertions_path": "", "page_objects_path": "", "globals_path": "globals.js", // , "selenium": { "start_process": false // , .. Chromedriver }, "test_settings": { "default": { "selenium_port": 9515, // Chromedriver ("selenium_" — ) "selenium_host": "localhost", "default_path_prefix" : "", "desiredCapabilities": { "browserName": "chrome", "chromeOptions" : { "args" : ["--no-sandbox", "--headless", "--disable-gpu"], // headless- "binary" : "/usr/bin/chromium-browser" // }, "acceptSslCerts": true } } } }
globals.jsの行に注意してください。 このファイル内では、すべてのテストにグローバルコンテキストを設定できます。 最後にすべてのテストと釘を実行する前に、Chromedriverが開始されるように記述します。
globals.js const chromedriver = require('chromedriver'); module.exports = { before: function(done) { chromedriver.start(); done(); }, after: function(done) { chromedriver.stop(); done(); } };
検証のためのある種のテストを書くことは残っています。 たとえば、ya.ruを開いて何かを検索し、検索結果を確認します。 もちろん、
Nightwatch.js APIは、すべての種類のチェックのためのさまざまなメソッドを提供しますが、初心者には十分なものがあります。
テスト/ ya.js module.exports = { 'Test ya.ru': function(browser) { const firstResultSelector = '.serp-list .organic__subtitle b'; browser .url('http://ya.ru', () => { console.log('Loading ya.ru...'); }) .waitForElementVisible('#text', 5000) .execute(function() { document.getElementById('text').value = ', !'; }) .submitForm('form') .waitForElementVisible(firstResultSelector, 5000) .getText(firstResultSelector, result => { browser.assert.equal(result.value, 'm.habrahabr.ru'); }) .end(); } };
確認してください!
$ nightwatch --test tests/ya.js [Ya] Test Suite =================== Running: Test ya.ru Loading ya.ru... Element <
合計
合計で、自動テストシステムのセットアッププロセス全体は30分もかかりませんでした。 そして、最も重要なことは、ほとんどすべてのサーバーに同じシステムを迅速に展開できるため、優れたスケーラビリティが得られることです。
さようならJava、Pythonでさよならテスト、さよならセレン。
しかし、コーヒーメーカーは本当に必要です。
便利なリンク:
1)
「ヘッドレスクローム入門」2)
「Nightwatch.js APIリファレンス」3)
Nightwatch.jsの優れたプレゼンテーション