我正在研究.NetCore App 2.1项目,并使用NUnit框架(在MacOS中)在C#中为该项目创建了一些硒脚本。我能够成功执行它。但是,我无法使用范围报告3.1.3(也尝试过2.41.x)来生成报告,因为我收到警告,它已使用.NETFramework 4.6.1进行了还原,但无法使用带有Project Target的.NetCore应用程序进行还原框架,同时进行编译。当我执行它时,它引发了很多异常。通过添加Nuget包,我一个接一个地解决了。最后,我要谈谈以下例外,因此我无法进一步谈。
TearDown failed for test fixture RBAutomationDemo.UnitTest1
TearDown : System.TypeLoadException : Could not load type 'System.Security.Principal.WindowsImpersonationContext' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
--TearDown
at RazorEngine.Compilation.DirectCompilerServiceBase.CompileType_Windows(TypeContext context)
at RazorEngine.Templating.RazorEngineCore.CreateTemplateType(ITemplateSource
razorTemplate, Type modelType)
at RazorEngine.Templating.RazorEngineCore.Compile(ITemplateKey key, Type modelType)
at RazorEngine.Templating.RazorEngineService.CompileAndCacheInternal(ITemplateKey key, Type modelType)
at RazorEngine.Templating.RazorEngineService.GetCompiledTemplate(ITemplateKey key, Type modelType, Boolean compileOnCacheMiss)
at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at AventStack.ExtentReports.Reporter.ExtentHtmlReporter.Flush()
at AventStack.ExtentReports.Model.Report.<>c.<NotifyReporters>b__29_1(IExtentReporter x)
at System.Collections.Generic.List`1.ForEach(Action`1 action)
at AventStack.ExtentReports.Model.Report.NotifyReporters()
at AventStack.ExtentReports.Model.Report.Flush()
at AventStack.ExtentReports.ExtentReports.Flush()
at RBAutomationDemo.UnitTest1.OneTimeTearDown()`
请帮助我。
我使用的代码:
using System;
using AventStack.ExtentReports;
using AventStack.ExtentReports.Reporter;
using LocatorsFile;
using NUnit.Framework;
using NUnit.Framework.Interfaces;
namespace RBAutomationDemo
{
[SetUpFixture]
public abstract class Base
{
protected ExtentReports _extent;
protected new ExtentTest _test;
[OneTimeSetUp]
protected void ReportSetup()
{
var dir = TestContext.CurrentContext.TestDirectory + "\\";
var fileName = this.GetType().ToString() + ".html";
System.Console.WriteLine(fileName);
ExtentHtmlReporter htmlReporter = new ExtentHtmlReporter(dir + fileName);
_extent = new ExtentReports();
_extent.AttachReporter(htmlReporter);
}
[OneTimeTearDown]
protected void ReportTearDown()
{
_extent.Flush();
}
[SetUp]
public void BeforeTest()
{
_test = _extent.CreateTest(TestContext.CurrentContext.Test.Name);
Initialize();
}
[Test]
public void Testmethod1()
{
_test = extent.CreateTest("Checking Total workbooks count");
try
{
_test.Pass("Assertion passed");
_test.Log(Status.Pass, "Pass");
}
catch
{
_test.Fail("Assertion failed");
_test.Log(Status.Fail, "Fail");
throw;
}
}
[TearDown]
public void AfterTest()
{
var status = TestContext.CurrentContext.Result.Outcome.Status;
var stacktrace = string.IsNullOrEmpty(TestContext.CurrentContext.Result.StackTrace)
? ""
: string.Format("{0}", TestContext.CurrentContext.Result.StackTrace);
Status logstatus;
switch (status)
{
case TestStatus.Failed:
logstatus = Status.Fail;
break;
case TestStatus.Inconclusive:
logstatus = Status.Warning;
break;
case TestStatus.Skipped:
logstatus = Status.Skip;
break;
default:
logstatus = Status.Pass;
break;
}
_test.Log(logstatus, "Test ended with " + logstatus + stacktrace);
_extent.Flush();
DoTearDown();
}
}
}
答案 0 :(得分:2)
来自github site中的ExtentReports:“当前版本:3.1.0,仅.NET Framework 4.5 +。”
由于.NET 4.5仅是Windows,因此C#版本仅适用于Windows。您将需要在Windows上生成测试报告。
编辑:@foursyth的回复应被认为是权威的,因为他正在研究范围框架。
答案 1 :(得分:2)
对于那些正在寻找适用于.NET Core的ExtentReports的用户,请在当前版本4.03之上查看此fork,该版本不仅支持.NET Core,甚至还支持.NET Statndard :
https://www.nuget.org/packages/ExtentReports.Core
仅在Windows系统上进行了测试,但也应在Mac OS上运行。
答案 2 :(得分:0)
请参见以下内容:
编辑:
第4版源现已可用,请参见here
根据项目负责人(@anshooarora):“我很高兴添加对.NET Core的支持,但我仍然对所需软件包的支持程度持怀疑态度。我也失去了联系,因此我可能会需要一些帮助才能将其推出。”
答案 3 :(得分:0)
您可以使其正常运行,但需要一点点摆弄。第一个问题是Extent的默认回购中不支持dotnetcore。一家名为Simplytest的公司解决了这一问题,该公司创建了自己当前不接受的PR here。
因此,您仍然会遇到问题-Extent使用本身不支持非Windows的Razor Engine。该here有一个未合并的修复程序。
我已经在docker中工作了(它也应该支持mac)。我从here得到的指示将带您到需要去的地方。
“ RazorEngine不支持dotnetcore”,“此平台不支持COM Interop”是错误。该PR包含对它的潜在修复#65。我设法使Extent在容器中与dotnetcore一起工作,并将您PR的源代码和RazorEngine PR的源代码作为直接项目引用添加到我的项目中。
我的复制+粘贴的源代码结构是: / src(我的东西)
/ Extent / DotnetCoreExtent(您的PR)
/ Extent / RazorEnginePatch(提到了PR)
我的项目引用了您的项目,并且我更新了您的项目以引用RazorEngine补丁而不是nuget引用。
答案 4 :(得分:0)
请更新至ExtentReports.Core 1.0.3 nuget软件包,该软件包使用RazoreEngine的固定版本,并且现在支持非Windows操作系统。
答案 5 :(得分:0)
将ExtentReports.Core用于.NET核心应用
还要根据您的dotnet核心版本以任何顺序添加这些nuget程序包