【问题标题】:Why is my HTML test report always one XML file behind?为什么我的 HTML 测试报告总是落后一个 XML 文件?
【发布时间】:2016-01-12 14:51:18
【问题描述】:

我的protractor 配置文件中的这段代码运行良好...除了在 onComplete 中创建的html 文件总是使用 previous 测试运行中的 junitresults xml 文件,而不是在同一配置文件的 onPrepare 函数中创建的 xml 文件。所以 html 页面总是显示测试结果比 html 页面上显示的时间戳慢。

一个简单的例子是,如果我从 test-results 文件夹中的先前测试中没有 xml 文件开始,则 html 生成器根本找不到 no xml 文件来构建一个 html 文件,并且因此不会生成 html 文件。但是 new xml 文件确实显示仍然被创建,放入文件夹中,并且完全被忽略......直到下一次测试运行。

你能帮我让我的测试生成一个 xml 文件,然后使用 that xml 文件来生成 html 文件吗?

谢谢!

onPrepare: function() {
    var capsPromise = browser.getCapabilities();   
    capsPromise.then(function(caps) {
        browser.browserName = caps.caps_.browserName.replace(/ /g,"-");
        browser.browserVersion = caps.caps_.version; 
        browserName = browser.browserName;
        browser.reportPath = 'c:/QA/test-results/' + browser.browserName + '/';
    }). then(function(caps) {
            var jasmineReporters = require('jasmine-reporters');
            jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({    
                consolidateAll: true,
                savePath: 'c:/QA/test-results/' + browser.browserName + '/',
                filePrefix: 'junitresults'
        }));
    });
    return browser.browserName, browser.browserVersion, browser.reportPath;
},

onComplete: function() {
  var HTMLReport = require('jasmine-xml2html-converter');
  // Call custom report for html output
  testConfig = {
    reportTitle: 'Test Execution Report',
    outputPath: browser.reportPath,
    seleniumServer: 'default',
    applicationUrl: browser.baseUrl,
    testBrowser: browser.browserName + ' v.' + browser.browserVersion
  };
  new HTMLReport().from(browser.reportPath + 'junitresults.xml', testConfig);
  console.log("... aaaannnnd... done.");
},

【问题讨论】:

    标签: angularjs jasmine automated-tests protractor jasmine2.0


    【解决方案1】:

    这都是关于时机的。来自jasmine-reportersJUnitXmlReporter 将输出写入jasmineDone 回调(source) 上的XML 文件,这发生在onComplete 之后。

    首先要尝试切换到afterLaunchonCleanup 而不是onComplete。请注意,browser 对象在这些方法中不可用,您需要其他方式在回调之间共享变量。另见:


    您还可以添加custom reporter,提供jasmineDone 回调:

    jasmine.getEnv().addReporter({
        jasmineDone: function () {
              var HTMLReport = require('jasmine-xml2html-converter');
              // Call custom report for html output
              testConfig = {
                reportTitle: 'Test Execution Report',
                outputPath: browser.reportPath,
                seleniumServer: 'default',
                applicationUrl: browser.baseUrl,
                testBrowser: browser.browserName + ' v.' + browser.browserVersion
              };
              new HTMLReport().from(browser.reportPath + 'junitresults.xml', testConfig);
              console.log("... aaaannnnd... done.");
        }
    });
    

    另一种选择是直接通过例如protractor-jasmine2-html-reporter 生成 HTML 报告。

    【讨论】:

      猜你喜欢
      • 2017-07-10
      • 2014-09-01
      • 1970-01-01
      • 2019-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-06
      • 1970-01-01
      相关资源
      最近更新 更多