关于项目的测试

article/2025/11/7 3:47:10

文章目录

  • 前言(测试的相关知识)
  • 一、需求分析
  • 二、测试设计
  • 三、测试计划
    • 1.功能测试:
      • 1).题目展示及提交
      • 2).异常情况
      • 3).网络测试
    • 2.兼容性测试:
      • 1).各种浏览器器访问:
      • 2).同一浏览器不同版本
      • 3).不同的操作系统:
    • 3.安全性测试:
    • 4.易用性测试:
    • 5.性能测试:
    • 6.界面测试:
      • 1).布局
      • 2).字体
  • 四、测试执行
    • 1.手工测试
      • 1)功能模块
      • 2)兼容性模块
      • 3)安全性模块
      • 3)界面模块
    • 2.利用框架测试
      • 1.单元测试
        • 1.新增题目
        • 2.展示指定id题目信息
        • 3.展示全部题目信息
        • 4.删除题目
      • 2.自动化测试(回归测试)
        • 1.对指定题目,跳转到其对应展示页面:
        • 2.分别对输入代码和不输入代码点击提交按钮做自动化测试
        • 3.对这四个测试用例生成HTML报告


前言(测试的相关知识)

  • 软件测试的生命周期

需求分析—测试计划—测试设计/开发—测试执行—测试评估

  • 各个阶段所要完成的任务
    1.需求分析:验证需求的合理性,正确性:细化需求,写测试用例。
    2.测试计划:考虑测试人数,测试环境,测试时间,测试设备等。
    3.测试设计/开发:根据需求写测试用例。
    4.测试执行:开发已经完成,执行测试用例,验证功能。提交BUG,验证BUG。
    5.测试评估:写了多少测试用例,执行了多少,剩余的测试用例数。BUG数量,解决的BUG 数量,遗留的BUG及解决方案。

  • 测试用例的设计方法
    基于需求的设计方法,等价类,边界值,因果图,场景设计法,错误猜测法。


提示:以下是本篇文章正文内容,下面案例可供参考

一、需求分析

功能需求:
1.题目列表页的展示——能成功展示题目列表页
2.题目详情页的展示——单击某一道题目,可以跳转到指定页面
3.用户提交代码的功能——当用户输入正确或者不正确的代码,点击提交,可以正常在下方输出结果
4.新增,删除题目,页面会展示相应操作后的结果,同时数据库内的数据也发生改变
性能需求:
1.单个/多个用户点击一道题目的跳转时间——满足用户需求
2.单个/多个用户提交代码到输出结果的时间——满足用户需求
3.提交多行代码运行时间——不会超出用户可以等待的最大时间
4.多个用户提交代码系统是否稳定——稳定
5.频繁提交代码是否出现闪退——否
安全需求:
1.不输入代码或者输入危险操作的代码——会有提示
2.能否防止SQL注入——可以
3.能否防止XSS脚本攻击——可以
易用性需求:
1.页面展示直观,提交按钮直观易用
2.题目跳转链接直观可见
3.页面展示符合用户习惯
兼容性需求:
1.支持各种浏览器访问
2.支持同一浏览器的不同版本
3.支持不同的操作系统
界面需求:
1.布局:布局合理美观
2.题目展示页每一行题目展示风格相同
3.页面最多展示多少个题目
4.当题目过长时能够分行展示
5.字体大小合适,风格一致

二、测试设计

测试目的测试项目能否实现各种功能,是否满足用户需求
测试对象项目数据库模块以及功能模块
测试环境Windows11 Edge浏览器
测试方式手工+自动化测试
测试方法白盒测试+黑盒测试
测试依据测试用例
测试框架Junit框架、unnitest框架、selenium
测试功能模块数据库增删查改,题目展示、跳转、代码提交

三、测试计划

1.功能测试:

