我正在尝试使用多个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>