一、项目介绍
网络聊天室项目实现了一个网络交流平台,用户在web页面登录以后可以和好友进行聊天。
二、项目功能
该项目包的web网页包含登录页面和聊天页面,登录页面实现了登录功能,聊天页面可以选择好有并进行聊天,而且左侧的列表框会按时间显示聊天好友和最新的一条聊天信息;在聊天页面左上角的输入框中输入用户名后点击搜索按钮可以显示该用户。
三、测试计划
测试环境: Windows11系统,联想浏览器版本 9.0.5.11051(正式版)(64位),Edge浏览器版本 129.0.2792.79 (正式版本) (64 位)
1. 编写测试用例
根据两个页面的功能和界面元素信息进行编写测试用例:
2. 实际执行测试的部分操作步骤
由于测试用例较多,这里仅展示登录页面的登录成功、密码错误的登录失败和密码为空的登录失败三个测试用例;聊天页面仅展示通过用户名搜索用户、成功发送聊天信息、发送聊天信息为空和未登录状态下访问聊天页面四个测试用例。当测试聊天页面的搜索功能时发现该搜索功能不可使用,是一个bug,记录该bug。
(1)登录页面
用例1: 登录成功
数据:用户名——zhangsan,密码——123
预期结果:弹窗提示登录成功,点击确定跳转聊天页面
实际结果:弹窗提示登录成功,成功跳转聊天页面
用例2: 登录失败——密码错误
数据:用户名——zhangsan,密码——111
预期结果:弹窗提示登录失败,点击确认可以重新登录
实际结果:弹窗提示登陆失败,点击确认后可以重新登录
用例3: 登录失败——密码为空
数据:用户名——zhangsan,密码为空
预期结果:弹窗提示当前输入的用户名或者密码为空,点击确定后可以重新登录
实际结果:弹窗提示用户名或密码输入错误,点击确认后可以重新登录
(2)聊天页面
用例1: 搜索用户名
数据:用户名——lisi
预期结果:显示好友lisi
实际结果:搜索前后界面并未发生变化,发现bug,记录bug:
环境:Windows 11系统,联想浏览器版本 9.0.5.11051(正式版)(64位)
操作步骤:
- 在上述环境中打开联想浏览器
- 输入网页聊天室网址并登陆
- 在搜索栏中输入lisi并搜索
预期结果:显示好友lisi
实际结果:页面并未发生变化,搜索功能失效
用例2: 成功发送聊天信息
数据:内容——你好,我叫张三!,发送好友——wangwu
预期结果:发送成功,与王五的历史对话记录上升到第一位,并且显示发送信息
实际结果:发送成功,与王五的历史对话记录上升到第一位,并且显示发送信息
用例3: 发送空的聊天信息
数据:发送好友——lisi
预期结果:发送无效
实际结果:发送无效
用例4: 未登录状态下访问聊天页面
预期结果:弹窗提示当前用户未登录,不显示用户名,显示历时对话记录,对话好友为lisi且内容为晚上吃啥,点击确定后跳转登录页面
实际结果:弹窗提示当前用户未登录,不显示用户名,显示历时对话记录,对话好友为lisi且内容为晚上吃啥,点击确定后跳转登录页面
3. 自动化测试
(1)创建Common和WebPageTest软件包
(2)测试代码
1)Untils.py 文件
#需要导入的信息
import datetime
import os.path
import inspect
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from webdriver_manager.microsoft import EdgeChromiumDriverManager
from selenium.webdriver.edge.options import Options
#创建浏览器对象
class Driver:
#类成员
driver = ""
#构造函数
def __init__(self):
#创建Edge浏览器选项对象
options = Options()
#可以添加无头模式等设置
#options.add_argument('headless')
#创建Edge浏览器驱动示例
self.driver = webdriver.Chrome(service = Service(EdgeChromiumDriverManager().install()),options = options)
#获取屏幕截图
def get_screen_shot(self):
#按照每天来划分图片
#文件名称——2024-11-30
dirname = datetime.datetime.now().strftime("%Y-%m-%d")
#判断文件夹是否存在,若不存在册创建文件夹
if not os.path.exists("../Pictures/"+dirname):
os.mkdir("../Pictures/"+dirname)
#图片文件名称——2024-11-30-090322
#前面加上调用方法名方便定位该图片对应的方法
filename = inspect.currentframe().f_back.f_code.co_name + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S")+".png"
self.driver.save_screenshot("../Pictures/" + dirname + "/" + filename)
#创建Driver类对象
ChatDriver = Driver()
2)LoginPageTest.py 文件
#需要的内容
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from Common.Untils import ChatDriver
#LoginPage 类
class LoginPage:
url = ""
driver = ""
def __init__(self):
self.url = "127.0.0.1:8080/login.html"
self.driver = ChatDriver.driver
self.driver.get(self.url)
#登录失败测试
def login_fail_test(self):
# 输入正确的账号,错误的密码
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("111")
#点击登录按钮
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
#定位提示弹窗,检验提示内容
alert = WebDriverWait(self.driver,3).until(EC.alert_is_present())
text = alert.text
assert text == "登录失败!"
time.sleep(0.5)
ChatDriver.get_screen_shot()
alert.accept()
# 错误的账号,正确的密码
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("aaa")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 定位提示弹窗,检验提示内容
alert = WebDriverWait(self.driver, 3).until(EC.alert_is_present())
text = alert.text
assert text == "登录失败!"
time.sleep(0.5)
ChatDriver.get_screen_shot()
alert.accept()
# 账号填写,密码为空
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 定位提示弹窗,检验提示内容
alert = WebDriverWait(self.driver, 3).until(EC.alert_is_present())
text = alert.text
assert text == "当前输入的用户名或者密码为空!"
ChatDriver.get_screen_shot()
time.sleep(0.5)
alert.accept()
# 账号为空,密码填写
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 定位提示弹窗,检验提示内容
alert = WebDriverWait(self.driver, 3).until(EC.alert_is_present())
text = alert.text
assert text == "当前输入的用户名或者密码为空!"
ChatDriver.get_screen_shot()
time.sleep(0.5)
alert.accept()
# 账号和密码都为空
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 定位提示弹窗,检验提示内容
alert = WebDriverWait(self.driver, 3).until(EC.alert_is_present())
text = alert.text
assert text == "当前输入的用户名或者密码为空!"
ChatDriver.get_screen_shot()
time.sleep(0.5)
alert.accept()
#登录成功测试
def login_suc_tes(self):
# 清空输入框
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
# 输入正确的账号和密码
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 定位提示弹窗,检验提示内容
alert = WebDriverWait(self.driver, 5).until(EC.alert_is_present())
text = alert.text
assert text == "登录成功!"
time.sleep(0.5)
# 截图验证弹窗信息
ChatDriver.get_screen_shot()
# 确认弹窗,跳转聊天页面
alert.accept()
# 截图验证聊天页面
ChatDriver.get_screen_shot()
3)ChatPageTest.py 文件
#需要的内容
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from Common.Untils import ChatDriver
from selenium.webdriver.support import expected_conditions as EC
#ChatPage类
class ChatPage:
url = ""
driver = ""
def __init__(self):
self.url = "http://127.0.0.1:8080/client.html"
self.driver = ChatDriver.driver
self.driver.get(self.url)
#页面元素验证测试
def page_elem_test(self):
# 查找主界面元素:昵称、搜索框、按钮、消息列表、消息列表按钮、联系人按钮、聊天框、输入框、发送按钮
self.driver.find_element(By.CSS_SELECTOR, "body > div.client-container > div > div.left > div.user")
self.driver.find_element(By.CSS_SELECTOR,"body > div.client-container > div > div.left > div.search > input[type=text]")
self.driver.find_element(By.CSS_SELECTOR, "body > div.client-container > div > div.left > div.search > button")
self.driver.find_element(By.CSS_SELECTOR, "#session-list")
self.driver.find_element(By.CSS_SELECTOR,"body > div.client-container > div > div.left > div.tab > div.tab-session")
self.driver.find_element(By.CSS_SELECTOR,"body > div.client-container > div > div.left > div.tab > div.tab-friend")
self.driver.find_element(By.CSS_SELECTOR, "body > div.client-container > div > div.right")
self.driver.find_element(By.CSS_SELECTOR, "body > div.client-container > div > div.right > textarea")
self.driver.find_element(By.CSS_SELECTOR, "body > div.client-container > div > div.right > div.ctrl > button")
# 消息列表
self.driver.find_element(By.CSS_SELECTOR, "#session-list > li:nth-child(4)").click()
WebDriverWait(self.driver, 3).until(EC.presence_of_element_located(
(By.CSS_SELECTOR, "body > div.client-container > div > div.right > div.message-show > div:nth-child(1)")))
time.sleep(0.5)
ChatDriver.get_screen_shot()
# 联系人列表
self.driver.find_element(By.CSS_SELECTOR,"body > div.client-container > div > div.left > div.tab > div.tab-friend").click()
WebDriverWait(self.driver, 3).until(EC.presence_of_element_located((By.CSS_SELECTOR, "#friend-list")))
time.sleep(0.5)
ChatDriver.get_screen_shot()
self.driver.find_element(By.CSS_SELECTOR, "#friend-list > li:nth-child(2) > h4").click()
WebDriverWait(self.driver, 3).until(EC.presence_of_element_located((By.CSS_SELECTOR, "#session-list")))
time.sleep(0.5)
ChatDriver.get_screen_shot()
#聊天功能验证
def char_test(self):
self.driver.find_element(By.CSS_SELECTOR,"body > div.client-container > div > div.left > div.tab > div.tab-session").click()
self.driver.find_element(By.CSS_SELECTOR, "#session-list > li.selected > h3").click()
self.driver.find_element(By.CSS_SELECTOR, "body > div.client-container > div > div.right > div.title")
self.driver.find_element(By.CSS_SELECTOR, "body > div.client-container > div > div.right > textarea").send_keys("你好,我叫张三!")
self.driver.find_element(By.CSS_SELECTOR,"body > div.client-container > div > div.right > div.ctrl > button").click()
time.sleep(0.5)
ChatDriver.get_screen_shot()
4)RunTest.py 文件
from Common.Untils import ChatDriver
from WebPageTest.ChatPageTest import ChatPage
from WebPageTest.LoginPageTest import LoginPage
if __name__=="__main__":
#登录失败测试
LoginPage().login_fail_test()
#登录成功测试
LoginPage().login_suc_tes()
#检查聊天页面元素
ChatPage().page_elem_test()
#聊天功能测试
ChatPage().char_test()
#关闭浏览器
ChatDriver.driver.quit()
四、项目bug
(1)bug描述
在Edge浏览器上输入正确的账号和密码后,点击登录按钮,页面未响应。
环境:Windows11系统,Edge浏览器129.0.2792.79 (正式版本) (64 位)
操作:
- 输入登录网址:127.0.0.1:8080/login.html
- 输入账号:zhansan,密码:123
- 点击登录按钮
预期结果:提示弹窗登录成功
实际结果:页面未响应
(2)bug描述
在聊天页面的搜索栏中搜索好友lisi,页面未响应。
环境:Windows 11系统,联想浏览器版本 9.0.5.11051(正式版)(64位)
操作步骤:
- 在上述环境中打开联想浏览器
- 输入网页聊天室网址并登陆
- 在搜索栏中输入lisi并搜索
预期结果:显示好友lisi
实际结果:页面并未发生变化,搜索功能失效
五、项目总结
该聊天室项目的主要功能(登录和与好友聊天)均能实现,但是其次要功能搜索好友并未响应,且其兼容性较差,在Edge浏览器上不能进行登录。
该项目除了需要修改上述两个bug以外,还应该在登录页面添加注册功能,并考虑在聊天页面添加图片、视频、表情包等输入内容。