1. 项目简介(前后端分离)
本项目为校园IT交流论坛,采用前后端分离架构开发。系统主要面向校园IT用户,提供用户注册登录、发帖、回帖、评论、点赞、个人中心、消息通知等功能。本次测试针对校园IT交流论坛的完整业务流程进行了功能测试、接口测试和自动化测试,确保系统满足正常使用需求。
2. 测试环境与工具
2.1 硬件环境
- PC:Windows 11笔记本
2.2 软件环境
- 浏览器:Edge
2.3 测试工具
-
功能测试:手工点击验证
-
自动化测试:Java、Selenium、EdgeDriver
-
接口测试:Postman、Python + pytest
3. 功能测试
3.1 用户注册与登录
3.1.1 登录页面功能
测试点1:输入正确的用户名和密码,点击登录
预期结果:登录成功,跳转到论坛首页
实际结果:登录成功,跳转到论坛首页
测试点2:输入错误的用户名和密码,点击登录
预期结果:登录失败,出现警告
实际结果:登录失败,出现警告
测试点3:输入正确的用户名和错误的密码
预期结果:登录失败,出现警告
实际结果:登录失败,出现警告
测试点4:输入错误的用户名和正确的密码
预期结果:登录失败,出现警告
实际结果:登录失败,出现警告
测试点5:不输入用户名和密码
预期结果:登录失败,提示用户名和密码不能为空
实际结果:登录失败,提示用户名和密码不能为空
测试点6:不输入用户名,输入密码
预期结果:登录失败,提示用户名不能为空
实际结果:登录失败,提示用户名不能为空
测试点7:输入用户名,不输入密码
预期结果:登录失败,提示密码不能为空
实际结果:登录失败,提示密码不能为空
3.1.2 注册页面功能
测试点1:正确输入用户名、昵称、密码、确认密码、勾选同意服务条例框和点击注册按钮
预期结果:注册成功,跳转到登录页面
实际结果:注册成功,跳转到登录页面
测试点2:不输入用户名、昵称、密码、确认密码,不勾选同意服务条例框,点击注册按钮
预期结果:注册失败,提示用户名、昵称、密码、确认密码不能为空,需要勾选同意服务条例框
实际结果:注册失败,提示用户名、昵称、密码、确认密码不能为空,需要勾选同意服务条例框
测试点3:不输入用户名、昵称、密码、确认密码,勾选同意服务条例框,点击注册按钮
预期结果:注册失败,提示用户名、昵称、密码、确认密码不能为空
实际结果:注册失败,提示用户名、昵称、密码、确认密码不能为空
测试点4:不输入用户名、昵称,输入密码、确认密码,勾选同意服务条例框,点击注册按钮
预期结果:注册失败,提示用户名、昵称不能为空
实际结果:注册失败,提示用户名、昵称不能为空
测试点5:输入用户名、昵称,不输入密码、确认密码,勾选同意服务条例框,点击注册按钮
预期结果:注册失败,提示密码、确认密码不能为空
实际结果:注册失败,提示密码、确认密码不能为空
测试点6:输入正确的用户名、昵称、错误的密码、确认密码,勾选同意服务条例框,点击注册按钮
预期结果:注册失败,提示检查确认密码
实际结果:注册失败,提示检查确认密码
3.2 论坛首页
测试点1:页面元素的检查
预期结果:用户个人信息存在,菜单栏存在,帖子分类模块存在,帖子列表页存在,发布帖子按钮、搜索框、浏览数、点赞数、评论数显示
实际结果:预期结果正确
测试点2:点击帖子的分类模块
预期结果:正常跳转到对应的帖子模块
实际结果:预期结果正确
测试点3:点击发布帖子按钮
预期结果:正常跳转到发布帖子页面
实际结果:预期结果正确
测试点4:在搜索框输入搜索内容并进行搜索
预期结果:页面出现与搜索内容相关的帖子
实际结果:页面并没有出现与搜索内容相关的帖子(Bug)
测试点5:点击主题切换按钮
预期结果:页面的主题得到切换
实际结果:预期结果正确
测试点6:别人给自己账号发消息时小铃铛是否有红点提示
预期结果:小铃铛有红点提示
实际结果:预期结果正确
3.3 帖子详情页
测试点1:页面元素检查
预期结果:发帖人昵称、发帖人头像、发帖时间、发帖内容、帖子的浏览数、点赞数、评论数存在,发送私信按钮、点赞按钮存在且能正常使用
实际结果:发帖时间存在错误,可以一直点赞,其余正常(Bug)
3.4 回复信息页面
测试点1:页面元素检查
预期结果:回复的输入框、回复的菜单栏、回复按钮、回复列表显示且能正常使用
实际结果:预期结果正确
3.5 发送私信页面
测试点1:页面元素检查
预期结果:发送私信的对象名能够显示且正确,输入框能够输入内容,取消和发送按钮显示且能正常使用
实际结果:预期结果正确
3.6 我的帖子页面
测试点1:用户基本信息显示检查
预期结果:用户头像、用户昵称、发帖数量、邮箱号、注册日期、邮箱号、个人介绍显示且正确
实际结果:预期结果正确
测试点2:发布的帖子列表检查
预期结果:发布的帖子数量及内容正确,将鼠标移至帖子名称,点击会跳转到相应帖子界面
实际结果:预期结果正确
3.7 个人中心页面
测试点1:页面元素检查
预期结果:用户昵称、用户头像显示,修改头像按钮、昵称及修改按钮、邮箱地址及修改按钮、电话号码及修改按钮、个人简介及修改按钮、原密码输入框、新原密码输入框、确认密码输入框、提交修改按钮显示且能正常使用
实际结果:点击修改头像按钮,无法修改头像(Bug),其余正常
测试点2:输入正确的原密码、新原密码、确认密码,点击提交修改按钮
预期结果:修改密码成功
实际结果:修改密码成功
测试点3:输入正确的原密码,不输入新原密码和确认密码
预期结果:修改密码失败,出现警告
实际结果:修改密码失败,出现警告
测试点4:输入正确的原密码、新原密码,不输入确认密码
预期结果:修改密码失败,出现警告
实际结果:修改密码失败,出现警告
测试点5:输入错误的原密码,输入新原密码和确认密码
预期结果:修改密码失败,出现警告
实际结果:修改密码失败,出现警告
测试点6:输入正确的原密码,不输入新原密码,输入确认密码
预期结果:修改密码失败,出现警告
实际结果:修改密码失败,出现警告
测试点7:不输入原密码,输入新原密码和确认密码
预期结果:修改密码失败,出现警告
实际结果:修改密码失败,出现警告
测试点8:不输入原密码、新原密码和确认密码
预期结果:修改密码失败,出现警告
实际结果:修改密码失败,出现警告
测试点9:不输入原密码,输入新原密码,不输入确认密码
预期结果:修改密码失败,出现警告
实际结果:修改密码失败,出现警告
测试点10:不输入原密码,输入确认密码,不输入新原密码
预期结果:修改密码失败,出现警告
实际结果:修改密码失败,出现警告
3.8 帖子发布页面
测试点1:点击发布帖子按钮,检查页面元素
预期结果:版块框显示且可选版块,标题输入框显示且能输入,内容输入框显示且能输入,内容输入框菜单栏显示且能正常使用,发布文章按钮存在且能正常使用
实际结果:预期结果正确
4. 自动化测试(Selenium)
4.1 自动化目的
对高频核心流程进行自动化用例编写,减少重复回归工作量。
4.2 自动化测试模块
登录、注册、论坛首页、帖子详情页、回复信息页、发送私信页、我的帖子页、个人中心页、帖子发布页
4.3 核心脚本片段
java
import common.Utils;
import org.openqa.selenium.By;
import java.io.IOException;
public class LoginTest extends Utils {
public static String url = "http://114.132.42.83:58080/sign-in.html";
public LoginTest() {
super(url);
}
/**
* 测试登录页面能否正常打开
*/
public void checkLoginRight() throws IOException {
//检查用户名框
driver.findElement(By.cssSelector("#username"));
//检查密码框
driver.findElement(By.cssSelector("#password"));
//检查登录按钮
driver.findElement(By.cssSelector("#submit"));
//检查"点击注册"
driver.findElement(By.cssSelector("body > div.page.page-center > div > div > div:nth-child(1) > div > div.text-center.text-muted.mt-3 > a"));
//屏幕截图
getScreenshot(Thread.currentThread().getStackTrace()[1].getMethodName());
}
/**
* 登录成功
*/
public void loginSuccess() throws IOException, InterruptedException {
driver.findElement(By.cssSelector("#username")).clear();
driver.findElement(By.cssSelector("#password")).clear();
//用户名
driver.findElement(By.cssSelector("#username")).sendKeys("绿叶");
//密码
driver.findElement(By.cssSelector("#password")).sendKeys("123");
//登录按钮
driver.findElement(By.cssSelector("#submit")).click();
//登录成功会出现个人信息框
driver.findElement(By.cssSelector("#index_nav_avatar"));
//屏幕截图
getScreenshot(Thread.currentThread().getStackTrace()[1].getMethodName());
}
}
4.4 自动化结果
- 总用例:30 条
- 通过:30 条
- 失败:0 条
- 结论:核心页面流程正常,脚本可用于回归
5. 接口自动化测试
5.1 测试模块
- 用户模块:注册、登录、退出登录、修改用户信息、修改用户密码、查询用户信息
- 版块模块:获取首页版块列表、获取版块信息
- 文章模块:发布帖子、获取帖子列表、点击帖子获取详情、修改帖子、点赞帖子、删除帖子、获取用户帖子列表
- 回复模块:回复帖子、获取回复列表
- 站内信模块:发送站内信、查询用户所有站内信、获取未读数、标记已读、回复站内信
5.2 核心代码
python
import pytest
import requests
from jsonschema import validate
from utils.request_util import host, Request
from utils.yaml_util import write_yaml
//登录
@pytest.mark.order(2)
class TestUserLogin:
request = Request(True)
url = host + "user/login"
schema = {
"type": "object",
"required": ["code", "message", "data"],
"additionalProperties": False,
"properties": {
"code": {
"type": "number"
},
"message": {
"type": "string"
},
"data": {
"type": "null"
}
}
}
@pytest.mark.parametrize("login", [
{
"username": "绿叶",
"password": "123",
"message": "操作成功"
}
])
def test_login_success(self, login):
request_client = Request(use_session=True)
data = {
"username": login["username"],
"password": login["password"]
}
r = request_client.post(url=self.url, data=data)
validate(instance=r.json(), schema=self.schema)
assert r.status_code == 200
assert r.json()["code"] == 0
assert r.json()["message"] == login["message"]
cookie = request_client.get_cookies()
write_yaml("cookies.yml", cookie)
//获取首页版块列表
class TestBoardGetById:
url = host + "board/getById"
schema = {
"type": "object",
"properties": {
"code": {
"type": "integer"
},
"message": {
"type": "string"
},
"data": {
"type": ["object", "null"],
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"articleCount": {
"type": "integer"
},
"sort": {
"type": "integer"
},
"state": {
"type": "integer"
},
"deleteState": {
"type": "integer"
},
"createTime": {
"type": "string"
},
"updateTime": {
"type": "string"
}
},
"additionalProperties": False,
"required": []
}
},
"additionalProperties": False,
"required": [
"code",
"message",
"data"
]
}
# 已登录(参数正确)
def test_board_getById_login_success(self):
cookie_dict_pre = read_yaml("cookies.yml", "JSESSIONID")
cookie_dict = {"JSESSIONID": cookie_dict_pre}
url = self.url + "?id=" + str(read_yaml("cookies.yml", "boardId"))
r = Request().get(url, cookies=cookie_dict)
validate(r.json(), schema=self.schema)
assert r.json()["code"] == 0
assert r.json()["message"] == "操作成功"
5.3 接口测试结果

- 总用例:124 条
- 通过:124 条
- 失败:0 条
- 结论:核心接口返回正常,业务逻辑稳定
6. 测试结论
本次对校园IT交流论坛完成了功能测试、自动化测试、接口自动化测试。需要完善搜索功能,点赞功能和头像修改功能,以提高用户的使用体验。