量角器Jasmine Reporter + BDD + Azure DevOps

时间:2019-02-04 18:49:32

标签: jasmine protractor azure-devops bdd

我想用BDD风格编写Jasmine End 2 End Tests。据我了解,这意味着我几乎有四个方面:

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

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

// 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);
      });
    });
  });
});

因此,对于“个人详细信息”功能,如果设置了新的“个人”,则控件应为空并且禁用“保存”按钮。 从幼稚的角度来看,这似乎还可以。同时运行测试,我看到:

enter image description here

似乎还好。现在有趣的部分:我想将此更改发布到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似乎仅检查名称,因此我看到:

enter image description here

我的问题:我不确切知道我的问题所在。我没有找到与Jasmine进行“真正的” BDD有关的任何有用资源,而且似乎Jasmine Reporter的配置无法做到如此:https://github.com/larrymyers/jasmine-reporters

因此,我的代码是完全错误的,还是实际上是报告者?如果是这种情况,是否还有其他选择,或者我需要以某种方式“展平” XML?

3 个答案:

答案 0 :(得分:1)

我同意上面的评论,创建自己的记者声音就像是要走的路。您可以根据自己的喜好格式化内容。

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

还有其他问题让我知道。

答案 1 :(得分:0)

您可以使用useFullTestName属性:

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

答案 2 :(得分:0)

我建议使用Jasmine TRX Reporter而不是JUnit XML Reporter。 TRX Reporter还支持在已发布的测试结果中添加截屏,这在CI / CD环境中是一大优势。 屏幕快照将在测试用例结果的附件选项卡下的Azure Devops中提供: Attachment tab in 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
        }));

...

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

相关问题