Protractor: Junitレポーター

作成日 2013年08月28日  ·  42コメント  ·  ソース: angular/protractor

Jenkinsで分度器テストを実行したいので、junitレポーター(カルマのように)があれば、テストのステータスをJenkinsで報告できると非常に便利です。

feature request

最も参考になるコメント

設定ファイルでこれを少しハックな方法で行う方法-私はこれを分度器独自のテストスイートでテストしました:

npm install jasmine-reporters

設定ファイル:

require('jasmine-reporters');

jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter(
    'outputdir/', true, true));

// The main suite of Protractor tests.
exports.config = {
  seleniumServerJar: './selenium/selenium-server-standalone-2.35.0.jar',
  chromeDriver: './selenium/chromedriver',

  seleniumAddress: 'http://localhost:4444/wd/hub',

  // Spec patterns are relative to this directory.
  specs: [
    '*_spec.js'
  ],

  capabilities: {
    'browserName': 'chrome'
  },

  baseUrl: 'http://localhost:8000',
};

全てのコメント42件

ここでの私の2セント:ビルドツールとしてGruntを使用する場合、 grunt-jasmine-nodeを使用して分度器テストを実行し、JUnitのようなレポートを取得するように構成できます!

設定ファイルでこれを少しハックな方法で行う方法-私はこれを分度器独自のテストスイートでテストしました:

npm install jasmine-reporters

設定ファイル:

require('jasmine-reporters');

jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter(
    'outputdir/', true, true));

// The main suite of Protractor tests.
exports.config = {
  seleniumServerJar: './selenium/selenium-server-standalone-2.35.0.jar',
  chromeDriver: './selenium/chromedriver',

  seleniumAddress: 'http://localhost:4444/wd/hub',

  // Spec patterns are relative to this directory.
  specs: [
    '*_spec.js'
  ],

  capabilities: {
    'browserName': 'chrome'
  },

  baseUrl: 'http://localhost:8000',
};

ディレクトリの相対パスまたは絶対パスを受け入れますか。絶対パスは機能しますが、相対パスは機能しません。 ../Reportsのようなオプションを試しましたが、役に立たない
jasmine.getEnv()。addReporter(
new jasmine.JUnitXmlReporter('xmloutput'、true、true));
}、

探索して働いて、私の最後のコメントを無視してください

私は頭が良くなかったので、フォルダが作成されることを期待していましたが、実際には、フォルダは事前に作成する必要があります。

@juliemr grunt-concurrentなどを介して並行して実行されている2つの分度器インスタンスで使用するにはどうすればよいですか? FirefoxとChromeで同時にテストを実行できるようにするために必要ですが、一方のXMLがもう一方のXMLに置き換わるため、Jenkinsが混乱します。

たぶん、分度器は、カルマが行うのと同じように、そのような理由で並列で実行する方法を知っている必要がありますか?

@mzgol並行タスクとして実行されている各ターゲットに、プラットフォームに基づいて異なるjunit xmlレポートを出力させようとしましたか? ターゲット名に基づいて新しい出力フォルダーを作成するだけで済みます。

また、Jenkinsのマルチ構成ターゲットを調べて、クリーンな環境でそれぞれビルドステップを並行して実行できるようにすることもできます。 また、タッチストーンビルドなどの優れた機能を備えており、うなり声よりも並行性を抑えることができます。

モカにも同様の設定がありますか? (私はジャスミンを使用していないので)

@mzgol jvandyke(ありがとう)からの提案を試しましたが、うまく機能しています:

onPrepare: function(){
        require('jasmine-reporters');
        var capsPromise = browser.getCapabilities();
        capsPromise.then(function(caps){
            var browserName = caps.caps_.browserName.toUpperCase();
            var browserVersion = caps.caps_.version;
            var prePendStr = browserName + "-" + browserVersion + "-";
            jasmine.getEnv().addReporter(new
jasmine.JUnitXmlReporter("protractor_output", true, true,prePendStr));
        });
 },

