fa
Feedback
Валерий | AQA Engineer | Автотестирование на Python | REST, gRPC, GraphQL

Валерий | AQA Engineer | Автотестирование на Python | REST, gRPC, GraphQL

رفتن به کانال در Telegram

Сделаю из тебя крутого AQA инженера на Python. • Преподаю лучшие тренинги по автоматизации тестирования API • Senior Python developer | AQA lead, 7 лет в IT

نمایش بیشتر
1 511
مشترکین
-124 ساعت
+47 روز
+830 روز
آرشیو پست ها
Нашел задачку над которой упарывался чтобы уместить в в одну строку минимальной длины. Задачка предельно простая. Напишите программу, которая принимает целое число x от пользователя. 1. Если это число больше 1, программа должна вывести число x, повторенное x раз подряд 2. Если введенное число x меньше или равно 1, программа должна вывести сообщение: "x должен быть больше 0". #### Пример работы программы: - Вход: 3 - Выход: 3 3 3 (число 3 повторяется 3 раза) - Вход: 5 - Выход: 5 5 5 5 5 (число 5 повторяется 5 раз) - Вход: 0 - Выход: x должен быть больше 0 - Вход: 1 - Выход: x должен быть больше 0 Пишите в тредик свои решения. Может быть нихрена непонятно, главное чтобы программа занимала минимальное количество символов и работала верно) Ну и давайте уж без чата гпт) 👇🏻

Почему True == 1 ? В Python значения True и 1 считаются равными из-за того, что в Python булевы значения и целые числа имеют неявное приведение типов. В Python, True и False являются специальными значениями (тип bool), которые на самом деле являются подклассами целого числа (int). Конкретно, True имеет значение 1, а False имеет значение 0. Таким образом, когда вы выполняете сравнение True == 1, Python интерпретирует это как сравнение 1 == 1, что, конечно, является истинным. Вот простой пример:
print(True == 1)  # Выведет: True
print(True == 0)  # Выведет: False
print(False == 0)  # Выведет: True
Это поведение было установлено для совместимости с другими частями языка и по историческим причинам. Однако, стоит отметить, что несмотря на то, что они равны при сравнении, переменные типа bool и int имеют разные типы:
print(type(True))  # Выведет: <class 'bool'>
print(type(1))     # Выведет: <class 'int'>
Таким образом, в Python True и 1 представляют одно и то же значение, но они принадлежат к разным типам.

Какой будет результат выполнения кода? print(1 + True)
Anonymous voting

Какой будет результат выполнения этого кода? ``` print(1 + True) ```
Anonymous voting

Знаете, что я заметил? Начали массово закрываться школы по обучению тестированию и смежным IT-направлениям. Следил за несколькими популярными IT-блогерами — и вот один за другим объявляют о закрытии своих школ. И тут у меня есть мнение. Честно говоря, вопросы к их компетенциям у меня были всегда. Я не буду называть их имена, я думаю если вы за ними следите и сами поймете. Зато они точно отличные предприниматели — курсы стоили по 150-200 тысяч, и пока рынок был горячим, можно было собирать сливки. Но хайп прошел, рынок насытился, и как только дело перестало быть сверхрентабельным, лавочку свернули. Что хорошего в этом? Рынок обучения чистится от тех, кто продавал красивую картинку: «релокация, работа на Европку за кучу денег, путешествия». Но IT — это не про "вот пройду курс и стану супер успешным". Когда я переехал в Москву и стал получать гораздо выше среднего, мне начали писать, а какие курсы я закончил. То есть у людей выстраивалась совсем неправильная логическая цепочка, n - законченных курсов = работа в IT и овердохера денег. Так вот на мой взгляд IT это про реальный труд, годы практики и работу над собой, как наверное и в любой серьезной отрасли. То есть все чему ты учишься нужно пропустить через себя, обкатать и понять. Несмотря, что многие заканчивают обучение у меня, далеко не каждого я, например, готов зарефералить, должна еще пройти фаза осознания у ученика. По тому, как пишется код, какие вопросы задает ученик и прочее, я многое понимаю. И я давно заметил одну закономерность: настоящих профессионалов всегда мало. Настоящие инженеры говорят о инженерных вещах, которые не каждый «войтишник» поймет и поэтому эти материалы не популярны. У них и подписчиков не так много, как у инфоцыган, продающих простые и понятные мечты. Я давно в индустрии и вижу разницу между тем, как работают реальные специалисты, и тем, что обещают на курсах. И если ты хочешь действительно стать профессионалом, надо учиться у тех, кто знает, а не у тех, кто просто умеет продавать. Настоящих профессионалов немного, старайся вычленять когда продают мечты от того когда продают реальные навыки. Например: - "мой ученик после обучения, увеличил свою ЗП на 100 тыщ" - больше похоже на продажу мечты, выглядит просто и понятно для рядового человека. - "мой ученик после обучения, может развернуть фреймворк, настроить CI\CD, измерить покрытие тестами" - это реальный навык. Из моей отрасли за кем я слежу и кто вызывает у меня доверие - это следующий список: — Алексей | AQA Proka4Evgeniy Okulik Но повторюсь, я не учился у них, сужу только о тех материалах которые есть в публичном доступе.

