Selenium + Ubuntu Cloud Autotests(詳細な手順)

この出版物では、 Linux(ubuntu server 14.04)をSelenium Server v.2.43.1と友達にする方法 、落とし穴、クラウドでの自動テストにサーバーが必要な理由について説明します。



画像



少し前、Habréの記事「Autotests-noble dede が公開されまし 。 2人以上の開発者が1つのプロジェクトに取り組んでいるチームでは、これは単に必要なことだと思います。 私が一人で働いたとき、私はテストなしでやった。 プロジェクトはゼロから作成されたため、手の甲のようなコードを知っていました。 会社は非常に急速に成長しました-その場所とタスクの数。 新しい開発者が登場し、問題が始まりました。 1つの機能を記述します-別の機能は落ちます。 考えないでください、これはめったに起こりませんが、そのようなエラーは高価であり、それを処理する必要がありました。 この時点で、開発プロセスに自動テストを導入することにしましたが、後悔することはありません。



そこで、テストプロセスをさらに最適化することにしました。 アイデアは、乙女、製品に機能を上げるときに自動的にテストを実行することです。 このアプローチの利点は明らかであり、すでに何度も書かれています。 最低限-これはテストがうまくいき、製品に注いだときに何も壊れないという私の自信です。



問題の解決策

VPSを簡単に拡張/複製できるクラウド(DigitalOcean)を選択しました。 2つのフローでテストを開始します。 これらの目的のために、サーバーを選択しました-2GBのRAM、それぞれ2.40GHzの2つのコアを備えています。 余裕を持って動作するはずです。そうでない場合、テストが不足しているためにテストが失敗するため 、Swapも1ギグに接続しました。



OSとしてUbuntu 14.04を選択しました(DOではUbuntu 14.04 LAMPアセンブリ)。



LAMPはコントロールパネルに必要です。phpを個別にインストールできます。 テストを実行するには、ブラウザー(Firefoxでテストします)、ブラウザーをバックグラウンドで起動するXvfb 、デスクトップにリモート接続するためのGUI + XRDPサーバー 、メールに結果を送信するEximJava + Selenium + PhpUnit + php curlが必要です -テストが機能するため。



システムをアップグレードし、FFをインストールします。



sudo apt-get update sudo apt-get upgrade sudo apt-get install firefox
      
      





必要に応じてSWAPに接続します。



 sudo dd if=/dev/zero of=/home/swap-tmp bs=1024 count=1024K sudo mkswap /home/swap-tmp sudo swapon /home/swap-tmp echo "/home/swap-tmp swap swap defaults 0 0" | sudo tee -a /etc/fstab
      
      



この例では、RAMを1GBに追加しました。



バックグラウンドとフォントでFFを実行するためのシェルであるxvfbを配置します。



 sudo apt-get install xvfb sudo apt-get install -y xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic xvfb x11-apps
      
      





必要に応じて、視覚環境でのリモート接続とテストのためにXFCE + Xrdpサーバーをインストールします。



 apt-get -y install xubuntu-desktop apt-get -y install xrdp
      
      





/etc/xrdp/startwm.shにあったものを削除します-次のように書きます:



 #!/bin/sh if [ -r /etc/default/locale ]; then . /etc/default/locale export LANG LANGUAGE fi #. /etc/X11/Xsession startxfce4
      
      





xrdpを再起動します。



 service xrdp restart
      
      





これで、リモートデスクトップを介してサーバーに接続できます。



PHP + Curlをインストールします



 sudo apt-get install php5 sudo apt-get install php5-curl
      
      





phpunitを配置します



 wget https://phar.phpunit.de/phpunit.phar chmod +x phpunit.phar mv phpunit.phar /usr/local/bin/phpunit
      
      





JavaをインストールしてSeleniumを実行します。



 apt-get install default-jdk
      
      





Seleniumサーバーの最新バージョンをダウンロードします 。 執筆の時点で、最新の2.43



 mkdir /var/selenium/ wget http://selenium-release.storage.googleapis.com/2.43/selenium-server-standalone-2.43.1.jar mv selenium-server-standalone-2.43.1.jar /var/selenium/server.jar
      
      





通知を送信するには、exim4を配置します



 sudo apt-get install exim4 exim4-config dpkg-reconfigure exim4-config
      
      





これらの目的には、Yandex.Mailを介したSMTPで十分です。 インターネットには多くの設定手順がありますので、これには焦点を合わせません。



セレンを正しく動作させ、バックグラウンドでFirefoxを起動するには、次のコマンドを実行します



 Xvnc :10 -geometry 1920x1080 -depth 24 -bs -ac -nolisten tcp > /dev/null & export DISPLAY=:10
      
      





その後、Seleniumを実行できます



 java -jar /var/selenium/server.jar
      
      





そして、最初の問題が現れました。 セレンは回線上でフリーズします:



 04:04:29.264 INFO - Started HttpContext[/,/]
      
      





しばらくして、私を入れて、約15分後に開始しました。

デバッグを開始する場合:



 java -jar /var/selenium/server.jar --debug 09:24:21.360 DEBUG [1] org.openqa.jetty.http.HttpContext - Init classloader from null, sun.misc.Launcher$AppClassLoader@356e3aaf for HttpContext[/wd,/wd] 09:24:21.361 DEBUG [1] org.openqa.jetty.util.Container - Starting org.openqa.jetty.jetty.servlet.ServletHandler@6c10fa4d 09:24:21.361 DEBUG [1] org.openqa.jetty.jetty.servlet.AbstractSessionManager - New random session seed
      
      





彼はセッションを作成するのが愚かであることがわかります。 判明したように、問題は私だけのものではなく、 / etc / java-7-openjdk / security / java.securityファイルを編集することで解決します。 次の行を置き換える必要があります。

 securerandom.source=file:/dev/urandom
      
      





オン:



 -Djava.security.egd=file:/dev/urandom
      
      





保存、再起動-すべてがOKです。



Seleniumをautorunに設定しました/etc/rc.localで、次を追加します(ファイルの最後、または存在する場合はdieの前):



 Xvnc :10 -geometry 1920x1080 -depth 24 -bs -ac -nolisten tcp > /dev/null & export DISPLAY=:10 sleep 2s java -jar /var/www/sao/demon/selenium/selenium-server-standalone-2.39.0.jar > /dev/null &
      
      





サーバーを起動すると、セレンが自動的に起動します。



ほとんどすべての準備が整いました。 テスト自体に残り、結果を伴うメールへの通知の送信と、転倒した場合のスクリーンショットの作成を構成します。 テストを自動的に実行するには、ポートをリッスンし、コマンドを受け取った後に必要なテストを開始する簡単なスクリプトをソケットで作成します。 バージン/プロダクションへのアップロード時にテストを自動的に開始するために、スクリプトラッパーを作成するか、バージョン管理システムのコールバック機能を使用します。



PS Yii 1.1に基づくテストを使用する人向け。 新しいバージョンのphpunitでは機能しません。 古いバージョンにアップグレードしないことにしました。



次のように問題を解決しました。



bootstrap.phpで、 yiit.phpyiilite.phpにYii :: createWebApplicationYii :: createConsoleApplication 置き換えました。

ファイル内のWebTestCase.php は、CWebTestCaseextends PHPUnit_Extensions_SeleniumTestCaseに置き換えます

CWebTestCaseからすべての機能を転送しました



All Articles