ありがとう。 それは私のためにも働いています:

onPrepare:function(){
require('jasmine-reporters');
var capsPromise = browser.getCapabilities();
capsPromise.then(function(caps){
var browserName = caps.caps_.browserName.toUpperCase();
var browserVersion = caps.caps_.version;
var prePendStr = browserName + "-" + browserVersion + "-";
jasmine.getEnv()。addReporter(new
jasmine.JUnitXmlReporter( "protractor_output"、true、true、prePendStr));
});
}、

この上にhtmlレポーターを作成しました。 コメントを教えてください
https://github.com/jintoppy/protractor-html-screenshot-reporter

@tracycumminsにもつまずいたので、ドキュメントにフォルダの作成を追加することをお勧めします。

@juliemrサンプルにリストされているすべてのオプションに飽きました。 このエラーが発生します。 どんなポインタもありがたい

/home/jack/prototype/conf.js:19
jasmine.getEnv()。addReporter(new jasmine.JUnitXmlReporter('xmloutput'、true、true));
^
TypeError:未定義は関数ではありません
exports.config.onPrepare(/home/jack/prototype/conf.js:19:33)
Runner.runFilenamesOrFns_(/home/usr/lib/node_modules/protractor/lib/runner.js:64:9)
Runner.runTestPreparers(/home/usr/lib/node_modules/protractor/lib/runner.js:91:8)
runner.controlFlow.execute.then.jasmineNodeOpts(/home/usr/lib/node_modules/protractor/lib/frameworks/jasmine.js:39:12)
webdriver.promise.ControlFlow.runInNewFrame_(/home/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1539:20)
webdriver.promise.ControlFlow.runEventLoop_(/home/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1404:8)
ラッパーで_onTimeoutとして
ontimeoutとしてTimer.listOnTimeout
====非同期タスク====
テスト作成者を実行する
Object.exports.run(/home/usr/lib/node_modules/protractor/lib/frameworks/jasmine.js:38:24)
driverprovider_.setupEnv.then.then.then.testResult(/home/usr/lib/node_modules/protractor/lib/runner.js:233:28)
_fulfilledで(/home/usr/lib/node_modules/protractor/node_modules/q/q.js:797:54)
self.promiseDispatch.done(/home/usr/lib/node_modules/protractor/node_modules/q/q.js:826:30)
Promise.promise.promiseDispatch(/home/usr/lib/node_modules/protractor/node_modules/q/q.js:759:13)
/home/usr/lib/node_modules/protractor/node_modules/q/q.js:525:49
フラッシュ時(/home/usr/lib/node_modules/protractor/node_modules/q/q.js:108:17)
process._tickCallback(node.js:423:13)で
Function.Module.runMain(module.js:499:11)で


//設定ファイルの例。
exports.config = {
//実行中のセレンサーバーのアドレス。
seleniumAddress:' http:// localhost :4444 / wd /hub'、
allScriptsTimeout:30000、
//Webdriverインスタンスに渡される機能。
機能:{
'browserName':'Firefox'
}、

//スペックパターンは、現在の作業に直接関連している場合
//分度器が呼び出されます。
仕様:['example_spec.js']、

//Jasmineノードに渡されるオプション。
onPrepare:function(){
require('jasmine-reporters');
jasmine.getEnv()。addReporter(new jasmine.JUnitXmlReporter('xmloutput'、true、true));
}、

//Jasmineノードに渡されるオプション。
jasmineNodeOpts:{
showColors:true、
defaultTimeoutInterval:30000
}
};

ねえ@jkmurthy

私はまったく同じ問題に遭遇しました。 最新バージョンの[email protected]では、モジュール名が変更されました。 これに関するドキュメントはありませんが、このファイルにあります。

