Преобразование ручных тестовых примеров в инструмент автоматической генерации тестов на основе LangChain.
Преобразование ручных тестовых примеров в инструмент автоматической генерации тестов на основе LangChain.

Автоматизированные тестовые сценарии интерфейса — обычная проблема. До появления искусственного интеллекта существовало множество решений генерации. Например, как показано ниже, автоматизированные тестовые сценарии интерфейса генерируются с помощью har:

Однако описанный выше метод генерации по-прежнему имеет некоторые недостатки. Например, хотя har сам по себе может выражать определенную информацию об интерфейсе и бизнес-информацию, его нельзя использовать для выражения всех сценариев приложения и сценариев использования. Большинство сценариев приложений и сценариев использования описываются естественным языком. Анализ естественного языка — это то, что хорошо умеют большие языковые модели.

Практические упражнения

Описание требований

Ниже приведены 3 тестовых примера интерфейса:

тестовый модуль

название теста

Этапы тестирования

ожидаемые результаты

Функция интерфейса

Обычный запрос

Отправьте обычный GET-запрос

Код состояния ответа — 200, и возвращается IP-адрес запрашивающей стороны.

Функция интерфейса

Недопустимый метод запроса

Отправьте запрос, отличный от GET, например POST или PUT.

Код состояния ответа: 405.

Функция интерфейса

Неверный путь запроса

Отправить путь, который не существует

Код статуса ответа: 404.

Ниже приведен har-файл для получения IP-интерфейса:

  • Файл интерфейса Har (при необходимости вы можете оставить сообщение, чтобы получить его)
Принцип реализации

Далее соответствующие тестовые примеры будут автоматически сгенерированы с помощью этих двух файлов данных.

Создавайте тестовые сценарии на основе функциональных вариантов использования.

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

Информация о подготовленном шаблоне слова подсказки следующая:

Язык кода:python
кодКоличество запусков:0
копировать
template = """
Вы инженер по автоматизированному тестированию, разбираетесь в стеке технологий. Python pytest запросы Библиотека
Ниже приводится конкретная информация об этом интерфейсе:

{context}

Question: {input}"""

Сценарий автоматического тестирования, созданный с помощью функциональных тестовых примеров, выглядит следующим образом:

Язык кода:python
кодКоличество запусков:0
копировать
#1. Test case: Обычный запрос
import pytest
import requests

def test_normal_request():
    url = 'http://example.com/normal_request'
    response = requests.get(url)
    assert response.status_code == 200
    assert response.json()['ip_address'] == 'requester_ip'
#2. Test case: Недопустимый метод запроса
import pytest
import requests
def test_invalid_request_method():
    url = 'http://example.com/invalid_request_method'
    response = requests.post(url)
    assert response.status_code == 405
# 3. Test case: Неверный путь запроса
import pytest
import requests
def test_invalid_request_path():
    url = 'http://example.com/invalid_request_path'
    response = requests.get(url)
    assert response.status_code == 404

Конечно, в ходе этого процесса можно ясно обнаружить, что автоматически сгенерированные варианты использования не содержат никакой информации об интерфейсе. Причина в том, что в предоставляемых нами данных нет информации об интерфейсе.

Заполнение данных интерфейса

Далее информация данных интерфейса в файле har будет прочитана и объединена со сценарием.

Шаблон слова-подсказки выглядит следующим образом:

Язык кода:python
кодКоличество запусков:0
копировать
шаблон = """
    Вы инженер по автоматизации тестирования,ты очень хорошо знакомзапросы Библиотека
    {context}
    Question: 
    Пожалуйста, извлеките информацию из запроса на основе входящей информации интерфейса. ip 、 url 、method、json。
    Ключевое значение — это поле, упомянутое ранее. Если оно не существует, добавлять его не нужно. Если есть, извлеките соответствующее значение.
    Возвращаемый формат должен быть в формате json.
"""

Сгенерированные результаты следующие:

Язык кода:python
кодКоличество запусков:0
копировать
{
  "ip": "182.92.156.22",
  "url": "https://httpbin.ceshiren.com/ip",
  "method": "GET"
}
Полный код

После объединения описанного выше процесса полная версия кода выглядит следующим образом.

Язык кода:python
кодКоличество запусков:0
копировать
из langchain_community.chat_models.openai импортировать ChatOpenAI
из langchain_community.document_loaders.text импортировать TextLoader
из langchain_core.output_parsers импортировать JsonOutputParser, StrOutputParser
из langchain_core.prompts импорт PromptTemplate
из langchain_core.runnables импортировать RunnablePassthrough
из utils.langchain_debug импортировать langchain_debug

langchain_debug()
llm = ЧатOpenAI()


защита get_by_filename(имя файла):
    информация = TextLoader(f'./data/{filename}')
    вернуть информацию.load()


защита get_case_data(_):
    шаблон = """
        Вы инженер по автоматизации тестирования,ты очень хорошо знакомзапросы Библиотека
        {context}
        Question: {input}
        Пожалуйста, извлеките информацию из запроса на основе входящей информации интерфейса. ip 、 url 、method、json。
        Ключевое значение — это поле, упомянутое ранее. Если оно не существует, добавлять его не нужно. Если есть, извлеките соответствующее значение.
        Возвращаемый формат должен быть в формате json.
        """
    prompt = PromptTemplate.from_template(template=template, )
    data_chain = (
            RunnablePassthrough.assign(context=lambda x: get_by_filename("ip.har"), )
            | prompt
            | llm
            | JsonOutputParser()
    )
    return data_chain


def get_case():
    """
    Генерируйте тестовые данные из больших моделей.
    :return:
    """
    template = """
        Вы инженер по автоматизированному тестированию, разбираетесь в стеке технологий. Python pytest запросы Библиотека
        Ниже приводится конкретная информация об этом интерфейсе: ваш

        {context}

        Информация о запрошенном параметре будет введена в словарь, а входное содержимое
        {req}

        Question: {input}"""
    # Подсказка шаблона, вывод json форматировать ответ
    prompt = PromptTemplate.from_template(
        template=template, )
    chain = (
            RunnablePassthrough.
            assign(context=lambda x: get_by_filename("Получить ip testcase.md"),
                   req=get_case_data)
            | prompt
            | llm
            | StrOutputParser()
    )

    input_template = """
    Согласно Этапам каждого тестового примера тестирование, генерация соответствующей информации о тестовых данных,
    Для каждого тестового примера требуется соответствующая отдельная функция pytest.
    """
    print(chain.invoke({"input": input_template}))


if __name__ == '__main__':
    get_case()

Подвести итог

  1. Освоить принципы автоматизированной генерации тестовых сценариев интерфейса.
  2. Узнайте, как создавать сценарии и данные тестирования автоматизации интерфейса с помощью больших языковых моделей.
  3. Освойте метод создания полных автоматизированных тестовых примеров интерфейса с помощью LangChain.
boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода