2017-10-30 25 views
3

私は、私のカルマテスト(Angular-CLI)を実行するJenkinsジョブとAngular-4 App(Angular-CLI)のテストを実行しました。両方のテストではXMLファイルが出力され、結果と詳細を表示するためにJenkinsが消費します。テスト結果のグループ化:Jenkinsとのカルマ/プロトラクターの統合

私の問題は非常にシンプルで、次のスクリーンショットで表示されます:私のテストスイートが私の分度器テストかカルマテストのものであるかどうかは分かりません。赤で強調

  • は私の分度器のテストスイート
  • わけではありません-強調表示私のカルマのテストスイートです。

Jenkins job result

そこで私は自分自身に次の質問をした

  • は、継続的インテグレーションと今日のユニットテストとエンドツーエンドのテストを管理するために強制されることをお勧めはありますか?
  • 別々のJenkinsジョブでテストを分離する必要はありますか?そして、それは後にJenkins-pipelineワークフローで2つの異なるJenkinsFilesを持つ必要があるということですか?
  • また、すべてのテストスイートのプレフィックスを設定するだけで簡単にすべてを管理できますか?

最後のオプションはどちらも実用的ではないようです。


EDIT:としてITが意見ベースのされていない、質問についてthoughfulして、それを閉じるために、投票の前にcompletlyこれを読んで。私は自分自身を明確にします:私は、問題の明確な定義を伴う、継続的な統合の非実践的な実装に直面しています。私は現在の問題を解決するソリューションを期待し、可能であれば、フロントエンドのテストこの問題を解決する可能性のあるアプリケーションです。

答えて

2

これはよくある問題ですが、ベストプラクティスまたは良いプラクティスがあるとは思われません。開発者がビルドサーバーにテスト結果を表示する方法に依存します。

私はあなたの技術的な問題を解決することを望むあなたの特定のユースケースのための解決策を持っています。

私はTeamcityを自分で使用していますが、これもJenkinsで使用するために調整しました。私はAngular CLIを使ってデモンストレーションアプリを作りました。

ジェンキンスやTeamCityなどのビルドサーバーは結果ファイル(Jenkins、通常はJUnitを以下で説明します)またはサービスメッセージをstdout(TeamCity)経由で読み込むだけです。したがって、これらのレコードが書き込まれる前にテスト結果データを操作することができます。これにより、別々のジョブでテストを実行したり、不要なプレフィックスでテストスイートを拡張したりすることなく、カルマ(単位)と分度器(e2e) 。

karma-junit-reporterjasmine-reportersの2つの追加パッケージが必要です。我々はカルマにカルマ・ジャニット・レポーター、分度器にジャスミン・レポーターを使用します。

これらのパッケージを使用すると、結果がJUnitファイルに書き込まれる前にスイート名を変更できます。これは、ユニットとe2eの区別に役立ちます。

あなたはそれぞれのツールが提供するインストールの指示に従うか、以下の私の実装に従うことができます。

はカルマ - JUnitのレポーターをインストールします。

NPMカルマ - JUnitのレポーターをインストール--save-

:devが

あなたkarma.conf.jsファイルに以下の変更を行います。

プラグイン・アレイにカルマ - JUnitのレポーターを追加します。

require('karma-junit-reporter') 

を記者アレイにJUnitの追加:

reporters: ['progress', 'kjhtml', 'junit'] 

を以下にjunitReporterオブジェクトを追加します。

junitReporter: { 
     outputDir: 'testresults', 
     outputFile: 'karmatest.xml', 
     suite: 'unit', // whichever prefix you wish to use 
     useBrowserName: false, 
     } 

ジャスミン-記者をインストールします:書き込みのように、注意してください--save-devの

ジャスミン-記者を

NPMをインストールします。分裂師のためのジャスミン記者文書では、npm install --save-dev [email protected]^2.0.0を実行すべきだと述べていますが、例外処理を行わなくても問題が発生します。私は最新のインストールをお勧めします。

protractor.confのonPrepare機能に次のコードを追加します。JSファイル:

var jasmineReporters = require('jasmine-reporters'); 
return browser.getProcessedConfig().then(function (config) { 
     var junitReporter = new jasmineReporters.JUnitXmlReporter({ 
     consolidateAll: true, 
     savePath: 'testresults', 
     filePrefix: 'protractor-test-results', 
     modifySuiteName: function (generatedSuiteName, suite) { 
      return 'e2e.' + generatedSuiteName; // whichever prefix you wish to use 
    } 
    }); 
    jasmine.getEnv().addReporter(junitReporter); 
}); 

あなたは今、テスト、NGのE2E ngを実行しても、次のようにJUnitテスト結果報告書を発行するポストビルドアクションを追加するにはジェンキンスジョブを構成する必要があります。

testresults \ * .xmlの

あなたのジェンキンステスト結果ダッシュボードには次のようになります:

Jenkins Test Results dashboard

ユニットテストかe2eテストのどちらにも失敗しました。各テスト名には、ユニットかe2eかを判断する接頭辞が付いています。パッケージの下のリンクをクリックして、すべてのe2eまたはすべての単体テストにドリルダウンすることもできます。

あなたが勇敢で時間があれば、よりカスタマイズされた結果を得るために、これらのパッケージと同じ仕事をする独自のユーティリティを書くことができます。

私はこれがあなたが必要とする成果を達成するのに役立つことを願っています。

ありがとうございました

+1

洞察力をお寄せいただき、ありがとうございました。ありがとう –

2

あなたの質問は合理的ですが、この問題の解決策の現在の状態では、意見に基づいています。

Teamcityと同じ問題がありますが、NUnit、Karma、またはProtractorテストでは視覚的な違いはありません。これは、CIのすべてのテストが同じであるため、特定のパターン/形式(テストスイート、テスト名など)を検索するstdoutを解析するだけですが、テストの種類やテストの種類などはないので、グループ化はありませんタイプによって。

ので、テストを区別するための唯一の方法は、命名規則を使用するか、describe機能の特別なバージョンを作成することです。この目的のために複数のジョブを持つ

export describeProtractor(name:string, ...) { 
    describe('(Protractor)' + name, ...); 
} 

は本当に便利ではありません。

もう一つの選択肢は、カルマ/分度器のhtml記者によって生成されたテスト結果を表示するためにHTML Publisher Pluginを使用することです。

+0

洞察をいただきありがとうございます。ジャスミン関数をオーバーライドして各テストケースのプレフィックスを追加することを考えていましたが、実際のソリューションよりも回避策のほうが多かったようです。 –

関連する問題