news 2026/9/29 9:43:23

智能聊天助手测试报告

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
智能聊天助手测试报告

目录

      • 1.智能聊天助手项目
      • 2.测试计划
      • 3.测试工具
      • 4.设计测试用例
      • 5.手动测试
        • 5.1 功能测试
          • 5.1.1 新建会话
          • 5.1.2 给模型发送消息
          • 5.1.3 点击指定会话获取会话内容
          • 5.1.4 删除会话
        • 5.2 兼容性测试
          • 5.2.1 浏览器兼容
          • 5.2.2 移动端兼容
      • 6.自动化测试用例设计
        • 6.1 Common模块
        • 6.2 image模块
        • 6.3 Test模块
      • 7.发现的BUG
        • 7.1 兼容异常
      • 8.测试总结

1.智能聊天助手项目

该项目是从零实现AI模型接入的SDK,基于该SDK实现的一款智能聊天助手,主要可以用于与云端模型deepseek-chat,gpt-4o-mini,与本地部署模型deepseek-r1:1.5b进行对话,

2.测试计划

1.根据本项目编写测试用例
2.根据编写的测试用例进行对应的测试
3.编写自动化测试脚本进行自动化测试

3.测试工具

Apifox,pyCharm,selenium,Edge浏览器,Chrome浏览器

4.设计测试用例

本项目主要是用来与大语言模型进行对话,因此测试用例的编写主要侧重于功能测试
测试环境:
操作系统:Windows 11 64位
浏览器:Edge:153.0.4234.32 (正式版本) (64 位),Chrome:版本 152.0.7977.83(正式版本)(64 位)
测试工具:Apifox,Pycharm,selenium
项目首页地址:测试地址
编写测试用例:

5.手动测试

5.1 功能测试

因为本项目是接入不同的大语言模型,因此与模型进行交互首先要和指定的模型建立起会话,所以我们首先来测试新建会话的功能。

5.1.1 新建会话

预期结果:点击新建会话,出现模型选择,其中有三个模型分别是云端接入模型deepseek-chat,gpt-4o-mini和本地部署模型deepseek-r1:1.5b,选择任意模型点击确认会话创建成功。

选择deepseek-chat模型进行创建:预期结果:会话创建成功

选择gpt-4o-mini模型进行创建:预期结果:会话创建成功

选择deepseek-r1:1.5b模型进行创建,预期结果:会话创建成功

5.1.2 给模型发送消息

给deepseek-chat模型发送消息,在对话框中输入你要给模型的消息,按回车或者点击发送按钮进行发送:举例发送“你是什么模型”,预期的结果:用户给模型发送的消息内容展示在右侧并且成功发送,模型一段时间之后进行回复:

给gpt-4o-mini发送消息
预期结果:鼠标光标放入输入框,输入要发送的消息内容,点击发送或者回车,消息发送成功展示在右侧,模型一段时间后进行回复。

给本都部署的deepseek-r1:1.5b模型发送消息
预期结果:鼠标光标放入输入框,输入要发送的消息内容,点击发送或者回车,消息发送成功展示在右侧,模型一段时间后进行回复。

5.1.3 点击指定会话获取会话内容

预期结果:点击任意会话,会显示用户和模型的所有对话上下文内容



5.1.4 删除会话

删除当前会话:
预期结果:在会话列表中找到当前会话,点击右下角"…"出现删除会话,点击之后当前会话删除,会话的所有内容也被删除

5.2 兼容性测试

本次兼容测试的环境为:

Edge浏览器:版本 153.0.4234.32 (正式版本) (64 位)
Chrome浏览器:版本153.0.8010.37(正式版本) (64 位) Android 15 版本

5.2.1 浏览器兼容

在Edge浏览器中打开页面
预期结果:页面能够正常打开,功能能够正常运行






在Chrome浏览器上打开页面
预期结果:功能可以正常运行,页面完整





5.2.2 移动端兼容

在Android 15版本上运行
预期结果:功能能够正常运行,页面布局合理

6.自动化测试用例设计

采用Web自动化方式对本项目进行自动化测试,主要测试项目的界面和功能
设计测试用例

编写Web自动化测试脚本
这里我们自动化测试主要使用的工具是Selenium库以及PyCharm,在Chrome浏览器中进行自动化测试

6.1 Common模块

在这个模块里,主要实现安装驱动,创建驱动对象打开浏览器并访问项目的页面,设计单例,屏幕截图的相关设置。