1).题目展示及提交

  • 进入题目列表页,可以展示全部题目
  • 单击某个题目,可以跳转到对应页面
  • 对应页面可以完整展示题目详情
  • 代码框模板代码正确
  • 不写代码,单击提交按钮,下面显示错误信息
  • 写正确和错误代码,分别对应通过和不通过提示信息
  • 写危险代码,提示框提示危险代码
  • 操作数据库增删查改,页面能分别展示数据库操作之后的结果,同时数据库的数据也发生变化

2).异常情况

  • 数据库连接错误,不能正常显示题目
  • 在新增题目时停止服务,是否新增成功:
    Tomcat服务器停止,新增失败
    服务器关机,新增失败
    在新增题目之前停止服务,新增失败
    在新增题目之后停止服务,新增成功

3).网络测试

  • 弱网:网页显示慢
  • 网络断开:页面还存在

2.兼容性测试:

1).各种浏览器器访问:

  • 谷歌
  • 火狐
  • IE
  • edge
    均可正常显示

2).同一浏览器不同版本

3).不同的操作系统:

Linux,Windows

3.安全性测试:

编写带有对电脑有害的代码时,是否会有提示:有

4.易用性测试:

  • 页面展示直观,提交按钮直观易用
  • 题目跳转链接直观可见

5.性能测试:

  • 点击某一题目跳转速度快
  • 提交代码出现结果时间快
  • 多个用户同时提交,同时点击
  • 代码量过多时,运行速度
  • 频繁提交代码是否出现闪退

6.界面测试:

1).布局

  • 布局合理美观
  • 题目展示页每一行题目展示风格一致
  • 页面最多展示多少个题目
  • 当题目过长是否会分行

2).字体

  • 字体大小合适
  • 字体风格一致

四、测试执行

1.手工测试

1)功能模块

功能模块对应测试项
进入题目列表页正常展示全部题目
单击某个题目跳转到指定题目对应页面
题目对应页面可以完整展示题目详情
题目对应页面代码框模板代码正确
单击提交按钮不写代码:显示错误信息;写正确和错误代码:分别对应通过和不通过提示信息;写危险代码:提示危险代码

题目列表页展示:
在这里插入图片描述

题目详情页展示:
在这里插入图片描述
代码编辑框展示:
在这里插入图片描述
单击提交按钮,不写代码(乱码是因为字符集设置问题):
在这里插入图片描述
单击提交按钮,写错误代码(用例1通过,用例2未通过):
在这里插入图片描述
单击提交按钮,写正确代码(项目出错):
在这里插入图片描述

异常测试对应测试项
数据库连接错误不能正常显示题目
Tomcat服务器停止不能新增成功

数据库连接错误:
在这里插入图片描述
Tomcat服务器停止:题目新增失败
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

网络测试对应测试项
访问网址进去后网络断开页面还显示,仍然可以跳转;点击提交仍然可以提交
访问服务器之前网络断开进入不了页面

访问网址进去后网络断开:
在这里插入图片描述
访问服务器之前网络断开:仍可以进去页面
在这里插入图片描述

2)兼容性模块

兼容性测试对应测试项
不同浏览器火狐 Egde均可访问

Egde:
在这里插入图片描述
火狐:
在这里插入图片描述

3)安全性模块

安全性测试对应测试项
用户输入的代码中带有“Runtime”出现提示信息,运行不成功
用户输入的代码中带有“exec”出现提示信息,运行不成功
用户输入的代码中带有“java.io”出现提示信息,运行不成功
用户输入的代码中带有“java.net”出现提示信息,运行不成功
当访问对应id页面时,带有SQL语句页面展示不出来

用户输入的代码中带有“Runtime”:
在这里插入图片描述
用户输入的代码中带有“exec” :
在这里插入图片描述
用户输入的代码中带有“java.io” :
在这里插入图片描述
用户输入的代码中带有“java.net”
在这里插入图片描述
当访问对应id页面时,带有SQL语句:页面展示不出来
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3)界面模块

