浅显的微信谈天网页版【项目测试陈诉】

打印 上一主题 下一主题

主题 823|帖子 823|积分 2469



  

一、项目配景

本系统采用前后端分离架构实现,通过WebSocket协议实现及时通讯功能,结合数据库举行谈天记录存储,并部署于云服务器。
前端包含三大核心页面:登录验证页、好友会话列表页、通讯录好友页,构建了根本的即时通讯体验。
系统紧张实现以下功能模块:个人好友列表、好友消息及时收发、谈天记录查询等功能。

当前版本存在以下待优化点:
   

  • 1. 用户体系仅支持预设账号登录(需提前录入数据库校验),未开放自主注册通道;
  • 2. 好友关系采用静态数据模拟,暂未实现动态添加/删除功能;
  • 3. 消息状态提示(如已读/送达)功能尚未完备实现。
  该即时通讯系统可实现根本的笔墨消息交互,支持检察历史谈天记录(按时间倒序展示),虽然功能相对根本,
但已构建起网页端即时通讯的核心框架,满足用户根本的笔墨谈天需求。

二、项目简介

本系统紧张实现以下核心功能:
   

  • 用户登录、
  • 好友消息及时收发、
  • 谈天记录查询。
  登录功能

   用户需通过预设账号登录(账号信息已固化至数据库,暂不开放自主注册);
  

  • 登录成功需点击告诫窗口中确认按钮,然后跳转至好友会话列表页;
  • 登录异常状态下,告诫窗口提示登录失败!
  好友列表页面

   纵向分列好友列表,展示好友昵称,点击对应的好友跳转到对应的会话窗口。
  好友会话页面

   顶部状态栏表现当前对话好友昵称;
消息气泡左右分流(右侧绿色为发送方,左侧白色为接收方);
自动加载最近历史记录(按时间倒序分列);
文本输入框支持即时内容发送(点击发送按钮)

  三、测试工具和情况

处理惩罚器 11th Gen Intel(R) Core(TM) i5-1155G7 @ 2.50GHz 2.50 GHz
机带 RAM: 16.0 GB (15.8 GB 可用)
系统类型: 64 位操作系统, 基于 x64 的处理惩罚器
版本: Windows 11 家庭中文版
操作系统版本: 26100.3194

Chrome欣赏器版本 :133.0.6943.142(正式版本) (64 位)
自动化脚本运行情况:PyCharm 2024.2.1

四、测试操持

测试用例


部分人工手动测试截图

   正常登录:输入预设账号和密码
  


   异常登录:输入未预设账号和密码
  


   正常登录后跳转的页面
  


   正常登录后好友列表页
  

web自动化测试

测试用例


代码框架


配置内容代码文件(Utils.py)

  1. # 导入所需的模块
  2. import datetime  # 用于处理日期和时间
  3. import os  # 用于文件和目录操作
  4. import sys  # 用于获取调用栈信息
  5. # 导入Selenium相关模块
  6. from selenium import webdriver  # Selenium核心模块
  7. from selenium.webdriver.chrome.service import Service  # Chrome浏览器服务
  8. from webdriver_manager.chrome import ChromeDriverManager  # 自动管理ChromeDriver
  9. # 创建浏览器驱动类
  10. class Driver:
  11.     driver = ""  # 类属性,用于保存浏览器驱动实例
  12.    
  13.     def __init__(self):
  14.         """初始化浏览器驱动配置"""
  15.         # 创建Chrome浏览器选项对象(可用于添加扩展、无头模式等配置)
  16.         options = webdriver.ChromeOptions()
  17.         
  18.         # 指定ChromeDriver的路径
  19.         driver_path = "D:/Downloads/chromedriver-win64/chromedriver-win64/chromedriver.exe"
  20.         
  21.         # 创建Chrome浏览器驱动实例
  22.         self.driver = webdriver.Chrome(
  23.             executable_path=driver_path,  # 指定驱动路径
  24.             options=options  # 传入浏览器选项
  25.         )
  26.         
  27.         # 设置隐式等待(作用于整个浏览器生命周期,查找元素时的默认等待时间)
  28.         self.driver.implicitly_wait(2)  # 单位:秒
  29.     def getScreeShot(self):
  30.         """屏幕截图方法"""
  31.         # 生成日期格式的目录名(示例:2023-08-01)
  32.         dirname = datetime.datetime.now().strftime("%Y-%m-%d")
  33.         
  34.         # 拼接截图保存路径(上级目录的images文件夹下)
  35.         screenshot_dir = "../images/" + dirname
  36.         
  37.         # 如果目录不存在则创建
  38.         if not os.path.exists(screenshot_dir):
  39.             os.mkdir(screenshot_dir)
  40.             
  41.         # 生成文件名格式:
  42.         # 调用当前方法的上层方法名 + 时间戳 + 后缀(示例:test_login_2023-08-01-143045.png)
  43.         filename = (
  44.             sys._getframe().f_back.f_code.co_name  # 获取调用该方法的函数名
  45.             + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S")
  46.             + ".png"
  47.         )
  48.         
  49.         # 保存截图到指定路径
  50.         self.driver.save_screenshot(os.path.join(screenshot_dir, filename))
  51. # 创建全局浏览器驱动实例(可被其他模块导入使用)
  52. WeChatDriver = Driver()
