C# X射线和XUnit reporter错误地解析了多个测试用例属性
我正在尝试使用多个Tms属性和成员数据运行这些selenium测试。 其目的是生成XUnit报告并将其导入到XRay测试执行记录单C# X射线和XUnit reporter错误地解析了多个测试用例属性,c#,.net,xunit,.net-core-3.1,jira-xray,C#,.net,Xunit,.net Core 3.1,Jira Xray,我正在尝试使用多个Tms属性和成员数据运行这些selenium测试。 其目的是生成XUnit报告并将其导入到XRay测试执行记录单 [Theory] [Tms(4045)] [Tms(4081)] [Trait("Category", "happyPath")] [MemberData(nameof(TestData.DataForTest_4045), MemberType = typeof(MileagePreferencesTestData))] [
[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>
所以,问题是wnen X射线解析XML文件,它选择与TEST-4045=-
相关的第一个块,并将其标记为适当的状态,比如说已通过
WNN解析器移动到与TEST-4081相关的下一个块,它还拾取第一个块,擦除与TEST-4045相关的上一个测试结果(通过),并设置与TEST-4081相关的新测试结果(失败)
<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>
这就是trait discoverer和属性代码的样子
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)
{
}
}
}
命名空间项目
{
公共类发现者:ITraitDiscoverer
{
private const string Key=“Test”;
公共IEnumerable GetTraits(IAttributeInfo TraitatAttribute)
{
var ctorArgs=traitAttribute.GetConstructorArguments().ToList();
字符串值=FormattableString.Invariant($“TEST-{ctorArgs[0]}”);
返回新的KeyValuePair(键,值);
}
}
[TraitDiscoverer(“Project.tms发现者”、“Project”)]
[AttributeUsage(AttributeTargets.Method,AllowMultiple=true)]
公共密封类属性:属性,ITraitAttribute
{
公共属性(对象值)
{
}
}
}
所以,请帮我弄清楚如何正确配置Tms属性或TraitDiscoveryr结果导入,这样就几乎像这样了
<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, Add(2, 2));
}
其中,CALC-2是测试的发布密钥,CALC-1是Jira中“需求”/“故事”的发布密钥。这些特性是可选的,因为X射线会自动提供测试实体,但是如果您想强制某个测试方法映射到Jira中的某个测试问题,“测试”特性可能会很有用。
在文档中,您可以看到一个
是X射线如何处理xUnit XML报告的
所以,如果可以的话,我建议你使用常规特征,而不是你正在使用的Tms特征。嗨,我们已经尝试在“测试”中使用多个特征,但这对我们不起作用,还有其他想法吗?嗯,没有。没有进一步的信息很难诊断。您可以查看生成的XML报告,并查看这些特性在X射线()中是如何映射的。如果您仍然有问题,您可以尝试联系X射线支持团队。
[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));
}