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

卷王问卷考试系统—测试报告

目录

1 项目背景

1.1 项目介绍

1.2 测试目标

2 测试概述

2.1 测试安排

2.2 测试环境

2.2.1 硬件环境

2.2.2 软件环境

2.2.3 测试工具

3 测试分类

3.1界面测试

3.1.1 测试目的

3.1.2 测试内容

3.1.3 界面测试结果分析

3.2功能测试

3.2.1 功能测试用例图

3.2.2 功能测试

3.2.3 功能测试结果分析

3.3自动化测试

3.3.1 自动化测试覆盖范围

3.3.2 自动化代码示例

项目结构

commom.py

registerTest.py

loginTest.py

homeTest.py

myprojectTest.py

mypracticeTest.py

qbcenterTest.py

mouldplazaTest.py

systemmangeTest.py

3.3.3 自动化测试结果分析

3.4 性能测试

3.4.1 性能测试覆盖范围

3.4.2 性能测试展示

登录测试

4 测试分析与总结

4.1 风险遗留

4.2 测试分析

4.3 测试总结


1 项目背景

1.1 项目介绍

卷王问卷考试系统是一个管理、收集问卷和考试的系统,用户可以自定义问卷和考卷,发布出去之后可以收集用户所填写的信息。该系统的内容丰富,自定义化程度高,旨在为用户提供便捷的问卷创建,发布,数据 收集以及考试组织功能。

测试网址:问卷考试系统

1.2 测试目标

本次测试针对此问卷考试系统进行核心功能的测试,包括:

  • 用户的登陆与注册
  • “我的项目”模块
  • “我的练习”模块
  • “题库中心”模块
  • “模板广场”模块
  • “系统管理”模块

2 测试概述

2.1 测试安排

模块子模块测试人员测试工时测试结果
登录和注册登录和注册功能本人0.5d测试完成
“我的项目”创建、编辑、查看和搜索项目本人0.5d测试完成
“我的练习”列表页面的查看、搜索和题库的练习、查看本人1d测试完成
“题库中心”“我的题库”、“问题管理”、“我的笔记”本人1d测试完成
“模板广场”模板的下载、应用、删除和搜索本人1d测试完成
“系统管理”个人设置本人0.5d测试完成

2.2 测试环境

2.2.1 硬件环境

  • 电脑名称:Dell G15 5515
  • CPU:AMD Ryzen 5 5600H
  • 显卡:NVIDIA GeForce RTX 3050
  • 内存:16GB
  • 硬盘:1024GB

2.2.2 软件环境

  • 操作系统:windows 10 x64
  • 浏览器:Edge 139.0.3405.102 

2.2.3 测试工具

  • JMeter
  • Postman
  • Selenium

3 测试分类

3.1界面测试

3.1.1 测试目的

验证界面内容显示的完整性、一致性、准确性、友好性。验证整个界面布局和排版是否合理,不同板块字体的设计,图片的展示是否符合需求,无效的状态是否设计合理,界面的布局和色调是否正常。

3.1.2 测试内容

  • 登录界面
测试点操作步骤预期结果实际结果结论
标题显示查看页面标题显示“问卷调查”系统显示“问卷调查”系统通过
用户名输入框检查输入框样式以及是否能输入输入框样式清晰,可输入数值输入框样式清晰,可输入数值通过
密码输入框检查输入框样式以及是否能输入输入框样式清晰,可输入数值输入框样式清晰,可输入数值通过
"显示密码"按钮检查按钮是否显示或隐藏密码点击后显示密码、再次点击后隐藏密码点击后显示密码、再次点击后隐藏密码通过
"注册账户"链接检查链接样式以及是否能跳转蓝色文字链接“注册账户”,点击后可跳转至注册界面蓝色文字链接“注册账户”,点击后可跳转至注册界面通过
“登录”按钮检查按钮样式以及能否登录蓝色按钮白字按钮“登录”,点击后可跳转至首页界面蓝色按钮白字按钮“登录”,点击后可跳转至首页界面通过
中英文转换按钮检查页面右上方中英文转换按钮点击后可进行中英文切换点击后可进行中英文切换通过
  • 注册界面
测试点操作步骤预期结果实际结果结论
标题显示查看页面标题显示“问卷调查”系统显示“问卷调查”系统通过
用户名、密码和确认密码输入框检查输入框样式以及是否能输入输入框样式清晰,可输入数值输入框样式清晰,可输入数值通过
“显示密码”按钮检查按钮是否显示或隐藏密码击后显示密码、再次点击后隐藏密码击后显示密码、再次点击后隐藏密码通过
“返回登录”链接检查链接样式以及是否能跳转蓝色文字链接“返回登录”,点击后可跳转至登录界面蓝色文字链接“返回登录”,点击后可跳转至登录界面通过
“注册账户”按钮检查按钮样式以及能否登录蓝色按钮白字按钮“登录”,点击后可跳转至登录界面蓝色按钮白字按钮“登录”,点击后可跳转至登录界面通过
中英文转换按钮检查页面右上方中英文转换按钮点击后可进行中英文切换点击后可进行中英文切换通过
  • 首页
