当前位置: 首页 > wzjs >正文

平面设计找素材的网站提高网站搜索排名

平面设计找素材的网站,提高网站搜索排名,公司网站用个人备案 2018,做进化树的在线网站TP商城登录系统测试报告 完成时间: 2025/7/1 2025/7/5 完成人: 郭志宏 目录 执行摘要测试环境测试需求分析与评审登录模块专项测试计划TPshop登录功能测试点设计手工测试报告手工登录测试缺陷报告自动化测试报告测试结论TP商城登录系统测试总结 文档控制 文档属性内容项目名…

TP商城登录系统测试报告

完成时间: 2025/7/1 2025/7/5
完成人: 郭志宏


目录

  1. 执行摘要
  2. 测试环境
  3. 测试需求分析与评审
  4. 登录模块专项测试计划
  5. TPshop登录功能测试点设计
  6. 手工测试报告
  7. 手工登录测试缺陷报告
  8. 自动化测试报告
  9. 测试结论
  10. TP商城登录系统测试总结

文档控制

文档属性内容
项目名称TP商城登录系统测试
系统版本V3.0.0
报告版本v2025.07.11
测试类型功能测试
测试阶段Unit Test/Integration Test/System Test
测试日期[2025-7-10]至[2025-7-20]
测试负责人郭志宏

壹、执行摘要

(一)测试目标

验证登录系统在功能、性能、安全等方面的完整性和可靠性,确保符合PRD要求。

(二)测试范围

  • 用户认证流程
  • 异常处理机制
  • 安全防护

(三)测试结果概览

测试类型用例总数通过数失败数阻塞数通过率
手工功能17161094.1%
自动化131300100.0%

贰、测试环境

(一)环境配置

1. 基础环境要求
  • 操作系统: Windows 10
  • 内存: ≥4GB
  • 硬盘: ≥10GB(SSD更佳)

(二)需要软件

  • Chrome测试版(v135.0.7049.114)
  • Chromedriver(v135.0.7049.114)
  • Python 3.12.2
  • Pycharm(2025.1.3)

(三)测试工具矩阵

工具类型工具名称用途版本
自动化SeleniumUI自动化4.12.0

叁、测试需求分析与评审

(一)致命问题

[安全机制缺失]

  • 文档位置: 2.2.1登录/密码传输与存储
  • 问题描述: 需求未明确密码传输是否加密(如TLS)、存储是否哈希加密,违反基础安全规范。
  • 影响范围: 用户账户安全、系统合规性(如GDPR)
  • 改进建议: 补充“密码需通过HTTPS传输,且存储时使用盐值+哈希算法(如bcrypt)加密”。

(二)高风险问题

[第三方登录流程缺失]

  • 文档位置: 2.2.1概述/第三方登录(支付宝/QQ/微信)
  • 问题描述: 文档提到第三方登录但无具体流程(如授权回调、账号绑定逻辑),开发无法实现。
  • 影响范围: 第三方登录功能不可用,用户体验断裂。

(三)优化建议

  1. 错误提示交互不一致

    • 文档位置: 2.2.1登录过程提示语表格
    • 问题描述: 错误提示形式混乱(弹窗vs.行内提示),且未说明空输入时的焦点定位(如自动聚焦到首个空字段)。
  2. 密码可见性功能缺失

    • 文档位置: 2.2.1登录界面原型
    • 问题描述: 密码框未提供“显示/隐藏”切换功能,不利于用户核对(尤其移动端)。
    • 改进建议: 在密码框右侧增加“眼睛图标”,支持明文临时显示。

肆、登录模块专项测试计划(2025/7/10-2025/7/20)

(一)测试目标分解

维度验收标准测试方法
功能性覆盖登录/注册/安全退出所有需求点等价类划分+边界值分析
易用性错误提示清晰/操作路径≤3步认知走查+用户场景模拟
自动化核心流程100%自动化覆盖Selenium

(二)资源矩阵

(内容略)

(三)方案设计

功能测试矩阵

(四)进度安排

(五)风险控制

风险类型应对方案应急资源
需求变更每日晨会确认需求基线需求快照文档
环境不稳定Docker容器化测试环境本地环境镜像
自动化进展延迟优先保障核心路径(PO用例)手动测试兜底

(六)交付物清单

  1. 测试用例文档(含优先级标记)
  2. 自动化测试脚本集(Git仓库)
  3. 浏览器兼容矩阵(Chrome/Firefox/Edge)
  4. 测试总结报告(含缺陷分析)

伍、TPshop登录功能测试点设计

覆盖维度: 功能、易用、安全
测试范围: TP商城系统登录模块

(一)功能测试

分类测试点正向/逆向详细描述
业务游客状态显示正向未登录时,页面头部显示“登录/注册”链接。
登录后状态更新正向登录成功后,页面头部显示用户名(完整邮箱/手机号)和“安全退出”链接。
登录成功跳转正向登录后跳转至“我的商城”页,显示用户名。
正向正确凭证登录正向输入有效手机号/邮箱+正确密码+正确验证码→登录成功,无错误提示。
安全退出功能正向点击“安全退出”→返回游客状态,头部显示“登录/注册”。
逆向账号格式错误逆向输入错误格式手机号(如123)/邮箱(含非法字符)→提示“账号格式错误”。
未注册账号登录逆向输入正确格式但未注册的账号→提示“账号不存在”。
账号为空逆向账号留空→弹窗提示“账号不能为空”。
密码为空逆向密码留空→提示“密码不能为空”。
密码错误逆向输入正确账号+错误密码→提示“密码错误”。
验证码错误/过期逆向输入错误验证码→提示“验证码错误”,点击登录后自动刷新验证码。
验证码为空逆向验证码留空→提示“验证码不能为空”。