界面测试对应测试点
题目展示页每一行题目展示风格一致
布局合理美观
字体大小合适
字体风格一致
当题目过长是否会分行提示过长,插入不成功

当题目过长:
在这里插入图片描述

2.利用框架测试

1.单元测试

准备工作

  1. 采用Junit框架进行单元测试,首先将如下代码加入到pom.xml里的dependencies中。
 <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.1</version><scope>test</scope>
</dependency>
  1. 对题目管理的增删查进行单元测试
    选中题目管理的类名(ProblemDao)按ctrl+shift+T则自动生成单元测试类.
    在这里插入图片描述

在这里插入图片描述

下面我们将分别测试新增题目,删除题目,查找所有题目,查找单个题目等方法。

1.新增题目

在这里插入图片描述

2.展示指定id题目信息

在这里插入图片描述

3.展示全部题目信息

在这里插入图片描述

4.删除题目

在这里插入图片描述

2.自动化测试(回归测试)

利用selenium工具和unittest框架对项目的跳转到指定题目页、以及输入代码和不输入代码点击提交按钮做自动化测试,并且生成到HTML测试报告中.

1.对指定题目,跳转到其对应展示页面:

(这里用了两种定位方式,分别是xpath和link_text)

import time
from selenium import webdriver
import unittestclass My(unittest.TestCase):# self是类的实例def setUp(self):self.driver = webdriver.Firefox()self.url = "http://localhost:8080/unititled12022.2/"self.driver.maximize_window()def tearDown(self):self.driver.quit()def test_oj1(self):driver = self.driverdriver.get(self.url)driver.find_element_by_link_text("两数之和1").click()time.sleep(3)# @unittest.skip("skipping")def test_oj2(self):driver = self.driverdriver.get(self.url)driver.find_element_by_xpath("/html/body/section[2]/div/div/div/div/table/tbody/tr[2]/td[2]/a").click()time.sleep(3)if __name__ == "__main__":unittest.main()

2.分别对输入代码和不输入代码点击提交按钮做自动化测试

import time
from selenium import webdriver
import unittestclass My2(unittest.TestCase):# self是类的实例def setUp(self):self.driver = webdriver.Firefox()self.url = "http://localhost:8080/unititled12022.2/problemDetail.html?id=2"self.driver.maximize_window()def tearDown(self):self.driver.quit()def test_oj3(self):driver = self.driverdriver.get(self.url)driver.find_element_by_id("submitButton").click()time.sleep(3)# @unittest.skip("skipping")def test_oj4(self):driver = self.driverdriver.get(self.url)driver.find_element_by_xpath("/html/body/section[2]/div/div[2]/div/div/div/textarea").send_keys("int[] ret={""0,""1}; return ""ret;")time.sleep(3)if __name__=="__main__":unittest.main()

3.对这四个测试用例生成HTML报告

import HTMLTestRunner
import os.path
import sys
import timefrom src import th
from src import fir
import unittestdef createsuite():suite = unittest.TestSuite()suite.addTest(unittest.makeSuite(fir.My))suite.addTest(unittest.makeSuite(th.My2))return suiteif __name__ == "__main__":# 1.创建当前路径的文件夹curpath = sys.path[0]print(sys.path)print(sys.path[0])if not os.path.exists(curpath + '/resultreport'):os.makedirs(curpath + '/resultreport')# 2.解决重复性 time.time()是时间戳 localtime是化成本地的时间now = time.strftime("%Y-%m-%d-%H %M %S", time.localtime(time.time()))print(time.time())print(time.localtime(time.time()))fliename = curpath + '/resultreport' + now + 'resultreport.html'# 打开html文件,以wb写的方式with open(fliename, 'wb') as fp:runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u"测试报告",description=u"用例执行情况", verbosity=2)suite2 = createsuite()runner.run(suite2)

执行结果

在这里插入图片描述

生成的HTML报告

在这里插入图片描述



