论坛系统的测试

news2025/7/6 22:23:03

项目背景

论坛系统采用前后端分离的方式来实现,同时使用数据库 来处理相关的数据,同时将其部署到服务器上。前端主要有7个页面组成:登录页,列表页,论坛详情页,编辑页,个人信息页,我的帖子页,站内信页,使用以上页面实现了一个简单的论坛系统。其结合后端实现了以下的主要功能:登录,编辑帖子,退出登录,删除帖子,发送信息,修改头像,个人信息等功能。

项目功能

该论坛系统主要实现了以下几个功能:登录,注销,发布帖子,删除帖子,发送站内信等功能。

  1. 登录功能:如果没有账号密码,先进行注册,填写用户名,昵称,密码以及确认密码,点击注册之后,后端会先对密码进行加密,然后将数据写入到数据库中,注册成功之后跳转到登陆页面进行登录。登录会填写账号密码,点击登录对密码进行加密,然后与数据库中存的密码进行对比,若相同则登录成功,反之登录失败。
  2. 主页页面:主页有导航栏,导航栏代表不同的帖子类型,可以在主页的首页查看所有的帖子,点击帖子类型,可以只展示该类型的帖子。点击帖子也可以查看帖子的详细信息。在主页右上角可以通过关键字来查询对应的帖子,也可以访问'个人中心'和'我的帖子'以及退出登录。
  3. 详情页面:这个页面中会显示出来帖子的标题,发布时间,浏览帖子总数,点赞数,以及留言数,并且你也可以对这篇帖子进行点赞和留言。如果访问的帖子是自己发布的帖子,还会有编辑和删除两个按钮。也可以点击其他用户的名字,可以访问其他用户的空间。
  4. 用户全部帖子页面:点击'我的帖子',会把当前用户所发布的帖子全部展示出来,右侧有个人介绍,类似于QQ空间,点击其他用户,可以访问其他用户的空间,也可以给其他用户留言。
  5. 站内信页面:点击发送信息之类的按钮,会弹出来一个模态框,输入文字之后可以将信息发送给其他用户。

测试计划

功能测试

测试用例

实际执行测试的部分操作步骤/截图

注册

登录

发布帖子在主页中查看

用户详情

发送私信

接收私信

自动化测试

注册

package com.haifan.forum.test;

import com.haifan.forum.utils.AutoTestUtils;
import org.openqa.selenium.By;

public class ForumRegisterTest extends AutoTestUtils{
    public ForumRegisterTest(String url) {
        super(url);
    }

    // 正常注册
    public void registerSuccess() {
        driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys("delaiwen");
        driver.findElement(By.xpath("//*[@id=\"nickname\"]")).sendKeys("delaiwen");
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("123456");
        driver.findElement(By.xpath("//*[@id=\"passwordRepeat\"]")).sendKeys("123456");
        driver.findElement(By.xpath("//*[@id=\"policy\"]")).click();
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        getScreenShot(getClass().getName());
        driver.quit();
    }


    public void registerUsernameNull() {
        driver.findElement(By.xpath("//*[@id=\"nickname\"]")).sendKeys("delaiwen");
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("123456");
        driver.findElement(By.xpath("//*[@id=\"passwordRepeat\"]")).sendKeys("123456");
        driver.findElement(By.xpath("//*[@id=\"policy\"]")).click();
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        getScreenShot(getClass().getName());
        driver.quit();
    }

    public void registerPasswordNull() {
        driver.findElement(By.xpath("//*[@id=\"nickname\"]")).sendKeys("delaiwen");
        driver.findElement(By.xpath("//*[@id=\"policy\"]")).click();
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        getScreenShot(getClass().getName());
        driver.quit();
    }

    public void registerAllNull() {
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        getScreenShot(getClass().getName());
        driver.quit();
    }
}

登录

package com.haifan.forum.test;

import com.haifan.forum.utils.AutoTestUtils;
import org.checkerframework.checker.units.qual.A;
import org.openqa.selenium.By;

public class ForumLoginTest extends AutoTestUtils {

    public ForumLoginTest(String url) {
        super(url);
    }

    public void loginSuccess() {
        driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys("delaiwen");
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("123456");
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        getScreenShot(getClass().getName());
    }

    public void loginUsernameNull() {
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("123456");
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        getScreenShot(getClass().getName());
    }

    public void loginPasswordNull() {
        driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys("delaiwen");
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        getScreenShot(getClass().getName());
    }
}

编辑帖子

package com.haifan.forum.test;

import com.haifan.forum.utils.AutoTestUtils;
import org.apache.commons.codec.digest.DigestUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

import java.awt.desktop.QuitEvent;

public class ForumEditTest extends AutoTestUtils {


    public ForumEditTest(String url) {
        super(url);
    }
    public ForumEditTest() {

    }
    public void login() {
        driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys("delaiwen");
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("123456");
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
    }

    public WebElement setByXpath(String xpath) {
        WebElement element = driver.findElement(By.xpath(xpath));
        return element;
    }

