Ответ
В Python есть несколько встроенных типов данных:
- Числовые:
int(целые числа, например42)float(числа с плавающей точкой, например3.14)complex(комплексные числа, например1+2j)
- Последовательности:
str(строки, например"hello")list(изменяемые списки, например[1, 2, 3])tuple(неизменяемые кортежи, например(1, 2, 3))
- Множества:
set(изменяемое множество, например{1, 2, 3})frozenset(неизменяемое множество)
- Отображения:
dict(словари, например{"key": "value"})
- Булевы:
bool(TrueилиFalse)
- Бинарные:
bytes(напримерb"hello")bytearraymemoryview
Почему это важно для тестирования? Понимание типов данных критично для валидации ответов API, проверки граничных значений и написания корректных проверок (assert). Например, при тестировании API важно убедиться, что поле, описанное в документации как integer, действительно возвращается как int, а не как строка.
Пример проверки типа в тесте:
import requests
def test_api_response_data_types():
response = requests.get("https://api.example.com/users/1")
user_data = response.json()
# Проверяем, что ID — целое число
assert isinstance(user_data['id'], int), f"Expected 'id' to be int, got {type(user_data['id'])}"
# Проверяем, что имя — строка
assert isinstance(user_data['name'], str), f"Expected 'name' to be str, got {type(user_data['name'])}" Ответ 18+ 🔞
А, ну это же классика, ёпта! Сидишь ты такой, пишешь свои тесты, и тут бац — а API тебе вместо числа строку подсовывает. И сидишь потом, чешешь репу: "Какого хуя? В документации же integer!" А оно, блядь, в кавычках прилетело. Вот чтобы такого пиздеца не было, надо эти типы данных в Python знать, как свои пять пальцев.
Смотри, какие там звери водятся, овердохуища просто:
-
Циферки всякие:
int— это наши родные целые числа, типа42. Без всяких там точек и запятых, чистая математика.float— числа с плавающей точкой,3.14там всякое. Выглядит как число, но внутри может быть мелкая пакость в виде погрешности, имей в виду.complex— комплексные числа,1+2j. Честно? В обычном тестировании API встречаешь это чудо реже, чем честного человека в политике. Но знать надо.
-
Последовательности, они же коллекции:
str— строки,"hello". Всё, что в кавычках — его царство. Главный источник проблем, когда его там, где не ждали.list— список,[1, 2, 3]. Изменяемый, гибкий, можно что угодно внутрь пихать и обратно вынимать. Как твоя жизнь после пятницы.tuple— кортеж,(1, 2, 3). Неизменяемый, строгий, как твой начальник в понедельник. Создал — и терпи до конца.
-
Множества:
set—{1, 2, 3}. Хранит только уникальные штуки, порядком похуй. Быстрый поиск, но, блядь, не упорядоченный.frozenset— то же самое, но замороженное. Какset, который на морозе голой жопой сел.
-
Отображения:
dict— словарь,{"key": "value"}. Основа основ JSON-ответов. Без него нихуя не сделаешь.
-
Булевы значения:
bool— либоTrue, либоFalse. Казалось бы, проще некуда. Ан нет, получаешь иногда от бэкенда"true"строчкой и волосы дыбом встают. Пиздец.
-
Бинарные типы (
bytes,bytearray) — это уже для картинок, файлов и прочей бинарной жести. Когда начинаешь с этим работать, чувствуешь себя хакером из 90-х.
А нахуя это всё тестировщику? Да затем, чувак, чтобы не выглядеть идиотом! Представь: пишешь ты автотест, проверяешь ответ API. В спецификации чётко сказано: поле "age" — integer. А тебе прилетает "age": "25". Строка! Если ты не проверишь isinstance(age, int), то твой тест проглотит эту хуйню, а потом на продакшене всё накроется медным тазом, когда этот "возраст" попробуют отнять от чего-нибудь.
Вот смотри, как это по-пацански делается:
import requests
def test_api_response_data_types():
response = requests.get("https://api.example.com/users/1")
user_data = response.json()
# Проверяем, что ID — целое число, а не какая-нибудь залупа конская в виде строки
assert isinstance(user_data['id'], int), f"Expected 'id' to be int, got {type(user_data['id'])}"
# Проверяем, что имя — строка
assert isinstance(user_data['name'], str), f"Expected 'name' to be str, got {type(user_data['name'])}"
Вот и вся магия. Знаешь типы — предвидишь проблемы. Не знаешь — получаешь ночной вызов на работу, потому что "всё упало". Выбирай сам.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