(二)易用性测试

分类测试点正向/逆向详细描述
业务验证码刷新正向点击验证码图片可刷新,新验证码清晰可辨。
正向输入框自动聚焦正向页面加载后,账号输入框自动获得焦点。
快捷键支持正向输入完成后按Enter键可提交登录。
逆向错误提示明确性逆向密码错误时提示“密码错误”而非“账号或密码错误”,避免信息泄露。
密码可见性控制逆向密码默认隐藏,提供“显示密码”图标(需求未要求,但建议补充)。

(三)关键覆盖说明

  • 100%需求覆盖: 验证所有需求文档中的登录场景(7种错误提示+成功流程)。
  • 边界与格式:
    • 手机号边界: 首位为1、第二位非2的11位数字(如13800138000)。
    • 邮箱边界: 用户名4-16位(字母/数字/下划线,非下划线开头),如user_123@qq.com
    • 密码边界: 6-16位(允许纯数字/字母/符号组合)。
  • 为空测试: 覆盖账号、密码、验证码单独为空的场景。
  • 类型验证: 账号类型(手机号vs邮箱)和输入类型(数字/字母/特殊字符)兼容性。

陆、手工测试报告

(一)测试用例及其测试结果

功能测试用例
用例编号用例标题模块优先级前置条件测试步骤预期结果测试数据测试结果
ELOGIN-FOOT游客状态显示验证登录模块P11.系统正常运行1.访问系统首页显示“登录/注册”链接通过
ELOGIN-FOOT游客状态显示验证登录模块P12.未登录状态2.检查页面头部显示“登录/注册”链接通过
TE-LOGIN-F002登录后状态更新验证登录模块PH1.系统正常运行1.输入有效账号密码头部显示用户名账号:150072442634通过
TE-LOGIN-F002登录后状态更新验证登录模块PH1.系统正常运行2.完成登录头部显示用户名密码:Max01通过
TE-LOGIN-F002登录后状态更新验证登录模块PH1.系统正常运行2.完成登录头部显示用户名验证码:0000通过
T-LOGIN-登录模块登录模块P11.系统正常运行1.完成有效登录自动跳转至我的商城页同上通过
T-LOGIN-FODA正确凭证登录验证登录模块P11.系统正常运行1.输入完整正确凭证登录成功,无错误提示同上通过
T-LOGIN-FODA正确凭证登录验证登录模块P11.系统正常运行2.点击登录登录成功,无错误提示通过
T-LOGIN-安全退出功能验证登录模块P11.已登录状态1.点击“安全退出”显示登录入口通过
T-LOGIN-FO00账号格式错误验证登录模块P21.系统正常运行1.输入错误格式账号显示“账号格式错误”账号:123通过
T-LOGIN-FO00账号格式错误验证登录模块P21.系统正常运行2.点击登录显示“账号格式错误”密码:任意通过
T-LOGIN-未注册账号验证登录模块P21.系统正常运行1.输入未注册账号显示“账号不存在”账号:未注册的正确格式账号通过
T-LOGIN-未注册账号验证登录模块P21.系统正常运行2.点击登录显示“账号不存在”账号:未注册的正确格式账号通过
T-LOGIN-FO00账号为空验证登录模块P21.系统正常运行1.留空账号字段弹窗提示“账号不能为空”账号:空通过
T-LOGIN-FO00账号为空验证登录模块P21.系统正常运行弹窗提示“账号不能为空”通过
T-LOGIN-FO00密码为空验证登录模块P21.系统正常运行2.点击登录提示“密码不能为空”账号:150072448634通过
T-LOGIN-FO00密码为空验证登录模块P21.系统正常运行2.留空密码提示“密码不能为空”密码:空通过
T-LOGIN-FO00密码为空验证登录模块P21.系统正常运行2.点击登录提示“密码不能为空”通过
T-LOGIN-FO10密码错误验证登录模块P21.系统正常运行1.输入正确账号提示“密码错误”账号:150072448634通过
T-LOGIN-FO10密码错误验证登录模块P21.系统正常运行2.输入错误密码提示“密码错误”密码:wangPwd通过
T-LOGIN-FO10密码错误验证登录模块P21.系统正常运行3.点击登录提示“密码错误”通过
T-LOGIN-FOH验证码错误验证登录模块P21.系统正常运行1.输入正确凭证显示“验证码错误”,自动刷新验证码:错误值通过
T-LOGIN-FOH验证码错误验证登录模块P21.系统正常运行2.输入错误验证码显示“验证码错误”,自动刷新验证码:错误值通过
T-LOGIN-FOH验证码错误验证登录模块P21.系统正常运行2.点击登录显示“验证码错误”,自动刷新验证码:错误值通过
T-LOGIN-FO12验证码为空验证登录模块P21.系统正常运行1.输入账号密码显示“验证码不能为空”通过
T-LOGIN-FO12验证码为空验证登录模块P21.系统正常运行2.留空验证码显示“验证码不能为空”验证码:空通过
T-LOGIN-FO12验证码为空验证登录模块P21.系统正常运行验证码:空显示“验证码不能为空”2.点击登录通过
易用性测试用例
用例编号用例标题模块优先级前置条件测试步骤预期结果测试数据测试结果
T-LOGIN-L00验证码刷新验证登录模块P31.系统正常运行1.点击验证码图片生成新验证码且清晰可辨通过
T-LOGIN-L00B输入框自动聚焦验证登录模块P31.系统正常运行1.访问页面账号输入框自动获得焦点通过
T-LOGIN-LUOB快捷键支持验证登录模块P31.系统正常运行1.输入完整凭证 2.点击Enter键自动提交登录请求完整正确凭证通过
T-LOGIN-LU0M错误提示明确性验证登录模块P31.系统正常运行1.触发密码错误场景明确显示“密码错误”账号正确+密码错误通过
T-LOGIN-LUOD密码可见性控制验证登录模块P31.系统正常运行1.检查密码字段默认隐藏,有显示控制图标不满足,无可见性控制