    public void deleteForumSuccess() {
        login();
        setByXpath("//*[@id=\"artical-items-body\"]/div[1]/div/div[2]/div[1]/a/strong").click();
        setByXpath("//*[@id=\"bit-forum-content\"]/div[2]/div/div/div[1]/div[2]/div[2]/div/div[3]/div/a/span").click();
        driver.quit();
    }

    public void postForumSuccess() {
        login();
        setByXpath("//*[@id=\"bit-forum-content\"]/div[1]/div/div/div[2]/div/a[1]").click();
        WebElement board = setByXpath("//*[@id=\"article_post_borad\"]/option[6]");
        WebElement title = setByXpath("//*[@id=\"article_post_title\"]");
        title.sendKeys("wozaiceshi");
        WebElement content = setByXpath("//div[@id=\"bit-forum-content\"]//div[contains(@class, \"editormd\")]//textarea");
        content.sendKeys("wozaiceshi");
        WebElement publish = setByXpath("//*[@id=\"article_post_submit\"]");
        publish.click();
        getScreenShot(getClass().getName());
        driver.quit();
    }

    public void postForumTitleNull() {
        WebElement board = setByXpath("//*[@id=\"article_post_borad\"]/option[6]");
        WebElement content = setByXpath("//*[@id=\"edit-article\"]/div[1]/div[6]/div[1]/div/div");
        content.sendKeys("wozaiceshi");
        WebElement publish = setByXpath("//*[@id=\"article_post_submit\"]");
        publish.click();
        getScreenShot(getClass().getName());

        driver.quit();
    }

    public void postForumContentNull() {
        WebElement board = setByXpath("//*[@id=\"article_post_borad\"]/option[6]");
        WebElement title = setByXpath("//*[@id=\"article_post_title\"]");
        title.sendKeys("wozaiceshi");
        WebElement publish = setByXpath("//*[@id=\"article_post_submit\"]");
        publish.click();
        getScreenShot(getClass().getName());

        driver.quit();
    }
}

用户详情