https://github.com/larrymyers/jasmine-reporters/blob/master/src/junit_reporter.js

  • 使用法:

    • jasmine.getEnv()。addReporter(new jasmineReporters.JUnitXmlReporter(options);

それでも、モジュール「jasmineReporters」が未定義であると表示されているため、機能させることができませんでした。

そこで、古いバージョンの[email protected]に切り替えましたが、完全に機能しました。 レポーターオプションの出力として参照しているディレクトリを作成してください。

jasmine-reportersを0.4.1にダウングレードしませんでした
で試してみました
onPrepare:function(){
var folderName =(new Date())。toString()。split('').splice(1、4).join('');
var mkdirp = require('mkdirp');
var newFolder = "./reports/" + folderName;
require('jasmine-reporters');

            mkdirp(newFolder, function(err) {
              if (err) {
                console.error(err);
              } else {
                jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter(newFolder, true, true));
              }
            });
          },

まだ運がない

これは間違いなく私にとっての問題です。 jasmine-reporters2.0を使用すると
D:\ HgBuild \ TPSOneSearch \ Unstable \ Tyler.TPS.OneSearch \ Tyler.TPS.Web.OneSearch \ app
\ test \ e2e \ oneSearchChromeConf.js:29
jasmine.getEnv()。addReporter(new jasmine.JUnitXmlReporter(uri、t
rue、true、''));
^
TypeError:undefinedは関数ではありません。

「newjasmine.JUnitXmlReporter」を「jasmineReporters.JUnitXmlReporter」に変更すると、jasmineReportersは未定義になります。

jasmine-reportersを0.4.1に戻すと、見事に機能します。

jasmine-reporters2.0のAPIは1.xとは異なります。 盲目的に更新することはできません。 呼び出しを調整します。

JUnitXmlReporterのjunit_reporter.jsファイルのコメントを見て、次のようにconfファイルを設定しました。

onPrepare:function(){
require('jasmine-reporters');
var options = {
savePath:'some-file-path'、
統合:true、
useDotNotation:true
};
jasmine.getEnv()。addReporter(new jasmineReporters.JUnitXmlReporter(options));
}、

これはうまくいくはずですが、そうではありませんか?
次のエラーが発生します「ReferenceError:jasmineReporters isnotdefined」

/ **
*指定されたスペック実行に対してJUnitXMLを生成します。 さまざまなオプションがあります
*結果が書き込まれる場所を制御し、デフォルト値は次のとおりです。
*できるだけ少ない.xmlファイルを作成するように設定します。 保存することが可能です
*単一のXMLファイル、または各トップレベルのXMLファイルdescribe 、または
*ネストに関係なく各describeのXMLファイル。
*
* 使用法:
*
* jasmine.getEnv()。addReporter(new jasmineReporters.JUnitXmlReporter(options);
*
* @param {object}[オプション]
* @param {string} [savePath]ディレクトリでファイルを保存します(デフォルト:'')
* @param {boolean}[consolidateAll]すべてのテスト結果をに保存するかどうか
*単一ファイル(デフォルト:true)
*注:trueの場合、{filePrefix}は完全なファイル名として扱われます(
* 拡大)
* @param {boolean}[consolidate]ネストされた記述を保存するかどうか
*親と同じファイル(デフォルト:true)
*注:consolidateAllもtrueの場合、trueは何もしません。
*注:falseは、consolidateAllもfalseに設定します。
* @param {boolean}[useDotNotation]スイート名をで区切るかどうか
*スペースの代わりにドット、つまり「Classinit」ではなく「Class.init」(デフォルト:true)
* @param {string} [filePrefix]は、先頭に追加される文字列値です。
* xml出力ファイル(デフォルト:junitresults-)
*注:consolidateAllがtrueの場合、デフォルトは単に「junitresults」であり、
*これが実際のファイル名、つまり「junitresults.xml」になります
* /

@ john-bridgesコードをバックティックでラップできますか? それなしでは読むのは難しいです。

@ john-bridgesええと、 jasmineReporters変数は定義していなかったので、定義されていないのも不思議ではありません。 モジュールを割り当てる必要があります。

var jasmineReporters = require('jasmine-reporters');

@mzgol私はばかで、魅力のように働きます。 あなたの助けに感謝します。

以前のバージョンのjasmine-reportersは、レポーターをjasmineオブジェクトに直接接続していました。 今ではそれはそれ自身のエクスポートにアタッチしますが、これははるかに優れています。

混乱がどこから来たのかわかります。 ;)