复制代码
登录页面代码文件(WeChatLogin.py)

  1. # 测试微信登录界面
  2. # 从selenium库中导入By类,用于定位网页元素
  3. from selenium.webdriver.common.by import By
  4. # 从selenium库中导入expected_conditions模块,用于设置显示等待的条件
  5. from selenium.webdriver.support import expected_conditions as EC
  6. # 从selenium库中导入WebDriverWait类,用于实现显示等待
  7. from selenium.webdriver.support.wait import WebDriverWait
  8. # 从自定义的common.Utils模块中导入WeChatDriver类,用于创建和管理浏览器驱动
  9. from common.Utils import WeChatDriver
  10. class WeChatLogin:
  11.     # 初始化类属性,用于存储登录页面的URL和浏览器驱动对象
  12.     url = ""
  13.     driver = ""
  14.     def __init__(self):
  15.         # 给登录页面的URL赋值,这里是本地的登录页面地址
  16.         self.url = "http://127.0.0.1:8080/login.html"
  17.         # 获取WeChatDriver类中的driver对象,用于操作浏览器
  18.         self.driver = WeChatDriver.driver
  19.         # 打开指定的登录页面
  20.         self.driver.get(self.url)
  21.     # 成功登陆的测试用例
  22.     def LoginSucTest(self):
  23.         # 若连续多次的send_keys则会出现关键词拼接,而不是替换。若要替换需要先clear
  24.         # 找到用户名输入框元素,并清空其中的内容
  25.         self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
  26.         # 找到密码输入框元素,并清空其中的内容
  27.         self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
  28.         # 向用户名输入框中输入正确的用户名 "zhangsan"
  29.         self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
  30.         # 向密码输入框中输入正确的密码 "123"
  31.         self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")
  32.         # 找到登录按钮元素,并点击该按钮进行登录操作
  33.         self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
  34.         # 添加显示等待
  35.         # 创建一个WebDriverWait对象,设置最大等待时间为2秒
  36.         wait = WebDriverWait(self.driver, 2)
  37.         # 等待直到页面上出现弹窗
  38.         wait.until(EC.alert_is_present())
  39.         # 切换到当前页面的弹窗
  40.         alert = self.driver.switch_to.alert
  41.         # 点击弹窗的确认按钮
  42.         alert.accept()
  43.         # 查找登录成功页面的元素:昵称:body > div.client-container > div > div.left > div.user
  44.         # 查找登录成功页面中显示用户昵称的元素,若找到则说明登录成功
  45.         self.driver.find_element(By.CSS_SELECTOR, "body > div.client-container > div > div.left > div.user")
  46.         # 添加屏幕截图
  47.         # 调用WeChatDriver类的getScreeShot方法,对当前页面进行截图
  48.         WeChatDriver.getScreeShot()
  49.     # 异常登陆的测试用例
  50.     def LoginFailTest(self):
  51.         # 若连续多次的send_keys则会出现关键词拼接,而不是替换。若要替换需要先clear
  52.         # 找到用户名输入框元素,并清空其中的内容
  53.         self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
  54.         # 找到密码输入框元素,并清空其中的内容
  55.         self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
  56.         # 错误的用户名
  57.         # 向用户名输入框中输入错误的用户名 "admin"
  58.         self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("admin")
  59.         # 向密码输入框中输入密码 "123"
  60.         self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")
  61.         # 找到登录按钮元素,并点击该按钮进行登录操作
  62.         self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
  63.         # 检查是否登录失败:看是否出现弹窗
  64.         # 添加显示等待
  65.         # 创建一个WebDriverWait对象,设置最大等待时间为13秒
  66.         wait = WebDriverWait(self.driver, 13)
  67.         # 等待直到页面上出现弹窗
  68.         wait.until(EC.alert_is_present())
  69.         # 切换到当前页面的弹窗
  70.         alert = self.driver.switch_to.alert
  71.         # 点击弹窗的确认按钮
  72.         alert.accept()
  73.         # 添加屏幕截图
  74.         # 调用WeChatDriver类的getScreeShot方法,对当前页面进行截图
  75.         WeChatDriver.getScreeShot()