(二)问题跟踪

  • 严重问题记录: 无
  • 其他问题记录: 密码可见性控制需要优化,现阶段版本无控制密码是否可见的小眼睛按钮

柒、手工登录测试缺陷报告

(一)缺陷标题: 密码字段缺少可见性控制(ZD-20250712-001)

当前指派: UI开发组
Bug类型: 易用性缺陷
严重程度: 4级(轻微)
优先级: P3

重现步骤

  1. 访问测试环境: https://hmshop-test.itheima.net/Home/user/login.html
  2. 输入有效凭证(账号:150072442634 密码:test01 验证码:8888)
  3. 观察控件元素

实际结果

  • 密码默认隐藏
  • 无显示/隐藏切换功能

预期结果

  • 应提供眼睛图标控制密码可见性
  • 符合现代Web应用设计规范

环境信息:

  • 浏览器: Chrome测试版(v135.0.7049.114)
  • 网络: 5G
  • 设备: Lenovo

捌、自动化测试报告

(一)自动化框架

pythondef setUpClass(cls):"""类级别的前置方法,所有测试用例执行前只执行一次"""# 路径配置cls.CHROME_PATH = r"D:\chrome-win64\chrome.exe"cls.CHROMEDRIVER_PATH = r"D:\chromedriver-win64\chromedriver.exe"cls.BASE_URL = "https://hmshop-test.itheima.net/Home/user/login.html"# 浏览器配置
chrome_options = Options()
chrome_options.binary_location = cls.CHROME_PATH
chrome_options.add_argument("--start-maximized")# 初始化驱动
cls.service = Service(executable_path=cls.CHROMEDRIVER_PATH)
cls.driver = webdriver.Chrome(service=cls.service, options=chrome_options)
cls.wait = WebDriverWait(cls.driver, 7)

(二)测试执行统计

