Size: a a a

QA — Автоматизация

2020 November 24

EG

Edward Galiaskarov in QA — Автоматизация
Roman Mhoian
A есть метод типа driver.close()
Я ориентировался на такую информацию
А вот остановка его работы в определенное время ложится на разработчика тестов. WebDriver содержит два метода – quit() и close(), которые можно использовать для остановки работы браузера.

void close() — закрывает только одно текущее окно, и в случае, если это было последнее открытое окно — закрывает браузер.
void quit() — закрывает все открытые окна, завершает работу браузера и сервисов, и освобождает все ресурсы.
Поэтому для корректного завершения работы драйвера после выполнения теста используйте метод quit().

driver.quit();
источник

EG

Edward Galiaskarov in QA — Автоматизация
Алексей
Не использовать комбайны, а писать код самому. Тогда есть контроль над происходящим
Наверное хороший совет, но я не знаю, что такое комбайны. Кроме одного значения - некое устройство, объединяющее в себя несколько функций.
источник

А

Айдар in QA — Автоматизация
Edward Galiaskarov
Коллеги, добрый вечер.
Я немного в отчаянии ибо не могу понять проблему и ее причины. Вижу только ее проявление.
У меня есть набор тестов, который обычно занимает примерно 4часа 30 минут. Однако примерно последний месяц это время постоянно плавает в сторону увеличения. ;:30 это практически нижняя граница. Пока самое большое этот же набор занял 7 часов.
Анализ отчетов прогонов показывает, что торможение может возникать в разных местах тестового плана, но достаточно регулярно по прогону.
Как собрать доп информацию для диагностики, понять не смог, но посидел и понаблюдал глазами.

Обнаружил следующее - в некоторый момент времени при прохождения теста вдруг появляется еще один процесс chromedriver, получается два, а иногда и три запущенных процесса. Причем один активный - есть какие-то изменения в нагрузке процессора, другие висят, ничего не делают  и занимают одинаковый объем памяти.
Когда тест завершается, все запущенные процессы chromedriver выгружаются, при этом для активного выгружаются и chrome (их запускается почему-то ровно 6 штук + 1), а для "левых" их 6 штук остаются, в результате таких "висячих" chrome образуется довольно много и все вместе начинает грузить процессор, прогон замедляется. Т.е. тест который выполнялся за минут может идти 10.
Чтобы ка-то компенсировать проблему, я через 10-20 запусков тестов убиваю taskkill chrome лишние.

Возможно проблема вообще не в этом. Может есть идеи, что это? Нормальное поведение, что можно сделать?

Спасибо. Извините, за многословие.
можно же контролировать кол-во парраллельных браузеров открытых в одно время у меня лимит 8 стоит, больше 8 не откроет браузеров, вот сам плагин
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>3.0.0-M5</version>
   <configuration>
       <testFailureIgnore>true</testFailureIgnore>
       <!-- true if you want skip tests-->
       <skipTests>false</skipTests>
       <!-- For parallel cross-browsing test-->
       <parallel>methods</parallel>
       <!-- Specify number of threads either N or Unlimited-->
       <threadCount>8</threadCount>
       <perCoreThreadCount>false</perCoreThreadCount>
       <useUnlimitedThreads>false</useUnlimitedThreads>
       <includes>
           <!-- Include your Cucumber tests -->

           <includes>**/*LoginRunner.java</includes>
       </includes>

   </configuration>
</plugin>
источник

А

Айдар in QA — Автоматизация
и в hooks прописать
public class Hooks {

   @Before
   public void setup(){
       System
.out.println("Test setup");
   }


   @After
   public void tearDown(){
       System
.out.println("Test clean up");
       Driver
.closeDriver();
   }
}
источник

А

Айдар in QA — Автоматизация
после каждого теста чтоб закрыл браузер
источник

А

Айдар in QA — Автоматизация
сам метод
public static void closeDriver() {
   if (
driverPool != null) {
       
driverPool.get().quit();
       
driverPool.remove();
   }
}
источник

EG

Edward Galiaskarov in QA — Автоматизация
Айдар
можно же контролировать кол-во парраллельных браузеров открытых в одно время у меня лимит 8 стоит, больше 8 не откроет браузеров, вот сам плагин
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>3.0.0-M5</version>
   <configuration>
       <testFailureIgnore>true</testFailureIgnore>
       <!-- true if you want skip tests-->
       <skipTests>false</skipTests>
       <!-- For parallel cross-browsing test-->
       <parallel>methods</parallel>
       <!-- Specify number of threads either N or Unlimited-->
       <threadCount>8</threadCount>
       <perCoreThreadCount>false</perCoreThreadCount>
       <useUnlimitedThreads>false</useUnlimitedThreads>
       <includes>
           <!-- Include your Cucumber tests -->

           <includes>**/*LoginRunner.java</includes>
       </includes>

   </configuration>
