ChatBot 测试初步:编辑距离

1 天前   出处: Medium  作/译者:adi adrian / 溜的一比

聊天机器人越来越受欢迎,为用户提供即时响应、个性化体验和高效服务。然而,和任何软件一样,确保聊天机器人提供准确且相关的答案是至关重要的。假设你有一个问题列表和预期答案——如何自动化测试过程?更进一步,如何生成一份不仅告诉你聊天机器人是否正确回答,还解释为什么答案可能不完美的报告呢?

在本文中,我将逐步介绍如何使用 Python 为聊天机器人设置自动化测试系统。读完这篇指南后,你将学会如何批量测试聊天机器人,比较其响应与预期答案,并生成一份包含相似度评分和每个评分原因的全面 Excel 报告。准备好了吗?让我们开始吧!

为什么要自动化聊天机器人测试?

在我们深入代码之前,先快速讨论一下为什么要自动化聊天机器人测试:

  1. 效率:手动测试每个聊天机器人响应是非常繁琐的,尤其是随着测试用例数量的增加。自动化能大幅加快这一过程。
  2. 一致性:自动化测试每次都以相同的方式运行,减少了人为错误的风险。
  3. 有见地的报告:自动化测试可以生成详细的报告,不仅能指出聊天机器人的表现,还能解释为什么某些响应需要改进。

设置您的 Python 环境

首先,让我们设置环境。我们需要 Python 以及一些关键的库:

  • pytest​:用于运行测试。
  • requests​:用于向聊天机器人发送 HTTP 请求。
  • pandas​:用于处理测试用例并生成 Excel 报告。
  • openpyxl​:用于写入 Excel 文件。
  • fuzzywuzzy​:用于比较文本相似性。

你可以使用 pip 安装这些库:

pip install pytest requests pandas openpyxl fuzzywuzzy

项目结构

项目的结构如下:

/chatbot_test
|-- tests
| |-- test_chatbot.py
|-- test_cases.csv
|-- config.py
|-- requirements.txt
|-- pytest.ini
|-- results
| |-- test_results.xlsx

1. 配置

config.py​​ 中定义聊天机器人的端点:

config.py

CHATBOT_ENDPOINT = "http://your-chatbot-endpoint/api"

2. 测试用例 CSV 文件

创建一个 CSV 文件(test_cases.csv​)来存储测试用例:

question,expected_answer
Hi,Hello! How can I help you today?
What is the weather today?,The weather today is sunny with a high of 25 degrees.
Tell me a joke.,Why did the chicken cross the road? To get to the other side!
Who is the president of the United States?,The current president of the United States is Joe Biden.

3. 自动化核心代码:test_chatbot.py

这是自动化的核心部分。让我们一步步解析代码:

import pytest
import requests
import pandas as pd
from config import CHATBOT_ENDPOINT
from fuzzywuzzy import fuzz

发送消息给聊天机器人并获取响应

def send_message_to_chatbot(message):
response = requests.post(CHATBOT_ENDPOINT, json={"message": message})
return response.json()

从 CSV 文件中读取测试用例

def read_test_cases(file_path):
return pd.read_csv(file_path)

将测试结果写入 Excel 文件

def write_results_to_excel(results, file_path):
df = pd.DataFrame(results)
df.to_excel(file_path, index=False)

基于相似度生成原因

def generate_similarity_reason(similarity, expected, actual):
if similarity == 100:
return "完全匹配"
elif similarity >= 80:
return "相似度高"
else:
return "相似度低:预期答案与实际答案差异较大。"

读取测试用例

test_cases = read_test_cases('test_cases.csv')

存储测试结果

results = []

@pytest.mark.parametrize("index, test_case", test_cases.iterrows())
def test_chatbot_responses(index, test_case):
question = test_case['question']
expected_answer = test_case['expected_answer']
response = send_message_to_chatbot(question)
actual_answer = response.get("message", "")

#计算相似度  
similarity = fuzz.ratio(expected_answer, actual_answer)

#生成相似度原因  
reason = generate_similarity_reason(similarity, expected_answer, actual_answer)

#添加结果  
results.append({  
    "问题": question,  
    "预期答案": expected_answer,  
    "实际答案": actual_answer,  
    "相似度 (%)": similarity,  
    "原因": reason  
})

#检查相似度是否符合标准  
assert similarity > 80, f'预期相似度 > 80%,但实际得到 {similarity}%'

在所有测试结束后将结果写入 Excel

@pytest.hookimpl(tryfirst=True)
def pytest_sessionfinish(session, exitstatus):
write_results_to_excel(results, 'results/test_results.xlsx')

if name == "main":
pytest.main()

代码解析

  • 发送问题send_message_to_chatbot​ 函数将问题发送给聊天机器人并接收响应。
  • 读取测试用例read_test_cases​ 从 CSV 文件中读取测试用例并加载到 DataFrame 中。
  • 计算相似度:我们使用 fuzzywuzzy​ 来比较聊天机器人的响应与预期答案之间的相似度。
  • 生成原因:根据聊天机器人的响应与预期答案的接近程度,我们生成相似度原因。
  • 保存结果:所有测试运行结束后,结果会保存到 Excel 文件中,结构清晰。

4. 运行测试

只需使用 pytest​ 命令运行测试:

pytest

测试结束后,你将在 results/​​ 目录中找到一个新的 test_results.xlsx​​ 文件,内容包括以下几项:

结论

就这样!一个自动化测试设置不仅可以检查聊天机器人的答案是否正确,还提供了对特定答案是否匹配预期的深入分析。

自动化测试过程节省了时间,减少了人为错误,并提供了详细的反馈,帮助你不断改进聊天机器人。通过 Python、pandas 和一些 fuzzywuzzy​ 魔法,你有了一个强大的工具集,确保你的聊天机器人始终能够提供正确的答案。

祝你编码愉快,希望你的聊天机器人总是能答对问题!


声明:本文为本站编辑转载,文章版权归原作者所有。文章内容为作者个人观点,本站只提供转载参考(依行业惯例严格标明出处和作译者),目的在于传递更多专业信息,普惠测试相关从业者,开源分享,推动行业交流和进步。 如涉及作品内容、版权和其它问题,请原作者及时与本站联系(QQ:1017718740),我们将第一时间进行处理。本站拥有对此声明的最终解释权!欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,与我们的编辑和其他窝友交流。
120° /1206 人阅读/0 条评论 发表评论

登录 后发表评论