测试点操作步骤预期结果实际结果结论
系统标题查看页面标题显示“问卷调查”系统显示“问卷调查”系统通过
左侧导航栏检查导航栏菜单项(首页、我的项目、我的练习、题库中心、模板广场、系统管理 )菜单项名称正确、样式统一,可点击展开 / 收起菜单项名称正确、样式统一,可点击展开 / 收起通过
上方路径栏查看页面上方路径(首页 / 首页 )显示当前位置路径,清晰指引层级显示 “首页 / 首页”,层级清晰通过
欢迎信息看欢迎语(晚上好,Admin,祝你开心每一天!)文字显示正确、排版合理文字显示正确、排版合理通过
数据展示栏检查“我的考试”、“我的问卷”、“问卷记录”和“考试记录”的完整性创建的问卷、试卷信息显示在该界面创建的问卷、试卷信息显示在该界面通过
数据统计区检查 “问卷数” “考试数” 展示数据显示清晰,数字准确数据显示清晰,数字准确通过
右侧便捷操作检查 “创建问卷”“创建考试” 按钮按钮样式统一、文字清晰,可点击按钮样式统一、文字清晰,可点击通过
右上角综合控制键检查“官方文档”、“设置”按钮是否可用按钮可点击,排版合理按钮可点击,排版合理通过
  • 我的项目
测试点操作步骤预期结果实际结果结论
上方路径栏查看页面上方标题显示 “我的项目”,与左侧导航栏选中项匹配显示 “我的项目”,匹配一致通过
左侧导航栏检查 “我的项目” 选中状态及其他菜单项“我的项目” 高亮显示,其他菜单项(首页、我的练习等)样式正常“我的项目” 高亮,其他菜单项正常通过
搜索功能检查搜索框及搜索按钮搜索框有 “搜索项目名称” 占位符,按钮可点击搜索框占位符正常,按钮可点击通过
项目卡片检查卡片展示内容(名称、类型、状态、数据量 )卡片显示项目名称、类型(问卷 / 考试)、状态(收集中 / 未发布等)、数据量,样式统一卡片内容显示完整、样式统一通过
项目操作按钮检查卡片下方操作按钮(编辑、数据查看等图标 )按钮图标清晰、可点击,功能标识明确按钮清晰、可点击通过
“新建” 按钮检查页面右上角 “新建” 按钮蓝色按钮,显示 “+ 新建”,可点击按钮样式正常、可点击通过
  • 我的练习
测试点操作步骤预期结果实际结果结论
上方路径栏查看页面上方标题显示 “我的练习”,与左侧导航栏选中项匹配显示 “我的练习”,匹配一致通过
左侧导航栏检查 “我的练习” 选中状态及其他菜单项“我的练习” 高亮显示,其他菜单项(首页、我的练习等)样式正常“我的练习“ 高亮,其他菜单项正常通过
筛选组件检查状态下拉框、“重置”“查询” 按钮下拉框显示 “请选择”,按钮可点击、样式清晰组件显示及交互正常通过
练习列表验证表头与数据展示表头(练习名称、进度等 )完整,练习数据(如 “人口属性” )显示清晰列表数据展示正常通过
操作按钮检查 “查看结果”“二维码”“删除” 按钮按钮图标清晰、可点击,功能标识明确按钮图标清晰、可点击,功能标识明确通过
  • 题库中心
测试点操作步骤预期结果实际结果结论
页面路径检查 “首页 / 题库中心 / 我的题库” 路径路径清晰展示层级,与左侧导航匹配路径正常显示,匹配 “我的题库” 选中状态通过
左侧导航栏验证 “题库中心” 展开及 “我的题库” 选中题库中心” 展开显示子菜单(我的题库、问题管理等 ),“我的题库” 高亮导航展开与选中状态正确通过
筛选组件检查名称输入框、类型下拉框、“重置”“查询” 按钮输入框有 “请输入” 占位,下拉框显示 “请选择”,按钮可点击组件显示及交互正常通过
题库列表验证表头与数据展示表头(名称、类型、共享题库等 )完整,题库数据(如类型 “问卷”、题目数量 )显示清晰表头中“名称、类型”两项显示不完整不通过
操作按钮检查 “新建”“导出”“文本导入”“试题管理” 按钮按钮样式统一、可点击,功能标识明确按钮交互正常通过
  • 模板广场