复制代码
好友列表测试用例代码文件(WeChatPeopleDetail.py)

  1. # 导入所需模块
  2. import time  # 时间相关操作
  3. from selenium.webdriver.common.by import By  # Selenium定位策略
  4. from common.Utils import WeChatDriver  # 自定义的微信驱动工具类
  5. # 微信联系人详情页测试类
  6. class WeChatPeopleDetail:
  7.     url = ""  # 页面URL(已通过__init__初始化)
  8.     driver = ""  # 浏览器驱动实例
  9.    
  10.     def __init__(self):
  11.         """初始化方法,配置测试环境"""
  12.         self.url = "http://127.0.0.1:8080/client.html"  # 测试页面地址
  13.         self.driver = WeChatDriver.driver  # 获取全局浏览器驱动实例
  14.         self.driver.get(self.url)  # 打开测试页面
  15.     def PeopleDetailTestByLogin(self):
  16.         """登录状态下的详情页测试"""
  17.         
  18.         # 验证联系人图标存在性(如果元素未找到会抛出NoSuchElementException)
  19.         # 使用CSS选择器定位元素
  20.         self.driver.find_element(
  21.             By.CSS_SELECTOR,
  22.             "body > div.client-container > div > div.left > div.tab > div.tab-friend"
  23.         )
  24.         # 添加固定等待
  25.         time.sleep(1)  # 强制等待 1 秒,可能影响测试效率
  26.         # 调用截图方法
  27.         WeChatDriver.getScreeShot()  # 保存当前页面截图
复制代码
好友会话测试用例代码文件(WeChatFormationDetail.py)

  1. # 导入所需模块
  2. import time  # 时间相关操作
  3. from selenium.webdriver.common.by import By  # Selenium元素定位策略
  4. from common.Utils import WeChatDriver  # 自定义的微信驱动工具类
  5. # 微信消息列表页测试类
  6. class WeChatFormationDetail:
  7.     url = ""  # 页面URL(已通过__init__初始化)
  8.     driver = ""  # 浏览器驱动实例
  9.    
  10.     def __init__(self):
  11.         """初始化方法,配置测试环境"""
  12.         self.url = "http://127.0.0.1:8080/client.html"  # 测试页面地址
  13.         self.driver = WeChatDriver.driver  # 获取全局浏览器驱动实例
  14.         self.driver.get(self.url)  # 打开测试页面
  15.     def FormationDetailTestByLogin(self):
  16.         """登录状态下消息详情页测试(方法名建议改为 test_message_details)"""
  17.         
  18.         # 验证消息图标存在性
  19.         # 使用层级过深的选择器,容易受页面结构变化影响
  20.         self.driver.find_element(
  21.             By.CSS_SELECTOR,
  22.             "body > div.client-container > div > div.left > div.tab > div.tab-session"
  23.         )
  24.         # 添加固定等待
  25.         time.sleep(1)  # 强制等待可能导致测试效率低下
  26.         
  27.         # 调用截图方法
  28.         WeChatDriver.getScreeShot()  # 保存当前页面状态
复制代码
测试项目代码文件(RunTest.py)

  1. # 导入测试模块和工具类
  2. from tests import WeChatLogin  # 微信登录测试类
  3. from tests import WeChatPeopleDetail  # 联系人详情测试类
  4. from tests import WeChatFormationDetail  # 消息列表测试类
  5. from common.Utils import WeChatDriver  # 浏览器驱动工具类
  6. if __name__ == '__main__':
  7.     # 执行登录失败测试用例
  8.     WeChatLogin.WeChatLogin().LoginFailTest()
  9.    
  10.     # 执行登录成功测试用例
  11.     WeChatLogin.WeChatLogin().LoginSucTest()
  12.        
  13.         # 消息列表页面测试
  14.     WeChatFormationDetail.WeChatFormationDetail().FormationDetailTestByLogin()
  15.     # 联系人列表页面测试
  16.     WeChatPeopleDetail.WeChatPeopleDetail().PeopleDetailTestByLogin()
  17.     # 退出浏览器
  18.     WeChatDriver.driver.quit()
复制代码
五、总结

在实际测试中,遇到以下几个问题:
   

  • (1)遇到页面元素查找的情况,缘故起因是网络渲染过慢造成的;
  • (2)欣赏器驱动管理工具 webdriver-manager由于网络情况的问题,不能自动下载对应的欣赏器驱动,需自己先下载好,再去指定欣赏器驱动安装的路径;
  • (3)有时候出现卡顿,需重新打开编写的自动化脚本软件。
  当前系统核心功能根本可用,满足根本谈天需求,但存在以下待改进项:
   

  • 页面元素定位稳定性需优化
  • 增长欣赏器兼容性验证
  • 增补性能测试场景
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张国伟

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表