@mzgol同意します、はるかに良い方法です、ありがとう。

[email protected]はJasmine 2.xをサポートし、上記で観察/説明したように、構文とエントリポイントが異なります(独自のオブジェクトとグローバルなjasmineオブジェクト)。 とはいえ、分度器が使用するJasmine 1.xではなく、Jasmine2.xのみをサポートします。 したがって、 var jasmineReporters = require('jasmine-reporters'); new jasmineReporters.JUnitXmlReporter(/*...*/);を実行することで分度器構成の過去のエラーを取得できる場合がありますが、Jasmine 2.xイベントとレポーターインターフェイスを待機しているため、意味のある出力を取得するのは難しいでしょう。

JUnitXmlReporterをJasmine1.xで動作させる適切な方法は、 @juliemrの元の命令をわずかに変更することです。

npm install jasmine-reporters@~1.0.0

その後、通常どおり彼女の残りの指示に従います。

[email protected][email protected] $と異なる点に対処するために、jasmine-reportersREADMEをオーバーホールしました。 また、質問がたくさん出てくるので、分度器でのジャスミンレポーターの使用に関する特定のセクションを追加しました。

深刻な不足しているドキュメントを指摘してくれた@ksrajaに感謝します。

なぜこの問題は解決され続けるのですか、これがまだ問題であることは明らかです。

    onPrepare: function() {

        require('jasmine-reporters');
        jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter('test-target/', true, true));

        browser.driver.get('http://localhost:9000');
        require('./test/e2e/models/login-page').login();
    },

エラーをスローします:

Running "protractor:e2e" (protractor) task

/Users/212400520/PredixExperience/predix-dashboard/node_modules/jasmine-reporters/src/jasmine.console
_reporter.js:2
    if (! jasmine) {
          ^
ReferenceError: jasmine is not defined
    at /Users/212400520/PredixExperience/predix-dashboard/node_modules/jasmine-reporters/src/jasmine.
console_reporter.js:2:11
    at Object.<anonymous> (/Users/212400520/PredixExperience/predix-dashboard/node_modules/jasmine-re
porters/src/jasmine.console_reporter.js:144:3)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/Users/212400520/PredixExperience/predix-dashboard/node_modules/jasmine-re
porters/src/load_reporters.js:1:63)
    at Module._compile (module.js:456:26)
>> 
Fatal error: protractor exited with code: 8

@jonniespratley npm install jasmine-reportersはデフォルト1.0.1バージョンをインストールすることがわかりました。
したがって、最新バージョンのjasmine-reportersがインストールされていることを確認してください。 例えば

npm install jasmine-reporters@~2.0.3 --save-dev

その後、分度器の構成を次のように更新しました。

var jasmineReporters = require('jasmine-reporters');
exports.config = {
    framework: 'jasmine2',
    //...  
    //Other configurations...
    //...  
    onPrepare: function () {
        jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
            savePath: '..',
            consolidateAll: false
        }));
    },
    jasmineNodeOpts: {
        showColors: true,
        defaultTimeoutInterval: 60000,
        print: function() {}
    }
};

今、ジャスミンレポーターは私にうまく働いています。

jasmine2フレームワークにアップグレードするための分度器のドキュメントでは、レポーターのセクションで@luixavilesの回答がドキュメント化されていると便利です。 jasmine2のjunitレポートを取得する方法を理解するのに苦労したのは私だけだとは想像できません。 確かに、これを見つけて現在のドキュメントを読み直すと、より明確になりますが、元々は誤ってジャスミンを意味していました-レポーターはjasmine2で(まったく)機能しませんでした。 上記の回答、またはjasmine-reportersのreadmeへのリンクがあると、作業が少し簡単になります。