#Utils.py###用例设计公共的方法importdatetimeimportosfromwebdriver_manager.chromeimportChromeDriverManagerfromselenium.webdriver.chrome.serviceimportServicefromseleniumimportwebdriverclassDriver:driver=""options=""def__init__(self):#创建浏览器驱动对象self.driver=webdriver.Chrome(service=Service(ChromeDriverManager().install()))self.driver.get("http://193.112.29.233:8080/")self.driver.implicitly_wait(3)defScreenShot(self):#截图保存到image目录中的当天日期目录#截图的名称设置为调用的方法名-年-月-日-时-分-秒#创建目录dirname=datetime.datetime.now().strftime("%Y-%m-%d")ifnotos.path.exists("../image/"+dirname):os.mkdir("../image/"+dirname)#设置截图名称并保存filename=datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S")+".png"self.driver.save_screenshot("../image/"+dirname+"/"+filename)#创建单例ChatDriver=Driver()
6.2 image模块

用来保存我们测试时的截图

6.3 Test模块

对测试用例编写自动化脚本进行测试,其中:

  1. home.py:对首页进行测试
  2. New_Conversation.py:对新建会话进行测试
  3. Conversation.py:对与模型对话进行测试
  4. Message.py:对查看历史消息进行测试
  5. Delete_Session.py:对删除会话功能进行测试
  6. Session_List.py:对会话列表进行测试

home.py

fromCommon.UtilsimportChatDriverfromselenium.webdriver.common.byimportByclassHome:driver=""def__init__(self):self.driver=ChatDriver.driver#未有会话defUnSessionPage_Elements(self):#查找页面中的AI聊天助手元素assertself.driver.find_element(By.CSS_SELECTOR,"body > div.app-container > aside > div.sidebar-header > div > span").text=="AI聊天助手"#新建会话按钮self.driver.find_element(By.CSS_SELECTOR,"#btnNewChatTop")self.driver.find_element(By.CSS_SELECTOR,"#btnNewChatWelcome")#暂无会话,点击"新建对话"开始 字样assertself.driver.find_element(By.CSS_SELECTOR,"#sessionList > div").text=='暂无会话,点击"新建对话"开始'ChatDriver.ScreenShot()#已有对话defPage_Elements(self):# 查找页面中的AI聊天助手元素assertself.driver.find_element(By.CSS_SELECTOR,"body > div.app-container > aside > div.sidebar-header > div > span").text=="AI聊天助手"# 新建会话按钮self.driver.find_element(By.CSS_SELECTOR,"#btnNewChatTop")self.driver.find_element(By.CSS_SELECTOR,"#btnNewChatWelcome")#会话列表信息,截图展示# 获取会话总数count=len(self.driver.find_elements(By.CSS_SELECTOR,'#sessionList > div'))ifcount==0:# 无会话,检查查找暂无会话,点击”新建对话“开始assertself.driver.find_element(By.CSS_SELECTOR,"#sessionList > div").text=='暂无会话,点击"新建对话"'else:foriinrange(1,count+1):self.driver.find_element(By.XPATH,f'//*[@id="sessionList"]/div[{i}]/div[{1}]')self.driver.find_element(By.XPATH,f'//*[@id="sessionList"]/div[{i}]/div[2]')self.driver.find_element(By.XPATH,f'//*[@id="sessionList"]/div[{i}]/div[2]/div/span')time.sleep(3)ChatDriver.ScreenShot()

New_Conversation.py

