目录
- 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模块
对测试用例编写自动化脚本进行测试,其中:
- home.py:对首页进行测试
- New_Conversation.py:对新建会话进行测试
- Conversation.py:对与模型对话进行测试
- Message.py:对查看历史消息进行测试
- Delete_Session.py:对删除会话功能进行测试
- 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 转义、时间戳等方面已做兼容性处理,可适配后端当前返回。