Test Engineering Notes
3.81K subscribers
177 photos
2 videos
648 links
Україномовний канал про технічні аспекти тестування, розподілені системи, блокчейн.

Консультації з автоматизації, менторинг, тестові співбесіди - @al8xr
Download Telegram
Візуалізуємо виконання коду - без реєстрації та смс

#python #learning #junior

Всім привіт.

Коли ти вчиш свою першу мову програмування буває складно зрозуміти, що відбувається "під капотом" того чи іншого шматка коду. Авжеж можна (та й треба) дебажити.

Але я пропоную поглянути на інший спосіб візуалізації коду - це PythonTutor.
Підтримується не тільки Python, але й Java, JS (трохи куцо, але маємо те шо маємо).
Цей сайт буде корисним усім менторам та тим людям, що викладають мови програмування.
👍142
Які є інструменти для автоматизації в ...

#testing #python #java #tools

Доброго ранку.
Коли ми тільки знайомимось з автоматизацією, або ж переходимо з однієї мови програмування в іншу - постає багато питань.
- Яку бібліотеку для ассертів взяти в мові Х?
- Які є альтернативи бібліотеці репортів у мові У?
- Чи є BDD інструмент для мови …?
- Та інше …

Авжеж можна запитати в каналі чи в чатах тест інженерів. Але мені допомагають списки типу awesome-X. У них хтось дуже добрий вже зібрав купу інструментів та виклав у публічний доступ.

Які списки використовую я сам:
- awesome-test-automation від atinfo. Є для багатьох мов програмування - у тому числі - Java, Python, JS.
- awesome-python-testing - лист інструментів для Python.
- java-testing-toolbox - набір прикладів з книги “30 Testing Tools & Libraries Every Java Developer Must Know”. (Знайшов цього тижня, але виглядає непогано для початківців).

Для інших технологій та мов програмування, можна пошукати списки awesome списки на GitHub.
👍314🔥2
Приховане перетворення даних в grpcui та k6

#testing #api #tools #python

Ситуація
Для одного з наших gRPC сервісів нам потрібно відправити hash у форматі HEX. Але коли я намагався відправити запит за допомогою grpcui або ж у скрипті навантаження k6 - сервер повертав помилку, що такий хеш не знайдений в нашій базі.

Задача
Треба було розібратись, у чому причина перетворення даних - та де криється проблема. Бо сервіс точно працював правильно.
Значить проблема в роботі інтрументів ...

Рішення
Як виявилося - обидва інструменти очікують вхідні дані в base64. Потім вони декодують ці дані та надсилають результат на сервер.
В Python з base64 працювати дуже легко. То ж у нагоді стане наступний скрипт.

import base64


def from_b64_to_hex(input):
binary_data = base64.b64decode(input)
return binary_data.hex()


def from_hex_to_b64(input):
binary_data = bytes.fromhex(input)
return base64.b64encode(binary_data).decode()


base64_string = "LxTKPCw9jAv1U8Xm6lxjhtGlnoZzNPc6I="
hex_string = "2f14ca3c2c3d880653b15e6ea5c6386d1a59e867334f73a2"

assert hex_string == from_b64_to_hex(base64_string)
assert base64_string == from_hex_to_b64(hex_string)


І ще одне

Крім цього скрипта, можна скористатись також безкоштовним онлайн конвертером.
17👍4
Python Big O: the time complexities of different data structures in Python

#python #algo

Для тих, кому було цікаво розібратись яка складність (за часом виконання) в структурах даних Python.
👍14
50 shades of Fibonacci

#coding #interview #python

Одна з найчастіших задач, яку дають на перевірку навичок програмування автоматизатора на співбесіді - це обчислення послідовності Фібоначчі.

Для тих, хто забув - це послідовність типу 0, 1, 1, 2, 3, 5, 8, 13, 21, ..., що описується формулою:
F(n) = F(n-1) + F(n-2), де F(0) = 0 та F(1) = 1.

Виявляється, одну й ту саму задачу можна вирішити по-різному. Кожне рішення покаже ваш рівень розуміння задачі, мови програмування та тестування негативних кейсів.

Перед тим, як дивитись приклади - пропоную самим спробувати написати код.

1. Простий та наївний підхід - обчислюємо так, як написано у формулі (з рекурсією):
def fib(n: int) -> int:
return fib(n-1) + fib(n-2)


Але тут можна легко отримати RecursionError: maximum recursion depth exceeded

2. Покращуємо код, додаючі перевірку базових кейсів:
def fib(n: int) -> int:
if n < 2:
return n
return fib(n-1) + fib(n-2)


3. Можна також застосувати техніку мемоїзації (тобто замість обчислень знову й знову - запам'ятовуємо проміжні результати):
from typing import Dict

memo: Dict[int, int] = {0: 0, 1: 1}
def fib(n: int) -> int:
if n not in memo:
memo[n] = fib(n - 1) + fib(n - 2)
return memo[n]


4. Мемоїзація також є "вбудована" в сам Python:
from functools import lru_cache

@lru_cache(maxsize=None)
def fib(n: int) -> int:
if n < 2:
return n
return fib(n - 1) + fib(n - 2)


5. Замість рекурсії - можна вирішити задачу з циклом:
def fib(n: int) -> int:
if n == 0:
return n
last: int = 0
next: int = 1
for _ in range(1, n):
last, next = next, last + next
return next


P.S. Можна ще обчислити за допомогою генераторів, але цей спосіб розберемо в наступних нотатках.
👍35❤‍🔥41🥴1
Знайти співробітників з найбільшою зарплатнею

#python #interview #coding

Всім привіт.
Сьогодні я прийшов до вас із задачею. Цю задачу можна вирішити для тренування, а можна навіть дати на співбесіді. Бо задача вкрай нескладна та можна швидко отримати рішення. Відповідь покаже рівень знання мови програмування.

Задача


"Уявімо, що ви працюєте в HR департаменті великої компанії. Вам прилетіла задача написати новий ендпоінт, який буде повертати всіх співробітників, що мають ЗП більше, ніж $100,000 на рік. Поверніть результат у вигляді набору з двох елементів - імені працівника та його зарплати".

Вхідні дані - це map такого вигляду:

employees = {'Alice': 100000, 'Bob': 99817, 'Carol': 122908, 'Frank': 88123, 'Eve': 93121}


Рішення буде наприклад таким:

top_earners = []  
for key, val in employees.items():
    if val >= 100000:
        top_earners.append((key,val))
print(top_earners)


Але існує трохи більш елегантне рішення, що показує можливості мови Python:

top_earners = [(k, v) for k, v in employees.items() if v >= 100000]
print(top_earners)


Або навіть:

top_earners = list(filter(lambda x: x[1] >= 100000, employees.items()))
print(top_earners)


Як бачите, на кожну проблему може бути декілька варіантів рішень. Але не забувайте PEP20 - "There should be one-- and preferably only one --obvious way to do it."

А як буде виглядати рішення на вашій улюбленій мові програмування?
👍193🔥2