Skip to main content
Open on GitHub

如何将标准测试添加到集成中

当为自己创建自定义类或发布到LangChain集成中时,添加标准测试以确保其按预期工作非常重要。本指南将向您展示如何为每种集成类型添加标准测试。

设置

首先,让我们安装2个依赖项:

  • langchain-core 将定义我们想要导入的接口,以定义我们的自定义工具。
  • langchain-tests 将提供我们想要使用的标准测试,以及运行这些测试所需的pytest插件。建议固定到最新版本:
note

因为在langchain-tests的新版本中添加的测试可能会破坏您的CI/CD流水线,我们建议固定langchain-tests的版本以避免意外的更改。

如果您遵循了之前的指南,您应该已经安装了这些依赖项!

poetry add langchain-core
poetry add --group test langchain-tests==<latest_version>
poetry install --with test

添加和配置标准测试

langchain-tests 包中有 2 个命名空间:

  • 单元测试 (langchain_tests.unit_tests): 设计用于隔离测试组件,且不访问外部服务
  • 集成测试 (langchain_tests.integration_tests): 设计用于测试组件与外部服务的交互(特别是组件设计用于交互的外部服务)。

两种类型的测试都实现为pytest 基于类的测试套件

通过为每种类型的标准测试子类化基类(见下文),您可以获得该类型的所有标准测试,并且可以覆盖测试套件用于配置测试的属性。

为了以与本指南相同的方式运行测试,我们建议在两个测试子目录下的测试文件中子类化这些类:

  • tests/unit_tests 用于单元测试
  • tests/integration_tests 用于集成测试

实施标准测试

在以下标签中,我们展示了如何为每种组件类型实现标准测试:

要为聊天模型配置标准测试,我们继承ChatModelUnitTestsChatModelIntegrationTests。在每个子类中,我们重写以下@property方法,以指定要测试的聊天模型及其配置:

属性描述
chat_model_class用于测试的聊天模型的类
chat_model_params传递给聊天的参数
模型的构造函数

此外,聊天模型的标准测试测试了一系列行为,从最基本的要求(生成对查询的响应)到可选功能,如多模态支持和工具调用。为了使测试运行成功:

  1. 如果某个特性旨在被模型支持,它应该通过;
  2. 如果某个特性不打算被模型支持,应该跳过它。

“可选”功能的测试通过一组可以在测试模型子类上重写的属性来控制。

你可以在API参考中查看所有可配置功能的完整列表,包括 单元测试集成测试

例如,要为图像输入启用集成测试,我们可以实现

@property
def supports_image_inputs(self) -> bool:
return True

在集成测试类上。

note

有关运行哪些测试、如何跳过每个测试以及每个测试的故障排除提示的详细信息可以在API参考中找到。详情请见:

单元测试示例:

tests/unit_tests/test_chat_models.py
"""Test chat model integration."""

from typing import Type

from langchain_parrot_link.chat_models import ChatParrotLink
from langchain_tests.unit_tests import ChatModelUnitTests


class TestChatParrotLinkUnit(ChatModelUnitTests):
@property
def chat_model_class(self) -> Type[ChatParrotLink]:
return ChatParrotLink

@property
def chat_model_params(self) -> dict:
# These should be parameters used to initialize your integration for testing
return {
"model": "bird-brain-001",
"temperature": 0,
"parrot_buffer_length": 50,
}

集成测试示例:

tests/integration_tests/test_chat_models.py
"""Test ChatParrotLink chat model."""

from typing import Type

from langchain_parrot_link.chat_models import ChatParrotLink
from langchain_tests.integration_tests import ChatModelIntegrationTests


class TestChatParrotLinkIntegration(ChatModelIntegrationTests):
@property
def chat_model_class(self) -> Type[ChatParrotLink]:
return ChatParrotLink

@property
def chat_model_params(self) -> dict:
# These should be parameters used to initialize your integration for testing
return {
"model": "bird-brain-001",
"temperature": 0,
"parrot_buffer_length": 50,
}

运行测试

您可以从项目根目录运行以下命令来执行这些操作

# run unit tests without network access
poetry run pytest --disable-socket --allow-unix-socket --asyncio-mode=auto tests/unit_tests

# run integration tests
poetry run pytest --asyncio-mode=auto tests/integration_tests

测试套件信息和故障排除

有关可用的标准测试套件的完整列表,以及包含哪些测试和如何解决常见问题的信息,请参阅标准测试API参考

您可以在该API参考中列出的各个测试套件下查看故障排除指南。例如, 这里是ChatModelIntegrationTests.test_usage_metadata的指南


这个页面有帮助吗?