Негативное тестирование в API: методы и примеры кода для обеспечения надежности и безопасности

Негативное тестирование API – это процесс тестирования API, в ходе которого намеренно предоставляются неверные или неожиданные входные данные, чтобы проверить, как API обрабатывает такие сценарии. Этот тип тестирования имеет решающее значение для выявления и устранения потенциальных уязвимостей, проблем с обработкой ошибок и обеспечения общей надежности API.

Вот несколько методов проведения негативного тестирования API вместе с примерами кода:

  1. Неверное тестирование входных данных:

    • Отправлять недопустимые типы данных. Например, если API ожидает целое число, вместо этого отправьте строку.
    • Отправлять пустые или нулевые значения: передавать пустые или нулевые значения там, где ожидаются данные.
    • Отправка данных, превышающих максимальные ограничения: предоставление данных, длина или размер которых превышает допустимую.

    Пример (с использованием Python и библиотеки запросов):

    import requests
    
    # Invalid data type
    payload = {"age": "twenty"}
    response = requests.post("https://api.example.com/users", json=payload)
    print(response.status_code)  # Check the response status code
    
    # Empty/null values
    payload = {"name": ""}
    response = requests.post("https://api.example.com/users", json=payload)
    print(response.status_code)
    
    # Exceeding maximum limit
    payload = {"description": "Lorem ipsum" * 1000}
    response = requests.post("https://api.example.com/posts", json=payload)
    print(response.status_code)
  2. Тестирование обработки ошибок:

    • Проверка ответов на ошибки. Отправляйте запросы, которые, как известно, вызывают ошибки, и проверяйте возвращаемые коды ошибок и сообщения.
    • Проверка обработки исключений: намеренно вызывайте исключения или ошибки в API и проверяйте механизм обработки ошибок.

    Пример (с использованием Python и библиотеки запросов):

    import requests
    
    # Test for error response
    response = requests.get("https://api.example.com/users/99999")
    print(response.status_code)  # Check the response status code
    
    # Test for exception handling
    response = requests.get("https://api.example.com/invalid-endpoint")
    print(response.status_code)
  3. Тестирование безопасности:

    • Атаки с внедрением: попытайтесь внедрить SQL, XML или другие формы атак с внедрением, чтобы обеспечить безопасность API.
    • Тестирование межсайтового скриптинга (XSS): проверьте, уязвим ли API к XSS-атакам, путем внедрения вредоносных скриптов.

    Пример (с использованием Python и библиотеки запросов):

    import requests
    
    # SQL Injection
    payload = {"username": "' OR '1'='1'"}
    response = requests.post("https://api.example.com/login", data=payload)
    print(response.status_code)  # Check the response status code
    
    # Cross-site scripting (XSS)
    payload = "<script>alert('XSS attack');</script>"
    response = requests.post("https://api.example.com/comments", data=payload)
    print(response.status_code)

Выполняя отрицательное тестирование с использованием этих методов, вы можете обнаружить потенциальные уязвимости, улучшить обработку ошибок и повысить общую безопасность и стабильность вашего API.