Что такое веб-приложение с точки зрения тестирования?

Ответ

Веб-приложение — это клиент-серверное приложение, доступное через браузер, где пользовательский интерфейс (frontend) работает в браузере, а бизнес-логика и данные обрабатываются на удаленном сервере (backend).

С точки зрения тестирования это определяет несколько ключевых областей проверки:

1. Frontend (Клиентская часть):

  • Кросс-браузерность и кросс-платформенность: Корректность работы в разных браузерах (Chrome, Firefox, Safari) и на разных устройствах.
  • Юзабилити (UI/UX): Удобство интерфейса, доступность.
  • Функциональность на стороне клиента: Работа форм, валидация, динамическое обновление контента (JavaScript).

2. Backend (Серверная часть):

  • Функциональность API: Корректность обработки запросов, бизнес-логика.
  • Интеграция с БД: Сохранение, извлечение и манипуляция данными.
  • Интеграция со сторонними сервисами: Платежные шлюзы, email-сервисы и т.д.

3. Сквозные аспекты:

  • Безопасность: Защита от OWASP Top 10 (SQL-инъекции, XSS, CSRF, небезопасная десериализация).
  • Производительность: Время загрузки страниц, отклик API под нагрузкой.
  • Надежность: Доступность приложения, обработка ошибок.

Пример простого веб-приложения на Flask:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/api/items', methods=['POST'])
def create_item():
    data = request.get_json()
    # Бизнес-логика и сохранение в БД
    return jsonify({'id': 1, 'name': data['name']}), 201

if __name__ == '__main__':
    app.run(debug=True)

Тестирование такого приложения включает проверку API-эндпоинта (/api/items), валидацию входных данных, коды ответов и интеграцию с базой данных.

Ответ 18+ 🔞

О, веб-приложение, говоришь? Ну это ж классика, блядь! Представь себе: ты сидишь в браузере, такой весь из себя, а где-то на другом конце света сервер, как загнанная лошадь, ебёт свои процессоры, чтобы тебе картинку показать. Вот это и есть веб-приложение, ёпта. Клиент тут, сервер там, а между ними — интернет, полный неожиданностей.

И вот с точки зрения тестирования, тут, сука, просто овердохуища работы. Надо всё проверить, чтобы не вышло как в том анекдоте: «работает у меня, а у тебя — хер знает почему».

Первое — это фронтенд, то, что у пользователя перед глазами.

  • Кросс-браузерность. Это, блядь, отдельная песня. В Хроме всё летает, а в каком-нибудь старом Сафари — разъехалось всё, как дерьмо по тазику. Надо проверить на всех этих мартышлюшках-браузерах и на телефонах разных. Удивление пиздец, когда на айфоне кнопка размером с просяное зерно, а ты её ткнуть должен.
  • Юзабилити. Ну тут всё просто: если пользователь не может за три клика найти, куда деньги отдать — интерфейс говно, блядь. Или шрифт такой мелкий, что глаза ебёт.
  • Функциональность на клиенте. Вот эти все формы, которые должны «приятно» валидировать твой емаил, пока ты его вводишь, или динамические штуки на JavaScript. Главное, чтобы не зависло всё, когда ты что-то делаешь.

Второе — бэкенд, тёмная сторона силы.

  • API. Вот тут, сука, вся магия. Ты шлёшь запрос, а он тебе должен правильный ответ прислать, а не «500 Internal Server Error, пошёл на хуй». Бизнес-логика должна работать, а не гонять воздух.
  • База данных. Это святое, блядь. Данные должны сохраняться, а не теряться в небытии, как твои носки в стирке. И извлекаться должны правильно, а не вперемешку с чужими заказами.
  • Сторонние сервисы. Платёжки, почта — вот эта вся хуйня. Надо, чтобы когда ты платишь, деньги уходили, а не зависали в каком-то промежуточном аду. Доверия к этим сервисам — ноль ебать, поэтому их надо тестировать вдвойне.

Третье — это сквозные вещи, от которых волосы дыбом встают.

  • Безопасность. О, это моя любимая тема. SQL-инъекции, XSS, CSRF... Короче, OWASP Top 10, блядь. Надо проверить, что какой-нибудь школьник не сможет через форму логина вытащить всю базу паролей, написав ' OR '1'='1. Или не вставит скрипт, который будет всех пользователей на порносайты редиректить. Пизда с ушами получится, если это пропустить.
  • Производительность. Страница должна грузиться, а не делать вид, что она — интерактивная иконка песочных часов. API должен выдерживать нагрузку, а не падать, когда больше пяти человек одновременно зашли. Иначе — накрылся медным тазом твой сервис.
  • Надежность. Приложение должно быть доступно, а не «на технических работах». И ошибки должны обрабатываться красиво, а не вываливать пользователю стэк-трейс на пол-экрана.

Вот, смотри, простейший пример на Flask, чтоб было понятно, о чём речь:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/api/items', methods=['POST'])
def create_item():
    data = request.get_json()
    # Бизнес-логика и сохранение в БД
    return jsonify({'id': 1, 'name': data['name']}), 201

if __name__ == '__main__':
    app.run(debug=True)

И вот этот кусочек кода, блядь, надо тестировать со всех сторон.

  • Эндпоинт /api/items: Шлёшь POST-запрос — он должен создать штуку и вернуть её с id. А если шлёшь GET-запрос — должен сказать «405 Method Not Allowed», а не упасть с криком.
  • Валидация: А что, если в data['name'] прислать не строку, а, блядь, null или число? Или воооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо