angularjs - 为什么我的 HTML 测试报告总是落后一个 XML 文件?

标签 angularjs jasmine automated-tests protractor jasmine2.0

此代码在我的 protractor配置文件完美运行...除了 html onComplete 中的文件创建始终使用 junitresult xml文件,而不是在同一配置文件的 onPrepare 函数中创建的 xml 文件。所以 html 页面总是显示测试结果,它比 html 页面上显示的时间戳声称的时间晚。

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

你能帮我让我的测试生成一个 xml 文件,然后使用那个 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.");
},

最佳答案

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

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

  • onCleanUp() vs onComplete() vs afterLaunch()


  • 您还可以添加 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 报告。 .

    关于angularjs - 为什么我的 HTML 测试报告总是落后一个 XML 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34746778/

    相关文章:

    ruby-on-rails - Jasmine Rice on Rails 4

    testing - 在 Windows 虚拟机上运行 Jenkins 作业

    c# - 如何自动测试我的数据库驱动功能?

    javascript - 基于 ExtJS 的 Web 应用程序的 UI 测试框架和工具

    javascript - 由于 : [$injector:nomod] Module 'moduleName' is not available! 无法实例化模块 ui.tree 您拼错了模块名称或

    javascript - AngularJS:输入字段为空时禁用按钮

    javascript - 从json中提取信息

    angularjs - 引用本地 angular.js 不起作用

    javascript - 每个文件强制执行一个描述

    javascript - 向 jasmine 添加固定装置/设置 Jasmine-Jquery