Не удается создать ExtentReport для .NetCore App 2.1?

Я работаю над проектом .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()`

Пожалуйста помоги мне с этим.

  1. Возможно ли использовать отчеты Extent в .NetCore 2.1 (в MacOS)? если поэтому, пожалуйста, дайте мне шаги, чтобы достичь этого.
  2. Если Extent Reports несовместимы с приложением .NetCore 2.1, пожалуйста, предложите лучший инструмент отчетности в качестве альтернативы (предпочтительно с открытым исходным кодом)
  3. Собираюсь CI его в VSTS. Будет ли действительно нужна отчетность для этого сценария отдельно?

Код, который я использовал:

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

Привет, Бхуван, сообщение об ошибке ссылается на mscorlib версии 4 (т.е. .NET 4.n) и 'System.Security.Principal.WindowsImpersonationContext', который в значительной степени является классом только для Windows. Совершенно очевидно, что этот код не будет работать в MacOS. Кроме того, вопросы 2 и 3 действительно основаны на мнении и не подходят для Stack Overflow. Лучше обсудить это в вашей компании.

Richard Matheson 17.12.2018 15:08

Спасибо, Ричард. Но это означает, что я не могу использовать ExtentReports в MacOS (я так не думаю). Или чего-то еще, чего мне не хватает, чтобы заставить его работать в MacOS. Пожалуйста, помогите мне в этом. Заранее спасибо.

Bhuvan Gopal 17.12.2018 16:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
2
3 763
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

См. Ниже:

  1. Невозможно использовать ExtentReports с .Net Core / Standard
  2. Нет, он несовместим, как и грядущая версия 4 (он построен на .NET Framework 4.5). Если вы хотите добавить поддержку .NET Core / Standard, я бы посоветовал отправить запрос на перенос (исходники версии 4 будут доступны на этой неделе). Примечание: запросы на вытягивание больше не будут приниматься для версии 3, так как она больше не поддерживается.
  3. Это субъективно, это зависит от настройки вашей команды / компании. Должны быть другие инструменты отчетности, которые поддерживают эту потребность.

Обновлено:

Доступны исходники версии 4, см. здесь

По словам владельца проекта (@anshooarora): «Я рад добавить поддержку ядра .NET, но я все еще немного скептически отношусь к тому, насколько хорошо поддерживаются необходимые пакеты. Я также был вне связи, поэтому мне, вероятно, понадобится помощь развернуть это ".

Из сайт github для ExtentReports: «Текущая версия: 3.1.0, только .NET Framework 4.5+».

Поскольку .NET 4.5 - это только Windows, версия C# будет работать только в Windows. Вам нужно будет создавать отчеты об испытаниях в Windows.

Обновлено: ответ @ foursyth следует считать авторитетным, поскольку он работает над Extent Framework.

Привет @Richard, Спасибо за продолжение. Не могли бы вы посоветовать мне найти другие альтернативы для отчетности в приложении .NetCore? Это будет для меня более полезным. Заранее спасибо.

Bhuvan Gopal 18.12.2018 05:39

Для тех, кто ищет рабочую версию 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

  • System.Configuration.ConfigurationManager
  • MongoDB.Bson
  • MongoDB.Driver.Core
  • MongoDB.Driver
  • Newtonsoft.Json
  • RazorEngine.NetCore Это исключение System.TypeLoadException не произойдет, если вы добавите этот пакет nuget System.Configuration.ConfigurationManager.

ссылка - http://extentreports.com/documentation/

Другие вопросы по теме