ec-cube

開発環境のEC-CUBEでユニットテスト

2013-07-28 EC-CUBE, PHP ,

EC-CUBEでローカルでユニットテストやるために、やったことメモ。
前提条件はリンク先を参考にみてもらって、EC-CUBEがJenkinsつかってやっているような処理を開発環境で行うために必要なものメモ。

前提条件

ローカル環境で独自で調整が必要なもの

1) EC-CUBEのインストールシェルを動かして成功すること

EC-CUBEの開発リポジトリに含まれている、 eccube_install.sh というシェルスクリプトがある。
これを開くと以下のようにEC-CUBEのconfig.phpを生成するために必要な情報。
DBのユーザーやパスワード、EC-CUBEをインストールするURL等の情報を設定するようになっている。

CONFIG_PHP="data/config/config.php"
ADMIN_MAIL=${ADMIN_MAIL:-"admin@example.com"}
SHOP_NAME=${SHOP_NAME:-"EC-CUBE SHOP"}
HTTP_URL=${HTTP_URL:-"http://213dev.local"}
HTTPS_URL=${HTTPS_URL:-"http://213dev.local/"}
DOMAIN_NAME=${DOMAIN_NAME:-""}

DBSERVER=${DBSERVER-"127.0.0.1"}
DBNAME=${DBNAME:-"cube213_dev"}
DBUSER=${DBUSER:-"postgres"}
DBPASS=${DBPASS:-"password"}

MySQL用とPostgres用でそれぞれ設定が違う箇所があるので、注意。
これを適宜設定して、
PostgeSQLなら
# ./eccube_install.sh pgsql
MySQLなら
# ./eccube_install.sh mysql
のように実行して、
EC-CUBEがインストールされた環境が立ち上がるようになっていればOK.
ここが上手くいかない場合は、ディレクトリのパーミッション設定、DBの接続まわりの設定が怪しいので確認してみてほしい。

2)Phing用の設定を行う

testsディレクトリの下にある以下のファイルをそれぞれ変更
# mv tests/require.php.base tests/require.php
# mv tests/phpunit.xml.base tests/phpunit.xml
あとは、EC-CUBEのパッケージのルートディレクトリで
# phing test
とすれば、Jenkinsで回した時のようにreportsディレクトリに結果が出力される。
reports/coverage のフォルダにはカバレッジが視覚的にみれるHTMLが出力されるので、結構面白い。

この他にも、わざわざ全部回すまでもなく、一部のテストケースだけテストしたいとかあれば
# phpunit –c tests/phpunit.xml tests/テストしたいテストケース.php
のようにテストケースを指定して行うこともできるようになる。

 

まだ、EC-CUBEのテストケースのカバレッジは低く30%程度だが、今後上げていきたい。
EC-CUBE本体のテストケースが充実されれば、カスタマイズした際の退行テストはかなり自動化できるようになるはず。

参考)EC-CUBE標準規約/単体テストガイドライン

NIFTY Cloud C4SAでEC-CUBEをつかってみた。

2012-08-14 環境構築 ,

ニフティのPaaSサービスのC4SAが7月末にリリースされて、9月末まで無料でつかえるらしい。

EC-CUBEも簡単につかえるように用意されているらしいので、試してみた。

アカウントの作成は、FacebookやGithubのアカウントで簡単につくることができるらしいが、オプションや特典を利用するには@niftyIDを作る必要があるようだ。

http://c4sa.nifty.com/

ログインしてすぐの画面。キャンバス一覧が表示される。

 

新規キャンバスのボタンを押すと、新しく作成するキャンバスのコンテクストの選択画面が表示される。

基本的なPHPやRubyの環境だけでなく、WordpressやConcrete5などのコンテクストが用意されており、EC-CUBEも用意されている。

 

ここでEC-CUBEを選択すると、キャンパス名を入力する画面になるので、自分好みの適当なキャンパス名を付ける。

 

その後バックグラウンドでキャンパスが作成されるので、5分ほどまっておけば、作成が完了しましたと表示される。

キャンパス名の下に表示されているURLにアクセスすれば、おなじみのEC-CUBEのインストール画面が表示される。

 

普段通りインストールをすすめていくが、データベースの設定だけはすでにコンテクストで用意されているらしく、自動で入力されている。

 

後は特にかわった点もなく通常通りインストールが完了できた。所要時間は10分程度だろうか。

まだ、使い込んでいないので、わからないが、CLIツールやファイルアップロードツールなども用意されており本番環境は様子見だが、開発環境や試しにつかってみるぶんいは十分そう。