package com.haifan.forum.test;
import com.haifan.forum.utils.AutoTestUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
public class ForumDetailTest extends AutoTestUtils {
    public ForumDetailTest(String url) {
        super(url);
    }
    public WebElement setByXpath(String xpath) {
        WebElement element = driver.findElement(By.xpath(xpath));
        return element;
    }
    public void login() {
        driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys("delaiwen");
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("123456");
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
    }
    public void detail() {
        login();
        setByXpath("/html/body/div[1]/header[1]/div/div/div[3]/a").click();
        setByXpath("//*[@id=\"index_user_profile\"]").click();
        getScreenShot(getClass().getName());
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2327441.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宠物店小程序怎么做?助力实体店实现营销突破

宠物店小程序怎么做?助力实体店实现营销突破 ——一个宠物店老板的“真香”实战分享 ​一、行业现状:线下宠物店的“流量焦虑”​ 作为开了3年宠物店的“铲屎官供应商”,这两年明显感觉生意难做了:某宝9.9包邮的狗粮、某团“满…

《Mycat核心技术》第21章:高可用负载均衡集群的实现(HAProxy + Keepalived + Mycat)

作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 星球项目地址:https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…

深度学习Note.5(机器学习.6)

1.Runner类 一个任务应用机器学习方法流程: 数据集构建 模型构建 损失函数定义 优化器 模型训练 模型评价 模型预测 所以根据以上,我们把机器学习模型基本要素封装成一个Runner类(加上模型保存、模型加载等功能。) Runne…

从零开始设计Transformer模型(1/2)——剥离RNN,保留Attention

声明: 本文基于哔站博主【Shusenwang】的视频课程【RNN模型及NLP应用】,结合自身的理解所作,旨在帮助大家了解学习NLP自然语言处理基础知识。配合着视频课程学习效果更佳。 材料来源:【Shusenwang】的视频课程【RNN模型及NLP应用…

【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的缓存技术:使用 Redis 提升性能

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开篇整…

华为配置篇-BGP实验

BGP 一、简述二、常用命令总结三、实验 一、简述 IBGP 水平分割&#xff1a;从一个 IBGP 对等体学到的路由&#xff0c;不会再通告给其他的 IBGP 对等体。在一个 AS 内部&#xff0c;路由器之间通过 IBGP 交换路由信息。如果没有水平分割机制&#xff0c;当多个路由器之间形成…

vue element-ui 工程创建

vue element-ui 工程创建 按照步骤 &#xff1a; https://blog.csdn.net/wowocpp/article/details/146590400 创建工程 vue create demo3 cd demo3 npm run serve 在demo3 目录里面 执行如下命令 npm install element-ui -S 然后查看 package.json main.js 添加代码&…

《AI大模型应知应会100篇》第2篇:大模型核心术语解析:参数、Token、推理与训练

第2篇&#xff1a;大模型核心术语解析&#xff1a;参数、Token、推理与训练 摘要 本文将用通俗易懂的语言拆解大模型领域的四大核心概念&#xff1a;参数、Token、训练与推理。通过案例对比、代码实战和成本计算&#xff0c;帮助读者快速掌握这些术语的底层逻辑与实际应用价值…

【28BYJ-48】STM32同时驱动4个步进电机,支持调速与正反转

资料下载&#xff1a;待更新。。。。 先驱动起来再说&#xff0c;干中学&#xff01;&#xff01;&#xff01; 1、实现功能 STM32同时驱动4个步进电机&#xff0c;支持单独调速与正反转控制 需要资源&#xff1a;16个任意IO口1ms定时器中断 目录 资料下载&#xff1a;待更…

Gradle-基础

一.安装 1. 2.配置环境变量 GRADLE_HOME D:\gradle\gradle-5.6.4 GRADLE_USER_HOME D:\gradle\localRepository 3.下载源配置 安装目录下的init.d文件夹里创建一个init.gradle文件&#xff0c;下载顺序从上到下&#xff0c;内容&#xff1…

Anolis系统下安装Jenkins

1.安装java、maven yum install -y java-17-openjdk-devel maven git wget 2.配置环境变量 1.查看java和maven所在目录 [rootlocalhost ~]# which java /usr/bin/java [rootlocalhost bin]# ll /usr/bin/java lrwxrwxrwx 1 root root 22 4月 1 17:20 /usr/bin/java ->…

LabVIEW 调用 Python 函数

此程序是 LabVIEW 调用 Python 函数实现双精度数相加的典型示例。通过 LabVIEW 搭建交互框架&#xff0c;借助 “Open Python Session” 创建 Python 代码运行环境&#xff0c;定位 Python 模块路径后调用 “Add” 函数&#xff0c;最终实现数据处理并关闭会话。整个流程展现了…

视频分析设备平台EasyCVR视频结构化AI智能分析:筑牢校园阳光考场远程监控网

一、背景分析​ 近年来&#xff0c;学校考试的舞弊现象屡禁不止&#xff0c;严重破坏考试的公平性&#xff0c;不仅损害广大考生的切身利益&#xff0c;也在社会上造成恶劣的影响。为有效制止舞弊行为&#xff0c;收集确凿的舞弊证据&#xff0c;在考场部署一套可靠的视频监控…

AWS用Glue读取S3文件上传数据到Redshift,再导出到Quicksight完整版,含VPC配置

1. 项目背景 AWS的官方文档&#xff0c;关于Glue和Vpc配置部分已经比较旧了&#xff0c;按照官方文档配置的流程始终跑不通&#xff0c;花了一番时间和波折后&#xff0c;才终于完整的跑通了。 在数据分析和商业智能&#xff08;BI&#xff09;领域&#xff0c;我们常需要将存…

Python爬虫第3节-会话、Cookies及代理的基本原理

目录 一、会话和Cookies 1.1 静态网页和动态网页 1.2 无状态HTTP 1.3 常见误区 二、代理的基本原理 2.1 基本原理 2.2 代理的作用 2.3 爬虫代理 2.4 代理分类 2.5 常见代理设置 一、会话和Cookies 大家在浏览网站过程中&#xff0c;肯定经常遇到需要登录的场景。有些…

OkHttpHttpClient

学习链接 okhttp github okhttp官方使用文档 SpringBoot 整合okHttp okhttp3用法 Java中常用的HTTP客户端库&#xff1a;OkHttp和HttpClient&#xff08;包含请求示例代码&#xff09; 深入浅出 OkHttp 源码解析及应用实践 httpcomponents-client github apache httpclie…

c++柔性数组、友元、类模版

目录 1、柔性数组&#xff1a; 2、友元函数&#xff1a; 3、静态成员 注意事项 面试题&#xff1a;c/c static的作用? C语言&#xff1a; C: 为什么可以创建出 objx 4、对象与对象之间的关系 5、类模版 1、柔性数组&#xff1a; #define _CRT_SECURE_NO_WARNINGS #…

Centos 8 安装教程(新手版)

1.需要在阿里开源镜像站下载对应的镜像&#xff0c;如下&#xff1a;https://mirrors.aliyun.com/centos/8.5.2111/isos/x86_64/ 2.打开VM虚拟机&#xff0c;创建新的虚拟机&#xff0c;选择自定义 如图所示点击进行&#xff1a; 选择下载好的镜像 选择“Linux”&#xff0c;版…

Vue2函数式组件实战:手写可调用的动态组件,适用于toast轻提示、tip提示、dialog弹窗等

Vue2函数式组件实战&#xff1a;手写可调用的动态组件 一、需求场景分析 在开发中常遇到需要动态调用的组件场景&#xff1a; 全局弹窗提示即时消息通知动态表单验证需要脱离当前DOM树的悬浮组件 传统组件调用方式的痛点&#xff1a;必须预先写入模板&#xff0c;可能还要用…

大象如何学会太空漫步?美的:科技领先、To B和全球化

中国企业正处在转型的十字路口。一边是全新的技术、全新的市场机遇&#xff1b;一边是转型要面临的沉重负累和巨大投入&#xff0c;无数中国制造、中国品牌仍在寻路&#xff0c;而有的人已经走至半途。 近日&#xff0c;美的集团交出了一份十分亮眼的2024年财报。数据显示&…