情シスは何度でも甦るさ。

OracleDB/Ruby好きの情シス部員がお送りします

Oracle Functional Testing OpenScriptをJenkinsから呼ぶ

第一回OpenScriptとは
第二回OpenScriptでスクリプト作成

というわけで、3回目。
前回までで、OpenScriptを使用したスクリプト作成とテストができるようになったので、そうなると次はCIです。Jenkinsです。
色々と調べましたが、なんとかできるところまでもってくることができた。

概要
Jenkinsから、ANT経由で、OpenScriptを呼びます。
OpenScriptのテスト結果のHTMLレポートをJenkinsのプラグインであるHTML Publisherを使用してJenkins上で見れるようにします。

手順1OpenScriptのバージョンを12.1.0.1.0に上げる
理由は後で説明しますが、9.x系だと今回のやり方ではうまくいかないので、最新の12.1.0.1.0にアップデートしましょう。
2012/6/16時点で、USAのサイトでしか、手に入りません。こちらからダウンロードしましょう。日本語版だから問題ないです。
なお、upgrade版(Oracle Application Testing Suite 12.1.0.1.0 - Windows - Upgrade from 9.1.x/9.2.x/9.3.x ONLY )がありますが、私の場合Upgrade版だと、コマンドラインからスクリプトが呼べなくなったので(jarが呼べないってエラーが大量に出力)、やむなくアンインストールして、OpenScriptを再インストールしました。

手順2Jenkinsをダウンロード&設定
詳細略しますが、Jenkinsをダウンロードして、

java -jar jenkins 

で起動。(JDK入ってるよね)

[Jenkinsの管理]-[システムの設定]から、ANTのパスを設定しておきます。
OpenScriptには、ant1.7が標準で入っている([OATS_HOME]\openScript\plugins\org.apache.ant_1.7.0.v200803061910)ので、そいつのパスを指定するもよし、antのサイトから最新のを持ってくるもよし。好みでどうぞ。

さらに、
[Jenkinsの管理]-[プラグインの管理]-[利用可能タブ]-[HTML Publisher plugin] 
を追加。
こいつを使って、OpenScriptのテスト結果のレポートHTMLをJenkinsから見れるようにします。

手順3Build.xmlを書く
スクリプトのフォルダにbuild.xmlを作成します。

通常だと以下のようなパスになるはず
[OATS_HOME]\OFT\[Script名]

ここでは、script名をtestとして、以下のパスを例とします

D:\Oracle\oats\OFT\test

ここに、以下のbuild.xmlを置く

<?xml version="1.0" encoding="UTF-8"?>
  <!-- 
    create by 2012/6/17 https://github.com/ryoben
  -->
  <project name="opensctipTest" default="openScript" basedir=".">
    <!-- OpenScript command line bat -->
    <property name="runScript" location="D:\Oracle\oats\openScript\runScript.bat"/>
    <!-- Copy OpenScript HTML report for HTML Publisher plugin -->
    <property name="tmpDir" location=".\results\tmp"/>
    <!-- Test Script name -->
    <property name="scriptName1" location=".\test.jwg"/>

    <target name="init">
      <delete dir="${tmpDir}"/>
      <mkdir dir="${tmpDir}"/>

      <!-- OpenScript HTML result report's DirName is "Session[increment No]". Using build.number  -->
      <buildnumber/>
      <property name="resultDir" value=".\results\Session${build.number}"/>
      <echo message="${resultDir}"/>
    </target>

    <target name="openScript" depends="init">
      <!-- Run  -->
      <exec executable="${runScript}">
        <arg value="${scriptName1}"/>
      </exec>

      <!-- Overview.properties has result information of test. output this file since ver12.1.0.1.0  -->
      <property file="${resultDir}\overview.properties"/>

      <!-- for HTML Publisher plugin. run next step in Jenkins  -->
      <copy todir="${tmpDir}">
        <fileset dir="${resultDir}"/>
      </copy>

      <!-- outcome property exist in overview.properties. set result : "Failed" or "Passed"  -->
      <fail message="Script result :${outcome}">
        <condition>
    	  <not>
            <equals arg1="${outcome}" arg2="Passed"/>
    	  </not>
    	</condition>
      </fail>    
    </target>
  </project>

補足説明:
initターゲットらへん
デフォルトだと、OpenScriptのテスト結果(HTML Report)、は、以下のフォルダに吐かれる。

D:\Oracle\oats\OFT\test\result\Session[number]

[number]の部分が、インクリメントされるので、こいつをbuild.numberを利用してフォルダ名を解決している。(力技)

overview.propertiesらへん
overview.propertiesは、ver12から、出力されるようになったテスト結果が格納されたプロパティファイルっぽい。
こいつをANTに読み込んでる。そのファイルの中に定義されているoutcomeプロパティは、テスト結果『Passed(成功)』、『Failed(失敗)』が入っているので、そいつを利用して一番最後のfailタスクでExceptionを投げるかどうかを判断してる。

${tmpDir}へのコピー
Jenkinsから、HTML Reportを見るためにHTML Publisher pluginを入れてますが、こいつは固定のフォルダのHTMLファイルを指定する必要があるので、テストの結果を毎回固定のフォルダ(results\tmp)にコピーしてます。


手順4Jenkinsで新規ジョブ作成
あとは、Jenkinsから呼ぶだけ。

新規ジョブ作成で、[フリースタイル・プロジェクトのビルド]を選択


[ビルド手順の追加]-[ANTの呼び出し]を選択し、[ビルドファイル]に、build.xmlのパスを設定
[ビルド後の処理の追加]-[Publish HTML Reports]で、
[HTML directory to archive]:D:\Oracle\oats\OFT\test\results\tmp (ant内タスクでコピーしてるフォルダパス)
[Index page(s)]:BasicReport.htm
Keep past HTML reports:にチェック

して保存。で、準備完了


ビルド実行すると、IEが起動して、機能テストが実行されます

テスト結果の標準出力も確認できます

各テストで出力されるHTML ReportもHTML Publisher pluginのおかげでJenkins上で読めます


以上、これでテストもラクラク
残課題としては、複数のテストスクリプトをどう管理していくか。
一つのテストスクリプト複数の機能テストを盛り込むか、ANTのタスクを複数設定するか、Jenkinsのジョブを分けるかを、案件によって使い分ける感じだろうかね。
今回の案件で試行錯誤してみよう。