基于学习交流社区的自动化测试实现
一 项目介绍
项目名称
项目名称: 学习交流社区
项目介绍
项目介绍: 学习交流社区是一个基于Spring的前后端分离的在线论坛系统。使用了MySQL数据库来存储相关信息,项目完成后使用Xshell将其部署到云服务器上。
前端页面: 前端共由八个页面构成:注册页面,登录页面,首页,编辑帖子页面,帖子列表页面,个人中心页面,修改个人信息页面,帖子详情页面。
项目总结: 该项目可以实现通过发布帖子分享技术,并通过别人发布的帖子学习知识来进行技术交流,所以也可称之为技术交流社区。
项目功能
学习交流社区主要实现了以下功能:
用户注册,用户登录,编辑帖子,删除帖子,查看帖子,点赞帖子,站内信,编辑个人信息等功能。
项目展示
项目展示链接: 学习交流社区
项目源码链接: code论坛源码
二 测试用例设计和功能测试
1.测试用例设计
测试用例会从界面测试,功能测试,性能测试,易用性测试,安全性测试,兼容性测试六个方面进行设计。
①登录页面
②注册页面
③首页
④发布帖子页面
⑤修改个人信息页面
2.功能测试环境
测试环境: win11
项目运行: CentOS,maven,JDK1.8
浏览器: FireFox浏览器,Chrome浏览器
3.实际执行功能测试的部分操作
①登录页面
页面展示
给定一个正确的账号密码:
用户名:锦鲤
密码:123456
操作
输入用户名 | 输入密码 | 操作 | 预期结果 | 实际结果 |
---|---|---|---|---|
空 | 空 | 点击登录 | 提示用户名不能为空,密码不能为空 | 提示用户名不能为空,密码不能为空 |
张三(错误的用户名) | 空 | 点击登录 | 提示用户名或密码错误 | 提示用户名或密码错误 |
锦鲤(正确的用户名) | 空 | 点击登录 | 提示密码不能为空 | 提示密码不能为空 |
锦鲤(正确的用户名) | 123(错误的密码) | 点击登录 | 提示用户名或密码错误 | 提示用户名或密码错误 |
锦鲤(正确的用户名) | 123456(正确的密码) | 点击登录 | 登录成功 | 成功登录 |
②注册页面
页面展示
操作
输入用户名 | 输入昵称 | 输入密码 | 输入确认密码 | 勾选同意条款 | 点击注册 | 预期结果 | 实际结果 |
---|---|---|---|---|---|---|---|
空 | 空 | 空 | 空 | 不勾选 | 点击注册 | 提示都不能为空 | 每个输入框下面都提示不能为空 |
张三 | 空 | 空 | 空 | 不勾选 | 点击注册 | 提示除用户名外都不能为空 | 其余三个输入框下面提示不能为空 |
张三 | 张三 | 111 | 123 | 勾选 | 点击注册 | 提示密码和确认密码不相同 | 提示请检查确认密码 |
张三 | 张三 | 111 | 111 | 不勾选 | 点击注册 | 提示请勾选 | 勾选框标红,点击注册按钮无结果 |
张三 | 张三 | 111 | 111 | 勾选 | 点击注册 | 注册成功 | 注册成功,跳转到登录页面,弹出是否要保存密码框 |
③首页
页面展示
操作
操作 | 预期结果 | 实际结果 |
---|---|---|
点击Java | 跳转至Java版块 | 跳转至Java版块 |
点击发布帖子 | 跳转至发布帖子页面 | 跳转至发布帖子页面 |
点击“任一帖子标题” | 跳转至帖子详情页 | 跳转至帖子详情页 |
点击月亮标志 | 切换为夜晚模式 | 切换为夜晚模式 |
点击铃铛标志 | 显示所有私信 | 显示所有私信 |
④发布帖子页面
页面展示
操作
输入标题 | 输入内容 | 操作 | 预期结果 | 实际结果 |
---|---|---|---|---|
空 | 空 | 点击发布 | 提示请输入帖子标题 | 提示请输入帖子标题 |
测试标题 | 空 | 点击发布 | 提示请输入帖子内容 | 提示请输入帖子内容 |
测试标题 | 测试内容 | 点击发布 | 发布成功 | 发布成功,跳转至首页 |
⑤修改个人信息页面
页面展示
操作
操作 | 预期结果 | 实际结果 |
---|---|---|
点击修改头像,上传头像 | 头像变为刚刚上传的图片 | 图片无变化(上传图片功能还未实现) |
输入邮箱地址,点击修改 | 修改成功 | 修改成功 |
输入电话号码,点击修改 | 修改成功 | 修改成功 |
输入错误原密码,点击提交修改 | 提示密码校验失败 | 提示密码校验失败 |
输入正确原密码,点击提交修改 | 修改成功 | 修改成功 |
三 接口测试
接口测试使用了:
- Junit单元测试
- Springfox Swagger 生成 API,完成 API 单元测试
1.Junit单元测试
单元测试类:
这里只列举用户接口和帖子接口的单元测试,其余的欢迎参考我的gitee链接:
code论坛
①用户接口
这里列举了注册,登录和修改个人信息的测试代码。
注册方法测试:
@Test@Transactionalvoid createNormalUser() {// 构造User对象User user = new User();user.setUsername("boy1");user.setNickname("boy");// 定义一个原始的密码String password = "123456";// 生成盐String salt = UUIDUtil.UUID_32();// 生成密码的密文String ciphertext = MD5Util.md5Salt(password, salt);// 设置加密后的密码user.setPassword(ciphertext);// 设置盐user.setSalt(salt);// 调用Service层的方法userService.createNormalUser(user);// 打印结果System.out.println(user);}
修改个人信息测试:
@Test@Transactionalvoid modifyInfo() {User user = new User();user.setId(3l); // 用户Iduser.setUsername("testUser"); // 登录名user.setNickname("testUser1"); // 昵称user.setGender(null); // 性别user.setEmail("qqq@qq.com");// 邮箱user.setPhoneNum("15366668888"); // 电话user.setRemark("测试"); // 个人简介// 调用ServiceuserService.modifyInfo(user);}
登录测试:
@Testvoid login() {User user = userService.login("bitboy", "123456");System.out.println(user);}
②帖子接口
这里列举了发布帖子,查询所有帖子列表,删除帖子,点赞帖子的测试代码。
发布帖子测试:
@Test@Transactionalvoid create() {Article article = new Article();article.setUserId(2L); // boyarticle.setBoardId(1L); // java版块article.setTitle("单元测试");article.setContent("测试内容");articleService.create(article);System.out.println("发贴成功");}
查询所有帖子列表:
@Testvoid selectAll() throws JsonProcessingException {// 调用ServiceList<Article> articles = articleService.selectAll();// 转换成JSON字符串并且打印System.out.println(objectMapper.writeValueAsString(articles));}
点赞帖子和删除帖子方法测试:
@Test@Transactionalvoid thumbsUpById() {articleService.thumbsUpById(1L);System.out.println("点赞成功");}@Test@Transactionalvoid deleteById() {articleService.deleteById(11l);System.out.println("删除成功");}
2.Swagger API测试
测试链接:code论坛系统API
接口测试版块总览:
回复接口:
帖子接口:
版块接口:
用户接口:
站内信接口:
⭐⭐⭐这里每个接口展示一个功能的测试过程。
①用户接口
功能:用户登录
账号:锦鲤
密码:123456
测试过程:
666666666666666666666
结果:登录成功
①帖子接口
功能:获取用户列子列表
输入用户id:1
测试过程:
结果:获取成功,用户id为1的用户共发布一篇文章
①回复接口
功能:发布回复
输入发布回复的帖子id:19
输入回复内容:支持好文!!!
过程:
结果:回复成功
①版块接口
功能:获取首页版块列表
过程:直接点击Execute
结果:操作成功
①站内信接口
功能:发送站内信
输入接收用户id:2
输入内容:你好
过程:
结果:操作成功
相关文章:

基于学习交流社区的自动化测试实现
一 项目介绍 项目名称 项目名称: 学习交流社区 项目介绍 项目介绍: 学习交流社区是一个基于Spring的前后端分离的在线论坛系统。使用了MySQL数据库来存储相关信息,项目完成后使用Xshell将其部署到云服务器上。 前端页面: 前端共由…...
2023-08-21力扣每日一题
链接: 2337. 移动片段得到字符串 题意: L可以和左边的_交换,R可以和右边的_交换,求判断A是否能通过交换(不限次数)变成B 解: 观察可知,如果存在RL,一定不能交换出LR,…...

对象存储服务-MinIO基本集成
是什么 MinIO 是一个高性能的分布式对象存储服务,适合存储非结构化数据,如图片,音频,视频,日志等。对象文件最大可以达到5TB。 安装启动 mkdir -p /usr/local/minio cd /usr/local/minio# 下载安装包 wget https:/…...
Yarn介绍及快速安装 - Debian/Ubuntu Linux
1.Yarn介绍 Yarn 是一个用于管理 JavaScript 包的快速、可靠和安全的包管理器。它是由 Facebook、Google、Exponent 和 Tilde 团队共同开发的,旨在提供比 npm 更快速、可靠的包管理体验。 以下是 Yarn 的一些主要特点和优势: 快速安装:Yarn…...
【新日语(2)】第10課 中国の生活に慣れるかどうか少し心配です
第10課 中国の生活に慣れるかどうか少し心配です 注释: ~かどうか:“是否”。 练习A 一、例句 田中さんは鈴木さんに、30分ぐらい遅れると言いました。 田中先生告诉铃木先生,他会迟到大约30分钟。 注释: &…...
Python 网页解析初级篇:BeautifulSoup库的入门使用
在Python的网络爬虫中,网页解析是一项重要的技术。而在众多的网页解析库中,BeautifulSoup库凭借其简单易用而广受欢迎。在本篇文章中,我们将学习BeautifulSoup库的基本用法。 一、BeautifulSoup的安装与基本使用 首先,我们需要使…...

Spring Schedular 定时任务
大家好 , 我是苏麟 , 今天带来定时任务的实现 . Spring网站 : 入门 |计划任务 (spring.io) 什么是定时任务 通过时间表达式来进行调度和执行的一类任务被称为定时任务 定时任务实现 1.Spring Schedule (Spring boot 默认整合了) 2.Quartz(独立于Spring 存在的定时任务框架…...
营业额统计
营业额统计 # 题目描述 Tiger 最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger 拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日&…...
使用lodash的throttle函数会触发两次
当使用lodash的throttle函数时会触发两次,分别在最开始和最后。 严格来说不算是bug,因为官方文档写的很清楚。throttle函数其实有三个参数: _.throttle(func, [wait0], [options]) func: 要节流的函数 wait: 等待时间 options: 选项 op…...

如何使用CSS实现一个瀑布流布局?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用CSS实现瀑布流布局⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚…...
dfs之有重复字符串的排列组合
https://leetcode.cn/problems/permutation-ii-lcci/description/ ■ 题目描述 考古问题,假设以前的石碑被打碎成了很多块,每块上面都有一个或若干个字符,请你写个程序来把之前石碑上文字可能的组合全部写出来,按升序进行排列。…...

Java之抽象类
Java之抽象类 抽象类概念抽象类如何使用抽象类的特性 作者简介: zoro-1,目前大一,正在学习Java,数据结构等 作者主页:zoro-1的主页 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖Ὁ…...
“无Internet连接但是可以上网” 解决全流程
先说我的最后解决方法: 修改注册表下\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet下 的 EnableActiveProbing 项:将 1 改成 0 为什么要解决“无Internet连接但是可以上网”这个问题? 因为虽然可以上百…...

VS2022 CMake报错解决小结
目录 一、问题背景 二、问题分析 三、问题解决 一、问题背景 VS2022中能够跨平台的工程类型就是CMake项目,一套代码能跨windows/Linux/Mac多种操作系统。而实际使用时,发现相关资料比较少,需要摸索一下。 碰到的问题简述: 1、C…...
java之webservice_aegis.xml学习
开门见山,直奔主题,让我们先来看一个接口: public interface UserInfo {public Collection findRoleInfosByUserID(String userUniqueID);public User findUserInfosByUserID(String userUniqueID);public String test();} 观察此接口,首先我们看findRoleInfosByUserID方法…...

总结 TCP 协议的相关特性
TCP协议段格式: 如图, 端口号: 是其中一个重要的部分,知道端口号才能确认数据交给哪个应用程序(端口号属于传输层的概念). 4位首部长度:4bit表示的范围是0->15,在此处,单位是"4字节",因此,将这里的数值 * 4,才是真正的报头长度,即TCP 报头最大长度,60…...

不负众望~历时4年修炼,这本册子终于成书了(文末赠书)
名字:阿玥的小东东 学习:Python、C/C 主页链接:阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 精进Spring Boot首选读物 “小册”变“大书”,彻底弄懂Spring Boot 全方位配套资源…...

【校招VIP】java语言考点之垃圾回收算法
考点介绍: 垃圾回收算法是必考题。GC中的垃圾指的是存在于内存中的、不会再被使用的对象。而垃圾回收就是把那些不再被使用的对象进行清除,收回占用的内存空间...... 『java语言考点之垃圾回收算法』相关题目及解析内容可点击文章末尾链接查看ÿ…...

juc概述和Lock接口
目录 一、什么是JUC 1、JUC概述 2、进程与线程 3、线程的状态 4、wait/sleep 的区别 5、并发与并行 6、管程 7、用户线程和守护线程 二、Lock接口 1、Synchronized 使用synchronized实现售票案例 使用synchronized实现增减变量操作 2、什么是 Lock 买票例子使用lo…...

图像降采样的计算原理:F.interpolate INTER_AREA
一、F.interpolate——数组采样操作 torch.nn.functional.interpolate(input, size=None, scale_factor=None, mode=nearest, align_corners=None, recompute_scale_factor=None) 功能:利用插值方法,对输入的张量数组进行上\下采样操作,换句话说就是科学合理地改变数组的尺…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...