2011年12月13日火曜日

Jenkins 使って SeleniumRC のテストを実行しようとしたら PHPUnit が動かない

Jenkins 使って SeleniumRC のテストを実行しようとしたら PHPUnit が動かないという現象に出会ったのでメモ。
ちなみにバージョンは

  • Jekins : 1.442
  • SeleniumRC : selenium-server-standalone-2.12.0
  • PHPUnit : 3.6.4

まず、テスト実行すると Jenkins のテスト結果に


失敗

phpunit.xml. 過去 2ビルド失敗 ( 失敗#3 以降 ) 所要時間 0 ms 説明を記入 スタックトレース

と表示されたので続いて、コンソール出力を確認したところ Fatal error が発生しているとのこと。
PHP Fatal error:  Call to undefined method PHPUnit_Framework_ExpectationFailedException::setCustomMessage() in /usr/share/php/PHPUnit/Extensions/SeleniumTestCase.php on line 1068
ソースコードを見てみると、確かに setCustomMessage() が無い。。。
PHPUnit のバージョンが上がってこのメソッドが削除されたみたい。

その変更は↓で見て取れる。
https://github.com/sebastianbergmann/phpunit/commit/7b37221b785dd5aeda8794e8ffdcbfd8cf3aad7b#PHPUnit/Framework/ExpectationFailedException.php

なんで削除したのかとかまでは追ってないですが、とりあえずこのメソッドを追加してエラー回避してナントカ解決。

追加した内容↓

/**
 * @param string $customMessage
 * @since Method available since Release 3.4.0
 */
public function setCustomMessage($customMessage)
{
    $this->customMessage = $customMessage;
}

2011年12月12日月曜日

OSC 2011 Tokyo/Fall に行ってHTML5の話きいてきた



もうだいぶ経ってしまいましたが、オープンソースカンファレンスに参加するため明星大学に行ってきました。(大雨 & 寒かった><。。。。

「マイクロソフトにとってのWeb。そして、HTML5」という、IE9とHTML5の関係についてのおはなしを聞いてきました。

HTML5について「なんか audioタグ とか videoタグ とか新しいタグが追加されたんだよねー」くらいの知識しかなったんですが、なぜこのようなタグが追加されたのかというのが聞けて目からウロコでした。

これまではwebブラウザでhtmlを読むことがほとんどだったけど、これからは情報家電などブラウザ以外のさまざまなデバイスでhtmlを識別出来るようになったほうがいいよねという理由からタグに意味付けするようになった。


というようなことをおっしゃっていました。
確かにdivタグで書きまくったhtmlとか人間でも良くわからないし、なるほどなと思いました。

写真は会場でいただいたクラウディアのステッカーとフォルダ(萌

■参考リンク


「マイクロソフトにとってのWeb。そして、HTML5」
→講演でみたスライド
http://www.slideshare.net/ykasugai/webhtml5

HTML5を活用した世界各国のサイトの紹介「The Beauty of the Web」
http://www.beautyoftheweb.jp/

MSのエンジニアが作ったHTML5のサンプルサイト「IE Test Drive」
http://ie.microsoft.com/testdrive/


2011年12月9日金曜日

Gmail から OpenPNE に携帯メール投稿する方法

Gmail のWebメーラーの設定に携帯メールアドレスを追加してあげると、Gmail からOpenPNE に携帯メール投稿ができるようになります。

■必要なもの、こと


  • Gmail アカウント
  • 携帯メールアドレス(このアドレスはOpenPNE側に登録してある必要がある)
  • OpenPNE側のメール配信設定(postfixなど)


■やりかた

前提として、OpenPNEのメール配信設定(postfixなど)が出来てるものとします。

  1. ブラウザを開いてGmailにログインする
  2. Gmailのメール設定ページにアクセスする
  3. メール設定の「アカウント」にある「名前」の項目に携帯メールアドレスを追加する
  4. 携帯アドレスを入力し次へと進む。(途中、いろいろ設定を聞かれるが、すべてデフォルトのままでOK)
  5. 登録できたら、Gmailのメール作成をクリックしメール作成画面を開く
  6. Fromを登録した携帯アドレスのものにする
  7. OpenPNEのメール投稿用のアドレスを調べて送信先に入力する
  8. 件名、本文を入力し送信する(画像を添付すれば画像付きの投稿になる)

OpenPNE側をみると投稿できているとおもいます。

■投稿出来ていない場合の考えられるポイント


  • まだメール投稿を処理中 → ちょっと待てば表示されるはず。Reloadしてみて!
  • メール配信設定が出来ていない
  • 使用している携帯アドレスがOpenPNEにアカウント登録されていない


■まとめ


  • SeleniumIDEなどと組み合わせればメール投稿も自動で確認できそうですね
  • OpenPNE 3.6.x でしか確認してないけど2系もきっと同じでできるはず
  • Fromを偽装出来ればどんなメーラーでもできそう(でも、Gmailだといろいろお手軽だよね!)

2011年11月16日水曜日

git の エイリアスをいまさらながら追加

.gitconfig にエイリアスをいまさらながら追加した。

 
[alias]
        pager = !$HOME/bin/git-pager
        info = !$HOME/bin/git-info
        l = log
        ad = add
        br = "branch -a"
        ci = commit
        cl = clone
        co = checkout
        di = diff
        pl = pull
        st = status              

とりあえず、こんな感じ。

2011年11月12日土曜日

Firefox8にしたらSeleniumRCが動かなくなっちゃったときのメモ

Firefox 3.6 から 7 にしたら、SeleniumRC(selenium-server 1.0.3)が動かなくなってしまいググったら、
↓のエントリを発見し、無事解決できました。
[Selenium][Firefox][PHPUnit] Selenium RCで新しいバージョンのFirefoxを動かす


が、しかし

Firefox 8 にしたらどうも↑の戦法では解決できず・・・・。


かるーく、ググッてみても解決策が見つからなかったので、とりあえず昼寝。(オイ


起きてふと

「selenium server 2 入れたらできるんじゃね?」

と思いついたのでやってみたところ、うまくいきました。


http://seleniumhq.org/download/ の



↑からダウンロードして

$ java -jar selenium-server-standalone-2.12.0.jar
で起動して、試しにテストを動かしてみたら問題なく動きましたとさ。
でも、Firefox8ではatacheFileコマンドやtypeコマンド利用してファイルのアップロードが色々試してみたけど出来ず><

やっぱ、Firefox7 or 3.6 に戻そうかな・・・・。

そういえば、iPhone4S買ったよ

iPhone5がでるでるというネット情報に見事に流され、4Sがでます!と発表されたときは正直凹みました。(遠い目


でも、4Sにして良かった(^O^)
予約からゲットまで10日くらいかかったけど今では満足です。
(3GSからの機種変更だから余計にかもw)

ちなみに、iPhone 4S ホワイトの64GBにしました。

☆良かった点
・サクサク動くー!
・画面が綺麗!
・カメラがハード的にもソフト的にもパワーアップ!(HDR撮影とかスゲー)
・iPod(ミュージック機能)の音質が良くなった(気がする)
・Siri (日本語対応が楽しみ)
・リマインダーが地味に便利
・電波の入りもちょっと良くなった(気がする)


2011年11月1日火曜日

Macのhomebrewでapcを入れてみた・・・・が

2011/10/31のエントリで書く予告しちゃったので、書きます。
 前回のエントリを雛形に手抜きエントリです。。。ふぁ~(=o=;) というわけで、

OpenPNE3の動作テストで必要だったので、MacBookAir(Mac OS X 10.6.8 Snow Leopard)に apc を入れることに。
自分のMacにはhomebrewが入ってるので、もしかしたらbrew installできるかも?とおもって調べたらあった!
$ brew search apc
apc
というわけで、

$ brew install apc

で、インストール、そして問題なく完了! ↓をphp.iniに追記して、apacheを再起動!
[apc]
    extension="/usr/local/Cellar/apc/3.1.9/apc.so"
    apc.enabled=1
    apc.shm_segments=1
    apc.shm_size=64M
    apc.ttl=7200
    apc.user_ttl=7200
    apc.num_files_hint=1024
    apc.mmap_file_mask=/tmp/apc.XXXXXX
    apc.enable_cli=1
セットアップ出来たかどうか、
<?php
phpinfo();
?>
みたいなファイル作って、ブラウザからアクセスすると・・・・・・



あれ??(;・∀・)

php動いてない?(;´Д`)


どうも brew install でいれた apc 3.1.9 はバグがあるっぽい?
$ brew uninstall apc

を実行してアンインストール完了。(php.iniに追記したものを消すのも忘れずに)


気を取りなおして pecl のサイトからパッケージダウンロードしてインストールすることに。。。
$ wget http://pecl.php.net/get/APC-3.1.7.tgz
$ tar -zxvf APC-3.1.7.tgz
で、パッケージ落として展開。
$ cd APC-3.1.7
で展開したディレクトリに移動して
PHP 拡張モジュールのビルド環境を準備するために、 phpize コマンドを実行。
$ phpize
んでもって、↓のコマンドでコンパイルおよびインストールをする。
$ ./configure
$ sudo make
$ sudo make install
あとは php.ini に↓を追記して、apache再起動すればおk。
[apc]                                                                                                                      
  extension_dir="/usr/lib/php/extensions/no-debug-non-zts-20090626"
  extension="apc.so"
  apc.enabled=1
  apc.shm_segments=1
  apc.shm_size=64M
  apc.ttl=7200
  apc.user_ttl=7200
  apc.num_files_hint=1024
  apc.enable_cli=1
できたー\(^o^)/

2011年10月31日月曜日

Macのhomebrewでmemcachedを入れてみた

OpenPNE3の動作テストで必要だったので、MacBookAir(Mac OS X 10.6.8 Snow Leopard)にmemcachedを入れることに。

自分のMacにはhomebrewが入ってるので、もしかしたらbrew installできるかも?とおもって調べたらあった!

$ brew search memcached
libmemcached    memcached       memcached-php   memcachedb

というわけで、

$ brew install memcached
で、インストール、そして問題なく完了!

インストール出来たかどうか、phpinfo()を見てみると・・・・・




あれ?いない?(;・∀・)




どうも brew install だけではphpの拡張が入らないっぽい?

気を取りなおして
$ pecl install memcache
を実行して無事インストール完了。

後は /etc/php.ini に

extension=memcache.so

を追記してあげれば設定完了。
(自分は988行目あたりに追記した)




次回のエントリでは「homebrew で apc 入れてみた」を執筆予定です(^^)

2011年2月27日日曜日

SeleniumRCでよく使うコマンド10選 〜基本編〜

最近よくSeleniumRCのテストケース(php版)を書いています。
よく使うコマンドをここいらでまとめておこうかと。
基本すぎてSleniumエキスパートの方には面白くないとおもいますw

■ open(おーぷん)

まずは基本中の基本のオープンコマンド。
絶対URLや相対URLを指定してページを開くコマンドです。
$this->open("http://example.com/hoge/huga/1");
とか
$this->open("/hoge/huga/1");
のように使います。

相対URLを指定した場合は、setBrowserUrl()で指定したURLに結合して実行されます。

■ click(くりっく)

Linkやsubmitボタンをクリックするコマンドです。
name属性やvalue属性、XPathなどをを指定して実行することが出来ます。

$this->click("link=前のページに戻る");
とか
$this->click("participate");
とか
$this->click("//input[@value='ログイン']");
とか
OpenPNE3のPC版ログインページのログインボタンを指定してクリックの場合
$this->click("//html/body/div/div/div[2]/div/div[2]/div/div/form/table/tbody/tr[4]/td/input");
のように実行します。

openコマンドやclickコマンドのあとにwaitForPageToLoad(うぇいとふぉーぺーじとぅろーど)コマンドを入れてあげないと、
ページのロードが終わる前に次のコードを実行してしまうことになり、テストケースが途中で失敗します。
割とよく忘れるので注意が必要です。

■ type(たいぷ)

テキストエリアを指定してテキストを入力するコマンドです。

$this->type("keyword", "うどん");
のように、テキストエリアのname属性と入力値を引数にとって実行します。

■ select(せれくと)

セレクトボックスのラベルを指定して選択するコマンドです。

$this->select("language_culture", "label=日本語 (日本)");
のように、セレクトボックスのidとラベルを引数にとって実行します。

ラベルの引数を空にすれば、セレクトボックスの空を選択するテストも出来ます。

■ isElementPresent(いずえれめんとぷれぜんと)

エレメントが存在するか確認するコマンドです。
$this->isElementPresent("//*[@id=\"page_member_home\"]");
のように、body idなどを指定し実行します。

■ isTextPresent(いずてきすとぷれぜんと)

テキスト(文字列)が存在するか確認するコマンドです。
$this->isTextPresent("うどん");
のように、文字列などを指定し実行します。

■ assertTrue(あさーととぅるー)

引数を判定し正を返すコマンドです。
isElementPresentやisTextPresentなどと組み合わせて使用します。

$this->assertTrue($this->isElementPresent("//*[@id=\"page_member_home\"]"));
とか
$this->assertTrue($this->isTextPresent("うどん"));
のように使います

■ getText(げっとてきすと)

LinkタイトルやsubmitボタンのタイトルやXPathを指定し、その指定した箇所にある文字列を取得します。

$this->getText("link=削除する"));
とか
$this->getText("//input[@value='削除する']"));
とか
$this->getText("//div[@id='Center']/div[2]/div/div[1]/h3"));
のように、使用します。

■ getLocation(げっとろけーしょん)

現在開いているページの絶対URLを取得します。


■ assertEquals(あさーといこーる)

二つの値をを比較し、等しくないときにエラーメッセージを返します。

Googleでhello worldと検索し、検索結果ページのタイトルを比較したい場合
$this->assertEquals("hello world - Google 検索", $this->getTitle());
のようなコードになります。

現在開いているURLが正しいか比較したい場合は
$this->assertEquals("http://hogehoge.com/", $this->grtLocation());
のようなコードになります。

まとめ

超基本のopenコマンドからまとめてみました。SleniumIDEでちまちまテストケースを作っていくのでも良いのですが、コマンド覚えてしまえば
手動で作っていくほうがきっと早いでしょう。
今回紹介した以外にも素敵なコマンドが沢山あるので深めていきたいと思います。
これからもSeleniumRCをガンガン使っていこうとおもっているので、おすすめ便利コマンドがあったら教えてくださいね!


参考
http://www.phpunit.de/manual/3.3/ja/api.html

2011年1月26日水曜日

bloggerでSyntax Highliteを使う方法

http://www.kuribo.info/2008/06/blogger-syntax-highlighter.html

のエントリを参考にやってみた。
行番号でない・・・。
Firefoxだと折り返しもされない。

あとでもうちょっと調べてみる。

2011年1月25日火曜日

SeleniumRCで自動テスト!〜セットアップ編〜

おはようございます。
作業環境をMacBookAir(Mac OS X 10.6.6 Snow Leopard)に移行したので、こちらにもSeleniumRC環境をつくろうとやってみました。
特にWindowsXPでセットアップしたときと違いはありませんでした。

MacBookAirのPHPのバージョンなどの環境は以下のとおりです。

hoge@hoge-MacBookAir:~$ php -v
PHP 5.3.3 (cli) (built: Aug 22 2010 19:41:55)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

hoge@hoge-MacBookAir:~$ java -version
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04-307-10M3261)
Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03-307, mixed mode)

hoge@hoge-MacBookAir:~$ pear -V
PEAR Version: 1.9.1
PHP Version: 5.3.3
Zend Engine Version: 2.3.0
Running on: Darwin hoge-MacBookAir.local 10.6.0 Darwin Kernel Version 10.6.0: Wed Nov 10 18:13:17 PST 2010; root:xnu-1504.9.26~3/RELEASE_I386 i386

SeleniumRCをダウンロードしよう

SeleniumRCを動かすためにJavaのバージョンは1.5以上が必要です。
先ほど調べたとおり、1.6.0_22なので問題ナッシング。
SleniumRCのダウンロードはこちら→http://seleniumhq.org/download/



selenium-remote-control-1.0.3.zipをダウンロードして、お好きなディレクトリで解凍してください。
(ターミナルから実行しやすい場所がいいと思います)

自分は

/Users/hoge/SeleniumRC_remote_control

のようにSeleniumRC_remote_controlというディレクトリを作成し設置しました。


PHPUnitをインストールしよう

次、PHPUnitのインストールをします。(詳しくはこちら:http://www.phpunit.de/manual/3.5/ja/installation.html
PHPUnit3.5はPHP5.3.3以上を推奨しています。
PHPUnitはpearでインストールします。

pearのチャンネルサーバーの登録

# pear channel-discover pear.phpunit.de
Adding Channel "pear.phpunit.de" succeeded
Discovery of channel "pear.phpunit.de" succeeded

# pear channel-discover components.ez.no
Adding Channel "components.ez.no" succeeded
Discovery of channel "components.ez.no" succeeded

# pear channel-discover pear.symfony-project.com
Adding Channel "pear.symfony-project.com" succeeded
Discovery of channel "pear.symfony-project.com" succeeded

これでチャンネルサーバーからPHPUnitのパッケージをインストールすることが出来ます。
さっそくインストールをしましょう。
# pear install phpunit/PHPUnit

hoge@hoge-MacBookAir:~$ phpunit -v
PHPUnit 3.5.6 by Sebastian Bergmann.

こんな感じでとくに問題なくセットアップできました。
インストールするバージョンによってはpearの本体の依存関係や、他のパッケージが必要な場合があるので環境を整えてみてください。

・PEAR本体のアップグレード
# pear upgrade PEAR
・依存パッケージをまとめてインストール
# pear install -a phpunit/PHPUnit

さっそく動かしてみよう

SeleniumRCのサイトにサンプルコードがあるので(PHP版は無いw)、それを参考にGoogleアクセスして「hello world」で検索し、titleに「hello world ‐ Google 検索」と表示されるか確認するテストを書いてみました。

set_include_path(get_include_path() . PATH_SEPARATOR . './PEAR/');
require_once 'Testing/Selenium.php';
require_once 'PHPUnit/Framework/TestCase.php';

class GoogleTest extends PHPUnit_Framework_TestCase
{
    private $selenium;

    public function setUp()
    {   
        $this->selenium = new Testing_Selenium("*firefox3", "http://www.google.com");
        $this->selenium->start();
    }   

    public function testGoogle()
    {   
        $this->selenium->open("/");
        $this->selenium->type("q", "hello world");
        $this->selenium->click("btnG");
        $this->selenium->waitForPageToLoad(10000);
        $this->assertRegExp("/hello world - Google 検索/", $this->selenium->getTitle());
    }   

}


Seleniumサーバーを起動して
hoge@hoge-MacBookAir:~/SeleniumRC_remote_control$ java -jar selenium-server-1.0.3/selenium-server.jar

作ったテストコードを実行します。
hoge@hoge-MacBookAir:~/SeleniumRC_remote_control$ phpunit test_google.php
PHPUnit 3.5.6 by Sebastian Bergmann..

Time: 8 seconds, Memory: 4.75Mb

OK (1 test, 1 assertion)

Firefoxがかってに動いた!!
アサーションもOKだし、やったね!

2011年1月21日金曜日

あけおめショートエントリ今年の目標編




あけおめ、ことよろ。(遅)

多くの人が毎年ブログ続けるぞ!と目標立てて
3日坊主になってると思います(私もですw)

しかし、今年こそはと気持ちを切り替え12月に今年俺は頑張った!
自分にご褒美(笑)をやりたいので、頑張ってみようと思います。

自分の目標は、

「ひと月に2エントリ書く」

にしました。
長い文章が書くことが必ずしもいいとは思いませんが、
短いエントリは抜いて2エントリ書こうと思います。

頑張ります。