LikeaDuck🦆
1.45K subscribers
65 photos
3 videos
97 links
Дима Тучс (https://t.iss.one/dtuchs). QA директор в DODO, спикер и программный комиттёр на конфах, создатель авторского курса QA.GURU Advanced. Здесь будет об IT, QA, менеджменте и немного обо мне.
Download Telegram
#Management #Собеседование

Я думаю, что желание работать друг с другом должно быть обоюдовзаимным. Поэтому и собеседование не должно быть допросом или экзаменом, а должно выстраиваться "мы продаем себя, вы - себя". Исходя из этого, хорошим собеседованием я считаю то, где мы (я и тот, кто пришел ко мне на интервью) говорим примерно поровну, и к концу оба понимаем, что нам по пути.

Но вот на одном из собеседований я рассказываю про нас, какие у нас цели, какие рынки приоритетные, какие вызовы перед айтишечкой, чем они обусловлены... А мой визави в это время просто... продолжает работать. Это всегда видно со стороны, когда человек тебя слушает, или занят своими делами, не так ли?

Обидно как-то стало, да и грустно.

Рынок действительно таков, что у каждого соискателя паровозик собеседований, конвейер. Типа, "ну вот получу N офферов и выберу". А я бы хотел работать с теми, кто бы хотел работать со мной. Кто хотя бы меня слушает 🙂. Возможно, это наглость с моей стороны, как вы считаете?
37👍9💯7🔥2
#java #opensource

Сегодня я решил переписать allure-grpc.
Это маленькая библиотечка за моим авторством, которая создаёт красивый отчетик для gRPC тестов.

Но она изначально, как говорится, by design, не заточена под bidirectional streaming и на client-streaming - тоже. Стоит признать, что и в реальных проектах это самые редко используемые виды стриминга в gRPC. Она не то что бы совсем с ними не работает, но, если клиент отправляет несколько message, то в отчёте будет несколько steps - для каждого message. Не-кра-си-во.

Пришло время сделать так, чтоб работала одинаково хорошо с любым видом gRPC. Ну и заодно смахнуть пыль с ачивки open source контрибьютора😁

А вы создаете pullrequest-ы в opensource? Делитесь своим опытом🤟
🔥37
#java #opensource

Если вам интересно, что же получилось с Allure-grpc, а там есть, на что посмотреть (потоки, CountDownLatch-и вот это вот все 🥲 А еще unit-тесты!), то, короче говоря, вот PR. Я надеюсь, что это будет полезно всем QA, кто тестирует streaming gRPC.
Это же так радостно, когда есть проблема, и есть библиотека, которая ее решает, не правда ли?
👍95🔥2🏆2
Впервые действительно почувствовал землетрясение. Причем в качалке, где вокруг куча тренажеров, грифов и блинов, и все это как затряслось...

Напоминаю, что в DODO Engineering можно работать из любой точки мира😀
😱28😁11💯3👍1🔥1
Любопытный факт к 8 Марта:

в Dodo Engineering больше всего девушек именно в QA. А меньше всего - внезапно - среди frontend разработчиков - ноль🥺. Получается, мне очень повезло - работать со многими прекрасными девушками бок о бок ❤️ А еще учить многих прекрасных девушек в QA.GURU❤️ С праздником вас🌹

UPDATE: Походу, забыл про дизайнеров, пальма первенства утеряна 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
56🥰10😁4🤔2
Вот так выглядит JavaDoc в одном из классов Spring Data. А ведь я решил его почитать именно ради того, чтоб понять что это за IntFunction<? extends ScrollPosition> positionFunction. Так что вот она - возможность стать контрибьютором Спринга для всех желающих 😁
🔥6😁5🤔3
Тихо и почти буднично мы вчера поставили рекорды по выручке и числу заказов в минуту.

Рекорд заказов в минуту - 735
Это Dodo Pizza России. Dodo Brands Worldwide: 835 в минуту (Здесь, кстати, на конкретном соотношении цифр видно, как важна наша цель стать пиццерией #1 в Турции и Дубае, масштабировать бизнес на зарубежных рынках).

Выручка в России за 1 день 534 млн рублей🔥В Евразии - 776 млн рублей 📈

Трудно переоценить роль QA функции в том, что рекордный по нагрузке день прошел без сучка и задоринки в техническом плане 💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26🔥207🍾6
#java #frameworks

Selenide - крутой.

Я думаю, что большинство из вас в этом и так не сильно сомневается (список пользователей говорит сам за себя), но вот пару дней назад произошло маленькое событие, которое могло бы вообще пройти незамеченным для меня, но не прошло: я обновил в одном из своих проектов Selenide c 6.х до последней версии 7.2.1. И у меня перестал компилироваться код🙂 Казалось бы, первая мысль поругаться, но я, наоборот, пишу пост похвалы.

А дело все в том, что разработчики Selenide радикально упростили жизнь всем, кто писал или планирует написать свои кастомные CollectionCondition. Если раньше надо было переопределять 3 метода:
            @Override
public void fail(CollectionSource collection, List<WebElement> elements, Exception lastError, long timeoutMs)

@Override
public boolean missingElementSatisfiesCondition()

@Override
public boolean test(List<WebElement> elements)

Причем, что делает второй и для чего он нужен технически я даже не понимал и просто писал return false;🥲
А еще, надо было писать свои классы исключений: public class SpendsMismatch extends UIAssertionError

А теперь все стало радикально просто, надо переопределить один метод :
            @Override
public CheckResult check(Driver driver, List<WebElement> elements)

Назначение и сигнатура которого понятны даже если вообще в первый раз слышать про CollectionCondition.

Респект всем библиотекам и фреймворкам, которые упрощают свои API и делают их чистыми для понимания и написания кода. Selenide с каждым релизом, обрастая все новым функционалом, становится проще для понимания и расширения. И это хорошо.
Selenide - крутой.
🔥44🥰8👍1
Второй день работаю 22 часа из 24-х. А все потому, что
😢25🙏6🫡62🔥1😁1💯1
The art of JUnit extensions 2 - быть!
Есть ощущение, что я делаю важную вещь для кого-то, кто только начинает свой путь в AQA.

Кажется, что после просмотра обеих частей хотя бы кто-то решит построить свой "фреймворк" (тьфу три раза) на красивых экстеншенах, а не на портянке статических методов и классов на 500 строк.

А я буду этому рад.
🔥53👍1311
Media is too big
VIEW IN TELEGRAM
Об одной из главных проблем автоматизации тестирования с одной из моих лекций QA.GURU Advanced.
👍30💯105🔥1🤩1😎1
Еще из приколов моего любимого Gradle: Кто сходу увидит здесь ошибку? Я пропустил двоеточие в одной из зависимостей, и на мой взгляд - это делает "адрес" зависимости невалидным, и было бы здорово, если бы Gradle сказал мне "could not resolve dependencies, bro". Но Gradle совершенно ничего не говорит в таком случае по нажатию кнопки "Reload gradle project" (та самая "обновить"). И я сижу и не понимаю - ну почему у меня не импортируются классы из этой библиотеки? Сижу смотрю граф зависимостей, действительно не нахожу там нужную мне spring-data-commons и недоумеваю. Я пошел дальше и написал testImplementation "org.springframework.data:spring-data-commonsываывавыdsfvsfd:${springDataCommonsVersion}" и даже тут не увидел ошибки. Хотя может быть во всем виновата IDEA со своей кнопкой, а Gradle не при чем. Но кто-то точно не прав 🙂
😁13👍7🤔4
Скоро я выступаю на конференции Heisenbug 2024 Spring с очередным воркшопом про JUnit Extensions, который будет продолжением первой части. Буду рассказывать, внезапно, про JUnit)) А если серьезно, я надеюсь что получившийся проект пригодится очень многим новичкам в Java AQA для построения действительно изящной тестовой инфры. Будет интересно!