http://chatgpt.dhexx.cn/article/R6IsVtXq.shtml

相关文章

【2023必看】17个值得关注的测试开源项目大盘点

目录 引言 项目汇总 值得关注的项目 总结 引言 在软件测试领域&#xff0c;开源项目已经成为了一个重要的趋势。 作为测试人员&#xff0c;我们可以通过参与或关注这些开源项目&#xff0c;不仅可以学习到先进的测试思想、技术和工具&#xff0c;还可以积极参与社区建设&…

测试自学人必看:软件测试如何找测试项目?

目录 前言 方法一&#xff1a;自己找一些开源的开发/测试项目 方法二&#xff1a;从一些线上课程里找开发项目&#xff0c;付费和免费的都可以 方法三&#xff1a;报测试培训班&#xff0c;机构会提供测试项目。 结语 前言 测试新手不知道上哪找测试项目&#xff0c;这应…

【Linux 下】 信号量

文章目录 【Linux 下】 信号量信号量概念信号量操作初始化和销毁P&#xff08;&#xff09;操作V&#xff08;&#xff09;操作理解PV操作 基于信号量与环形队列实现的CS模型基于信号量和环形队列实现的生产者与消费者模型 【Linux 下】 信号量 信号量概念 信号量&#xff08;…

Linux 信号量

信号量 信号量信号量的定义信号量理论例子Linux信号量机制使用信号量 信号量 信号量:用于管理对资源的访问。 &#xff08;1&#xff09; 当我们编写的程序使用了线程时&#xff0c;不管它是运行在多用户系统上、多进程系统上,还是运行在多用户多进程系统上&#xff0c;我们通…

Linux内核信号量:二值信号量/互斥信号量,计数信号量,读写信号量

《semaphore信号量&#xff1a;一个简单的示例程序》用户态程序 目录 概念 应用场景 使用方法 内核信号量的构成 信号量的API 初始化 PV操作 获取信号量&#xff08;P&#xff09; 释放内核信号量&#xff08;V&#xff09; 补充 内核信号量的使用例程 场景1 场景…

Linux系统中信号量的基本使用方法

大家好&#xff0c;今天主要和大家聊一聊&#xff0c;如何使用信号量的方法。 目录 第一&#xff1a; 父子进程相隔1s报数一次 第二&#xff1a;利用信号量实现父子进程通信 信号量(Semaphore)&#xff0c;有时被称为信号灯&#xff0c;是在多线程环境下使用的一种设施&#…

信号量【Linux】

文章目录 1. POSIX信号量1.1 引入1.2 概念1.3 PV原语&#xff08;原理&#xff09;1.4 相关接口 2. 二进制信号量3. 基于环形队列的生产消费模式3.1 介绍3.2 为什么要使用环形队列3.3 环形队列的作用3.4 实现互斥和同步两个信号量框架生产和消费的逻辑完善环形队列1信号量完善环…

Linux信号量操作

信号量简介&#xff1a; 在对于临界区资源管理的过程中&#xff0c;多个程序同时访问一个共享资源经常容易引发一系列问题&#xff1a;如死锁&#xff0c;结果不唯一等等&#xff0c;在1965年&#xff0c;由荷兰科学家E.W.Dijkstra提出了一种新的进程同步工具&#xff0c;信号…

【关于Linux中----信号量及其使用场景】

文章目录 一、解释信号量1.1 概念的引入1.2 信号量操作和使用接口 二、信号量使用场景2.1 引入环形队列&&生产消费问题2.2 代码实现2.3 对于多生产多消费的情况2.4 申请信号量和加锁的顺序问题2.5 多生产多消费的意义 一、解释信号量 1.1 概念的引入 我们知道&#x…

linux(信号量)

信号量 几个基本概念临界资源临界区原子性互斥 信号量后台进程前台进程 信号储存信号处理信号(信号捕捉) 发送信号1、键盘产生&#xff1a;2、系统调用接口发送信号3、由软件条件产生信号4、硬件异常发送信号 内核中的信号量**信号量在内核中的数据结构****信号集操作函数** 信…

