0

我正在尝试使用多个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 报告器没有正确解释这些多个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 测试执行票 将 XML XUnit 报告导入 XRay 测试执行票

所以,问题在于 wnen XRay 解析 XML 文件,它选择与 TEST-4045 = - 相关的第一个块<trait name="Test" value="TEST-4045" />并将其标记为适当的状态,比如说通过。

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

这就是特征发现器和 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>
4

1 回答 1

0

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, Add(2, 2));
    }

其中 CALC-2 是测试的问题键,CALC-1 是 Jira 中“需求”/故事的问题键。这些特征是可选的,因为 Xray 会自动配置测试实体,但如果您想强制某个测试方法映射到 Jira 中的某个测试问题,“测试”特征可能很有用。在文档中,您可以看到一个用法示例

就是 Xray 处理 xUnit XML 报告的方式。

所以,如果可以的话,我建议使用常规的 Traits 而不是你正在使用的 Tms。

于 2020-11-11T13:00:39.243 回答