Приходите на конфу, там найдется много интересного помимо меня😀

Конференция пройдет 16.04 и 22-23.04 сначала в online, а потом и в offline формате.

Думаю, многим из вас билет оплатит компания. Но, если не срастется, а послушать доклады и задать вопросы все равно хочется, приходите в личку — постараюсь помочь со скидкой на билет. Не только лишь постараюсь, но и помогу😂
🔥2713👍4❤‍🔥3
Сегодня иду записывать подкаст на тему ... а сложно сказать, на какую тему🙂. Поговорим о QA, безо всяких JUnit-ов и прочих автоматизаций. Кстати, это уже не первый мой опыт с подкастом, ранее был чуть более хардкорный и технический - Тесты и Пицца от Ufostation. Лайк, шер, предложения тем для будущих подкастов в комменты🙌
🔥3411😍4👍2
The art of JUnit Extension 2 сегодня состоялся! Спасибо всем, кто смотрел вживую, а код, который мы сегодня писали, будет завтра в репо

И да, мы, наконец, полностью решили проблему параметризации тестов с разными allureId с помощью Extension, будет что разобрать в свои проекты 💯
🔥308👍2
О чем врут тестировщикам.
И тестировщики?

Свой взгляд на большие проблемы в образе мыслей QA инженеров будет в моем offline докладе на Codefest. Приходите, если вы в Новосибирске 🙂
🔥1413👍2
#java #обучение #qaguru