ジャスミンレポートを試しました
var jasmineReporters = require('jasmine-reporters');
jasmine.getEnv()。addReporter(new jasmineReporters.JUnitXmlReporter('../ TestReports / test'、true、true));

正常に動作しましたが、xmlファイルが作成されていません

https://github.com/angular/protractor/blob/master/spec/junitOutputConf.jsにアクセスしようとしましたが、404が返されます

@spatchamatlaあなたの例では、 jasmine-reporters @ 1.x構文(順序付けられた引数)と[email protected]レポーター(jasmineReporters.JUnitXmlReporterとjasmine.JUnitXmlReporter)のような奇妙な組み合わせを使用しています。

正しい構文を使用してレポーターを作成し、さらに進んでいるかどうかを確認してください。

jasmine-reporters READMEの例から変更:

var junitReporter = new jasmineReporters.JUnitXmlReporter({
    savePath: '../TestReports/test'
});
jasmine.getEnv().addReporter(junitReporter);

失敗したと思うので、フォルダ'../TestReports/test'が存在することを確認してください
静かにも。

2015年4月15日水曜日午後4時33分、Ben [email protected]
書きました:

@spatchamatlahttps ://github.com/spatchamatlaあなたの例は
[email protected]構文の奇妙な組み合わせ(順序付けられた引数)
[email protected]レポーターのように見えます
(jasmineReporters.JUnitXmlReporterとjasmine.JUnitXmlReporter)。

正しい構文を使用してレポーターを作成し、次のようになるかどうかを確認してください
さらに。

jasmine-reporters READMEの例から変更:

var junitReporter = new jasmineReporters.JUnitXmlReporter({
savePath:'../TestReports/test'
});
jasmine.getEnv()。addReporter(junitReporter);


このメールに直接返信するか、GitHubで表示してください
https://github.com/angular/protractor/issues/60#issuecomment-93451490

jasmine-reportersはhttps://github.com/substack/node-mkdirpを使用してディレクトリを作成しようとしますが、決して悪い考えではありません。

@bloveridge @spenoir 、私は[email protected]にダウングレードし、以下を使用しました

   //For junit output reports
        var reporters = require('jasmine-reporters');
        var capsPromise = browser.getCapabilities();
        capsPromise.then(function (caps) {
            var browserName = caps.caps_.browserName.toUpperCase();
            var browserVersion = caps.caps_.version;
            var prePendStr = browserName + "-" + browserVersion + "-";
            jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter('Protractor/TestReports', true, true, prePendStr));
        });

動作を開始しましたが、唯一の欠点は、プロジェクトフォルダではなくホームディレクトリにフォルダを作成することです。 プロジェクトフォルダのパスを使用しようとすると、それでも表示されます

警告:'../TestReports'、'CHROME-41.0.2272.118-TestImpersonationPage.xml'のjunitレポートの書き込みに失敗しました。 理由:
Rhinoの試み:Javaが定義されていません
PhantomJsの試み:ウィンドウが定義されていません
NodeJSの試行:EACCES、許可が拒否されました'/ Users / TestReports'

フォルダを手動で作成しましたが、コンソールに上記が表示されます

'Protractor / TestReports'は正しいパスであり、そのフォルダは存在しますか?

2015年4月15日水曜日午後5時1分、 spatchamatlanotifications @ github.com
書きました:

@bloveridge https://github.com/bloveridge @spenoir
https://github.com/spenoir、[email protected]にダウングレードして
以下を使用

//junit出力レポートの場合
var reporters = require('jasmine-reporters');
var capsPromise = browser.getCapabilities();
capsPromise.then(function(caps){
var browserName = caps.caps_.browserName.toUpperCase();
var browserVersion = caps.caps_.version;
var prePendStr = browserName + "-" + browserVersion + "-";
jasmine.getEnv()。addReporter(new jasmine.JUnitXmlReporter('Protractor / TestReports'、true、true、prePendStr));
});