Всем привет! Сегодня началось обучение 7 потока курса REST API test automation (Advanced) 🚪 А это значит набор на курс закрылся. Если не успел — не переживай. Я планирую следующий поток, но цена будет выше. Если хочешь попасть в список ожидания (и получить скидку на следующий запуск) — регистрируйся в этой форме. Еще я принял очень важное решение, все новые курсы начиная с Advanced будут будут иметь неограниченный по времени доступ к материалам. Те кто уже имеет доступ к курсу Advanced, у вас доступы будут поправлены по запросу)) Всем хорошего дня) P.S Те кто учился на курсе REST & gRPC API test automation, проверьте почту и бот, разослал вам скидку на Advanced, действует до конца марта)

Почему изучать автоматизацию тестирования нужно именно сейчас? Всё зависит только от твоего желания. Существует множество людей, которые становятся жертвами своей собственной лени или страха, находя оправдания и причины, по которым они что-то не могут: 1. У меня недостаточно ресурсов. 2. Я слишком стар(молод) 3. Я только начинаю в области автоматизации. 4. Я не смогу совмещать учёбу и работу. 5. На рынке слишком большая конкуренция. 6. Мне некогда, я хочу не только работать, но и жить. Так вот, что я хочу сказать. Когда я начал свое погружение в IT, я находился в откровенной финансовой жопе, порой мне кажется, что это обязательное условие успеха, мне настолько осточертела моя работа, ведь за ПЯТЬ ЛЕТ я получил ОДНО повышение, простите за мой французкий "С лоха на пидораса" и + 1.5 тысячи рублей к окладу. В магазине меня всегда охватывала паника и включался внутренний калькулятор, чтобы не дай бог взять что-то не из самого необходимого, так как мой бюджет мог посыпаться ко всем чертям. Мне было 28 лет и я все чаще думал, мне скоро 30 и чего я добился? Ипотеки в районе находящемся на второй строчке снизу по благоприятности, кредита и уровня жизни на грани выживания. И наверное я уже слишком стар для того чтобы пробовать что-то новое. Мне кажется бог послал мне тогда премию в 12.5 тысяч рублей и выбор, купить наконец себе холодильник, вместо моего старого, купленного на авито за 500 рублей, или рискнуть и попробовать себя в чем то новом, мне хватило смелости выбрать второе. Тогда я приобрел свой первый курс по тестированию. Каждый вечер после работы я приходил и фигачил домашки по курсу, иногда в тайне от коллег пытался делать что-то на работе, каково было разочарование когда домашки приходилось переделывать иногда по 5-6 раз из-за чего они копились, но в итоге я закончил в первой тройке. По окончании курсов я был совсем зеленым джуном, а мой город миллионник обрадовал меня наличием АЖ 33 ВАКАНСИЙ вместе с аналитиками разработчиками и тп, я писал письма во все IT компании моего города, чтобы хотя бы иметь возможность попасть на собес. Иногда моя история мне напоминает какой-то фильм, ведь даже друзья и родственники не верили в успех моего мероприятия, а когда я им еще и сказал, что ЗП на моем новом месте будет даже чуть меньше чем я получаю сейчас, откровенно крутили у виска. Примерно с того времени я очень сильно набрал темп, я понимал что мои конкуренты студенты технических вузов без сильного обременения в виде семьи или кредитов и гораздо большим количеством времени. Я знал не имею права тормозить, скупал все возможные обучения на которые только хватало денег (слава богу мое первое повышение было спустя 3 месяца), и впихивал в себя знания пачками. Уже через полтора года, я перерос свой стартовый доход более чем в 5 раз. Друзья стали прислушиваться к моему мнению и просить советов. Даже сейчас я разрабатываю платформу для своих студентов, которая включает, базы, брокеры, сервисы, не только чтобы учить, но и для того чтобы держать себя в тонусе и быть крутым специалистом. Вот так незаметно прошло 7 лет и я уже разработчик, который причесывая свои сеньерные усы раздает советы и учит жизни. И вот мой главный совет. Не откладывай на завтра, делай и учись сейчас, чтобы получать все плюшки востребованности и хорошей зарплаты уже сейчас. Не откладывай жизнь, и если хочешь попасть в поток по автоматизации тестирования API от 03.03.2025, жмакай на ссылку обучение. TG-сообщество | Обучение | Отзывы