fromCommon.UtilsimportChatDriverfromselenium.webdriver.common.byimportByclassnewChat:driver=""def__init__(self):self.driver=ChatDriver.driver#点击创建对话按钮看是否出现全部可用模型defnew_conversation(self):self.driver.find_element(By.CSS_SELECTOR,"#btnNewChatWelcome").click()self.driver.find_element(By.CSS_SELECTOR,"#modelGrid > label:nth-child(1) ")self.driver.find_element(By.CSS_SELECTOR,"#modelGrid > label:nth-child(2)")self.driver.find_element(By.CSS_SELECTOR,"#modelGrid > label:nth-child(3)")#创建deepseek-chat模型成功defdeepseek_chat_create_success(self):self.driver.find_element(By.CSS_SELECTOR,"#btnCancelModel").click()self.driver.find_element(By.CSS_SELECTOR,"#btnNewChatWelcome").click()self.driver.find_element(By.CSS_SELECTOR,"#modelGrid > label:nth-child(1)").click()self.driver.find_element(By.CSS_SELECTOR,"#btnConfirmModel").click()self.driver.find_element(By.CSS_SELECTOR,"#sessionList > div")self.driver.find_element(By.CSS_SELECTOR,"#chatView > div.chat-input-area > div.input-wrapper")self.driver.find_element(By.CSS_SELECTOR,"#chatModelName")#创建gpt-40-mini模型成功defgptCreateSuccess(self):self.driver.find_element(By.CSS_SELECTOR,"#btnCancelModel").click()self.driver.find_element(By.CSS_SELECTOR,"#btnNewChatWelcome").click()self.driver.find_element(By.CSS_SELECTOR,"#modelGrid > label:nth-child(3)").click()self.driver.find_element(By.CSS_SELECTOR,"#btnConfirmModel").click()self.driver.find_element(By.CSS_SELECTOR,"#sessionList > div")self.driver.find_element(By.CSS_SELECTOR,"#chatView > div.chat-input-area > div.input-wrapper")self.driver.find_element(By.CSS_SELECTOR,"#chatModelName")#创建deepseek-r1:1.5b模型成功defdeepseek_r1CreateSuccess(self):self.driver.find_element(By.CSS_SELECTOR,"#btnCancelModel").click()self.driver.find_element(By.CSS_SELECTOR,"#btnNewChatWelcome").click()self.driver.find_element(By.CSS_SELECTOR,"#modelGrid > label:nth-child(2)").click()self.driver.find_element(By.CSS_SELECTOR,"#btnConfirmModel").click()self.driver.find_element(By.CSS_SELECTOR,"#sessionList > div")self.driver.find_element(By.CSS_SELECTOR,"#chatView > div.chat-input-area > div.input-wrapper")self.driver.find_element(By.CSS_SELECTOR,"#chatModelName")

Conversation.py

importtimefromselenium.webdriver.common.byimportByfromCommon.UtilsimportChatDriverclassConversation:driver=""def__init__(self):self.driver=ChatDriver.driver#新建对话给模型发送消息defsendMessage(self,modelName):ifmodelName=="deepseek-chat":self.driver.find_element(By.CSS_SELECTOR,"#btnNewChatWelcome").click()self.driver.find_element(By.CSS_SELECTOR,"#modelGrid > label:nth-child(1)").click()self.driver.find_element(By.CSS_SELECTOR,"#btnConfirmModel").click()self.driver.find_element(By.CSS_SELECTOR,"#messageInput").send_keys("你是什么模型")self.driver.find_element(By.CSS_SELECTOR,"#btnSend").click()elifmodelName=="gpt-40-mini":self.driver.find_element(By.CSS_SELECTOR,"#btnNewChatWelcome").click()self.driver.find_element(By.CSS_SELECTOR,"#modelGrid > label:nth-child(3)").click()self.driver.find_element(By.CSS_SELECTOR,"#btnConfirmModel").click()self.driver.find_element(By.CSS_SELECTOR,"#messageInput").send_keys("你是什么模型")self.driver.find_element(By.CSS_SELECTOR,"#btnSend").click()elifmodelName=="deepseek-r1":self.driver.find_element(By.CSS_SELECTOR,"#btnNewChatWelcome").click()self.driver.find_element(By.CSS_SELECTOR,"#modelGrid > label:nth-child(2)").click()self.driver.find_element(By.CSS_SELECTOR,"#btnConfirmModel").click()self.driver.find_element(By.CSS_SELECTOR,"#messageInput").send_keys("你是什么模型")self.driver.find_element(By.CSS_SELECTOR,"#btnSend").click()#截图ChatDriver.ScreenShot()#选择指定会话给模型发消息,这里遍历所有会话发送消息defsendMessageBysession(self):session=self.driver.find_elements(By.CSS_SELECTOR,"#sessionList > div")count=len(session)foriinrange(1,count+1):self.driver.find_element(By.XPATH,f'//*[@id="sessionList"]/div[{i}]').click()self.driver.find_element(By.CSS_SELECTOR,"#messageInput").send_keys("我叫张三,你好")self.driver.find_element(By.CSS_SELECTOR,"#btnSend").click()ChatDriver.ScreenShot()time.sleep(3)

Message.py