ちょっと気になった点は、Webサーバーが「nginx」のよう。

EC-CUBEのシステム要件(http://www.ec-cube.net/product/system.php)をみると、ApacheとIISになっているので、Nginxでは、何かうまくいかないことがあるかも。(.htaccessでなんかしている部分とかくらいだろうが・・・)

何にしろ、日本産のクラウドサービスにも、がんばってほしいので、これからに期待している。

 

muninでEC-CUBEの変化をグラフ化するプラグインをつくってみる

2010-09-23 アプリケーション ,

最近いろいろと監視周りでmuninを使っているので、自分でもmuninのプラグインを作ってみたくなった。

muninはシェル上から実行可能な形であれば、プラグインをどんな言語で開発してもいいらしいので、基本的な使い方が分かればかなりいろいろと可能性があると思っている。

でも、いまいち監視する値がおもいつかなかったので、ショップの成長状況をグラフ化するイメージで、EC-CUBEの状態をグラフ化するプラグインを作ってみることにした。

要件:

  1. EC-CUBEの性能に影響のある商品数と受注件数、会員数を取得する
  2. 商品数と会員数は現在の値、受注件数は監視周期の間での受注件数
  3. 一番てっとり早いのでシェルスクリプトで作る
  4. MYSQLとPostgreSQLに対応できるようにしておく

で以下のコードを作成した。

#!/bin/sh
DBTYPE=`basename $0 | sed 's/^eccube_//g'`

case $DBTYPE in
    mysql)
        MYSQL=/usr/bin/mysql
        MYSQLOPTS="${dbopts}"
        COMMAND="${MYSQL} ${MYSQLOPTS} -s -N -e"
        ;;
    pgsql)
        PSQL=/usr/bin/psql
        PSQLOPTS="$dbopts"
        COMMAND="${PSQL} ${OPTS} -c"
        ;;
esac

if [ "$1" = "config" ]; then
        echo 'graph_title EC-CUBE Status'
        echo 'graph_args --base 1000'
        echo 'graph_order product order customer'
        echo 'graph_vlabel EC-CUBE Customers, Products, Orders'
        echo 'graph_category ec-cube'

        echo 'product.label Product'
        echo 'product.type GAUGE'
        echo 'product.min 0'
        echo 'product.draw LINE2'
        echo 'product.info Shop Products Count(product_class)'

        echo 'order.label Order'
        echo 'order.type COUNTER'
        echo 'order.min 0'
        echo 'order.draw LINE2'
        echo 'order.info Order Count By Term'

        echo 'customer.label Customer'
        echo 'customer.type GAUGE'
        echo 'customer.min 0'
        echo 'customer.draw LINE2'
        echo 'customer.info Customer Count Total'

    exit 0
fi

echo "product.value `${COMMAND} 'select count(product_class_id) FROM dtb_products_class'`"
echo "order.value `${COMMAND} 'select count(order_id) FROM dtb_order'`"
echo "customer.value `${COMMAND} 'select count(customer_id) FROM dtb_customer'`"

実際に実行してみる。

これを「eccube_」って名前で作成して、実行権限を与えておく。

ec-cubeがmysqlでインスールされているか、postgresでインストールされているかによって設定は変わるのだが、まずはmysqlだけで対応する。postgresの場合は省略するが、postgresはシェルからコマンドを実行するにも毎度パスワードが聞かれる仕様なので、.pgpassを作って対応しないといけないとだけメモって置く。

プラグインフォルダに作成したプラグインのシンボリックリンクをつくる
ln -s eccube_ /etc/munin/plugins/eccube_mysql

さらに、/etc/munin/plugin-conf.d/munin-node に

[eccube*]
env.dbopts -u DBユーザー名 -h DBサーバーIP -pDBパスワード DB名

としてDBへの接続オプションを記載しておく。

この後munin-nodeを再起動。 /etc/init.d/munin-node restart

テストように作ったサイトなので、動きはないが、とりあえず以下のようなグラフがとれているので動いてはいるようです。
muninの監視画面

今回わかったこと。

デフォルトのmuninの周期が5分なのでec-cubeのショップデータのような日ごとであればまずいいデータをリソース監視のプラグインで見る必要はないな。
用は文字列としてmunin用の設定や値を出力してやればいいので、ちょっとしたプラグインは簡単に自作できそう。

課題

muninの[フィールド名].typeのCOUNTERは前回からの差分を取得するという説明をみたのだが、どうも差分でなく差分の平均のような値が出ているような・・・
せっかくだから、備忘録かねてまたmuninのプラグイン作成時の属性の整理を書こう。