Захотелось поделиться. Иногда меня спрашивают: “А есть ли у тебя хобби? Ты же всё время работаешь!” Интересный вопрос. Например, моя жена часто не понимает, где у меня работа заканчивается и где начинается хобби. Утром могу сидеть, думать над постом для телеги, потом весь день кодить на основной работе, вечером — работать над своей тестовой платформой, отвечать на вопросы учеников, проверять домашки… Со стороны кажется, что можно, простите за выражение, «поехать кукухой». Но фишка в том, что для меня это не просто работа. Это действительно приносит удовольствие. Да, я устаю, но когда вижу, как у учеников что-то получаеться, как они радуются своим успехам, особенно когда читаю отзывы на свои курсы — у меня будто батарейка снова заряжается. Каждый отзыв я перечитываю несколько раз, сначала сам, потом жене, потом маме с папой (это правда))) Это как в хобби, когда можешь часами заниматься любимым делом и кайфовать от процесса. Моя школа — это не просто проект или бизнес. Это часть меня. Мне важно не просто «отработать» урок, а чтобы человек после занятия думал: “Блин, было круто! Я реально понял!” Именно ради этого я вкладываю сюда столько времени и сил. Чтобы уложить самую сложную часть (лайфкодинг), я переписываю код по несколько раз, обдумываю какие ошибки в процессе оставить, чтобы ученикам было понятно как эти проблемы решать, а что лучше пропустить, чтобы не перегрузить. На запись одного 20 минутного ролика порой уходит до 4 часов. На каждый хороший отзыв я растекаюсь в улыбке. Потому что для меня это больше, чем работа. Это то, что вдохновляет и заряжает каждый день. И надеюсь именно поэтому плохих отзывов у меня пока нет) И если ты хочешь учиться там, где преподаватель горит своим делом, а я на связи практически 24/7 и действительно вовлечен в твой результат — добро пожаловать. Думаю, тебе понравится. TG-сообщество | Обучение | Отзывы

Продолжаем разбирать структуры данных в Python! В прошлых постах мы говорили о последовательностях , кортежах и очередях , их видах, сегодня — словари (dict) и их вариации. 👉 Почему словари важны? Словари в Python — это высокопроизводительные структуры, основанные на хеш-таблицах. Они обеспечивают быстрый доступ к данным (обычно O(1) для поиска и вставки). Кстати, хеш-таблицы лежат и в основе set и frozenset, которые поддерживают операции объединения, пересечения и проверки подмножеств — полезно для декларативных алгоритмов без вложенных циклов. 🔎 Вариации словарей в Python 1. OrderedDict (collections) Упорядоченный словарь, сохраняет порядок добавления элементов. • Пример:

from collections import OrderedDict  
od = OrderedDict([('a', 1), ('b', 2)])  
od['c'] = 3  
print(list(od))  # ['a', 'b', 'c']  
• 🆚 Обычный dict (Python 3.7+) тоже сохраняет порядок, но OrderedDict полезен, если нужны методы вроде .move_to_end() или совместимость с более старыми версиями. 2. defaultdict (collections) Автоматически создает значения для отсутствующих ключей. Избавляет от KeyError. • Пример:

from collections import defaultdict  
dd = defaultdict(int)  
dd['x'] += 1  
print(dd['x'])  # 1  
• ✅ Полезно для подсчета, группировки и вложенных структур. 3. ChainMap (collections) Хранит список отображений, так что их можно просматривать как единое целое. Поиск производится в каждом отображении в порядке их перечисления в конструкторе и завершается успешно, если ключ найден хотя бы в одном. • Пример:

d1 = dict(a=1, b=3)
d2 = dict(a=2, b=4, c=6)
from collections import ChainMap
chain = ChainMap(d1, d2)
chain['a'] # 1
chain['c'] # 6 
4. Counter (collections) Словарь, в котором с каждым ключом ассоциирован счетчик. Обновление существующего ключа увеличивает его счетчик. Этот класс можно использовать для подсчета количества хешируемых объектов или в качестве мультимножества • Пример:

from collections import Counter  
cnt = Counter('banana')  
print(cnt)  # Counter({'a': 3, 'n': 2, 'b': 1})  
5. shelve (shelve) Модуль shelve из стандартной библиотеки предоставляет постоянное хранилище для отображения строковых ключей на объекты Python, сериализованные в двоичном формате pickle • Пример:

import shelve
import pickle

# Данные для сохранения
data = {'a': [1, 2, 3], 'b': {'x': 10, 'y': 20}}

# Сериализация данных с помощью pickle
serialized_data = pickle.dumps(data)

# Сохранение в shelve
with shelve.open('my_shelf') as db:
    db['my_data'] = serialized_data  # Сохраняем сериализованные данные

# Загрузка из shelve и десериализация
with shelve.open('my_shelf') as db:
    loaded_data = pickle.loads(db['my_data'])
    print(loaded_data)  # {'a': [1, 2, 3], 'b': {'x': 10, 'y': 20}} 
   
• 🗄️ Идеально, если нужен “простой БД-словарь” без SQL. Что из этого используете чаще всего? Или открылось что-то новое? 🤔👇 TG-сообщество | Обучение | Отзывы

Давно не выкладывал отзывы на обучение, Катя один из учеников прошлого потока. Больше отзывов можно прочесть в сообществе) Так же приглашаю на обучение, новый поток стартует уже 03.03.2025. Напомню, что я работаю и с юридическими лицами и в 90% случаев оформление обучения от работодателя происходит гладко, описание программы можно найти в по ссылке «обучение» TG-сообщество | Обучение |Отзывы

Всем привет) Выложу небольшой тизер к Гуанчжоу. Если коротко, красивый современный город, огни, метро, вкусная еда. Удобный аэропорт и погран служба, че тебе делать говорит сканер отпечатков пальцев прям на русском. Сотрудники аэропорта очень шустро и внимательно достматривают, вплоть до носков, от этого есть ощущение безопасности. Из минусов многое завязано на alipay, которое оплатило один раз и потом стало игнорить мою карту. На английском даже минимальном разговаривают только обслуживающий персонал и то не весь. Но люди отзывчивые и помогают на сколько могут и понимают) На неделю бы здесь не остался, на 2-3 дня здесь провести самое ок) Но че мне нравится, смотришь на все это и понимаешь, что почти все что сделано в этой стране сделано ее же руками, осознание этого очень круто. Но мы уже во Вьетнаме и тут тоже очень круто, если хотите фото видео ставьте лайки)

Как читать логи? Одна из самых частых проблем, которую допускают начинающие программисты, это, во-первых, то, что они не чита
+9
Как читать логи? Одна из самых частых проблем, которую допускают начинающие программисты, это, во-первых, то, что они не читают сообщения, которые им выдает язык программирования, а, во-вторых, читают, как обычно, сверху вниз. Конечно, возможно, это все — вкусовщина, но я рекомендую читать снизу вверх: сначала ты обращаешь внимание на фактическую ошибку, а затем уже, поднимаясь вверх по логу, понимаешь ее причину. Как-то раз я записал несколько историй в своем Instagram о том, как анализировать лог, думаю, будет полезным поделиться этим здесь, возможно, кому-то поможет.

+2
Всем привет) Сейчас постов будет поменьше, потому что вот) Прошу принять и простить)

