とあるStartupに勤めるエンジニアの技術ブログ

Salesforce、テスト関係の技術ブログなどを書く予定

Force.com Migration Tool でテスト実行!

Salesforceで開発している人は、Eclipse Pluginを使っている人も多いかもしれませんが、私は断然Ant派だったりします。

Antを利用してデプロイを実行する場合には、Force.com Migration Toolを利用します。インストール方法などは本題ではないのでリンク先を見てもらえばと思います。

このForce.com Migration Toolを利用すれば、デプロイした後にテストを実行できます。やり方は、sf:deployタグの属性にrunAllTests="true"を指定するだけ。
とはいえ、Salesforceのテストはそれなりに時間がかかってしまうため、テストコードが多くなってくるとタイムアウトしてしまうようになります。
そこで、タグ属性maxPollpollWaitMillisを設定します。それぞれポーリングする最大回数、タイムアウトするまでのウェイト時間(ミリ秒)を設定できます。この値を適当に増やしてやることでタイムアウトせずテスト実行できます。

これで手軽にテスト実行できるようになります。

runAllTestsの代わりにrunTestを利用することで個別にテストクラスを指定できるようですが、簡易テストと本格テストを分けて作っているときくらいしか利用しないかもしれません。

注意点としては、Webページから実行しても同じですが、テスト実行中はアプリケーションを操作すると対象組織はレコードロックなどエラーが発生するため、開発や手動テストが続行できないことです。Force.comの開発組織は無料で使えるので、テスト用の組織を準備したほうがよいでしょう。

Force.com Migration Toolのサンプルにもほとんど書いてありますが、いちおうご参考まで。

build.xml

<project
    name="Sample usage of Salesforce Ant tasks"
    basedir="."
    xmlns:sf="antlib:com.salesforce">

    <property file="build.properties"/>
    <property environment="env"/>

    <target name="test">
        <sf:deploy
            username="${sf.username}"
            password="${sf.password}"
            serverurl="${sf.serverurl}"
            deployRoot="src"
            runAllTests="true"
            pollWaitMillis="${sf.maxWaitMillis}"
            maxPoll="${sf.maxPoll}"    
        />
    </target>

</project>

build.properties

sf.username = (UserName)
sf.password = (Password)
sf.serverurl = https://login.salesforce.com
sf.maxWaitMillis = 40000
sf.maxPoll = 100

CI(継続的インテグレーション)のネタとしては全然CIしてないのは気のせいです!
Enjoy Test!