У нас на проектах мы пишем автоматизированные тесты для сайтов используя связку “Selenium WebDriver + C# + NUnit”. Обычно тесты с использованием NUnit пишут в виде библиотеки. Потом эти тесты запускаются с использованием специальной утилиты от разработчиков NUnit. Это же делали и мы. Однако в один из дней нам понадобилось писать тесты, которые будут содержаться в исполняемом файле. В итоге изучив данный вопрос я написал тесты, которые содержатся не в библиотеке DLL, а в исполняемом файле.
Сейчас расскажу, как можно писать тесты, которые после компиляции будут содержаться в консольном приложении. Это иногда удобно, так как не надо через командную строку запускать тесты из DLL используя утилиту от разработчиков NUnit. Хотя это не совсем так. Наш EXE будет в себе содержать ссылки на утилиты NUnit, но обо всё по порядку.
На текущий момент мной используется NUnit 3.5.
Для начала создадим в студии, в которой вы работаете, и не важно в какой, проект “Консольное приложение”. Называйте как хотите, размещайте где хотите:

После того как создали проект нам необходимо подключить к проекту “NUnit”, “NUnit Test Engine (NUnit.Engine)”, “NUnit Console Runner — Deprecated (NUnit.Runners)”. Обычно эти пакеты устанавливаются через NuGet. В Visual Studio в менеджере пакетов NuGet они выглядят так:

Я чаще всего их скачиваю и подключаю к проекту руками.
Далее в ссылки добавим “nunit3-console.exe”. Он обычно находится по пути:
ВАШ_ПРОЕКТ\packages\NUnit.ConsoleRunner*\tools\nunit3-console.exe * — тут пишется номер версии.

После этого наполняем файл “Program.cs”. Я вам приведу готовый код, который можно вставить в “Program.cs” предварительно удалив всё что в нём есть. Не поленитесь сравнить то что было с тем, что стало:
using System;
using System.IO;
using NUnit.Framework;
using Selenium;
using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.PhantomJS;
using OpenQA.Selenium.Support.UI;
using System.Reflection;
namespace TESTING_SPACE
{
[TestFixture]
class Test
{
public static void Main(string[] args)
{
// это обязательно для корректной работы
string path = Assembly.GetExecutingAssembly().Location; // требуется "using System.Reflection;"
NUnit.ConsoleRunner.Program.Main(new[] { path });
}
[OneTimeSetUp] // вызывается перед началом запуска всех тестов
public void TestFixtureSetUp()
{
// ТУТ КОД
}
[OneTimeTearDown] //вызывается после завершения всех тестов
public void TestFixtureTearDown()
{
// ТУТ КОД
}
[SetUp] // вызывается перед каждым тестом
public void SetUp()
{
// ТУТ КОД
}
[TearDown] // вызывается после каждого теста
public void TearDown()
{
// ТУТ КОД
}
[Test]
public void TEST_1()
{
// ТУТ КОД
}
[Test]
public void TEST_2()
{
// ТУТ КОД
}
}
} Названия «namespace TESTING_SPACE» и «class Test» можете менять так как вашей душе угодно. Возможно “using” в данном коде для вас будет многовато, но это я брал со своего рабочего проекта, в связи с этим явные ненужные вещи удалил и оставил только самое необходимое. Если вы не используете “Selenium WebDriver”, то вам можно удалить все “using”, в которых есть слово “Selenium”.
Все результаты тестов будут записываться автоматически в файл “TestResult.xml”, который будет создаваться рядом с вашим EXE. Как сформировать свой собственный отчёт я рассказал в одной из статей.









Добрый день!
У меня возникла такая проблема с nunit3-console.exe что в селениум тестах, где для добавления файла, при клике на кнопку на странице открывается диалоговое окно fileOpen dialog, оно теряет фокус и поэтому ввод пути файла через SendKeys.SendWait(path) не попадает в него, файл не добавляется и тест валится. Но когда я запускаю из студии то всё ок.
И кстати, для запуска тестов из консоли я использую bat файл в котором прописываю запуск nunit3-console.exe
Попробуйте в input с помощью SendKeys отправлять путь к файлу.
Респект от пацанов!