# -*- coding: utf-8 -*-
"""
HMSHOP登录模块自动化测试脚本(带详细注释版)
环境要求:
- Chrome浏览器路径:D:\chrome-win64\chrome.exe
- ChromeDriver路径:D:\chromedriver-win64\chromedriver.exe
- 测试地址:https://hmshop-test.itheima.net/Home/user/login.html
"""# 导入Selenium Web自动化测试库
from selenium import webdriver
# 导入Chrome浏览器服务
from selenium.webdriver.chrome.service import Service
# 导入Chrome浏览器选项
from selenium.webdriver.chrome.options import Options
# 导入元素定位方式
from selenium.webdriver.common.by import By
# 导入键盘按键
from selenium.webdriver.common.keys import Keys
# 导入显式等待
from selenium.webdriver.support.ui import WebDriverWait
# 导入预期条件
from selenium.webdriver.support import expected_conditions as EC
# 导入时间模块
import time
# 导入单元测试框架
import unittest
# 导入操作系统接口
import osclass TestLoginModule(unittest.TestCase):"""登录模块测试套件(带详细注释版)"""# ==================== 元素定位常量 ====================# 用户名输入框定位USERNAME_INPUT = (By.CSS_SELECTOR, "#username")# 密码输入框定位PASSWORD_INPUT = (By.CSS_SELECTOR, "#password")# 验证码输入框定位VERIFY_CODE_INPUT = (By.CSS_SELECTOR, "#verify_code")# 登录按钮定位LOGIN_BUTTON = (By.CSS_SELECTOR, "#loginform > div > div.login_bnt > a")# 错误提示信息定位ERROR_MESSAGE = (By.CSS_SELECTOR, "div.layui-layer-content")# 验证码图片定位VERIFY_CODE_IMG = (By.CSS_SELEC# -*- coding: utf-8 -*-
"""
HMSHOP登录模块自动化测试脚本(带详细注释版)
环境要求:
- Chrome浏览器路径:D:\chrome-win64\chrome.exe
- ChromeDriver路径:D:\chromedriver-win64\chromedriver.exe
- 测试地址:https://hmshop-test.itheima.net/Home/user/login.html
"""# 导入Selenium Web自动化测试库
from selenium import webdriver
# 导入Chrome浏览器服务
from selenium.webdriver.chrome.service import Service
# 导入Chrome浏览器选项
from selenium.webdriver.chrome.options import Options
# 导入元素定位方式
from selenium.webdriver.common.by import By
# 导入键盘按键
from selenium.webdriver.common.keys import Keys
# 导入显式等待
from selenium.webdriver.support.ui import WebDriverWait
# 导入预期条件
from selenium.webdriver.support import expected_conditions as EC
# 导入时间模块
import time
# 导入单元测试框架
import unittest
# 导入操作系统接口
import osclass TestLoginModule(unittest.TestCase):"""登录模块测试套件(带详细注释版)"""# ==================== 元素定位常量 ====================# 用户名输入框定位USERNAME_INPUT = (By.CSS_SELECTOR, "#username")# 密码输入框定位PASSWORD_INPUT = (By.CSS_SELECTOR, "#password")# 验证码输入框定位VERIFY_CODE_INPUT = (By.CSS_SELECTOR, "#verify_code")# 登录按钮定位LOGIN_BUTTON = (By.CSS_SELECTOR, "#loginform > div > div.login_bnt > a")# 错误提示信息定位ERROR_MESSAGE = (By.CSS_SELECTOR, "div.layui-layer-content")# 验证码图片定位VERIFY_CODE_IMG = (By.CSS_SELECTOR, ".vcode-img")# 刷新验证码按钮定位REFRESH_BUTTON = (By.CSS_SELECTOR, ".refresh-vcode")# 欢迎消息定位WELCOME_MSG = (By.CSS_SELECTOR, ".welcome-msg")# 退出按钮定位LOGOUT_BUTTON = (By.CSS_SELECTOR, "body > div.tpshop-tm-hander.home-index-top.p > div > div > div > div.fl.islogin.hide > a:nth-child(2)")# 登陆成功后的用户名定位USERNAME_DISPLAY = (By.CSS_SELECTOR, "body > div.tpshop-tm-hander.home-index-top.p > div > div > div > div.fl.islogin.hide > a.red.userinfo")# 主页面内登录按钮SIGN_IN_BUTTON = (By.CSS_SELECTOR, "body > div.tpshop-tm-hander > div.top-hander > div > div > div.fl.nologin > a.red")@classmethoddef setUpClass(cls):"""类级别的前置方法,所有测试用例执行前只执行一次"""# ==================== 路径配置 ====================# Chrome浏览器路径cls.CHROME_PATH = r"D:\chrome-win64\chrome.exe"# ChromeDriver路径cls.CHROMEDRIVER_PATH = r"D:\chromedriver-win64\chromedriver.exe"# 测试基础URLcls.BASE_URL = "https://hmshop-test.itheima.net/Home/user/login.html"# ==================== 路径验证 ====================# 检查Chrome浏览器是否存在if not os.path.exists(cls.CHROME_PATH):raise FileNotFoundError(f"Chrome浏览器未在指定路径找到:{cls.CHROME_PATH}")# 检查ChromeDriver是否存在if not os.path.exists(cls.CHROMEDRIVER_PATH):raise FileNotFoundError(f"ChromeDriver未在指定路径找到:{cls.CHROMEDRIVER_PATH}")# ==================== 浏览器配置 ====================# 创建Chrome选项对象chrome_options = Options()# 指定Chrome浏览器路径chrome_options.binary_location = cls.CHROME_PATH# 启动时最大化窗口chrome_options.add_argument("--start-maximized")# 禁用信息栏chrome_options.add_argument("--disable-infobars")# 禁用扩展chrome_options.add_argument("--disable-extensions")# ==================== 初始化驱动 ====================# 创建ChromeDriver服务cls.service = Service(executable_path=cls.CHROMEDRIVER_PATH)# 创建Chrome浏览器实例cls.driver = webdriver.Chrome(service=cls.service, options=chrome_options)# 创建显式等待对象,超时时间10秒cls.wait = WebDriverWait(cls.driver, 7)# ==================== 测试数据 ====================# 有效的用户名cls.VALID_USERNAME = "15072442634"# 有效的密码cls.VALID_PASSWORD = "test01"# 正确的验证码cls.CORRECT_VCODE = "8888"# 错误的验证码cls.WRONG_VCODE = "9999"# 错误的密码cls.WRONG_PASSWORD = "wrongPwd"# 无效的用户名格式cls.INVALID_USERNAME = "123"# 空账号cls.EMPTY_USERNAME = ""# 空密码cls.EMPTY_PASSWORD = ""# 空验证码cls.EMPTY_VCODE  = ""# 未注册用户名cls.UNREGISTERED_USERNAME  = "15072442633"def setUp(self):"""每个测试用例前执行,用于测试用例的初始化"""# 打开测试URLself.driver.get(self.BASE_URL)# 等待用户名输入框加载完成self.wait.until(EC.presence_of_element_located(self.USERNAME_INPUT))# ==================== 功能测试用例 ====================def test_TC_LOGIN_F001(self):"""TC-LOGIN-F001 游客状态显示验证"""# 查找登录按钮元素login_link = self.driver.find_element(*self.LOGIN_BUTTON)# 断言登录按钮是否显示self.assertTrue(login_link.is_displayed(), "登录按钮未显示")def test_TC_LOGIN_F002(self):"""TC-LOGIN-F002 账号格式错误验证"""# 填写错误的账号格式self._fill_login_form(self.INVALID_USERNAME, self.VALID_PASSWORD, self.CORRECT_VCODE)# 点击登录按钮self.driver.find_element(*self.LOGIN_BUTTON).click()# 等待错误消息出现error_msg = self.wait.until(EC.visibility_of_element_located(self.ERROR_MESSAGE))# 断言错误消息是否包含"账号格式"self.assertIn("账号格式", error_msg.text, "账号格式错误错误提示不准确")def test_TC_LOGIN_F003(self):"""TC-LOGIN-F003 验证码错误验证"""# 填写错误的验证码self._fill_login_form(self.VALID_USERNAME, self.VALID_PASSWORD, self.WRONG_VCODE)# 点击登录按钮self.driver.find_element(*self.LOGIN_BUTTON).click()# 等待错误消息出现error_msg = self.wait.until(EC.visibility_of_element_located(self.ERROR_MESSAGE))# 断言错误消息是否包含"验证码"self.assertIn("验证码", error_msg.text, "验证码错误提示不准确")def test_TC_LOGIN_F004(self):"""TC-LOGIN-F004 密码错误验证"""# 填写错误的密码self._fill_login_form(self.VALID_USERNAME, self.WRONG_PASSWORD, self.CORRECT_VCODE)# 点击登录按钮self.driver.find_element(*self.LOGIN_BUTTON).click()# 等待错误消息出现error_msg = self.wait.until(EC.visibility_of_element_located(self.ERROR_MESSAGE))# 断言错误消息是否包含"密码"self.assertIn("密码", error_msg.text, "密码错误提示不准确")def test_TC_LOGIN_F005(self):"""TC-LOGIN-F005 账号为空错误验证"""# 填写空的账号self._fill_login_form(self.EMPTY_USERNAME, self.VALID_PASSWORD, self.CORRECT_VCODE)# 点击登录按钮self.driver.find_element(*self.LOGIN_BUTTON).click()# 等待错误消息出现error_msg = self.wait.until(EC.visibility_of_element_located(self.ERROR_MESSAGE))# 断言错误消息是否包含"账号格式"self.assertIn("用户名", error_msg.text, "账号不能为空错误提示不准确")self.assertIn("空", error_msg.text, "账号不能为空错误提示不准确")def test_TC_LOGIN_F006(self):"""TC-LOGIN-F006 密码为空错误验证"""# 填写空的密码self._fill_login_form(self.VALID_USERNAME, self.EMPTY_USERNAME, self.CORRECT_VCODE)# 点击登录按钮self.driver.find_element(*self.LOGIN_BUTTON).click()# 等待错误消息出现error_msg = self.wait.until(EC.visibility_of_element_located(self.ERROR_MESSAGE))# 断言错误消息是否包含"账号格式"self.assertIn("密码", error_msg.text, "密码不能为空错误提示不准确")self.assertIn("空", error_msg.text, "密码不能为空错误提示不准确")def test_TC_LOGIN_F007(self):"""TC-LOGIN-F007 验证码为空错误验证"""# 填写空的密码self._fill_login_form(self.VALID_USERNAME, self.VALID_PASSWORD, self.EMPTY_VCODE )# 点击登录按钮self.driver.find_element(*self.LOGIN_BUTTON).click()# 等待错误消息出现error_msg = self.wait.until(EC.visibility_of_element_located(self.ERROR_MESSAGE))# 断言错误消息是否包含"账号格式"self.assertIn("验证码", error_msg.text, "验证码不能为空错误提示不准确")self.assertIn("空", error_msg.text, "验证码不能为空错误提示不准确")def test_TC_LOGIN_F008(self):"""TC-LOGIN-F008 账号未注册错误验证"""# 填写错误的账号格式self._fill_login_form(self.UNREGISTERED_USERNAME, self.VALID_PASSWORD, self.CORRECT_VCODE)# 点击登录按钮self.driver.find_element(*self.LOGIN_BUTTON).click()# 等待错误消息出现error_msg = self.wait.until(EC.visibility_of_element_located(self.ERROR_MESSAGE))# 断言错误消息是否包含"账号格式"self.assertIn("不存在", error_msg.text, "账号格式错误错误提示不准确")def test_TC_LOGIN_F009(self):"""TC-LOGIN-F009 登录后状态更新验证"""# 执行登录操作self._do_login()# 等待用户名输入框可见username_display = self.wait.until(EC.visibility_of_element_located(self.USERNAME_DISPLAY))# 等待退出按钮可见logout_btn = self.wait.until(EC.visibility_of_element_located(self.LOGOUT_BUTTON))# 断言用户名显示是否正确self.assertEqual(username_display.get_attribute("text"), self.VALID_USERNAME, "用户名显示不正确")# 断言退出按钮是否显示self.assertTrue(logout_btn.is_displayed(), "安全退出按钮未显示")self.driver.find_element(*self.LOGOUT_BUTTON).click()self.driver.find_element(*self.SIGN_IN_BUTTON).click()def test_TC_LOGIN_F010(self):"""TC-LOGIN-F010 登录成功跳转验证"""# 执行登录操作self._do_login()# 断言当前URL是否包含"index"time.sleep(3)self.assertIn("index", self.driver.current_url.lower(), "未正确跳转到我的商城页")self.driver.find_element(*self.LOGOUT_BUTTON).click()self.driver.find_element(*self.SIGN_IN_BUTTON).click()def test_TC_LOGIN_F011(self):"""TC-LOGIN-F011 安全退出功能验证"""# 执行登录操作self._do_login()time.sleep(3)# 点击退出按钮self.driver.find_element(*self.LOGOUT_BUTTON).click()self.driver.find_element(*self.SIGN_IN_BUTTON).click()time.sleep(3)# 等待登录按钮出现login_link = self.wait.until(EC.presence_of_element_located(self.LOGIN_BUTTON))# 断言登录按钮是否显示self.assertTrue(login_link.is_displayed(), "未返回游客状态")# ==================== 易用性测试用例 ====================def test_TC_LOGIN_U001(self):"""TC-LOGIN-U001 输入框自动聚焦验证"""# 获取当前焦点元素active_element = self.driver.switch_to.active_element# 断言焦点是否在用户名输入框self.assertEqual(active_element.get_attribute("id"), "username", "未自动聚焦到账号输入框")def test_TC_LOGIN_U002(self):"""TC-LOGIN-U002 快捷键支持验证"""# 填写登录表单self._fill_login_form(self.VALID_USERNAME, self.VALID_PASSWORD, self.CORRECT_VCODE)# 获取密码输入框元素werify_code_field = self.driver.find_element(*self.VERIFY_CODE_INPUT)# 模拟按下回车键werify_code_field.send_keys(Keys.RETURN)time.sleep(3)self.assertIn("index", self.driver.current_url.lower(), "Enter键提交未生效")# ==================== 辅助方法 ====================def _do_login(self):"""执行标准登录操作"""# 填写登录表单self._fill_login_form(self.VALID_USERNAME, self.VALID_PASSWORD, self.CORRECT_VCODE)# 点击登录按钮self.driver.find_element(*self.LOGIN_BUTTON).click()def _fill_login_form(self, username, password, vcode):"""填充登录表单"""# 清空并填写用户名self.driver.find_element(*self.USERNAME_INPUT).clear()self.driver.find_element(*self.USERNAME_INPUT).send_keys(username)# 清空并填写密码self.driver.find_element(*self.PASSWORD_INPUT).clear()self.driver.find_element(*self.PASSWORD_INPUT).send_keys(password)# 清空并填写验证码self.driver.find_element(*self.VERIFY_CODE_INPUT).clear()self.driver.find_element(*self.VERIFY_CODE_INPUT).send_keys(vcode)@classmethoddef tearDownClass(cls):"""测试结束后关闭浏览器"""# 关闭浏览器cls.driver.quit()# 停止服务cls.service.stop()if __name__ == "__main__":# 运行测试用例,设置详细输出级别unittest.main(verbosity=2)TOR, ".vcode-img")# 刷新验证码按钮定位REFRESH_BUTTON = (By.CSS_SELECTOR, ".refresh-vcode")# 欢迎消息定位WELCOME_MSG = (By.CSS_SELECTOR, ".welcome-msg")# 退出按钮定位LOGOUT_BUTTON = (By.CSS_SELECTOR, "body > div.tpshop-tm-hander.home-index-top.p > div > div > div > div.fl.islogin.hide > a:nth-child(2)")# 登陆成功后的用户名定位USERNAME_DISPLAY = (By.CSS_SELECTOR, "body > div.tpshop-tm-hander.home-index-top.p > div > div > div > div.fl.islogin.hide > a.red.userinfo")# 主页面内登录按钮SIGN_IN_BUTTON = (By.CSS_SELECTOR, "body > div.tpshop-tm-hander > div.top-hander > div > div > div.fl.nologin > a.red")@classmethoddef setUpClass(cls):"""类级别的前置方法,所有测试用例执行前只执行一次"""# ==================== 路径配置 ====================# Chrome浏览器路径cls.CHROME_PATH = r"D:\chrome-win64\chrome.exe"# ChromeDriver路径cls.CHROMEDRIVER_PATH = r"D:\chromedriver-win64\chromedriver.exe"# 测试基础URLcls.BASE_URL = "https://hmshop-test.itheima.net/Home/user/login.html"# ==================== 路径验证 ====================# 检查Chrome浏览器是否存在if not os.path.exists(cls.CHROME_PATH):raise FileNotFoundError(f"Chrome浏览器未在指定路径找到:{cls.CHROME_PATH}")# 检查ChromeDriver是否存在if not os.path.exists(cls.CHROMEDRIVER_PATH):raise FileNotFoundError(f"ChromeDriver未在指定路径找到:{cls.CHROMEDRIVER_PATH}")# ==================== 浏览器配置 ====================# 创建Chrome选项对象chrome_options = Options()# 指定Chrome浏览器路径chrome_options.binary_location = cls.CHROME_PATH# 启动时最大化窗口chrome_options.add_argument("--start-maximized")# 禁用信息栏chrome_options.add_argument("--disable-infobars")# 禁用扩展chrome_options.add_argument("--disable-extensions")# ==================== 初始化驱动 ====================# 创建ChromeDriver服务cls.service = Service(executable_path=cls.CHROMEDRIVER_PATH)# 创建Chrome浏览器实例cls.driver = webdriver.Chrome(service=cls.service, options=chrome_options)# 创建显式等待对象,超时时间10秒cls.wait = WebDriverWait(cls.driver, 7)# ==================== 测试数据 ====================# 有效的用户名cls.VALID_USERNAME = "15072442634"# 有效的密码cls.VALID_PASSWORD = "test01"# 正确的验证码cls.CORRECT_VCODE = "8888"# 错误的验证码cls.WRONG_VCODE = "9999"# 错误的密码cls.WRONG_PASSWORD = "wrongPwd"# 无效的用户名格式cls.INVALID_USERNAME = "123"# 空账号cls.EMPTY_USERNAME = ""# 空密码cls.EMPTY_PASSWORD = ""# 空验证码cls.EMPTY_VCODE  = ""# 未注册用户名cls.UNREGISTERED_USERNAME  = "15072442633"def setUp(self):"""每个测试用例前执行,用于测试用例的初始化"""# 打开测试URLself.driver.get(self.BASE_URL)# 等待用户名输入框加载完成self.wait.until(EC.presence_of_element_located(self.USERNAME_INPUT))# ==================== 功能测试用例 ====================def test_TC_LOGIN_F001(self):"""TC-LOGIN-F001 游客状态显示验证"""# 查找登录按钮元素login_link = self.driver.find_element(*self.LOGIN_BUTTON)# 断言登录按钮是否显示self.assertTrue(login_link.is_displayed(), "登录按钮未显示")def test_TC_LOGIN_F002(self):"""TC-LOGIN-F002 账号格式错误验证"""# 填写错误的账号格式self._fill_login_form(self.INVALID_USERNAME, self.VALID_PASSWORD, self.CORRECT_VCODE)# 点击登录按钮self.driver.find_element(*self.LOGIN_BUTTON).click()# 等待错误消息出现error_msg = self.wait.until(EC.visibility_of_element_located(self.ERROR_MESSAGE))# 断言错误消息是否包含"账号格式"self.assertIn("账号格式", error_msg.text, "账号格式错误错误提示不准确")def test_TC_LOGIN_F003(self):"""TC-LOGIN-F003 验证码错误验证"""# 填写错误的验证码self._fill_login_form(self.VALID_USERNAME, self.VALID_PASSWORD, self.WRONG_VCODE)# 点击登录按钮self.driver.find_element(*self.LOGIN_BUTTON).click()# 等待错误消息出现error_msg = self.wait.until(EC.visibility_of_element_located(self.ERROR_MESSAGE))# 断言错误消息是否包含"验证码"self.assertIn("验证码", error_msg.text, "验证码错误提示不准确")def test_TC_LOGIN_F004(self):"""TC-LOGIN-F004 密码错误验证"""# 填写错误的密码self._fill_login_form(self.VALID_USERNAME, self.WRONG_PASSWORD, self.CORRECT_VCODE)# 点击登录按钮self.driver.find_element(*self.LOGIN_BUTTON).click()# 等待错误消息出现error_msg = self.wait.until(EC.visibility_of_element_located(self.ERROR_MESSAGE))# 断言错误消息是否包含"密码"self.assertIn("密码", error_msg.text, "密码错误提示不准确")def test_TC_LOGIN_F005(self):"""TC-LOGIN-F005 账号为空错误验证"""# 填写空的账号self._fill_login_form(self.EMPTY_USERNAME, self.VALID_PASSWORD, self.CORRECT_VCODE)# 点击登录按钮self.driver.find_element(*self.LOGIN_BUTTON).click()# 等待错误消息出现error_msg = self.wait.until(EC.visibility_of_element_located(self.ERROR_MESSAGE))# 断言错误消息是否包含"账号格式"self.assertIn("用户名", error_msg.text, "账号不能为空错误提示不准确")self.assertIn("空", error_msg.text, "账号不能为空错误提示不准确")def test_TC_LOGIN_F006(self):"""TC-LOGIN-F006 密码为空错误验证"""# 填写空的密码self._fill_login_form(self.VALID_USERNAME, self.EMPTY_USERNAME, self.CORRECT_VCODE)# 点击登录按钮self.driver.find_element(*self.LOGIN_BUTTON).click()# 等待错误消息出现error_msg = self.wait.until(EC.visibility_of_element_located(self.ERROR_MESSAGE))# 断言错误消息是否包含"账号格式"self.assertIn("密码", error_msg.text, "密码不能为空错误提示不准确")self.assertIn("空", error_msg.text, "密码不能为空错误提示不准确")def test_TC_LOGIN_F007(self):"""TC-LOGIN-F007 验证码为空错误验证"""# 填写空的密码self._fill_login_form(self.VALID_USERNAME, self.VALID_PASSWORD, self.EMPTY_VCODE )# 点击登录按钮self.driver.find_element(*self.LOGIN_BUTTON).click()# 等待错误消息出现error_msg = self.wait.until(EC.visibility_of_element_located(self.ERROR_MESSAGE))# 断言错误消息是否包含"账号格式"self.assertIn("验证码", error_msg.text, "验证码不能为空错误提示不准确")self.assertIn("空", error_msg.text, "验证码不能为空错误提示不准确")def test_TC_LOGIN_F008(self):"""TC-LOGIN-F008 账号未注册错误验证"""# 填写错误的账号格式self._fill_login_form(self.UNREGISTERED_USERNAME, self.VALID_PASSWORD, self.CORRECT_VCODE)# 点击登录按钮self.driver.find_element(*self.LOGIN_BUTTON).click()# 等待错误消息出现error_msg = self.wait.until(EC.visibility_of_element_located(self.ERROR_MESSAGE))# 断言错误消息是否包含"账号格式"self.assertIn("不存在", error_msg.text, "账号格式错误错误提示不准确")def test_TC_LOGIN_F009(self):"""TC-LOGIN-F009 登录后状态更新验证"""# 执行登录操作self._do_login()# 等待用户名输入框可见username_display = self.wait.until(EC.visibility_of_element_located(self.USERNAME_DISPLAY))# 等待退出按钮可见logout_btn = self.wait.until(EC.visibility_of_element_located(self.LOGOUT_BUTTON))# 断言用户名显示是否正确self.assertEqual(username_display.get_attribute("text"), self.VALID_USERNAME, "用户名显示不正确")# 断言退出按钮是否显示self.assertTrue(logout_btn.is_displayed(), "安全退出按钮未显示")self.driver.find_element(*self.LOGOUT_BUTTON).click()self.driver.find_element(*self.SIGN_IN_BUTTON).click()def test_TC_LOGIN_F010(self):"""TC-LOGIN-F010 登录成功跳转验证"""# 执行登录操作self._do_login()# 断言当前URL是否包含"index"time.sleep(3)self.assertIn("index", self.driver.current_url.lower(), "未正确跳转到我的商城页")self.driver.find_element(*self.LOGOUT_BUTTON).click()self.driver.find_element(*self.SIGN_IN_BUTTON).click()def test_TC_LOGIN_F011(self):"""TC-LOGIN-F011 安全退出功能验证"""# 执行登录操作self._do_login()time.sleep(3)# 点击退出按钮self.driver.find_element(*self.LOGOUT_BUTTON).click()self.driver.find_element(*self.SIGN_IN_BUTTON).click()time.sleep(3)# 等待登录按钮出现login_link = self.wait.until(EC.presence_of_element_located(self.LOGIN_BUTTON))# 断言登录按钮是否显示self.assertTrue(login_link.is_displayed(), "未返回游客状态")# ==================== 易用性测试用例 ====================def test_TC_LOGIN_U001(self):"""TC-LOGIN-U001 输入框自动聚焦验证"""# 获取当前焦点元素active_element = self.driver.switch_to.active_element# 断言焦点是否在用户名输入框self.assertEqual(active_element.get_attribute("id"), "username", "未自动聚焦到账号输入框")def test_TC_LOGIN_U002(self):"""TC-LOGIN-U002 快捷键支持验证"""# 填写登录表单self._fill_login_form(self.VALID_USERNAME, self.VALID_PASSWORD, self.CORRECT_VCODE)# 获取密码输入框元素werify_code_field = self.driver.find_element(*self.VERIFY_CODE_INPUT)# 模拟按下回车键werify_code_field.send_keys(Keys.RETURN)time.sleep(3)self.assertIn("index", self.driver.current_url.lower(), "Enter键提交未生效")# ==================== 辅助方法 ====================def _do_login(self):"""执行标准登录操作"""# 填写登录表单self._fill_login_form(self.VALID_USERNAME, self.VALID_PASSWORD, self.CORRECT_VCODE)# 点击登录按钮self.driver.find_element(*self.LOGIN_BUTTON).click()def _fill_login_form(self, username, password, vcode):"""填充登录表单"""# 清空并填写用户名self.driver.find_element(*self.USERNAME_INPUT).clear()self.driver.find_element(*self.USERNAME_INPUT).send_keys(username)# 清空并填写密码self.driver.find_element(*self.PASSWORD_INPUT).clear()self.driver.find_element(*self.PASSWORD_INPUT).send_keys(password)# 清空并填写验证码self.driver.find_element(*self.VERIFY_CODE_INPUT).clear()self.driver.find_element(*self.VERIFY_CODE_INPUT).send_keys(vcode)@classmethoddef tearDownClass(cls):"""测试结束后关闭浏览器"""# 关闭浏览器cls.driver.quit()# 停止服务cls.service.stop()if __name__ == "__main__":# 运行测试用例,设置详细输出级别unittest.main(verbosity=2)

