Я работаю над проектом .NetCore App 2.1, и я создал несколько сценариев селена на C# для этого проекта с помощью фреймворка NUnit (в MacOS). Я могу это успешно выполнить. Однако я не могу создать отчет с помощью Extent Report 3.1.3 (также пробовал 2.41.x), поскольку я получаю предупреждение, что он был восстановлен с помощью .NETFramework 4.6.1, но не с помощью приложения .NetCore с Project Target framework, а compilinh. Когда я его выполняю, это вызывает у меня множество исключений. Я решил один за другим, добавив пакеты 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();
}
}
}
Спасибо, Ричард. Но это означает, что я не могу использовать ExtentReports в MacOS (я так не думаю). Или чего-то еще, чего мне не хватает, чтобы заставить его работать в MacOS. Пожалуйста, помогите мне в этом. Заранее спасибо.





См. Ниже:
Обновлено:
Доступны исходники версии 4, см. здесь
По словам владельца проекта (@anshooarora): «Я рад добавить поддержку ядра .NET, но я все еще немного скептически отношусь к тому, насколько хорошо поддерживаются необходимые пакеты. Я также был вне связи, поэтому мне, вероятно, понадобится помощь развернуть это ".
Из сайт github для ExtentReports: «Текущая версия: 3.1.0, только .NET Framework 4.5+».
Поскольку .NET 4.5 - это только Windows, версия C# будет работать только в Windows. Вам нужно будет создавать отчеты об испытаниях в Windows.
Обновлено: ответ @ foursyth следует считать авторитетным, поскольку он работает над Extent Framework.
Привет @Richard, Спасибо за продолжение. Не могли бы вы посоветовать мне найти другие альтернативы для отчетности в приложении .NetCore? Это будет для меня более полезным. Заранее спасибо.
Для тех, кто ищет рабочую версию ExtentReports для .NET Core, обратите внимание на этот вилка поверх текущей версии 4.03, которая поддерживает не только .NET Core, но даже .NET Statndard:
https://www.nuget.org/packages/ExtentReports.Core
Проверено только в системе Windows, но также должно работать в Mac OS.
Вы можете заставить его работать, но немного повозились. Первая проблема заключается в том, что dotnetcore не поддерживается в репозитории Extent по умолчанию. Это решается с помощью компании, называемой simpletest, которая создает свой собственный PR здесь, который в настоящее время не принят.
Однако при этом вы все равно столкнетесь с проблемой - Extent использует Razor Engine, который сам по себе не поддерживает не-Windows. Для этого здесь есть исправление без объединения.
Я получил эту работу в докере (который также должен поддерживать Mac). Мои инструкции от здесь приведут вас туда, куда вам нужно.
The 'COM Interop is not supported on this platform' is an error with the RazorEngine not supporting dotnetcore. This PR contains a potential fix to it #65. I've managed to get Extent working with dotnetcore in a container with your PR's source code and the source code of the RazorEngine PR added to my project as direct project references.
My copy+pasted source code structure is: /src (my stuff)
/Extent/DotnetCoreExtent (your PR)
/Extent/RazorEnginePatch (the PR mentioned)
My project refers to your project, and I've updated your project to reference the RazorEngine patch instead of the nuget reference.
Обновите пакет nuget до ExtentReports.Core 1.0.3, который теперь использует фиксированную версию RazoreEngine и поддерживает ОС, отличные от Windows.
используйте ExtentReports.Core для основного приложения .NET
также добавьте эти пакеты nuget в любом порядке в соответствии с вашей версией ядра dotnet
Привет, Бхуван, сообщение об ошибке ссылается на mscorlib версии 4 (т.е. .NET 4.n) и
'System.Security.Principal.WindowsImpersonationContext', который в значительной степени является классом только для Windows. Совершенно очевидно, что этот код не будет работать в MacOS. Кроме того, вопросы 2 и 3 действительно основаны на мнении и не подходят для Stack Overflow. Лучше обсудить это в вашей компании.