Ответ на вопрос подписчика:
Интересно было бы почитать про тестирование БД. Есть тяжёлая сложная БД (ЛЕГАСИ!!1) с кучей сильно связанных данных и большим количеством логики внутри (триггеры, хранимые процедуры). Есть микросервис, который что-то получает от других микросервисов, потом дёргает что-то в БД, в результате чего в ней меняется/создаётся/удаляется куча данных. Отдельная проблема - создание большого объёма тестовых данных в десятках связанных таблиц. Вообще складывается впечатление, что подобным никто не занимается :)
Что хочу сказать — я сталкивался с такой проблемой. Сейчас это довольно распространенная история, когда начинают распиливать монолит на микросервисы. Когда я сталкивался с такой задачей, я испробовал различные варианты, в том числе даже писал тесты на Transact SQL, которые просто записывали результат в виде таблицы: "прошел" или "не прошел". Было интересно, но если честно, подход фигня. Из плюсов было то, что можно было все проверки провести в рамках транзакции и потом очень быстро все откатить. В итоге я сделал следующее: спарсил репозиторий с хранимыми процедурами нашей команды, на которых была построена вся предыдущая логика монолитного приложения, и написал генератор кода библиотеки (можно и руками написать). Получился код из разряда:
class ApiProcedures:
    def __init__(self, client: DbClient):
        self.client = client
        
    def query_execute(self, query, commit=False):
        logging.debug(query)
        dataframe = self.client.dataset_to_dataframe(query)
        if commit:
            self.client.cursor.commit()
        return dataframe
        
    def generate_several_posting(
            self,
            final_destination,
            numbers,
            time_slot_id,
            delivery_variant_id,
            is_pay_by_saved_card,
            commit=False
    ):
        query = f"""
        SET NOCOUNT ON;
        EXEC [test].[CreatePosting3]
          @cnt = {numbers},
          @TimeSlotID = {time_slot_id},
          @DeliveryVariantID = {delivery_variant_id}, 
          @DstPlaceID = {final_destination},
          @SavedCard = {is_pay_by_saved_card};"""
        
        postings = self.query_execute(query)
        postings = list(map(int, postings))
        if commit:
            self.client.cursor.commit()
        return postings
Результат выполнения хранимой процедуры был pandas DataFrame, что позволяло удобно оперировать получившимися данными. В дальнейшем фреймворк был написан с использованием типичного pytest, requests и библиотеки для работы с БД, которая у меня получилась. Если мне нужно было проверить что-то именно в БД, я просто писал во фреймворке хранимую процедуру и запускал ее с помощью Python, используя метод, как в примере: self.query_execute(query). Если нужно было генерировать очень много данных, то запускал хранимую процедуру либо в цикле, либо в несколько потоков Python. У нас не было необходимости дропать тестовые данные, так как контур каждые две недели обновлялся в исходное состояние. Как-то так. Пишите вопросы, буду отвечать! TG-сообщество | Обучение | Отзывы

Ребят привет, подписчик спросил по поводу актуальности Robot Framework надо подтвердить или опровергнуть информацию по поводу , поможем коллеге) Ну заодно соберем статистику 📊 С каким фрейворком работал(а) чаще всего или встречал на своем проекте?
Anonymous voting

Нашел на просторах интернета, шпаргалку по docker, будет полезно сохранить) Сам тоже использую шпоры, например, когда мне нужно ребутнуть нашу песочнику. TG-сообщество | Обучение |Отзывы

Нашел на просторах интернета, шпаргалку по docker, будет полезно сохранить) Сам тоже использую шпоры, например, когда мне нуж
Нашел на просторах интернета, шпаргалку по docker, будет полезно сохранить) Сам тоже использую шпоры, например, когда мне нужно ребутнуть нашу песочнику.

Продублирую свой пост на тему выше, где высказываю свое мнение https://t.me/AQA_Engineer/266

Сегодня @artsiom_qa опубликовал у себя пост, с историями вот этого чувачка (seniorpomidorov)) Знаете что самое забавное? Я его собесил около 1 - 1.5 лет назад и он только на словах ферзь, а на деле страшный пиз****л, простите меня за выражения. Человек учит обманывать на собесах, чтобы главное влететь на вакансию. Именно на этом он и попался и как инженер он себя проявил абсолютно никак) Почему я не рекомендую так делать, потому что если вас спалили за читерством в более или менее серьезных организациях имеется история собесов и у него эта история очень плохая, я бы опубликовал, но это служебная информация. Чувачек играет на слабостях людей которые хотят быстро, все и сразу. Не надо так!

Просто хочу поделиться, вот это воля к победе!!! Студент сидел всю ночь с пятницы на субботу, чтобы закрыть все долги, на что
+2
Просто хочу поделиться, вот это воля к победе!!! Студент сидел всю ночь с пятницы на субботу, чтобы закрыть все долги, на что решается не каждый) Зато можно сделать вывод, что на каждую домашку в среднем тратится 2.5 часа)) Поздравляю с окончанием курса)