Size: a a a

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

2020 January 08

B

Bola in QA — Автоматизация
Oleksandr Khotemskyi
Кароче есть ли готовый алгоритм или нет вы скажите? :)
"сортирую руками")
источник

R(

Roman (rpwheeler) in QA — Автоматизация
Oleksandr Khotemskyi
Кароче есть ли готовый алгоритм или нет вы скажите? :)
Раскидать "неоптимальным" образом по условным "потокам".
На первом шаге выбираем наибольшие файлы и раскидываем их по потокам.

Дальше выбираем поток с минимальной получившейся длиной и добавляем к нему следующий по величине файл.

Он остался минимумом? Добавим ещё.
Новый минимум? Добавляем к новому.
И так пока не раскидаем всё.


Берём максимально длинный  поток и минимально длинный. Если можно произвести "обмен", при котором разница максимум-минимум среди всех потоков уменьшится, произвести его (длину файлов для обмена прикидывать как ближайшую искомую разницу между максимальным по длине и минимальным по длине потоком).  
Обмен можно считать хоть полным перебором вариантов.

Опять берём максимально и минимально длинный, повторяем.
Когда обмена произвести уже нельзя -- закончили.

Досортировать в потоках файлы по размеру, от больших к меньшим.

"Развернуть" полученные данные:
1) из всех потоков выбираем "самый маленький из самых больших файлов", он идёт первым в одном из потоков. Пишем время завершения работы для потока.
2) берём следующий за ним файл в этом потоке. Обновляем время завершения.
3) берём второй по длине прогона из первых в потоках файлов, аналогично пишем следующий за ним и обновляем время завершения.

И так далее -- у нас всегда есть следующее время завершения и следующий файл.

Получится не оптимум, но нечто близкое к нему.
источник

R(

Roman (rpwheeler) in QA — Автоматизация
(много букв, понимаю :) )
источник

B

Bola in QA — Автоматизация
А скажите, большой файл === длинный тест?
источник

R(

Roman (rpwheeler) in QA — Автоматизация
Bola
А скажите, большой файл === длинный тест?
Да.
источник

IG

Igor Gruziev in QA — Автоматизация
Bola
А скажите, большой файл === длинный тест?
Нет. Зависит от того, что в файле и что за тест
источник

R(

Roman (rpwheeler) in QA — Автоматизация
Данные для сортировки можно получить, как я уже сказал выше, замерением "не оптимзированного" прогона через логи, куда кидать начало и конец времени исполнения данных.
источник

B

Bola in QA — Автоматизация
На большом количестве тестов и большом количестве инстансов - не вижу смысла играться с сортировкой и т.д. имхо. Особенно в UI тестах.
источник

R(

Roman (rpwheeler) in QA — Автоматизация
Oleksandr Khotemskyi
Тут немного другая ситуация. Юнитов уже много, апи уже несколько тысяч, это именно критичные юай проверки на покупку и поиск, которые уже никуда не двинуть
Если есть "90 датасетов", то они, скорее всего, дёргают одни и те же элементы UI (которых, я думаю, менее чем 90).

В этом случае одновременно проверяются две вещи:
- ввод из контрола передаётся "куда следует"
- логика бэкенда работает как надо

Хорошо бы в UI оставить только проверки каждого UI элемента, а логику загнать в что-то побыстрее.
источник

B

Bola in QA — Автоматизация
Bola
На большом количестве тестов и большом количестве инстансов - не вижу смысла играться с сортировкой и т.д. имхо. Особенно в UI тестах.
Единственное, если точно знаешь, что некоторые тесты длинные, можно их пустить пораньше
источник

OK

Oleksandr Khotemskyi in QA — Автоматизация
Roman (rpwheeler)
Раскидать "неоптимальным" образом по условным "потокам".
На первом шаге выбираем наибольшие файлы и раскидываем их по потокам.

Дальше выбираем поток с минимальной получившейся длиной и добавляем к нему следующий по величине файл.

Он остался минимумом? Добавим ещё.
Новый минимум? Добавляем к новому.
И так пока не раскидаем всё.


Берём максимально длинный  поток и минимально длинный. Если можно произвести "обмен", при котором разница максимум-минимум среди всех потоков уменьшится, произвести его (длину файлов для обмена прикидывать как ближайшую искомую разницу между максимальным по длине и минимальным по длине потоком).  
Обмен можно считать хоть полным перебором вариантов.

Опять берём максимально и минимально длинный, повторяем.
Когда обмена произвести уже нельзя -- закончили.

Досортировать в потоках файлы по размеру, от больших к меньшим.

"Развернуть" полученные данные:
1) из всех потоков выбираем "самый маленький из самых больших файлов", он идёт первым в одном из потоков. Пишем время завершения работы для потока.
2) берём следующий за ним файл в этом потоке. Обновляем время завершения.
3) берём второй по длине прогона из первых в потоках файлов, аналогично пишем следующий за ним и обновляем время завершения.

И так далее -- у нас всегда есть следующее время завершения и следующий файл.

Получится не оптимум, но нечто близкое к нему.
спасибо, вот где-то так же себе и представлял это
источник

OK

Oleksandr Khotemskyi in QA — Автоматизация
осталось накодить 🙂
источник

OK

Oleksandr Khotemskyi in QA — Автоматизация
если что получится - покажу потом
источник

B

Bola in QA — Автоматизация
Oleksandr Khotemskyi
если что получится - покажу потом
Можно ещё и подсчитать выигрыш по времени?
источник

MK

Misha Kovylin in QA — Автоматизация
Всем привет!
Пытаюсь выполнить следующий скрипт:
String left = (String) js.executeScript("document.getElementsByClassName('flash')[0].getBoundingClientRect().left");
Ловлю NPE. Не спрашивайте почему мне нужно получить координаты именно таким способом :)
Подскажите пожалуйста, что я делаю не так, и как мне сохранить возвращаемое значение из скрипта?
источник

BO

Boris Osipov in QA — Автоматизация
Misha Kovylin
Всем привет!
Пытаюсь выполнить следующий скрипт:
String left = (String) js.executeScript("document.getElementsByClassName('flash')[0].getBoundingClientRect().left");
Ловлю NPE. Не спрашивайте почему мне нужно получить координаты именно таким способом :)
Подскажите пожалуйста, что я делаю не так, и как мне сохранить возвращаемое значение из скрипта?
return document.getE.....
источник

MK

Misha Kovylin in QA — Автоматизация
Boris Osipov
return document.getE.....
пробовал :(
источник

TN

Timur Nurlygayanov in QA — Автоматизация
Misha Kovylin
Всем привет!
Пытаюсь выполнить следующий скрипт:
String left = (String) js.executeScript("document.getElementsByClassName('flash')[0].getBoundingClientRect().left");
Ловлю NPE. Не спрашивайте почему мне нужно получить координаты именно таким способом :)
Подскажите пожалуйста, что я делаю не так, и как мне сохранить возвращаемое значение из скрипта?
JS правильный, еще бы трейс увидеть. как объявлена переменная js? )
источник

MK

Misha Kovylin in QA — Автоматизация
@xwizard707  private JavascriptExecutor js = (JavascriptExecutor) getDriver();
источник

BO

Boris Osipov in QA — Автоматизация
Misha Kovylin
пробовал :(
нужно не пробовать, а написать return. без этого точно не будет работать
источник