5

生成された gcda ファイルに対して gcovr を実行して、コード カバレッジを表示したいと考えています。Jenkins は、生成された gcda ファイルを Users/../Library/developer/Xcode/DerivedData/../../../i386 に配置するようです。Users/Shared/Jenkins/workspace/../build/example.build/Debug-iphonesimulator/example.build/Objects-normal/i386 にあると思います

XCode を使用して IOS プロジェクトをローカルで実行すると、gcda ファイルが生成され、カバレッジを表示できます。xcode 5 を実行しており、すべてのテストは XCTest で作成されています。

デバッグとリリースのために「Generate Test Coverage Files=YES」と「Instrument Program Flow=YES」を設定しました。基本的に、この投稿に従ってすべてを実行しました

Jenkins では、xcode プラグインを使用してビルドします。2 つのビルド コマンドがあります。最初のものは、ターゲット「例」と構成デバッグでビルドされます。2 番目の Xcode ビルド コマンドは、ターゲット "ExampleTests"、configure debug、arguments" test -destination OS=7.0,name=”iPhone Retina (4-inch)” およびスキームを使用してビルドします。出力では、テストが実行されていることがわかります。シミュレーターが建物のマシンで起動します。

おそらくプロジェクト設定で何かを見逃したか、ジェンキンスの仕事で何かを正しく設定していないようです。XCode5の場合のみ、TEST_AFTER_BUILD=YESのようなものかもしれません。

4

1 に答える 1

3

ご存じのように、.gcda ファイルは「間違った」ディレクトリに配置されています。

以下をせよ:

  1. Xcode-Project でアプリケーション ターゲットを選択し、[Editor -> Add Build Phase -> Add Run Script Build Phase] に移動します。
  2. このスクリプトをスクリプト フィールドに貼り付けます。

    echo "Creating derivedDataDirectory file"
    echo "${OBJECT_FILE_DIR_normal}/${CURRENT_ARCH}" > ${PROJECT_DIR}/derivedDataDirectory
    

    XCode のセットアップ

    (これにより、派生したDataDirectoryへのパスを持つファイルが作成されます)

  3. jenkins プロジェクトに移動し、[ビルド ステップの追加] をクリックして [シェルの実行] を選択します。

  4. このスクリプトを「コマンド」フィールドに貼り付けます。

    #CopyCodeCoverageFile
    echo "Start copying code coverage Files"
    
    projectname="[YOUR PROJECTNAME]"
    
    source=$(cat ${WORKSPACE}/$projectname/derivedDataDirectory)
    
    cp -a $source/. ${WORKSPACE}/$projectname/
    
    
    #CodeCoverage
    echo "Start CodeCoverage"
    
    cd ${WORKSPACE}/$projectname
    
    [YOUR PATH TO GCOVR]/gcovr -r /private/tmp/workspace/${JOB_NAME}/$projectname --xml > ${WORKSPACE}/$projectname/test-reports/coverage.xml
    

    [YOUR PROJECTNAME] と [YOUR PATH TO GCOVR] を挿入します。PROJECTNAME またはターゲットにスペースが含まれていると、問題が発生します。すべてのパスが正しいことを確認してください。

  5. これは私にとってはうまくいきます。すべてのパスが正しい場合は、うまくいくはずです。XCode 5を使用してJenkinsでXCTestsを実行しています。これはセットアップと同じである必要があります。gcovr を使用して cobertura のコード カバレッジを生成しない場合は、スクリプトの最後のステップを削除できます。gvovr で問題が発生した場合は、3.1 ではなく gcovr 3.0 を使用してみてください。

何かがうまくいかない場合や、より良い解決策を見つけた場合は教えてください。

于 2014-01-08T10:47:50.837 に答える