Вчера провел первое занятие уже 5-го потока своего авторского курса Java Advanced в QA.GURU. Как и все предыдущие, курс будет глубоко погружать в разработку и тестирование вокруг Java.

Если вдруг кто-то из вас желает залететь в уходящий поезд 5-го потока, можете воспользоваться моим персональным промокодом DTUCHS10, который даст вам скидку 10% до 25 апреля включительно. Для активации промокода напишите в QA.GURU-SALES.
10
#gradle

О моем любимом Gradle.
Имеем мы, значит, официальный туториал Spring о том, как настроить генерацию JAXB. Идем по нему, вставляем в наш build.gradle строки из туториала и - все работает 🙂. Строки такие:
task genJaxb {
ext.sourcesDir = "${buildDir}/generated-sources/jaxb"
ext.schema = "src/main/resources/countries.xsd"
...


И все бы ничего, но ${buildDir} самим Gradle объявлена deprecated, и здравствуй вечный WARNING при сборке проекта, а в будущем - и невозможность перейти на какой-нибудь Gradle 9 или 10. Сейчас я на 8.6.

Что может быть проще загуглить на что предлагают заменить ${buildDir} сами разработчики gradle? И есть официальный док, который дает нам ответы на этот вопрос:

Deprecations
Deprecated Project.buildDir is to be replaced by Project.layout.buildDirectory
The Project.buildDir property is deprecated. It uses eager APIs and has ordering issues if the value is read in build logic and then later modified. It could result in outputs ending up in different locations.

It is replaced by a DirectoryProperty found at Project.layout.buildDirectory. See the ProjectLayout interface for details.


И есть даже пример кода:
было: file("$buildDir/myOutput.txt")
стало: layout.buildDirectory.file("myOutput.txt")

Ну, все просто, но кажется .file в нашем случае лучше заменить .dir. Пишем:

tasks.register('genJaxb') {
ext.sourcesDir = "${Project.layout.buildDirectory}/generated-sources/jaxb"
ext.classesDir = "${Project.layout.buildDirectory}/classes/jaxb"
...

Собираем проект, и ошибка:
`No such property: layout for class: org.gradle.api.Project
Possible solutions: layout`

ОКЕЙ, пробуем по-другому
    ext.sourcesDir = "${layout.buildDirectory}/generated-sources/jaxb"
ext.classesDir = "${layout.buildDirectory}/classes/jaxb"
...

и классы генерятся в niffler-gateway/property(org.gradle.api.file.Directory, fixed(class org.gradle.api.internal.file.DefaultFilePropertyFactory$FixedDirectory, /Users/dmitriitucs/IdeaProjects/qg/niffler/niffler-gateway/build))/generated-sources - уже лучше, есть прогресс, но хотелось то в build/generated-sources🙂

Идем дальше
    ext.sourcesDir = layout.buildDirectory.dir("generated-sources/jaxb").toString()
ext.classesDir = layout.buildDirectory.dir("classes/jaxb").toString()

- ну вот это-то должно нам дать строку с путем к папке?
результат опять с таким путем:

niffler-gateway/map(org.gradle.api.file.Directory property(org.gradle.api.file.Directory, fixed(class org.gradle.api.internal.file.DefaultFilePropertyFactory$FixedDirectory, /Users/dmitriitucs/IdeaProjects/qg/niffler/niffler-gateway/build)) org.gradle.api.internal.file.DefaultFilePropertyFactory$PathToDirectoryTransformer@4fe6e613)/guru/qa/niffler/userdata/wsdl

КОРОЧЕ ВОПРОС. Кто знает как это прописать чтоб работала mkdir и создавала папку тупо build/generated-sources🙂?? Ни чатгпт, ни гугл пока не помогли. Так и живем с Gradle 🙂
👍1😁1
Среда - день хороших новостей!

Сегодня опубликован подкаст "Гости из IT" с моим участием и тем самым Антоном Комоловым😁

В подкасте никаких JUnit-ов и Gradle-ов не будет, но точно будет много моих мыслей о состоянии дел с QA. Интересно будет всем, залетайте, слушайте, пишите комменты, опровергайте, и будьте крутыми QA 🚀
🔥267👏4
Анонсирую продолжение Сибирского тура оффлайн выступлений. Вслед за выступлением на Codefest 25 мая я поеду в Омск на небольшую, но обещающую быть ламповой конфу Сибирь.JS 22-23 июня. Буду рад пообщаться offline со всеми 🙌
🔥32