それは機能し始めました、唯一の欠点はそれが家にフォルダを作成することです
プロジェクトフォルダではなくディレクトリ。 プロジェクトを使ってみたとき
フォルダパス、それはまだ言います

Rhinoの試み:Javaが定義されていません
PhantomJsの試み:ウィンドウが定義されていません
NodeJSの試行:path.resolveへの引数は文字列である必要があります

フォルダを手動で作成しましたが、コンソールに上記が表示されます


このメールに直接返信するか、GitHubで表示してください
https://github.com/angular/protractor/issues/60#issuecomment-93460326

「Protractor/TestReports」はホームフォルダに作成されたパスで、次に使用しました

jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter('../TestReports', true, true, prePendStr));

手動で作成しました

screen shot 2015-04-15 at 12 07 09 pm

私がテストを実行したとき、それはまだ与えます
警告:'../TestReports'、'CHROME-41.0.2272.118-TestImpersonationPage.xml'のjunitレポートの書き込みに失敗しました。 理由:
Rhinoの試み:Javaが定義されていません
PhantomJsの試み:ウィンドウが定義されていません
NodeJSの試行:EACCES、許可が拒否されました'/ Users / TestReports'

TestReportsフォルダーのアクセス許可を緩和してみてください。わからない
その後。

2015年4月15日水曜日午後5時10分、 spatchamatlanotifications @ github.com
書きました:

「分度器/テストレポート」は、ホームフォルダに作成されたパスです。
それから私は使用しました

jasmine.getEnv()。addReporter(new jasmine.JUnitXmlReporter('../ TestReports'、true、true、prePendStr));

手動で作成しました

[画像:スクリーンショット2015-04-15 at 12 07 09 pm]
https://cloud.githubusercontent.com/assets/4671240/7163457/278cffa6-e368-11e4-9994-2c0b5d33f07c.png

私がテストを実行したとき、それはまだ与えます
警告:'../TestReports'のjunitレポートの書き込みに失敗しました。
'CHROME-41.0.2272.118-TestImpersonationPage.xml'。 理由:
Rhinoの試み:Javaが定義されていません
PhantomJsの試み:ウィンドウが定義されていません
NodeJSの試行:EACCES、許可が拒否されました'/ Users / TestReports'


このメールに直接返信するか、GitHubで表示してください
https://github.com/angular/protractor/issues/60#issuecomment-93466365

確かに、あなたの提案と入力をありがとう@spenoir

素晴らしいスレッド。 とても助かりました。
問題があると思ったが、そうではない。 削除する方法が見つかりません:)
良い仕事を続けてください。

@jkmurthy @ksrajaリストされているjasmineReportsは、実際にはrequire関数のエクスポートのようです。

例えば、
var jasmineReporters = require('jasmine-reporters');

jasmine-reporters readmeの例は私のために機能します: https ://github.com/larrymyers/jasmine-reporters#protractor

コンソール出力のみが必要な場合は、 https://github.com/bcaudan/jasmine-spec-reporter/blob/master/docs/protractor-configuration.mdに満足しています。

@josephdpurcellあなたが提供したリンクも私のために働いた。 これが私の設定です。お役に立てば幸いです。
mkdirpパッケージと、他のjasmine2.xおよびjasmine-reporters2.Xパッケージがインストールされていることを確認してください。
この構成は、フォルダーが存在しない場合にサイレント障害を回避するためのフォルダーを作成します。

   var folderName = ('output_folder');
    var mkdirp = require('mkdirp');
    mkdirp(folderName, function(err) {
      if (err) {
        console.error(err);
       } else {
          var jasmineReporters = require('jasmine-reporters');
          jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
            consolidateAll: true,
            savePath: folderName,
             filePrefix: 'xmloutput-'
            }));
         }
    });
このページは役に立ちましたか?
0 / 5 - 0 評価