XRay和XUnit报告程序错误地解析了多个测试用例属性

问题描述

我正在尝试使用多个 Tms 属性和成员数据运行这些硒测试。 目的是生成XUnit报告并将其导入到 XRay 测试执行记录中。

[Theory]
[Tms(4045)]
[Tms(4081)]
[Trait("Category","happyPath")]
[MemberData(nameof(TestData.DataForTest_4045),MemberType = typeof(MileagePreferencesTestData))]
[MemberData(nameof(TestData.DataForTest_4081),MemberType = typeof(MileagePreferencesTestData))]
public void Test_Should_CheckFieldsForAdvancedSettings(string actionType,RoutingPreferencesDto routingPreferences,VehiclePreferencesDto vehiclePreferences)
{
      ... some code here ...
}

但是,xunit reporter无法正确解释这多个 Tms 属性生成如下报告:

<?xml version="1.0" encoding="utf-8"?>
<assemblies timestamp="10/02/2020 13:17:01">
  <assembly name="some_path" run-date="2020-10-02" run-time="13:17:01" total="2" passed="1" Failed="1" skipped="0" time="52.537" errors="0"><errors />
    <collection total="2" passed="1" Failed="1" skipped="0" name="Test collection for Project.SettingsManagement.someTestSuite" time="52.537">
      <test name="Project.SettingsManagement.someTestSuite.Test_Should_CheckFieldsForAdvancedSettings" type="Project.SettingsManagement.someTestSuite" method="Test_Should_CheckFieldsForAdvancedSettings" time="27.3424342" result="Fail">
        <output>[2020-10-02 13:17:03 INF] Start test execution </output>
        <failure>
          <message>OpenQA.Selenium.ElementnotinteractableException : element not interactable(Session info: chrome=85.0.4183.121)</message>
          <stack-trace>
                -some failure stack trace-
          </stack-trace>
        </failure>
        <traits>
          <trait name="Test" value="TEST-4045" />
          <trait name="Test" value="TEST-4081" />
          <trait name="Category" value="happyPath" />
        </traits>
      </test>
      <test name="Project.SettingsManagement.someTestSuite.Test_Should_CheckFieldsForAdvancedSettings" type="Project.SettingsManagement.someTestSuite" method="Test_Should_CheckFieldsForAdvancedSettings" time="25.1940956" result="Pass">
        <output>[2020-10-02 13:17:30 INF] Start test execution</output>
        <traits>
          <trait name="Test" value="TEST-4045" />
          <trait name="Test" value="TEST-4081" />
          <trait name="Category" value="happyPath" />
        </traits>
      </test>
    </collection>
  </assembly>
</assemblies>

,因此,首先,编译器运行TEST-4045并为测试TEST-4045和TEST-4081生成XML报告块。

   <traits>
    <trait name="Test" value="TEST-4045" /> // This test has been executed and has 'Failed' status
    <trait name="Test" value="TEST-4081" />
    <trait name="Category" value="happyPath" />
   </traits>

接下来,编译器选择TEST-4081并运行它,但是它会生成一个XML报告块

   <traits>
    <trait name="Test" value="TEST-4045" />
    <trait name="Test" value="TEST-4081" /> // This test has been executed and has 'passed' status
    <trait name="Category" value="happyPath" />
   </traits>

一旦XML报告准备就绪,我将其导入XRay测试执行票据 Import XML XUnit report to XRay test execution ticket

因此,问题在于wnen XRay解析了XML文件,它选择了与TEST-4045 =-<trait name="Test" value="TEST-4045" />相关的第一个块,并用适当的状态标记它,比如说PASSED。

Wnen解析器移动到与TEST-4081相关的下一个块,它还会选择第一个<trait name="Test" value="TEST-4045" />,擦除与TEST-4045相关的先前测试结果(通过)并设置与之相关的新测试(失败)到TEST-4081

这是特征发现者和tmsattribute代码的样子

namespace Project
{
    public class Tmsdiscoverer : ITraitdiscoverer
    {
        private const string Key = "Test";

        public IEnumerable<keyvaluePair<string,string>> GetTraits(IAttributeInfo traitAttribute)
        {
            var ctorArgs = traitAttribute.Getconstructorarguments().ToList();
            string value = FormattableString.Invariant($"TEST-{ctorArgs[0]}");
            yield return new keyvaluePair<string,string>(Key,value);
        }
    }

    [Traitdiscoverer("Project.Tmsdiscoverer","Project")]
    [AttributeUsage(AttributeTargets.Method,AllowMultiple = true)]
    public sealed class TmsAttribute : Attribute,ITraitAttribute
    {
        public TmsAttribute(object value)
        {
        }
    }
}

所以,请帮我弄清楚如何正确配置Tms属性或Traitdiscoverer结果导入,以便几乎像这样

    <traits>
    <trait name="Test" value="TEST-4045" />
    <trait name="Category" value="happyPath" />
   </traits>
   <traits>
    <trait name="Test" value="TEST-4081" />
    <trait name="Category" value="happyPath" />
   </traits>

解决方法

Xray理解“测试”和“需求”特质,因此您可以在代码中直接使用它们。 因此,您可以编写如下内容:

    [Fact]
    Trait("test","CALC-2")]
    [Trait("labels","core UI")]
    public void PassingTest()
    {
        Assert.Equal(4,Add(2,2));
    }

    [Fact]
    [Trait("requirement","CALC-1")]
    public void FailingTest()
    {
        Assert.Equal(5,2));
    }

其中CALC-2是测试的发布密钥,CALC-1是Jira中“需求” /故事的发布密钥。这些特征是可选的,因为Xray会自动提供Test实体,但是如果您要强制某个测试方法映射到Jira中的某个Test问题,则“ test”特征可能会很有用。 在文档中,您可以看到usage example

This是Xray处理xUnit XML报表的方式。

因此,如果可以的话,我建议您使用常规特征而不是正在使用的Tms。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...