【问题标题】:Summarize protractor results over multiple spec files汇总多个规格文件的量角器结果
【发布时间】:2015-12-27 09:36:00
【问题描述】:

我有一个自动化框架,它使用 grunt 任务来运行多个规范文件。有些使用预定义的套件运行,有些使用文件命名约定。每个规范文件平均有一个“describe”块,每个通常有多个“it”块。

我目前正在使用 jasmine-spec-reporter,它在 每个 规范文件之后提供有用且详细的结果,如下所示:

------------------------------------
[chrome OS X 10.10 #1-78] PID: 1880
[chrome OS X 10.10 #1-78] Specs: /**/**/jenkins/workspace/Main Suites/tests/User_Management/smoke_student_does_something.js
[chrome OS X 10.10 #1-78] 
[chrome OS X 10.10 #1-78] Using SauceLabs selenium server at http://*******
[chrome OS X 10.10 #1-78] Spec started
[chrome OS X 10.10 #1-78] 
[chrome OS X 10.10 #1-78]   1 A student can link and unlink to another student account
[chrome OS X 10.10 #1-78]     ✓ can link to another student account (33 secs)
[chrome OS X 10.10 #1-78]     ✓ can unlink a student account (14 secs)
[chrome OS X 10.10 #1-78] 
[chrome OS X 10.10 #1-78] Executed 2 of 2 specs SUCCESS in 46 secs.
[chrome OS X 10.10 #1-78] SauceLabs results available at http://saucelabs.com/jobs/*****************

[launcher] 5 instance(s) of WebDriver still running

在引用 taskId 和列表的所有 jasmine 报告通过 + 失败后,量角器给了我一个相当无用的摘要控制台输出。这是量角器摘要的样子:

....
[launcher] chrome #1-69 passed
[launcher] chrome #1-70 failed 1 test(s)
[launcher] chrome #1-73 passed
[launcher] chrome #1-71 passed
[launcher] chrome #1-75 passed
[launcher] chrome #1-72 passed
[launcher] chrome #1-79 passed
[launcher] chrome #1-74 passed
[launcher] chrome #1-80 passed
[launcher] chrome #1-81 passed
[launcher] chrome #1-82 passed
[launcher] chrome #1-84 passed
[launcher] chrome #1-83 passed
[launcher] chrome #1-85 passed
[launcher] chrome #1-88 passed
[launcher] chrome #1-87 passed
[launcher] chrome #1-86 passed
[launcher] chrome #1-76 passed
[launcher] chrome #1-89 passed
[launcher] chrome #1-90 passed
[launcher] chrome #1-91 passed
[launcher] chrome #1-92 passed
[launcher] chrome #1-78 passed
[launcher] chrome #1-93 passed
[launcher] chrome #1-95 passed
[launcher] chrome #1-77 passed
[launcher] chrome #1-96 passed
[launcher] chrome #1-94 failed 5 test(s)
[launcher] overall: 12 failed spec(s)
[launcher] Process exited with error code 1
>> 
Warning: Tests failed, protractor exited with code: 1 Use --force to continue.

我的问题是我想查看所有规范文件的摘要,而不是 taskId,仅针对失败的规范,并且仅在它们全部运行完毕之后。 MVP 将只是列表中失败的规范文件名,或者以易于阅读的格式(xml、html 等)写入文件。下一次迭代,我将在每个故障旁边添加“describe”和“it”块描述、错误代码和 saucelabs 链接,类似于 jasmine 报告器。

我通常在一个工作中拥有数百个规范文件,并且必须梳理所有单独的结果以追踪哪个规范文件失败是非常烦人的(因为我觉得自动生成的摘要应该包含这些信息)。我实际上必须在控制台输出上执行 ctrl+f 以查看“失败”,只是为了查看哪些规范失败了。由于我们的工作运行方式是通过 Jenkins 组织的,因此我想避免去 saucelabs 获取失败列表。作业运行完成后,控制台输出应该是故障列表的第一个简单来源/参考。

每个第三方报告者的范围似乎只能达到规范文件级别。执行每个规范文件后,它会报告,然后继续下一个覆盖前一个报告的文件。我打开 HTML 或 XML 报告,它总是只有一个规范文件的结果。我似乎无法将任何信息带入多个规范文件的摘要中。我调整了“合并(全部)”设置,似乎没有一个为所有规范文件构建报告。他们似乎一次只考虑一个文件。

我对以下记者进行了实验:

茉莉花记者

茉莉花规格报告者

量角器-jasmine2-html-reporter

jasmine-json-test-reporter

我已经能够直接操纵量角器“reportSummary”代码来提供我想要的大部分内容(除了 saucelabs 链接),但这并不理想,因为我必须说服他们采用它.以下是我的摘要:

******************** 
*  FAILED SPEC(S)  * 
******************** 

/Playground/Test_Spec_2.js failed 2 test(s) 
    can log in once
        FAILURE: Expected false to be true, 'Didn't see home page'. 
        FAILURE: Expected false to be true, 'Didn't see link'. 
    can log in twice
        PASSED 
    can log in thrice
        FAILURE: Expected false to be true, 'Didn't see home page'. 

/Playground/Test_Spec_3.js failed 1 test(s) 
    can login
        FAILURE: Expected false to be true, 'Didn't see home page'.  

******************** 
*     SUMMARY      * 
******************** 
overall: 2/4 failed spec(s) 
******************** 

我在使用那些 jasmine 记者时是否遗漏了什么?我的框架是不是没有按照我想要的方式与那些记者一起工作?我是否应该说服量角器人员通过一些选项来增强他们的摘要报告器?

【问题讨论】:

  • 我认为您最好的选择可能是向其中一位记者提出您想要的格式选项的拉取请求。我怀疑你会说服 @Jmr 为你做出这种改变。

标签: automation jasmine protractor summary


【解决方案1】:

您可以在所有测试运行后加入所有报告。只需确保您在同一个文件夹中拥有所需的所有测试

  return browser.getCapabilities().then(function (caps) {
        var sessionId = caps.get('webdriver.remote.sessionid');
        var date = dateMethods.getCurrentDate();
        var folder = 'test-results/reports-' + date;
        jasmine.getEnv().addReporter(new yourReporter({
            savePath: folder + '/report' + '-' + sessionId.substr(0, 5)
        }));
    });

然后你可以加入他们并删除文件夹(使用“fs”模块或类似的东西)或重命名它,以便每次运行时创建一个新文件夹

【讨论】:

    【解决方案2】:

    我正在使用这个记者:https://www.npmjs.com/package/protractor-jasmine2-screenshot-reporter 我每天都有所有规范文件的完整报告,我的规范文件中包含此代码

    var HtmlScreenshotReporter = require(process.env['USERPROFILE'] + '/node_modules/protractor-jasmine2-screenshot-reporter');  
    var utils = require('../util/utils.js');
    var reporter = new HtmlScreenshotReporter({
    dest: 'target/screenshots_'+ utils.returnToday("_"),
    filename: 'AutoTestRun-report.html'
    });
    
    beforeLaunch: function() {
        return new Promise(function(resolve){
          reporter.beforeLaunch(resolve);
        });
      },
    onPrepare: function () {
        jasmine.getEnv().addReporter(reporter);
        browser.driver.manage().window().maximize();
        browser.driver.get('https://core.arkcase.dev.armedia.com/arkcase/login');
        browser.manage().timeouts().setScriptTimeout(60000);
    },
    

    我用来将今天日期返回到文件夹名称的方法是:

    this.returnToday = function(sign){
           var now = new Date();
           var day = ("0" + now.getDate()).slice(-2);
           var month = ("0" + (now.getMonth() + 1)).slice(-2);
           return today = (month) + sign + (day) + sign + now.getFullYear();
       }
    

    【讨论】:

      【解决方案3】:

      您可以使用您想要的设计创建自己的记者。

      为此,您可以覆盖以下 jasmine 方法。

      self.jasmineStarted = function(summary) {
      
      };
      
      self.suiteStarted = function(suite) {
      
      };
      
      self.specStarted = function(spec) {
      
      };
      
      self.specDone = function(spec) {
      
      };
      
      self.suiteDone = function(suite) {
      
      };
      
      self.jasmineDone = function() {
      
      };
      

      您可以使用所需的信息创建自己的模板。我为我创建了一个,如下所示。

      您可以浏览文档here

      【讨论】:

        猜你喜欢
        • 2018-02-20
        • 2015-07-31
        • 1970-01-01
        • 2021-12-08
        • 2015-06-27
        • 2011-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多