Хочешь уверенно проходить IT-интервью?

Мы понимаем, как сложно подготовиться: стресс, алгоритмы, вопросы, от которых голова идёт кругом. Но с AI тренажёром всё гораздо проще.
💡 Почему Т1 тренажёр — это мастхэв?
- Получишь настоящую обратную связь: где затык, что подтянуть и как стать лучше
- Научишься не только решать задачи, но и объяснять своё решение так, чтобы интервьюер сказал: "Вау!".
- Освоишь все этапы собеседования, от вопросов по алгоритмам до диалога о твоих целях.
Зачем листать миллион туториалов? Просто зайди в Т1 тренажёр, потренируйся и уверенно удиви интервьюеров. Мы не обещаем лёгкой прогулки, но обещаем, что будешь готов!
Реклама. ООО «Смарт Гико», ИНН 7743264341. Erid 2VtzqwP8vqy
План REST-теста
Чтобы написать хороший REST-тест нужно сделать следующее:
- сгенерировать данные;
- положить их в базу данных;
- отправить REST-запросы;
- сверить результаты с ожидаемыми;
- сгенерировать отчет по результатам.
1. Создание тестовых данных
Можно сгенерить рандомные данные или взять их из файла csv. Например, для создания нового пользователя нужно заполнить поле ФИО, дату рождения или возраст, почту и пароль (почта будет служить логином):
import random
import string
import datetime
# генерация случайного числа
age1 = random.randrange(15))
# генерация числа случайного в промежутке от 1 до 100 с шагом 3
age2 = random.randrange(0, 101, 3))
# генерация числа с плавающей точкой в промежутке от 5.2 до 7.9
print(random.uniform(5.2, 7.9))
# генерация строки из 10 случайных символов
letters = string.ascii_letters
password = ''.join(random.choice(letters) for i in range(10))
# выбор случайного значения из list
name = random.choice(['Oliver', 'William', 'James'])
mail = name+'@'+random.choice(['mail.ru', 'gmail.com', 'ya.ru'])
# генерация случайной даты между двумя датами
start_date = datetime.date(1920, 1, 1)
end_date = datetime.date(2011, 2, 1)
time_between_dates = end_date - start_date
days_between_dates = time_between_dates.days
random_number_of_days = random.randrange(days_between_dates)
birthday = start_date + datetime.timedelta(days=random_number_of_days)
Те же самые данные можно получить из заранее подготовленного файла в формате csv:
import csv
with open('user.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
for row in csv_reader:
age = row['age']
# и так далее...
name = row['name’]
2. Добавление тестовых данных в базу
Информацию можно добавить в базу данных, что будет быстрее использования REST-запросов: Python умеет работать как реляционными, так и нереляционными СУБД. Рассмотрим отрывок кода, в котором происходит подключение к БД и добавление нового пользователя. В примере используется PostgreSQL, потому что это один из наиболее распространенных вариантов.
import psycopg2
import logging
# аргументы для подключения к БД
DB_ARGS = "dbname=test user=postgres password=test host=localhost port=5432"
# функция подключение к БД
def conDB():
try:
conn = psycopg2.connect(DB_ARGS)
except:
logging.error("Unable to connect to the database.")
return None
cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
return cur
# функция добавления пользователя
def insertUser(cur, name, age, mail, password):
cur.execute("INSERT INTO person(name, age, mail, password) VALUES(%s, %s, %s, %s)", (name, age, mail, password))
*Примечание: код будет работать, если локально поднята БД test
, и в ней есть таблица user
с колонками name
, age
, mail
, pass
.
3. Первые REST-запросы
Библиотек для работы с с REST-запросами существует великое множество. Мне больше всего нравятся aiohttp и requests. Для написания тестов удобнее requests. С помощью POST-запроса создадим нового пользователя и после этого GET-запросом проверим, что он действительно был добавлен.
import requests
# тело запроса для создания нового пользователя
user = {"name": "Fred”, "age": 25,"mail":"fr@mal.com", "password": "134513"}
r = requests.post("http://localhost/users/", data=user)
# напечатать код запроса
print(r.status_code)
# GET запрос на получение пользователя по id
url = "http://localhost/users/” + str(r.json()['id'])
r = requests.get("http://localhost/users/”, data=user)
print(r.text)
*Примечание: код будет работать, если локально поднят сервис, принимающий запросы POST и GET на создание пользователя и получение информации о нем.
4. Использование библиотеки PyTest
Приведенный выше код еще не является полноценным тестом. Если оставить его в таком виде, то будет сложно поддерживать. Для систематизации, а также для улучшения качества можно использовать библиотеку pyTest.
Разделим предыдущий код на 2 полноценных теста: создание пользователя и получение информации о нем по id.
import pytest
import requests
import json
# тест на создание пользователя и проверку успешного создания
def test create_user():
user = {"name": "Fred”, "age": 25, "mail":"fr@mal.com", "password": "134513"}
url = "http://localhost/users/”
r = requests.post(url, data=user)
try:
r.raise_for_status()
except requests.exceptions.HTTPError as e:
print('ERROR: %s' % e)
assert r.text == "Ok"
# тест на получение пользователя по id
def test_get_user_by_id():
example_user = json.dumps({"name": "Ron”, "age": 39, "mail": "magicRon@mal.com", "password": "123"})
url = "http://localhost/users/1”
r = requests.get(url)
try:
r.raise_for_status()
except requests.exceptions.HTTPError as e:
print('ERROR: %s' % e)
user = json.loads(r.data)
assert example_user == user
*Примечание: код будет работать, если локально поднят сервис, принимающий запросы POST и GET на создание пользователя и получение информации о нем.
В втором тесте на получение пользователя был использован стандартный модуль json. Он значительно упрощает работу с JSON-объектами, позволяя не задумываться над сериализацией и десериализацией, обращением по ключу и поиске значения. Подробнее почитать об этом можно, например, здесь.
Выводы
Плюсы Python перевешивают минусы, особенно в начале развития проекта или для небольших продуктов. Сложно представить более универсальный инструмент, которым столь легко начать пользоваться. И конечно, всегда есть куда расти, всегда будут новые библиотеки, которые помогут улучшит продукт. Помните главное: лучший инструмент – тот, которым умеешь пользоваться.
Хочу освоить алгоритмы и структуры данных, но сложно разобраться самостоятельно. Что делать?
Алгоритмы и структуры данных действительно непростая тема для самостоятельного изучения: не у кого спросить и что-то уточнить. Поэтому мы запустили курс «Алгоритмы и структуры данных», на котором в формате еженедельных вебинаров вы:
- изучите сленг, на котором говорят все разработчики независимо от языка программирования: язык алгоритмов и структур данных;
- научитесь применять алгоритмы и структуры данных при разработке программ;
- подготовитесь к техническому собеседованию и продвинутой разработке.
Курс подходит как junior, так и middle-разработчикам.
Комментарии