Linux--信号量

1.信号量的定义: 信号量是一个特殊的变量&#xff0c;一般取正数值。它的值代表允许访问的资源数目&#xff0c; 获取资源时&#xff0c;需要对信号量的值进行原子减一&#xff0c;该操作被称为p操作。当信号量值为0时&#xff0c;代表没有资源可用&#xff0c;p操作会阻塞。释…

【Linux】Linux的信号量集

所谓信号量集&#xff0c;就是由多个信号量组成的一个数组。作为一个整体&#xff0c;信号量集中的所有信号量使用同一个等待队列。Linux的信号量集为进程请求多个资源创造了条件。Linux规定&#xff0c;当进程的一个操作需要多个共享资源时&#xff0c;如果只成功获得了其中的…

linux信号量简介

一、什么是信号量 为了防止多个程序同时访问一个共享资源而引发的一系列问题&#xff0c;我们需要一种访问机制&#xff0c;它可以通过生成并使用令牌来授权&#xff0c;在同一时刻只能有一个线程访问代码的临界区域。 临界区域是指执行数据更新的代码需要独占式地执行。而信…

Linux下信号量使用总结

目录 1.Linux下信号量简介 2.POSIX信号量 2.1 无名信号量 2.2 有名信号量 3.System V信号量 1.Linux下信号量简介 信号量是解决进程之间的同步与互斥的IPC机制&#xff0c;互斥与同步关系存在的症结在于临界资源。 临界资源是在同一个时刻只容许有限个&#xff08;一般只有…

Linux信号量详解

Linux信号量详解 1.什么是信号量信号量是一种特殊的变量&#xff0c;访问具有原子性。只允许对它进行两个操作&#xff1a;1)等待信号量当信号量值为0时&#xff0c;程序等待&#xff1b;当信号量值大于0时&#xff0c;信号量减1&#xff0c;程序继续运行。2)发送信号量将信号量…

Linux进程间通信—信号量

一、概述 进程间通信&#xff08;interprocess communication&#xff0c;简称 IPC&#xff09;指两个进程之间的通信。系统中的每一个进程都有各自的地址空间&#xff0c;并且相互独立、隔离&#xff0c;每个进程都处于自己的地址空间中。所以同一个进程的不同模块譬如不同的函…

Linux操作系统-信号量

信号量也属于一种进程间通信的机制&#xff0c;与其他的进程间通信不同&#xff0c;信号量不是用来传输数据的&#xff0c;而是用来进程间同步与互斥。除此之外&#xff0c;信号量还可以实现线程间的互斥。 信号量是什么&#xff1f; 信号量的本质是一个计数器。 一个信号量…

Linux·信号量全解

目录 信号量 进程间 【无名信号量完成 有血缘关系的进程间 互斥】 知识点2【有名信号量 没有血缘进程互斥】 1、创建一个有名信号量 2、信号量的关闭&#xff1a; 3、信号量文件的删除 4、P操作 sem_wait V操作sem_post 销毁信号量sem_destroy 知识点3【有名信号量 没…

Linux-----信号量

信号量 信号量原理信号量概念信号量函数基于环形队列的生产消费模型空间和数据资源生产者和消费者申请、释放信号量模拟实现基于环形队列的生产者消费者模型 信号量原理 之前我们知道被多个执行流同时访问的公共资源叫做临界资源&#xff0c;而临界资源不保护的话会造成数据不…

Linux信号量

文章目录 POSIX信号量信号量的原理信号量的概念信号量函数 二元信号量模拟实现互斥功能基于环形队列的生产消费模型空间资源和数据资源生产者和消费者申请和释放资源必须遵守的两个规则代码实现信号量保护环形队列的原理 POSIX信号量 信号量的原理 我们将可能会被多个执行流同…