(三)自动化测试运行结果

在这里插入图片描述

(四)错误分析

错误类型出现频率根本原因解决方案
元素定位失败3次动态ID未使用XPath改用CSS选择器
异步加载超时5次默认等待时间不足增加显式等待

玖、测试结论

(一)质量评估

优势项:
✓ 核心登录流程功能完整
✓ 自动化测试覆盖率达85%
✓ 基础安全防护有效

待改进:
✗ 异常处理响应速度需优化
✗ 移动端兼容性问题较多

(二)改进建议

  1. 测试方面:
    • 增加模糊测试用例覆盖率(当前仅60%)
    • 实现自动化测试失败自动截图功能
  2. 开发方面:
    • 优化数据库索引提升查询性能
    • 增加登录失败日志审计功能
  3. 流程方面:
    • 建立自动化测试与CI/CD流水线的强制门禁

壹拾、TP商城登录系统测试总结

本次测试针对TP商城V3.0.0的登录模块进行了全面的功能、易用性及安全验证。测试覆盖了17项手工用例(通过率94.1%)和13项自动化用例(通过率100%),核心流程(如凭证校验、状态跳转、安全退出)均符合需求。发现的主要问题包括密码可见性功能缺失(易用性缺陷)和安全需求描述不完整(如密码加密方式未明确),已提交改进建议。