</plugin>
Благодарю, Айдар, За практический совет, обязательно попробую использовать его. Хотя у меня другой стек. Я использую after hook и закрываю браузер.

Но насколько я понял, при этом будут закрыты только те, что связаны с закрываемым драйвером. В этом и проблема, что оставшиеся_ которые получились от другого драйвера, который почему-то сдох (или что еще с ним произошло - в лгах ничего нет, я вижу чисто глазами) не закрываются
источник

BS

BLVCK SONNET in QA — Автоматизация
Глеб Казаркин
Привет, в Python или Selenium есть проверка, что в поле указано число\строка или что возвращается число\строка?
Можете дать примеры проверок?
источник

BS

BLVCK SONNET in QA — Автоматизация
Глеб Казаркин
Привет, в Python или Selenium есть проверка, что в поле указано число\строка или что возвращается число\строка?
Можете дать примеры проверок?
Хотя возможно я тебя не так понял, если нужно проверить тип - тебе нужен isinstance
источник

ГК

Глеб Казаркин... in QA — Автоматизация
а строка isstring()?
источник

BS

BLVCK SONNET in QA — Автоматизация
Глеб Казаркин
а строка isstring()?
>>> isinstance('asd', str)
True
>>> isinstance(1, int)
True
источник

А

Алексей in QA — Автоматизация
Глеб Казаркин
а строка isstring()?
Правильнее через isinstance проверять
источник

BS

BLVCK SONNET in QA — Автоматизация
аналогично с любым типом данных
источник

BS

BLVCK SONNET in QA — Автоматизация
Алексей
Правильнее через isinstance проверять
isstring - нет в питоне
источник

А

Алексей in QA — Автоматизация
BLVCK SONNET
isstring - нет в питоне
эээ, про из стринг не я писал
источник

ГК

Глеб Казаркин... in QA — Автоматизация
спасибо
источник

А

Алексей in QA — Автоматизация
а так чел думаю имел ввиду через селениумный джаваскрипт джаваскриптовый изстринг вызывать (я такое уже раз 5 видел)
источник

BS

BLVCK SONNET in QA — Автоматизация
Алексей
а так чел думаю имел ввиду через селениумный джаваскрипт джаваскриптовый изстринг вызывать (я такое уже раз 5 видел)
Не совсем понимаю зачем это нужно если честно) учитывая, что выполняется всё из кода питона
источник

А

Алексей in QA — Автоматизация
BLVCK SONNET
Не совсем понимаю зачем это нужно если честно) учитывая, что выполняется всё из кода питона
одного автора в свое время удалось опросить. Короче в гугле этот вариант на стак оверфлоу выпал первым
источник
2020 November 25

BS

BLVCK SONNET in QA — Автоматизация
Что-то не могу вдуплить как поменять настройки плагинов после запуска кода, аргумент можно изменить таким образом:
def pytest_configure(config):
   config.option.log_file = 'another_file.txt'
До плагинов можно достучаться так:
config.option.plugins
Получаю просто лист. При запуске с аргументом -p no:terminal - лист плагинов выглядит так: ['no:terminal']. Но модификация этого листа не даёт возможности включать или отключать плагины, которая мне очень нужна. На вопрос "зачем?" отвечу так: хочу одним аргументом включать/выключать ряд плагинов. Памагити =)
источник