测试点操作步骤预期结果实际结果结论
上方状态栏检查 “首页 / 模板广场显示”模板广场“,与左侧导航匹配显示 “模板广场”,匹配一致通过
左侧导航栏检查 “模板广场” 选中状态及其他菜单项“模板广场” 高亮显示,其他菜单项(首页、我的练习等)样式正常导航展开与选中状态正确通过
”模板“搜索框检查搜索框的样式以及可用性搜索框可输入内容,并且对当前内容进行搜索组件显示及交互正常通过
模板展示列表验证列表的可用性可以通过列表进行模板筛选组件显示及交互正常通过
模板组件验证模板是否能下载、删除、浏览和应用组件显示及交互正常组件显示及交互正常通过
”添加模板“按钮验证按钮的外观、可用性按钮外观符合主题、可点击按钮外观符合主题、可点击通过
  • 系统管理
测试点操作步骤预期结果实际结果结论
左侧导航栏验证 “系统管理” 展开及 “个人设置” 选中系统设置” 展开显示子菜单,“系统管理” 高亮导航展开与选中状态正确通过
”个人设置“页面验证”个人设置“页面上的显示和交互页面设计合理,界面可交互页页面设计合理,界面可交互通过
“用户管理”页面验证”用户管理“页面上的显示和交互页面设计合理,界面可交互页面设计合理,界面可交互通过

3.1.3 界面测试结果分析

  • 测试用例:70例
  • 发现bug:1个;1个次要bug
  • bug详情:
  1. 题库中心(次要):题库列表中排版不规范导致信息显示不全
  • 测试通过率:98.85%

3.2功能测试

3.2.1 功能测试用例图

3.2.2 功能测试

因该系统的功能较多,所以只选取部分有效功能和bug进行展示

  • 登录界面

输入正确的用户名和密码时 ,成功登录

只输入其中一项或者都不输入时,登录失败

输入正确的一项和错误的一项时,登录失败

sql注入攻击,失败

  • 注册界面

输入正确的信息,注册成功

输入已经注册过的账户,注册失败

输入长度为24的用户名和密码,注册成功

密码与确认密码不同时,注册失败

部分注册信息不填写时,注册失败

密码数少于6位时,注册失败

  • 首页

可通过路径栏快速回到首页

可通过便捷栏快速创建问卷和试卷

bug(一般):创建好的试卷和问卷无法显示在列表中

右上角的操作按钮可用,并且排版合理

bug(一般):并不能为用户进行答疑解惑

风格设置栏可用且布局合理

  • 我的题库

可以通过上方路径栏回到首页

可以对问卷进行创建和修改

可通过二维码或地址进行问卷的填写

bug(一般):填写问卷中无法选定位置信息

问卷填写一半退出时会保存进度,方便下一次继续填写

用户填写后可进行数据分析与展示

可对每个项目进行更改操作

“新建项目”按钮可用

搜索栏可用

  • 我的练习

选择栏可正常选择并筛选出正确的列表

