У нас на проектах мы пишем автоматизированные тесты для сайтов используя связку “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 отправлять путь к файлу.
Респект от пацанов!