Перейти к содержимому

Noksa

Регистрация: 23 мая 2018
Offline Активность: 29 дек 2018 05:43
-----

Мои темы

C# WebDriver Screenshots Extensions

23 октября 2018 - 07:23

Добрый день, коллеги.

Вдохновлённый когда-то ашотом от Яндекса я решил сделать нечто подобное для C#.
Для меня это жизненно необходимо - делать скриншот всей страницы, а не только видимой области.

 

В общем, пришло время это доработать и сделать как отдельный проект и предоставить сообществу для пользования.

 

Nuget пакет: https://www.nuget.or...hotsExtensions/
GitHub: https://github.com/N...hots.Extensions

 

Для использования достаточно вызвать новую перегрузку метода расширения:

driver.TakeScreenshot(IScreenshotStrategy strategy) 

Данный метод возвращает byte[].

В качестве аргумента вы можете передать декорированный объект, в зависимости от того, как вы хотите обработать скриншот.

 

Подробнее смотрите в вики на гитхабе.


C# Allure classic NUnit with improvements

06 июля 2018 - 04:47

Доброго времени суток, коллеги!

Я столкнулся со следующими проблемами/неудобствами в аллюре на C#:

  1. Невозможность добавления шагов/аттачей в [SetUp] и [TearDown] методах.
  2. Отсутствие нормальной возможности указания собственных:
  • Suite (самое неприятное)
  • SubSuite
  • Owner
  • Epic Suite
  • Parent Suite
  1. При выполнении действий в других потоках в рамках одного теста - allure падает с исключением.
    Т.е. если вы сделаете нечто подобное

    Task.Run( () => someMethod());

    и внутри данного метода будет вызвано логирование аллюр - выбросится исключение NullReferenceException.

  2.  

  3. Отсутствие проигнорированных тест-кейсов/тестов в отчётах. Это кейсы, у которых прописано TestCaseData.Ignore(string), а не в самом тесте Assert.Ignore (!)
    Для меня это оказалось критично, т.к. если мы не смогли найти подходящие тестовые данные из БД для кейса, он должен об этом кричать в отчете, а не отсутствовать там.

  4. Отсутствие нормального AddAttachment метода, который форматировал бы string в читабельный вид с отступами (json/xml).

Было что-то ещё, но оно не столь критичное, сейчас я уже не вспомню.

Я взял за основу проект https://github.com/u...ure-csharp-fork и добавил в него всю необходимую функциональность.

 

Переработанный мною C# allure имеет функциональность только для классического NUnit.
Если вы используете SpecFlow - не устанавливайте этот пакет, в нём нет ничего относящегося к SpecFlow, у вас всё сломается!

В будущем я добавлю нововведения для SpecFlow и сам SpecFlow, если это вообще кому-то будет нужно, кроме меня.

 

Представляю вашему вниманию nuget пакет с переработанным C# Allure под классический NUnit: https://www.nuget.or...a.NUnit.Allure/

.NET 4.5.x и .NET 4.5 на данный момент не поддерживаются.

Некоторые методы я видоизменил, поэтому возможно придётся немного изменить их старую сигнатуру переходя с классического аллюра. Но это не точно. slight_smile.png?v=5

Кратко, как использовать данный allure и его некоторые новые фишки:

  1. ГЛАВНОЕ: Для включения логирования - необходимо унаследовать класс Allure.Commons.AllureReport базовым классом ваших тестов. Не нужно у каждого класса/метода писать какие-либо allure атрибуты:
public abstract class ABaseTestConfig : AllureReport

Либо непосредственно каждый класс с тестами, если базового нет.

  1. Для использования своего названия Suite, нужно добавить атрибут [AllureSuiteAttribute] у класса:
[AllureSuite(LoginPassNotExists)]
public partial class MyTests: ABaseApiTestConfig

Пример:

 

Прикрепленный файл  suite.png   30,59К   0 Количество загрузок:

 

Внутри класса у методов можно использовать атрибут [AllureSubSuiteAttribute], для разделения на более мелкие Suite’s внутри одной большой [AllureSuiteAttribute]

subsuite.png
 
  1. Для указания Epic Story для всего класса следует использовать атрибут [AllureEpicAttribute]:
[AllureEpic("Epic story")]
public partial class MyTests: ABaseApiTestConfig

Пример:

Прикрепленный файл  epicstory.png   15,99К   1 Количество загрузок:

 

 

Соответственно, если в таком классе будут методы с атрибутами [AllureStoryAttribute], все они будут дочерними в следующем порядке:
Epic -> Feature > Story.

 

  1. Атрибут [AllureOwnerAttribute] - устанавливает Owner’a теста\тест-кейса.

  2. Если у метода указаны атрибуты [AllureIssueAttribute], то в отчете в Suite класса добавится ещё один SubSuite с названием “With Defects”, где будет список тестов/кейсов класса, в которых этот атрибут присутствует.
    Сделано для быстрого поиска тестов с дефектами в указанных классах.
    Прикрепленный файл  suitewithdefects.png   75,37К   3 Количество загрузок:

  3. Аналогично дефектам из 5 пункта, в Suite класса будут добавлены все проигнорированные тесты/кейсы этого класса (для этого ничего указывать не надо).

  4. Сам игнорированный тест имеет в отчете указанную причину, по которой это произошло.Прикрепленный файл  ignoredtest.png   27,06К   0 Количество загрузок:

  5. Добавлена перегрузка метода AddAttachment()
    Выглядит так:
public AllureLifecycle AddAttachment(string name, AttachFormat type, string content, string fileExtension = "")

Используется для добавления отформатированных аттачей (xml/json), чтобы они выглядели читабельно, а не в одну строку: 

 

Прикрепленный файл  attachs.png   83,6К   2 Количество загрузок:

 

  1. Соответственно, теперь можно использовать добавление шагов/атачей в [SetUp] и [TearDown]методах.
    Пример Setup:
[SetUp]
public virtual void Setup()
{
AllureLifecycle.Instance.AddAttachment($"Screenshot [{DateTime.Now:HH:mm:ss}]",
"image/png",
Driver.TakeScreenshot().AsByteArray);
...
}
    • Возможность использования потоков внутри одного теста для логирования в аллюр.
      Например: 
      Task.Run( () => someMethod());
      Данный метод будет иметь начальным шагом не текущий шаг главного потока, а рутовый шаг отчета.
      Если вы в этом методе будете создавать steps с substeps - они будут создаваться корректно, внутри steps своего потока.

Итд…
Если возникнут проблемы/вопросы, пишите, буду рад помочь.

 

Из известных проблем сейчас:

  1. В отчет попадают все проигнорированные тест-кейсы из тестового класса, даже если вы запускали только один тест в нём.

Скачивание файлов селениумом через headless режим C#

01 июня 2018 - 06:03

Коллеги, доброго времени суток.

 

Есть метод, который выполняет следующее:


1) Лочит блок кода, в котором происходит:
а) Запоминание количества файлов в директории
б) Клик по кнопке, в результате которого начинается скачивание файла и ожидание, пока файл скачается целиком
в) Сравнение двух коллекций - до скачивания и после - получаем разницу в 1 файл, дёргаем искомый файл.
2) Выходим из лока и работаем дальше с этим файлом.

 

Всё работает хорошо, пока не установить запуск хрома в режиме headless: chromeOptions.AddArgument("--headless");

Я нашёл в репо селениума открытый баг https://github.com/S...ium/issues/5159 в котором пока судя по всему нет решения проблемы.

 

Есть ли какие-то костыльные workaround, как скачать файл в этом режиме сейчас?

 

Версии драйвера, браузера последние.