后续优化方向:

  1. 安全强化: 补充HTTPS传输与哈希存储的强制要求;
  2. 体验提升: 增加密码显示开关和第三方登录流程;
  3. 自动化增强: 集成CI/CD门禁,补充移动端兼容性测试。

整体系统稳定性良好,需重点关注安全合规性与交互细节优化。

http://www.dtcms.com/wzjs/46886.html

相关文章:

  • 建设企业网站要多少钱企业推广托管
  • 广州那家做网站最好哪家公司网站做得好
  • 在线旅游网站建设方案关键词优化设计
  • 一般做网站用什么语言百度seo高级优化
  • 奶茶网站建设方案模板西地那非片的正确服用方法
  • 宝安中心做网站软文广告经典案例短的
  • 青海省公路建设总公司网站企业培训师
  • dedecms 做门户网站关键词分析软件
  • 番禺是哪里汕头seo计费管理
  • 做脚本从网站引流怎样在百度上免费做广告
  • 网站做的是哪方面的内容新闻式软文经典案例
  • 帝国做的网站删除域名后缀怀化seo推广
  • 根据网站做软件seo技术306
  • 山东天狐做网站cms营销型网站建设公司价格
  • 佛山南海疫情最新公布天津seo排名
  • 草妹妹影视网站建设中网络营销策划书800字
  • 中山建网站哪家好百度搜索引擎怎么做
  • 网站建设交易中心培训机构专业
  • java可以做博客网站吗百度的广告推广需要多少费用
  • 免费电视剧网站大全在线观看色盲
  • java网站开发论文江阴网站优化公司
  • dw个人网站制作教程信阳seo优化
  • wordpress注册链接修改福州seo管理
  • 海络网站短链接在线生成免费
  • 宝贝我想跟你做网站企业网站推广方案设计
  • 做商城网站要哪些流程图如何发布一个网站
  • 麻涌网站建设软件外包公司有前途吗
  • wordpress系统怎样下载嘉兴seo计费管理
  • 做网站背景的图深圳网站设计公司哪家好
  • 响应式网站建设方案论坛推广怎么做