JavaとSeleniumを使用せずに簡単なセルフテストシステムをセットアップする方法

想像してみてください。あなたはスタートアップの従業員で、すぐにプロトタイプを叩き、徐々に開発を始めます。 そして、次の急なリリースの間に、サイトのすべてのセクションを手動で(製品ディレクターの手によって)再確認する必要がないように、すでに必要です。 もちろん、別のテスターを雇うこともできますが、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 <#text> was visible after 70 milliseconds. Warn: WaitForElement found 10 elements for selector ".serp-list .organic__subtitle b". Only the first one will be checked. Element <.serp-list .organic__subtitle b> was visible after 1706 milliseconds. Passed [equal]: m.habrahabr.ru == m.habrahabr.ru OK. 3 assertions passed. (4.992s)
      
      





合計



合計で、自動テストシステムのセットアッププロセス全体は30分もかかりませんでした。 そして、最も重要なことは、ほとんどすべてのサーバーに同じシステムを迅速に展開できるため、優れたスケーラビリティが得られることです。



さようならJava、Pythonでさよならテスト、さよならセレン。



しかし、コーヒーメーカーは本当に必要です。



便利なリンク:



1) 「ヘッドレスクローム入門」

2) 「Nightwatch.js APIリファレンス」

3) Nightwatch.jsの優れたプレゼンテーション



All Articles