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

论坛系统的测试

项目背景

论坛系统采用前后端分离的方式来实现,同时使用数据库 来处理相关的数据,同时将其部署到服务器上。前端主要有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.dtcms.com/a/108588.html

相关文章:

  • win10 快速搭建 lnmp+swoole 环境 ,部署laravel6 与 swoole框架laravel-s项目1
  • Docker in Docker(Dind)
  • 深入解析 Git Submodule:从基础到高级操作指南
  • 电子电气架构 --- 控制器级架构
  • 基于HTML5的拖拽排序功能实现详解
  • Dify接口api对接,流式接收流式返回(.net)
  • Java迭代器【设计模式之迭代器模式】
  • C++ 中的类型处理与类型别名(二十六)
  • 车辆选择解决方案
  • 5.模型训练-毕设篇3
  • 字节跳动 UI-TARS 汇总整理报告
  • 核桃派2B:opencv python的 Canny findContours得到两个非常接近的轮廓,角点有几个像素的差距,如何处理?
  • 使用 Flutter 制作地图应用
  • 封装一套通用echats
  • 电子电气架构 --- 域控制器和EE架构关系
  • 时间字段前端VO接收用String,后端用Date
  • 防火墙和端口开关
  • Kafka和RocketMQ零拷贝对比
  • ABeam 德硕 | 中国汽车市场(2)——新能源车的崛起与中国汽车市场机遇与挑战
  • nuxt3 部署到服务器配置
  • 关于 数据库表关联查询(JOIN) 和 子查询(Subquery) 的详细对比,包括定义、语法、优缺点、使用场景及示例代码,并以表格总结关键差异
  • gitblit服务启动报错Cannot assign requested address: bind
  • Spring Boot3使用Spring AI通过Ollama集成deepseek
  • 从技术视角看海外服务器免备案机制——以AWS云为例
  • C#:DispatcherTimer计时器
  • WHAT - 从后端开发的 trace 追踪认识请求的完整流转过程
  • 洛谷 P1032 [NOIP 2002 提高组] 字串变换
  • 第一期:Spring Web MVC 入门 [特殊字符](基础概念 + 环境搭建)
  • 解锁医疗行业软件 UI 设计密码,打造高效就医体验
  • Linux NUC小主机化身视频会议服务器: 技术优势与部署实战