7

現在、jenkins での iOS テストを自動化しています。これまでのところ、単体テストの実行、OCUnit の JUnit への変換、および Cobertura 形式でのコード カバレッジの生成に問題はありませんでした (多くのグーグル検索はありましたが、難しい問題はありませんでした)。

ただし、UIAutomation ジョブを作成するときに行き詰まります。テストは正常に実行されています (instrumentsコマンド ラインからの呼び出し)。junit レポートの生成はトリッキーでしたが、可能でした。問題は、UIAutomation の実行時にコード カバレッジ ファイルが生成されないことです。

それらを生成する可能性はありますか?そうでない場合は、その理由を説明していただけますか?

私がこれまでに試したこと:

  1. iOS シミュレーターで既に実行中のアプリケーションに UIAutomation をアタッチします。
    • これは不可能に思えます。実行中のアプリケーションが計測器によって強制終了され、新しいインスタンスが再起動されるか、不可解なエラー メッセージが出力されます。
  2. osascript と の組み合わせを使用して、js スクリプトの最後でシミュレーターを終了しUIAHost. performTaskWithPathArgumentsTimeoutます。
    • アプリケーションは正常に終了しましたが、カバレッジは生成されませんでした。

編集 別のフレームワークでいくつかのテストを行った後、シミュレーターを終了するだけでは不十分であることに気付きましたexit()。アプリケーションから明示的に呼び出す必要があります。UI オートメーションの場合、これは少しトリッキーですが、アプリケーション スキームを宣言できます。たとえばmy-app://exit、MobileSafari を使用してUIAHost.performTaskWithPathArgumentsTimeout. これでファイルを生成するのに十分かどうかを確認します。

4

2 に答える 2

2

これらの手順に従って、UI オートメーションからコード カバレッジ ファイルを生成し、cobertura Jenkins プラグインを介して情報を表示することができました。

まず、「Generate Test Coverage Files」と「Instrument Program Flow」のビルド設定を「はい」に設定します。これにより、シミュレーターでアプリケーションを実行してアプリケーションを終了するたびに、コード カバレッジ ファイルが生成されます。Info.plist ファイルに UIApplicationExitsOnSuspend を追加し、このオプションを「YES」に設定します。UI 自動化テストを実行し、最後に、シミュレーターで [ホーム] ボタンを手動で押すか、UIATarget.localTarget().deactivateAppForDuration() メソッドを使用して、アプリを終了できます。アプリに activateAppForDuration() メソッドに依存する UI オートメーション テストがある場合、コマンドの実行時にテストが終了することに注意してください。

gcda ファイルを取得したら、gcovr ( https://software.sandia.gov/trac/fast/wiki/gcovr ) をダウンロードしてコマンドを実行することにより、cobertura xml ファイルを生成できます。

gcovr -r your_root_directory --object-directory path_to_gcda_files --xml > coverage.xml

これにより、Jenkins cobertura プラグインをセットアップして、必要に応じて情報を表示できます。

ソース: http://blog.octo.com/en/jenkins-quality-dashboard-ios-development/#step2-2

于 2013-07-09T15:25:42.743 に答える
0

私の理解では、アプリが終了するとコードカバレッジファイルが生成されますが、シミュレーターを強制終了することはできません。

info.plistプロパティ「UIApplicationExitsOnSuspend」をtrueに設定して、アプリ用に別のターゲットを作成しようとしましたか?

ただし、少し広い問題があります。生成されたカバレッジファイルは累積的ではなく、アプリケーションが終了するたびに上書きされます。したがって、テストがどのように構成されているか(つまり、個別のテストごとにアプリを強制終了して起動するか)によっては、適切なコードカバレッジを取得するのに苦労する可能性があります。

于 2012-12-31T08:49:22.320 に答える