подскажите как организовать запуск одних и тех же тестов и на prod и на dev окружение

Собственно сабж. В проекте использую testng+maven. И так же есть такой нюанс, что в негативных тестах, при обработке ошибок один текст ошибки будет на dev, при этом в этом же тесте на prod будет другой текст. Заранее спасибо!

Не очень понятно в чем проблема .

  1. Дописать блок в котором если это dev то …do something

Это вообще webdriver ? Если да
2) если по какой-то причине нельзя что за окружение то можно в одном локаторе прописать типа так .

.//*[@id='ember1249']/a | .//*[@id='ember1250']/a  

Так как вам надо с разными текстами то только XPath,CSS уже не умеет работать с текстовыми нодами .

Нет это не вебдрайвер. Я использую rest-assured для тестирования API и вот мне нужно проверить вот такое:
Response data = given().contentType(“application/json”)
.body(JSON)
.expect()
.statusCode(422)
.when().post(URL);
assertEquals(data.body().asString(), ERROR_MESSAGE);
И вот получается в зависимости от URL будет разный ERROR_MESSAGE

В Jenkins задаете параметр, к примеру, ENV_URL.
В коде вычитываете его:

String url = System.getenv("ENV_URL") != null ? System.getenv("ENV_URL") : defaultURL;

Для организации быстрого переключения без вмешательства в код, создаете 2 maven run configs для продакшен и дев с кастомными переменными окружения:

В лог уже, как захотите, так вставляете месседж в зависимости от url. Можно вынести в enum доступные варианты, а потом свитчить и конкатенировать нужное сообщение.

1 лайк

Ну строить фреймморк на одних ифах - это гиблое дело
Мой совет сделать несколько maven профайлов для запуска. Каждому профайлу задать свой ресурс со значениями текстовых переменных. Все эти переменные вычитывать как проперти файл при инициализации. Я могу закинуть несколько ключевых фраз, по которым лучше разобраться самостоятельно.
Нужно смотреть либо в сторону testResources, либо в сторону, например, profile->properties и задавать просто путь к фалу для каждого профайла свой.
а в коде при инициализации уже делать что-нибудь из серии

InputStream input = new FileInputStream(System.getProperty("text.resource", defaultPath));
InputStreamReader reader = new InputStreamReader(input);
properties.load(new InputStreamReader(input, reader.getEncoding()));

а потом уже читать из проперти файла как properties.getProperty(“some.text.template”);`

при этом файлы будут выглядеть идентично, иметь одинаковый набор параметров, но разные их значения.
Если нужна будет помощь в реализации, всегда готова помочь :wink:

Нужно понимать, что всегда есть альтернативы в виде xml, json и тд и тп

1 лайк

ну если таких пропертей 3 - это ок, а если таких строк 50?

Каких пропертей - окружений? Да ну, бросьте. Мы ведь говорим не о VM-ках, где будут запускаться тесты, а о серверах, где развернуто наше приложение. В большинстве случаях у вас наверняка будет подразделение на какие-нибудь Dev / QA / UX / Prod. Так что возможных вариантов не так уж и много. Вариант с maven профайлами хорош, если URL не придется задавать динамически. К примеру, дев захотел натравить автотесты на свое локальное окружение. Задав кастомный URL через Jenkins, ему ничего не нужно будет менять в коде.

ну так я же просто предлагаю альтернативы;)
Я решала эту задачу как раз через профайлы

А я и не говорю, что ваш вариант плох. :blush: Мы предоставили идеи, а автор пусть сама уж решает, что будет лучше для ее случая.

Здравствуйте,
Вы не могли бы обновить картинку (или текстом написать) вот к этому вашему комментарию " Для организации быстрого переключения без вмешательства в код, создаете 2 maven run configs для продакшен и дев с кастомными переменными окружения:", пожалуйста? Очень нужно знать, что на ней.
Спасибо

Ох, ну вы нашли, о чем спросить, спустя 6 лет. :slight_smile: Подозреваю, что там была картинка с разными maven конфигурациями в IDE.

Вы лучше опишите, что вам конкретно нужно? Задать переменные окружения в среде разработки? Или добавить choice parameter в Jenkins?

П.C. Картинками я не управляю. Думаю, что в столь старых постах они все безвозвратно потерялись после ряда апдейтов платформы. @polusok может точно знать.

Я решила, что не плохо бы вначале поискать на форуме уже имеющиеся ответы прежде, чем клепать новый вопрос.
Конкретно в вашем предложении мне было не совсем понятно, что вы подразумевали под “переключением без вмешательства в код”.
Сейчас по вашему ответу, вроде бы, понятно, что нужно задать переменные окружения в IDEA (по крайней мере, у меня она) и добавить choice parameter в Jenkins.

Вариант с maven профайлами хорош, если URL не придется задавать динамически. К примеру, дев захотел натравить автотесты на свое локальное окружение. Задав кастомный URL через Jenkins, ему ничего не нужно будет менять в коде.

Решение этой проблемы я нашла в видосике в этой теме: Параметризация теста из Jenkins в конфигурационный файл TestNG - #24 от пользователя Necrosium

Спасибо вам большое за ответ :slight_smile:

1 лайк