fromselenium.webdriver.common.byimportByimporttimefromCommon.UtilsimportChatDriverfromTest.New_ConversationimportnewChatfromTest.ConversationimportConversationclassMessage:driver=""def__init__(self):self.driver=ChatDriver.driver#没有会话,新建会话并与模型发送消息,然后点击当前会话查看消息defUnSessionPage_Elements(self):#使用newChat中的方法,创建会话new_Chat=newChat()new_Chat.deepseek_r1CreateSuccess()#发送消息Con=Conversation()Con.sendMessage("deepseek-r1")#点击当前会话并截图self.driver.find_element(By.CSS_SELECTOR,"#sessionList > div").click()ChatDriver.ScreenShot()#有会话,遍历会话列表,截图查看历史消息defConversationPage_Elements(self):session=self.driver.find_elements(By.CSS_SELECTOR,"#sessionList > div")count=len(session)foriinrange(1,count+1):self.driver.find_element(By.XPATH,f'//*[@id="sessionList"]/div[{i}]').click()ChatDriver.ScreenShot()

Delete_Session.py

fromselenium.webdriver.common.byimportByimporttimefromCommon.UtilsimportChatDriverclassdelete_session:def__init__(self):self.driver=ChatDriver.driverdefdeletesession(self):#获取会话总数count=len(self.driver.find_elements(By.CSS_SELECTOR,'#sessionList > div'))ifcount==0:#无会话,检查查找暂无会话,点击”新建对话“开始assertself.driver.find_element(By.CSS_SELECTOR,"#sessionList > div").text=='暂无会话,点击"新建对话"'else:foriinrange(1,count+1):self.driver.find_element(By.XPATH,f'//*[@id="sessionList"]/div[{i}]/div[2]/div/button').click()self.driver.find_element(By.CSS_SELECTOR,"#menuDelete").click()ChatDriver.ScreenShot()

Session_List.py

fromselenium.webdriver.common.byimportByimporttimefromCommon.UtilsimportChatDriverclassSessionList:def__init__(self):self.driver=ChatDriver.driver#将会话列表这个测试用例的步骤结合一下defUnSessionPage(self):count=len(self.driver.find_elements(By.CSS_SELECTOR,'#sessionList > div'))ifcount==0:# 无会话,检查查找暂无会话,点击”新建对话“开始assertself.driver.find_element(By.CSS_SELECTOR,"#sessionList > div").text=='暂无会话,点击"新建对话"'else:foriinrange(1,count+1):self.driver.find_element(By.XPATH,f'//*[@id="sessionList"]/div[{i}]/div[{1}]')self.driver.find_element(By.XPATH,f'//*[@id="sessionList"]/div[{i}]/div[2]')self.driver.find_element(By.XPATH,f'//*[@id="sessionList"]/div[{i}]/div[2]/div/span')time.sleep(3)ChatDriver.ScreenShot()

7.发现的BUG

7.1 兼容异常

移动端:在Android 15版本下,出现了以下异常:

1.打开页面之后没有会话列表

2.创建会话之后,只能对当前会话进行交互,且无法删除

8.测试总结

1.系统核心功能(会话管理、消息发送、模型接入、前端交互)整体可用,6 个 HTTP 接口与前端页面均可正常工作。
2.前端页面在响应格式、SSE 转义、时间戳等方面已做兼容性处理,可适配后端当前返回。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/29 9:42:25

ADS过孔阻抗仿真全流程:Via Designer从建模到联合仿真实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/29 9:40:36

学习c语言(第一天)

main函数,被叫做主函数,是程序的入口。有且仅有一个。int 整数 整数类型’;char 字符类型 结束后返回整数。printf 库函数,打印到屏幕上 %d打印整数 %c打印字符 %f打印小数 %s打印字符串关键字:int,if,r…

作者头像 李华
网站建设 2026/9/29 9:35:40

从阻塞到epoll:Linux非阻塞IO多路复用与高并发实战

1. 先把概念捋直:阻塞与非阻塞到底在说什么做 Linux 网络编程的人,几乎都踩过同一个坑:服务跑着跑着连接数一上来,CPU 占用不高,但响应时间像坐电梯一样往上蹿,日志里也没报错,就是"慢&quo…

作者头像 李华
网站建设 2026/9/29 9:35:38

JDBC 三大 SQL 执行方法区别与避坑

线上排查问题时,我见过太多次类似的场景:一段跑了大半年的定时任务突然开始报Can not issue data manipulation statements with executeQuery(),值班同学第一反应是数据库出问题了,翻日志翻监控折腾两小时,最后发现是…

作者头像 李华
网站建设 2026/9/29 9:31:46

OTN技术体系详解:ODUk映射、光层设计与排障实战

简介:面向光传输网络工程师、通信专业学生及运维人员的OTN技术体系专题PDF,系统梳理ITU-T从G.872网络架构到G.709接口标准、G.798设备功能模块、G.808/873保护机制等核心标准,并结合标准体系图与分层结构示意,从演进背景到架构细节…

作者头像 李华