【问题标题】:Protractor Jasmine Reporter + BDD + Azure DevOpsProtractor Jasmine Reporter + BDD + Azure DevOps
【发布时间】:2019-02-04 18:49:32
【问题描述】:

我想以 BDD 风格编写 Jasmine End 2 End Tests。据我所知,这意味着,我有 4 个方面:

  • 功能
  • 场景
  • 刺激或事件
  • 要确保的结果

从我的幼稚观点来看,我会为“个人详细信息”功能创建一个测试,如下所示:

// Feature
describe('Showing Individual Details', () => {
  let individualDetailsPage: IndividualDetailsPage;

  beforeEach(() => {
    individualDetailsPage = new IndividualDetailsPage();
  });

  // Scenario - New Individual
  describe('Given a new Individual', () => {
    beforeEach(async () => {
      await individualDetailsPage.navigateToDetails('-1');
    });

    // Incoming Event
    describe('When the Details are loaded', () => {
      // Ensure outcome
      it('Then all Controls are empty', async () => {
        expect(individualDetailsPage.firstNameInput.text).toBe('');
        expect(individualDetailsPage.lastNameInput.text).toBe('');
        expect(individualDetailsPage.birthdateInput.text).toBe('');
      });

      // Ensure outcome
      it('Then the save button is disabled', () => {
        expect(individualDetailsPage.saveButton.isEnabled).toBe(false);
      });
    });
  });
});

因此,对于个人详细信息功能,如果设置了新个人,则控件应为空并且禁用保存按钮。 仍然从幼稚的角度来看,这似乎没问题。我也在运行测试:

这似乎没问题。现在有趣的部分:我想将此更改发布到 Azure DevOps,因此我在量角器配置中使用以下代码:

  onPrepare() {
    require('ts-node').register({
      project: require('path').join(__dirname, './tsconfig.e2e.json')
    });
    var jasmineReporters = require('jasmine-reporters');
    var junitReporter = new jasmineReporters.JUnitXmlReporter({
      savePath: 'testresults',
      filePrefix: 'e2e-tests',
      consolidateAll: true
    });

    jasmine.getEnv().addReporter(junitReporter);
  }

不幸的是,XML 看起来像这样:

 <testsuite name="Showing Individual Details" timestamp="2019-02-04T18:23:33" hostname="localhost" time="2.035" errors="0" tests="0" skipped="0" disabled="0" failures="0">
 </testsuite>
 <testsuite name="Showing Individual Details.Given a new Individual" timestamp="2019-02-04T18:23:33" hostname="localhost" time="2.033" errors="0" tests="0" skipped="0" disabled="0" failures="0">
 </testsuite>
 <testsuite name="Showing Individual Details.Given a new Individual.When the Details are loaded" timestamp="2019-02-04T18:23:33" hostname="localhost" time="2.033" errors="0" tests="2" skipped="0" disabled="0" failures="0">
  <testcase classname="Showing Individual Details.Given a new Individual.When the Details are loaded" name="Then all Controls are empty" time="1.106" />
  <testcase classname="Showing Individual Details.Given a new Individual.When the Details are loaded" name="Then the save button is disabled" time="0.927" />
 </testsuite>

由于 Azure DevOps 似乎只检查名称,所以我看到:

我的问题:我不确切知道我的问题在哪里。我没有找到任何关于 Jasmine 的“真实”BDD 的好资源,而且似乎 Jasmine Reporter 无法配置那么多:https://github.com/larrymyers/jasmine-reporters

因此我的代码是完全错误的,还是实际上是记者?如果是这种情况,是否有替代方案或者我需要以某种方式“扁平化”XML?

【问题讨论】:

标签: jasmine protractor azure-devops bdd


【解决方案1】:

我同意上面的评论,创建自己的记者听起来像是要走的路。您可以随意格式化内容。

我最近回答了另一个关于茉莉花记者here的问题。我正在将测试结果重新格式化为 JSON 对象,并在每次测试完成后将它们存储在 amazons dynamoDB 中。

还有什么问题可以告诉我。

【讨论】:

  • 非常感谢。我觉得奇怪的是:Azure DevOps 非常流行,Protractor 也是如此。我不能是第一个遇到问题的人,因为测试结果几乎没有用。
  • 不幸的是,我对 Azure 不太熟悉,但对 AWS 管道有一点经验。您的项目是否也在自动化管道中,或者您是否手动上传结果以供 Azure 自行解释?如果是后者还有另外一种格式的报告量角器可以通过在conf文件中设置resultJsonOutputFile:true自动生成。
【解决方案2】:

您可以使用 useFullTestName 属性:

jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
      consolidateAll: true,
      useFullTestName:true,
      savePath: 'e2e/output',
      filePrefix: 'xmlresults'
    }));

【讨论】:

    【解决方案3】:

    我想推荐使用 Jasmine TRX Reporter 而不是 JUnit XML Reporter。 TRX Reporter 还支持将屏幕截图添加到已发布的测试结果中,这在 CI/CD 环境中是一大优势。 屏幕截图将在测试用例结果的附件选项卡下的 Azure Devops 中提供:

    您可以将其添加到您的项目中:

    npm install jasmine-trx-reporter --save-dev
    

    然后像这样将它添加到你的量角器配置中:

    const TrxReporter = require('jasmine-trx-reporter');
    
    ...
    
        onPrepare() {
    
    ...
    
            jasmine.getEnv().addReporter(new TrxReporter({
                folder: require('path').join(__dirname, './testresults/'),
                takeScreenshotsOnlyOnFailures: true
            }));
    
    ...
    

    最后但并非最不重要的一点是,将发布中的“发布测试结果”步骤更改为使用 VSTest 而不是 JUnit,并使用导出的 .trx 文件而不是 .xml 文件。

    【讨论】:

    • 下面是我使用的任务,但它会抛出警告消息##[警告]没有找到匹配 */.trx 的测试结果文件。并且没有显示结果 - 任务: PublishTestResults@2 输入: testResultsFormat: 'VSTest' testResultsFiles: '*/.trx' searchFolder: '$(Build.SourcesDirectory)' publishRunAttachments: true mergeTestResults: false failTask​​OnFailedTests: true
    • @PDTech 看看您的 PublishTestResults 任务,您可能需要微调“测试结果文件”的全局。我刚刚用过**.trx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多