“继续答题”、“查看结果”、“二维码”和删除功能均能正常使用

    题目搜索功能能正常使用并且搜索正确

    练习功能能正常使用

    • 题库中心

    搜索框和选择框能正常使用

    列表上的功能均能正常使用

    “新建题库”按钮能进行题库的创建

    bug(一般):“导出”按钮失效,无法导出题库

    • 模板广场

    “添加模板”按钮可用,点击后会进行创建

    bug(一般):无法搜索模板

    分类功能正常并且能对模板进行筛选

    模板可进行删除、下载、浏览和应用

    • 系统管理

    能对账户进行基本的设置功能

    bug(次要):重置密码时新密码可以和旧密码相同

    bug(一般):修改密码时密码可以小于6位数

    3.2.3 功能测试结果分析

    • 测试用例:80例
    • 发现bug:7个;6个一般bug、1个次要bug
    • bug详情:
    1. 首页(一般):展示出错,数据展示栏中无法显示试卷和问卷的信息
    2. 官方文档(一般):功能不全,在输入框中输入用户疑问时并不能为其解答
    3. 我的项目(一般):填写问卷中无法选定位置信息
    4. 题库中心(一般):在“我的题库”页面中无法导出题库
    5. 模板广场(一般):搜索栏无法搜索模板
    6. 系统管理(一般):在重置密码时可以设置少于6位数的密码
    7. 系统管理(次要):在重置密码时新密码可以和旧密码相同
    • 测试通过率:91.25%

    3.3自动化测试

    3.3.1 自动化测试覆盖范围

    • 注册界面:正确的注册、错误的注册、“返回账户”按钮
    • 登录界面:正确的登录、错误的登录、“注册账户”按钮
    • 首页:便捷操作、列表切换、“设置”按钮、“官方文档”按钮
    • 我的项目:新建项目、搜索项目、项目卡片
    • 我的练习:分类查询、练习列表的各项操作
    • 题库中心-我的模板:题库列表的各项操作、查询、新建题库
    • 模板广场:新建模板、模板的分类搜索
    • 系统管理-个人设置:更改密码、更改个人信息

    3.3.2 自动化代码示例

    项目结构

    commom.py

    公共类,用来存放驱动,管理截图

    import datetime
    import os.path
    import sys
    import timefrom selenium import webdriver
    from selenium.webdriver import ActionChains, Keys
    from selenium.webdriver.chrome.service import Service
    from webdriver_manager.chrome import ChromeDriverManagerclass Driver:driver=""def __init__(self):chrome_driver_path = "D:/chromedriver-win64/chromedriver.exe"options = webdriver.ChromeOptions()self.driver = webdriver.Chrome(service=Service(chrome_driver_path),options=options)# 添加隐式等待:因为隐式等待的作用域在driver的整个生命周期self.driver.implicitly_wait(3)def getScreenShot(self):# 创建屏幕截图# 图片文件名称:年-月-日-时分秒.png# 根据每天的日期进行分类,当天运行的自动化图片文件放到当天的文件夹下# 图片路径:../images/日期/图片名称.pngdirname = datetime.datetime.now().strftime("%Y-%m-%d")# 判断dirname文件夹是否已经存在,若不存在则创建文件夹# ../images/日期if not os.path.exists("../images/"+dirname):os.mkdir("../images/"+dirname)# 图片名称:方法名-日期-时分秒.pngfilename = sys._getframe().f_back.f_code.co_name+"-"+datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S")+".png"self.driver.save_screenshot("../images/"+dirname+"/"+filename)# 由于项目外层不是一个单纯的input标签,而是组件封装之后的,所以不能使用selenium中的clear()# 清空指定输入框的内容def clear(self, element):actions = ActionChains(self.driver)actions.click(element)  # 点击元素actions.key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL)  # Ctrl+Aactions.send_keys(Keys.DELETE)  # 删除actions.perform()  # 执行所有动作autoTest=Driver()
    registerTest.py

    注册测试

    import time
    from selenium.webdriver.common.by import By
    from common.common import autoTestclass registerTest:url=""driver=""def __init__(self):self.url=url="http://8.155.1.153:8081/user/register"self.driver=autoTest.driverself.driver.get(self.url)#注册成功测试用例def registerSuccess(self):#清空注册栏autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#name"))autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#rePassword"))#输入正确的账户和密码self.driver.find_element(By.CSS_SELECTOR,"#name").send_keys("jacklove")self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("jacklove")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("jacklove")self.driver.find_element(By.CSS_SELECTOR,"#rePassword").send_keys("jacklove")self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___1k5Ro > div.main___19HXK > div > form > button").click()time.sleep(1)# 如果能跳转到登录页面,说明注册成功,否则注册失败self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button > span")# 添加屏幕截图autoTest.getScreenShot()#################################################################################################################注册失败测试用例def registerFail(self):# 测试1:所有信息都不填写autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#name"))autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#rePassword"))self.driver.find_element(By.CSS_SELECTOR, "#name").send_keys("")self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("")self.driver.find_element(By.CSS_SELECTOR, "#rePassword").send_keys("")self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___1k5Ro > div.main___19HXK > div > form > button").click()time.sleep(1)autoTest.getScreenShot()#测试2:只填写部分信息autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#name"))autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#rePassword"))self.driver.find_element(By.CSS_SELECTOR, "#name").send_keys("jacklove7")self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#rePassword").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___1k5Ro > div.main___19HXK > div > form > button").click()time.sleep(1)autoTest.getScreenShot()#测试3:填写已经注册过的用户autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#rePassword"))self.driver.find_element(By.CSS_SELECTOR, "#name").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#rePassword").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___1k5Ro > div.main___19HXK > div > form > button").click()time.sleep(1)autoTest.getScreenShot()#测试4:注册时密码和确认密码不一致autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#rePassword"))self.driver.find_element(By.CSS_SELECTOR, "#name").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#rePassword").send_keys("654321")self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___1k5Ro > div.main___19HXK > div > form > button").click()time.sleep(1)autoTest.getScreenShot()#测试5:注册密码少于6位数autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#rePassword"))self.driver.find_element(By.CSS_SELECTOR, "#name").send_keys("jacklove7")self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("jacklove")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")self.driver.find_element(By.CSS_SELECTOR, "#rePassword").send_keys("123")self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___1k5Ro > div.main___19HXK > div > form > button").click()time.sleep(1)autoTest.getScreenShot()# register=registerTest()
    # register.registerSuccess()
    # register.registerFail()# autoTest.driver.quit()
    loginTest.py

    登录测试

    import time
    from selenium.webdriver.common.by import By
    from common.common import autoTest#测试问卷考试系统登录页面
    class loginTest:driver=""url=""def __init__(self):self.url="http://8.155.1.153:8081/user/login"self.driver=autoTest.driverself.driver.get(self.url)#登录成功测试用例def loginSuccess(self):#清空输入框autoTest.clear(self.driver.find_element(By.CSS_SELECTOR,"#username"))#清空密码框autoTest.clear(self.driver.find_element(By.CSS_SELECTOR,"#password"))#输入账户和密码,点击登录self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button").click()#如果能够找到问卷考试系统首页用户的昵称,说明登录成功,否则登陆失败self.driver.find_element(By.XPATH,"/html/body/div[1]/div/div/div/section/div[2]/header[2]/div/div[3]/div/div/div/span/div/span[2]")#添加屏幕截图autoTest.getScreenShot()############################################################################################################登录失败测试用例def loginFail(self):#测试1:输入错误的用户名和密码autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("jkl")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("jkl")self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button").click()# 验证是否登陆失败actual = self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > div.ant-alert.ant-alert-error > div > div").textprint(f"提示信息: {actual}")# 添加屏幕截图autoTest.getScreenShot()assert actual == "错误的用户名和密码"#测试2:输入正确的用户名和错误的密码autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("jkl")self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button").click()# 验证是否登陆失败actual = self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > div.ant-alert.ant-alert-error > div > div").textprint(f"提示信息: {actual}")# 添加屏幕截图autoTest.getScreenShot()#测试3:不输入用户名和密码autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("")self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button").click()# 验证是否登陆失败actual = self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > div.ant-alert.ant-alert-error > div > div").textprint(f"提示信息: {actual}")# 添加屏幕截图autoTest.getScreenShot()#测试4:只输入用户名不输入密码autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))autoTest.clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("")self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button").click()# 验证是否登陆失败actual = self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > div.ant-alert.ant-alert-error > div > div").textprint(f"提示信息: {actual}")# 添加屏幕截图autoTest.getScreenShot()# login=loginTest()
    # login.loginSuccess()
    # login.loginFail()# autoTest.driver.quit()
    homeTest.py

    首页测试

    import time
    from selenium.webdriver.common.by import By
    from webdriver_manager.core import driver
    from common.common import autoTestclass homeTest:url=""driver=""def __init__(self):#需要先登录才能进主页面self.url="http://8.155.1.153:8081/user/login"self.driver=autoTest.driverself.driver.get(self.url)self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button").click()# 测试1:验证便捷操作中的”创建问卷“和”创建考试“是否可用def convenientOperation(self):# 先进入”创建问卷“并截图,退出后在进入”创建考试“并截图self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div.ant-col.ant-col-xs-24.ant-col-sm-24.ant-col-md-24.ant-col-lg-24.ant-col-xl-8 > div > div.ant-card-body > div > a:nth-child(1)").click()time.sleep(3)autoTest.getScreenShot()self.driver.back()self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div.ant-col.ant-col-xs-24.ant-col-sm-24.ant-col-md-24.ant-col-lg-24.ant-col-xl-8 > div > div.ant-card-body > div > a:nth-child(2)").click()time.sleep(3)autoTest.getScreenShot()#测试2:验证首页上的按钮是否可用def btn_is_available(self):#点击”问卷记录“并截图    采用模糊匹配self.driver.find_element(By.CSS_SELECTOR, 'div[id*="tab-surveyHistory"].ant-tabs-tab-btn')  .click()time.sleep(1)autoTest.getScreenShot()#测试3:能否进入”官方文档“def officalDocument(self):self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > header.ant-layout-header.ant-pro-layout-header.ant-pro-layout-header-fixed-header.ant-pro-layout-header-mix.ant-pro-layout-header-header > div > div.ant-pro-global-header-right-content > div > div > div > div:nth-child(1) > span > svg").click()time.sleep(7)#因为是一个新窗口,所以要判断窗口curHandle=self.driver.current_window_handleallHandles=self.driver.window_handlesfor handle in allHandles:if handle != curHandle:self.driver.switch_to.window(handle)autoTest.getScreenShot()#测试4:点击“设置”按钮并退出登录def setting(self):#先点击设置按钮self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > header.ant-layout-header.ant-pro-layout-header.ant-pro-layout-header-fixed-header.ant-pro-layout-header-mix.ant-pro-layout-header-header > div > div.ant-pro-global-header-right-content > div > div > div > div:nth-child(2) > span > svg").click()time.sleep(1)#再点击“退出登录”按钮,采用模糊匹配self.driver.find_element(By.XPATH, "//span[contains(@class, 'ant-dropdown-menu-title-content') and contains(text(), '退出登录')]").click()time.sleep(1)autoTest.getScreenShot()# home=homeTest()
    # home.convenientOperation()
    # home.btn_is_available()
    # home.officalDocument()
    # home.setting()# autoTest.driver.quit()
    myprojectTest.py

    我的项目测试

    import time
    from selenium.webdriver.common.by import By
    from common.common import autoTestclass myprojectTest:url=""driver=""def __init__(self):self.url="http://8.155.1.153:8081/user/login"self.driver=autoTest.driverself.driver.get(self.url)#需要先从登录界面登录self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button").click()#测试1:是否能进入“我的项目”页面def in_myproject(self):time.sleep(1)self.driver.find_element(By.XPATH, '//li[contains(@title, "项目")]').click()#测试2:搜索框测试def search(self):self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-page-header.ant-pro-page-container-warp-page-header.ant-pro-page-container-warp-page-header.ant-page-header-has-breadcrumb.ant-page-header-ghost > div.ant-page-header-content > div > div > div > div > div > div > div > span > span > input").send_keys("测试1")self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-page-header.ant-pro-page-container-warp-page-header.ant-pro-page-container-warp-page-header.ant-page-header-has-breadcrumb.ant-page-header-ghost > div.ant-page-header-content > div > div > div > div > div > div > div > span > span > span > button").click()time.sleep(1)autoTest.getScreenShot()#测试3:点击项目卡片def item_clicked(self):self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div.ant-list.ant-list-split.ant-list-grid.survey-home-content > div > div > div > div:nth-child(1) > div > div > div > div").click()time.sleep(2)autoTest.getScreenShot()#测试4:“新建问卷”按钮def new_add(self):self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-page-header.ant-pro-page-container-warp-page-header.ant-pro-page-container-warp-page-header.ant-page-header-has-breadcrumb.ant-page-header-ghost > div.ant-page-header-heading > span > div > div > button").click()time.sleep(2)autoTest.getScreenShot()# myproject=myprojectTest()# myproject.in_myproject()
    # myproject.search()
    # myproject.item_clicked()
    # myproject.new_add()# autoTest.driver.quit()
    mypracticeTest.py

    我的练习测试

    import time
    from selenium.webdriver.common.by import By
    from common.common import autoTestclass mypracticeTest:url=""driver=""def __init__(self):self.url = "http://8.155.1.153:8081/user/login"self.driver = autoTest.driverself.driver.get(self.url)# 需要先从登录界面登录self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button").click()#切换到“我的练习”页面self.driver.find_element(By.XPATH, '//li[contains(@title, "练习")]').click()#测试1:"继续答题"按钮测试def continueCheck(self):self.driver.find_element( By.XPATH,"//div[contains(@class, 'ant-space-item')]//a[contains(text(), '继续答题')]").click()time.sleep(3)autoTest.getScreenShot()#测试2:“二维码”按钮测试def codeCheck(self):self.driver.find_element(By.XPATH,"//div[contains(@class, 'ant-space-item')]//a[contains(text(), '二维码')]").click()time.sleep(2)autoTest.getScreenShot()#测试3:“设置”按钮测试def setCheck(self):self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div.ant-pro-table > div:nth-child(2) > div > div.ant-pro-table-list-toolbar > div > div.ant-space.ant-space-horizontal.ant-space-align-center.ant-pro-table-list-toolbar-right > div > div > div:nth-child(3)").click()time.sleep(2)autoTest.getScreenShot()# mypractice=mypracticeTest()
    # mypractice.continueCheck()
    # mypractice.codeCheck()
    # mypractice.setCheck()
    #
    # autoTest.driver.quit()
    qbcenterTest.py

    题库中心测试

    import time
    from selenium.webdriver.common.by import By
    from common.common import autoTestclass qbcenterTest:url=""driver=""def __init__(self):self.url = "http://8.155.1.153:8081/user/login"self.driver = autoTest.driverself.driver.get(self.url)# 需要先从登录界面登录self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button").click()time.sleep(2)self.driver.get("http://8.155.1.153:8081/repo/index")#测试1:是否能进入“我的题库”def myqb(self):time.sleep(2)self.driver.get("http://8.155.1.153:8081/repo/index")time.sleep(1)autoTest.getScreenShot()#测试2:验证名称搜索是否可用def name_search(self):self.driver.find_element(By.CSS_SELECTOR,"#name").send_keys("高数")self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div.ant-pro-card.ant-pro-table-search.ant-pro-table-search-query-filter > form > div > div:nth-child(3) > div > div > div.ant-col.ant-form-item-control > div > div > div > div > div > div:nth-child(2) > button").click()time.sleep(1)autoTest.getScreenShot()#测试3:”新建“按钮测试def new_add(self):self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div:nth-child(2) > div > div.ant-pro-table-list-toolbar > div > div.ant-space.ant-space-horizontal.ant-space-align-center.ant-pro-table-list-toolbar-right > div:nth-child(1) > div > div:nth-child(1) > button").click()time.sleep(1)autoTest.getScreenShot()#测试4:”文本导入“、”模板导入“和”试题管理“测试def operation(self):#"文本导入"测试self.driver.find_element(By.XPATH,"//div[contains(@class, 'ant-space-item')]//a[contains(text(), '文本导入')]").click()time.sleep(3)autoTest.getScreenShot()self.driver.get("http://8.155.1.153:8081/repo/index")# "模板导入"测试self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div:nth-child(2) > div > div.ant-table-wrapper > div > div > div > div > div > table > tbody > tr:nth-child(5) > td:nth-child(9) > div > div:nth-child(2)").click()time.sleep(3)autoTest.getScreenShot()self.driver.get("http://8.155.1.153:8081/repo/index")# "试题管理"测试self.driver.find_element(By.XPATH,"//div[contains(@class, 'ant-space-item')]//a[contains(text(), '试题管理')]").click()time.sleep(3)autoTest.getScreenShot()# qbcenter=qbcenterTest()
    # qbcenter.myqb()
    # qbcenter.name_search()
    # qbcenter.new_add()
    # qbcenter.operation()
    #
    # autoTest.driver.quit()
    mouldplazaTest.py

    模板广场测试

    import time
    from selenium.webdriver.common.by import By
    from common.common import autoTestclass mouldplazaTest:url=""driver = ""def __init__(self):self.url = "http://8.155.1.153:8081/user/login"self.driver = autoTest.driverself.driver.get(self.url)# 需要先从登录界面登录self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button").click()#进入模板广场界面time.sleep(1)self.driver.get("http://8.155.1.153:8081/template")#测试1:"添加模板"按钮测试def add_mould(self):self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-page-header.ant-pro-page-container-warp-page-header.ant-pro-page-container-warp-page-header.ant-page-header-has-breadcrumb.ant-page-header-has-footer.ant-page-header-ghost > div.ant-page-header-heading > span > div > div > button").click()time.sleep(2)autoTest.getScreenShot()#内容测试self.driver.find_element(By.CSS_SELECTOR,"#editor > div.survey-main-panel > div.survey-main-panel-toolbar > div:nth-child(2) > div > button:nth-child(5)").click()time.sleep(1)autoTest.getScreenShot()# 输入新增模板名称self.driver.find_element(By.CSS_SELECTOR, "#name").send_keys("测试")autoTest.getScreenShot()# 分类输入二号self.driver.find_element(By.CSS_SELECTOR, "#category").send_keys("二号")autoTest.getScreenShot()# 选择添加到公有库self.driver.find_element(By.CSS_SELECTOR,"#survey-modal-container > div > div > div.ant-modal-wrap > div > div.ant-modal-content > div.ant-modal-body > form > div:nth-child(4) > div > div > div > div > label > span.ant-checkbox > input").click()autoTest.getScreenShot()# 点击保存按钮self.driver.find_element(By.CSS_SELECTOR,"#survey-modal-container > div > div > div.ant-modal-wrap > div > div.ant-modal-content > div.ant-modal-footer > button.ant-btn.ant-btn-primary").click()time.sleep(5)autoTest.getScreenShot()# 点击关闭按钮self.driver.find_element(By.CSS_SELECTOR,"#editor > div.survey-main-panel > div.survey-main-panel-toolbar > div:nth-child(2) > div > button.ant-btn.ant-btn-primary.ant-btn-sm.ant-btn-dangerous").click()time.sleep(1)autoTest.getScreenShot()#测试2:分类筛选def classifed(self):self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div.ant-card > div > form > div:nth-child(1) > div.content___1TohL > div > div > div > div > div > div > span.ant-tag.ant-tag-checkable.ant-tag-checkable-checked").click()time.sleep(1)autoTest.getScreenShot()# mouldplaza=mouldplazaTest()
    # mouldplaza.add_mould()
    # mouldplaza.classifed()# autoTest.driver.quit()
    systemmangeTest.py

    系统管理测试

    import time
    from selenium.webdriver.common.by import By
    from common.common import autoTestclass systemManageTest:url=""driver=""def __init__(self):self.url = "http://8.155.1.153:8081/user/login"self.driver = autoTest.driverself.driver.get(self.url)# 需要先从登录界面登录self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button").click()# 进入个人设置页面time.sleep(1)self.driver.get("http://8.155.1.153:8081/system/setting")#测试1:基本设置def basicSetting(self):self.driver.find_element(By.CSS_SELECTOR,"#name").send_keys("宇智波佐助")self.driver.find_element(By.CSS_SELECTOR,"#phone").send_keys("12312312312")self.driver.find_element(By.CSS_SELECTOR,"#email").send_keys("1111111111@qq.com")self.driver.find_element(By.CSS_SELECTOR,"#profile").send_keys("更改测试简介")time.sleep(1)autoTest.getScreenShot()#点击提交self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div > div > div.right___2jdGg > div.baseView___3sRG3 > div.left___GavW0 > form > div.ant-space.ant-space-horizontal.ant-space-align-center > div:nth-child(2) > button").clear()autoTest.getScreenShot()#测试2:安全设置,设置正确的密码def secureSeeting(self):self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div > div > div.leftMenu___179-W > ul > li:nth-child(2) > span").click()time.sleep(1)self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div > div > div.right___2jdGg > div.ant-list.ant-list-split > div > div > ul > li > ul > li > a").click()time.sleep(2)self.driver.find_element(By.CSS_SELECTOR,"#oldPassword").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("654321")self.driver.find_element(By.CSS_SELECTOR,"#confirmPassword").send_keys("654321")time.sleep(1)autoTest.getScreenShot()# systemManageTest=systemManageTest()
    # systemManageTest.basicSetting()
    # systemManageTest.secureSeeting()
    #
    # autoTest.driver.quit()

    3.3.3 自动化测试结果分析

    • 测试用例:30
    • 测试通过率:100%

    3.4 性能测试

    3.4.1 性能测试覆盖范围

    • 登录测试

    3.4.2 性能测试展示

    登录测试

    使用jmeter和postman对登录接口进行性能测试

    聚合报告:

    通过聚合报告显示:接口的异常率为0%,响应时间较为稳定

    梯度测压线程组:使用梯度压测线程组进行测试,该图表示每 30 秒新增 100个线程,且这 100个线程会在 5 秒内逐步启动,实现负载逐步增加.

    响应时间监听器:横坐标通常代表运行时间,而纵坐标则代表响应时间(单位是毫秒)。测试人员可以根据图形中的趋势线来判断响应时间的稳定性以及是否存在大的波动。如果响应时间在某个时间点突然增加,这可能意味着系统在该时间点遇到了性能问题。

    TPS监听器:是一个用于分析系统吞吐量的重要工具。TPS,即每秒事务数,表示一个客户机向服务器发送请求后服务器做出反应的过程。这个指标反映了系统在同一时间内处理业务的最大能力。TPS值越高,说明系统的处理能力越强。

    4 测试分析与总结

    4.1 风险遗留

    因为测试时间紧张,优先保证系统主功能,性能测试只涉及到登录测试,可能会出现其他方面的性能问题

    4.2 测试分析

    • 界面测试:界面排版合理,便于用户查看和使用
    • 功能测试:主要功能能正常运行,存在少数功能无法使用的情况,可在后续更新中进行补充和添加缺失的功能
    • 自动化测试:自动化测试通过,没有错误率
    • 性能测试:由于只测试了登录接口的性能测试,无法保证性能测试的准确性

    4.3 测试总结

    该系统可正常上线,上线后需要及时更新缺少的功能

    http://www.dtcms.com/a/348933.html

    相关文章:

  • 不只是关键词匹配:AI如何像人类一样‘听懂‘你在说什么
  • 【电路笔记 通信】混频器+混频器芯片(FSK/ASK收发器IC超外插接收器IC)+外差接收机 超外差接收机
  • Html相关
  • hot100 之104-二叉树的最大深度(递归+二叉树)
  • 分治--常见面试问题
  • 协程解决了什么问题
  • 中级统计师-统计实务-第一章 综述
  • CPTS-Agile (Werkzeug / Flask Debug)
  • 服务器加密算法
  • HMM+viterbi学习
  • Trip Footprint旅行足迹App
  • Windows在资源管理器地址栏输入CMD没反应
  • MATLAB 数值计算进阶:微分方程求解与矩阵运算高效方法
  • 伯朗特功率分析仪通过Modbus转Profinet网关与工业以太网集成案例
  • RunningHub - 基于ComfyUI的云端AI创作与应用平台
  • PID控制器的原理以及PID控制仿真
  • 离线签名协调器 Offline Signing Orchestrator(OSO)
  • 可视化-模块1-HTML-03
  • 图解SpringMVC工作流程,以及源码分析。
  • response对象的elapsed属性
  • 深度模块化剖析:构建一个健壮的、支持动态Cookie和代理的Python网络爬虫
  • Altium Designer 22使用笔记(9)---PCB布局、布线操作
  • halcon(一)一维码解码
  • 普元低代码开发平台:开启企业高效创新新征程
  • 刷题日记0824
  • 【AI论文】实习生-S1:一种科学多模态基础模型
  • 0824 MLIR和AST相关资料
  • 复杂工业场景识别率↑18.3%!陌讯多模态OCR算法实战解析
  • 虚幻引擎5(UE5)Android端游戏开发全流程指南:从环境配置到项目发布
  • Qt工具栏中图标槽函数没有响应的问题分析