2

ハドソンに統合したAndroidテストプロジェクトがあります。次の設定でフリースタイルのソフトウェアプロジェクトを作成しました:1。ソースコード管理-カスタムワークスペース2.ビルド中にAndroidエミュレーターを実行します:* Android OSバージョン:4.0.3 *画面密度:240 *画面解像度:WVGA*デバイスロケール:en_US * SDカードサイズ:16M 3. Antの呼び出し:ターゲット:すべてのクリーンなemma debug install testビルドファイル:workspace / Project / build.xml 4.ビルド後のアクション *アーティファクトのアーカイブ:** / * test-TEST .xml * JUnitテスト結果レポートの公開:** / * test-TEST.xml *エマカバレッジレポートの記録:** / Coverage.xml *使用状況を追跡するためのファイルの指紋の記録:** /*test-TEST.xmlビルドは次のとおりです私のantターゲットをカバーする.xmlファイル部分:

    <!-- version-tag: custom -->
    <target name="test" depends="-test-project-check"
                description="Runs tests from the package defined in test.package property">

        <property name="tested.project.absolute.dir" location="${tested.project.dir}" />

        <property name="test.runner" value="android.test.InstrumentationTestRunner" />

        <!-- Application package of the tested project extracted from its manifest file -->
        <xpath input="${tested.project.absolute.dir}/AndroidManifest.xml"
                expression="/manifest/@package" output="tested.manifest.package" />
        <xpath input="AndroidManifest.xml"
                expression="/manifest/@package" output="manifest.package" />

        <property name="emma.dump.file"
                value="/data/data/${tested.manifest.package}/coverage.ec" />

        <if condition="${emma.enabled}">
            <then>
                <echo>WARNING: Code Coverage is currently only supported on the emulator and rooted devices.</echo>
                <run-tests-helper emma.enabled="true">
                    <extra-instrument-args>
                        <arg value="-e" />
                           <arg value="coverageFile" />
                           <arg value="${emma.dump.file}" />
                    </extra-instrument-args>
                </run-tests-helper>
                <echo>Downloading coverage file into project directory...</echo>
                <exec executable="${adb}" failonerror="true">
                    <arg line="${adb.device.arg}" />
                    <arg value="pull" />
                    <arg value="${emma.dump.file}" />
                    <arg value="coverage.ec" />
                </exec>
                <echo>Extracting coverage report...</echo>
                <emma>
                    <report sourcepath="${tested.project.absolute.dir}/${source.dir}"
                                      verbosity="${verbosity}">
                        <!-- TODO: report.dir or something like should be introduced if necessary -->
                        <infileset dir=".">
                            <include name="coverage.ec" />
                            <include name="coverage.em" />
                        </infileset>
                        <!-- TODO: reports in other, indicated by user formats -->
                        <html outfile="${basedir}/coverage/coverage.html" />
                        <xml outfile="${basedir}/coverage/coverage.xml" />
                   </report>
                </emma>
                <echo>Cleaning up temporary files...</echo>
                <delete file="coverage.ec" />
                <delete file="coverage.em" />
                <echo>Saving the report file in ${basedir}/coverage/coverage.html</echo>
            </then>
            <else>
                <run-tests-helper />
            </else>
        </if>
        <mkdir dir="${basedir}/junit-results" />
        <echo>Base dir is ${basedir}</echo>
        <exec executable="${adb}" failonerror="true" dir="${basedir}/junit-results">
            <arg line="${adb.device.arg}" />
            <arg value="pull" />
            <arg value="/data/data/${tested.manifest.package}/files/" />
        </exec>
    </target>    
    <import file="${sdk.dir}/tools/ant/build.xml" />

</project>

これで、このプロジェクトは正常に機能し、emmaカバレッジとテスト結果の両方が得られますが、同じオプションでマルチ構成プロジェクトを構成した場合、Androidエミュレーターを除いて、OS、密度、画面解像度で異なる変数を設定すると、1つで行き詰まりましたエラー -

test:
     [echo] WARNING: Code Coverage is currently only supported on the emulator and rooted devices.
     [echo] Running tests ...
     [exec] 
     [exec] com.mobclix.android.externaltestharness.test.UnitActivityTest:.
     [exec] Test results for PolideaInstrumentationTestRunner=.
     [exec] Time: 25.122
     [exec] 
     [exec] OK (1 test)
     [exec] 
     [exec] 
     [exec] Generated code coverage data to /data/data/com.mobclix.android.externaltestharness/coverage.ec
     [echo] Downloading coverage file into project directory...
     [exec] 355 KB/s (2043 bytes in 0.005s)
     [echo] Extracting coverage report...
     [echo] Cleaning up temporary files...
   [delete] Deleting: /Users/biercoff/Work/Workspace/HarnessExternalTest/coverage.ec
   [delete] Deleting: /Users/biercoff/Work/Workspace/HarnessExternalTest/coverage.em
     [echo] Saving the report file in /Users/biercoff/Work/Workspace/HarnessExternalTest/coverage/coverage.html
     [echo] Base dir is /Users/biercoff/Work/Workspace/HarnessExternalTest
     [exec] pull: building file list...
     [exec] pull: /data/data/com.mobclix.android.externaltestharness/files/com.mobclix.android.externaltestharness.test-TEST.xml -> ./com.mobclix.android.externaltestharness.test-TEST.xml
     [exec] 1 file pulled. 0 files skipped.
     [exec] 40 KB/s (499 bytes in 0.012s)

BUILD SUCCESSFUL
Total time: 1 minute 20 seconds
$ /Users/biercoff/.hudson/tools/android-sdk/platform-tools/adb disconnect localhost:53830
[android] Stopping Android emulator
[android] Archiving emulator log
$ /Users/biercoff/.hudson/tools/android-sdk/platform-tools/adb kill-server
Recording fingerprints
Recording test results
No test report files were found. Configuration error?
Archiving artifacts
Description set: 
Emma: looking for coverage reports in the provided path: /Users/biercoff/Work/Workspace/HarnessExternalTest/coverage/coverage.xml
Emma: found 1 report files: 
          /Users/biercoff/Work/Workspace/HarnessExternalTest/coverage/coverage.xml
Emma: stored 1 report files in the build folder: /Users/biercoff/.hudson/jobs/MulitTestHarnessProject/configurations/axis-density/240/axis-os/4.0.3/axis-resolution/WVGA/builds/2012-05-18_17-26-05/emma
Emma: Coverage: Classes 21/39 (54%). Methods 40/128 (31%). Blocks 833/2928 (28%). Lines 154.5/528 (29%). 
[DEBUG] Skipping watched dependency update for build: MulitTestHarnessProject/density=240,os=4.0.3,resolution

emmaカバレッジの場合、Hudsonのパスを/Users/biercoff/Work/Workspace/HarnessExternalTest/coverage/coverage.xmlに変更して機能させる必要がありましたが、Junitテスト結果に対して同じことを行おうとすると、Hudsonは「参照してください」。ファイルはjunit-resultsフォルダーの下のプロジェクトフォルダーにありますが、新しいビルドを実行するたびに、同じものが表示されます。テストレポートファイルが見つかりませんでした。構成エラー?エラーメッセージ。多くのバリエーションを試しましたが、運がありませんでした。私はおそらく本当に小さな何かが欠けています。誰か助けてくれませんか?

4

1 に答える 1

1

Hudsonは、ワークスペースに関連するjUnitテスト結果を検索します。また、絶対パスを指定することはできません(Hudson / Jenkinsを1年以上使用していますが、その理由はまだわかりません)。したがって、あなたの場合は、ワークスペースよりもディレクトリレベルで深いものだけを調べています。これで、複数構成のプロジェクトの場合、ワークスペースは最上位から開始されるのではなく、より深くなります。軸名が含まれます(例:) workspace_root/AXIS1_NAME/AXIS1_VAL...。ただし、テストはそのワークスペースのディレクトリツリーの上位にあります。ビルドステップでそれらをコピー${WORKSPACE}する必要があります。そうすれば、Hudsonはそれらを公開できるようになります。

于 2012-05-18T12:19:16.867 に答える