开发者社区测试报告(功能测试+性能测试)

功能测试

测试相关用例

开发者社区功能背景

在当今数字化时代,编程已经成为一项核心技能,越来越多的人开始学习编程,以适应快速变化的科技 环境。基于这一需求,我设计开发了一个类似博客的论坛系统,专注于方便程序员与学习编程者之间的交流和 学习,旨在创建一个开放、友好且充满活力的社区。

测试用例思维导图

测试页面

以下是要测试的页面:

页面排版渲染与需求一致,同时按钮能够进行正确点击

登录页面

注册页面

主界面

用户个人信息

帖子详情

短信页面

测试用例

设置了部分基础的测试用例,尽可能的全覆盖,这里只展示部分用例(篇幅有限)

登录界面

  • 正确输入用户名和密码

  • 输入密码为空

注册页面

  • 正确注册

  • 用户名为空

  • 用户已存在

  • 密码为空

个人页面

  • 邮箱修改失败

  • 电话号码失败

  • 密码修改失败

帖子页面

  • 创建帖子失败

  • 回复帖子失败

站内信页面

回复失败

代码编写

基础配置

先进行驱动配置以及截图配置

public class InitUtils {public static WebDriver webDriver ;public static WebDriver createDriver(){if(webDriver==null){System.setProperty("webdriver.chrome.driver", "C:\\学习使我快乐\\测试\\demo\\chromedriver-win64\\chromedriver.exe");ChromeOptions options = new ChromeOptions();options.addArguments("--remote-allow-origins=*");webDriver=new ChromeDriver(options);webDriver.manage().timeouts().implicitlyWait(Duration.ofMillis(5));}return webDriver;}public InitUtils(String url){webDriver = createDriver();webDriver.get(url);}//截图public static void getImage(String str) throws IOException {SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat sim2 = new SimpleDateFormat("HH_mm_ss_SSS");String dirTime = sim1.format(System.currentTimeMillis());String pngTime = sim2.format(System.currentTimeMillis());//名字String fileName = "./src/test/image/"+dirTime+"/"+str+"_"+pngTime+".png";File file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);FileUtils.copyFile(file,new File(fileName));}
}

登录页面

public class LoginPageTest extends InitUtils {public static String url = "http://127.0.0.1:58080/sign-in.html";public LoginPageTest() {super(url);}//登录成功public void LoginSuc() throws InterruptedException, IOException {String str = Thread.currentThread().getStackTrace()[1].getMethodName();//先找到输入框,输入正确的用户名和密码getImage(str);//用方法名进行命名Thread.sleep(2000);webDriver.findElement(By.cssSelector("#username")).sendKeys("小明");webDriver.findElement(By.cssSelector("#password")).sendKeys("123123");webDriver.findElement(By.cssSelector("#submit")).click();Thread.sleep(2000);getImage(str);//webDriver.quit();}//退出登录public void logout() throws IOException {String str = Thread.currentThread().getStackTrace()[1].getMethodName();getImage(str);webDriver.findElement(By.cssSelector("#index_nav_avatar")).click();getImage(str);webDriver.findElement(By.cssSelector("#index_user_logout")).click();getImage(str);//webDriver.quit();}//登录失败public void LoginFail() throws IOException, InterruptedException {String str = Thread.currentThread().getStackTrace()[1].getMethodName();//先找到输入框,输入错误的用户名和密码getImage(str);
//        webDriver.findElement(By.cssSelector("#username")).sendKeys("小明");
//        webDriver.findElement(By.cssSelector("#password")).sendKeys("123456111");webDriver.findElement(By.cssSelector("#username")).sendKeys("");webDriver.findElement(By.cssSelector("#password")).sendKeys("");webDriver.findElement(By.cssSelector("#submit")).click();Thread.sleep(2000);getImage(str);//webDriver.quit();}
}

注册页面

public class RegisterTest extends InitUtils {public static String url = "http://127.0.0.1:58080/sign-up.html";public RegisterTest() {super(url);}//注册成功public void registerSuc() throws IOException, InterruptedException {String str = Thread.currentThread().getStackTrace()[1].getMethodName();getImage(str);Thread.sleep(2000);webDriver.findElement(By.cssSelector("#username")).sendKeys("小喜");webDriver.findElement(By.cssSelector("#nickname")).sendKeys("happiness");webDriver.findElement(By.cssSelector("#password")).sendKeys("123456");webDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123456");webDriver.findElement(By.cssSelector("#policy")).click();Thread.sleep(2000);getImage(str);webDriver.findElement(By.cssSelector("#submit")).click();Thread.sleep(2000);getImage(str);//webDriver.quit();}//注册失败public void fail() throws IOException, InterruptedException {String str = Thread.currentThread().getStackTrace()[1].getMethodName();getImage(str);//webDriver.findElement(By.cssSelector("#username")).sendKeys("");//用户名为空//webDriver.findElement(By.cssSelector("#username")).sendKeys("小明");//用户名重复webDriver.findElement(By.cssSelector("#username")).sendKeys("明明");webDriver.findElement(By.cssSelector("#nickname")).sendKeys("mingming");//webDriver.findElement(By.cssSelector("#password")).sendKeys("");//密码为空//webDriver.findElement(By.cssSelector("#password")).sendKeys("123");//密码小于6位webDriver.findElement(By.cssSelector("#password")).sendKeys("123456");//webDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123");//两次密码输入不一样webDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123456");//不点击同意信息//webDriver.findElement(By.cssSelector("#policy")).click();Thread.sleep(2000);getImage(str);webDriver.findElement(By.cssSelector("#submit")).click();Thread.sleep(2000);getImage(str);}
}

帖子页面

public class ListPageTest extends InitUtils {public static String url = "http://127.0.0.1:58080/index.html";public ListPageTest() {super(url);}//点击帖子public void listDetail() throws IOException {String str = Thread.currentThread().getStackTrace()[1].getMethodName();getImage(str);webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).click();//因为是外部的文件 MD输入,所以一般是找不到的webDriver.findElement(By.cssSelector("#article_details_reply > div.CodeMirror.cm-s-default.CodeMirror-wrap.CodeMirror-empty > div.CodeMirror-scroll")).sendKeys("这是自动化测试内容");getImage(str);webDriver.findElement(By.cssSelector("#details_btn_article_reply")).click();getImage(str);//webDriver.quit();}//点击板块public void listBoard() throws IOException, InterruptedException {String str = Thread.currentThread().getStackTrace()[1].getMethodName();getImage(str);webDriver.findElement(By.cssSelector("#topBoardList > li:nth-child(5) > a > span.nav-link-title")).click();Thread.sleep(2000);getImage(str);webDriver.findElement(By.cssSelector("#topBoardList > li:nth-child(8) > a > span.nav-link-title")).click();Thread.sleep(2000);getImage(str);webDriver.quit();}//发布新帖子public void createNewText() throws IOException, InterruptedException{String str = Thread.currentThread().getStackTrace()[1].getMethodName();webDriver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post")).click();getImage(str);webDriver.findElement(By.cssSelector("#article_post_borad > option:nth-child(6)")).click();//选择板块webDriver.findElement(By.cssSelector("#article_post_title")).sendKeys("自动化测试");Thread.sleep(2000);webDriver.findElement(By.cssSelector("#edit-article > div.CodeMirror.cm-s-default.CodeMirror-wrap.CodeMirror-empty > div.CodeMirror-scroll")).sendKeys("自动化测试内容");Thread.sleep(2000);getImage(str);webDriver.findElement(By.cssSelector("#article_post_submit")).click();Thread.sleep(2000);getImage(str);webDriver.quit();}
}

用户页面

public class UserTest extends InitUtils {//用户有两个页面,所以需要进行跳转public static String url="http://127.0.0.1:58080/index.html";public UserTest() {super(url);}//获取当前用户帖子public void myText() throws InterruptedException, IOException {String str = Thread.currentThread().getStackTrace()[1].getMethodName();getImage(str);Thread.sleep(2000);webDriver.findElement(By.cssSelector("#index_nav_avatar")).click();webDriver.findElement(By.cssSelector("#index_user_profile")).click();Thread.sleep(2000);getImage(str);//点击帖子webDriver.findElement(By.cssSelector("#profile_article_body > li > div.card.timeline-event-card > div > div > div > div > div.text-truncate > a > strong")).click();getImage(str);webDriver.quit();}//修改个人信息成功public void updateInfoSuc() throws IOException, InterruptedException {String str = Thread.currentThread().getStackTrace()[1].getMethodName();getImage(str);Thread.sleep(2000);webDriver.findElement(By.cssSelector("#index_nav_avatar")).click();webDriver.findElement(By.cssSelector("#index_user_settings")).click();Thread.sleep(2000);//修改个人信息//修改之前要先清空//修改头像webDriver.findElement(By.cssSelector("#bit-forum-content > div.page-body > div > div > div > div.col.d-flex.flex-column > div > div.row.align-items-center > div:nth-child(2) > a")).sendKeys("C:\\Users\\asus\\Desktop\\证件照压缩版.jpg");//修改昵称
//        webDriver.findElement(By.cssSelector("#setting_input_nickname")).clear();
//        webDriver.findElement(By.cssSelector("#setting_input_nickname")).sendKeys("NickName");
//        Thread.sleep(2000);
//        webDriver.findElement(By.cssSelector("#setting_submit_nickname")).click();
//
//        //修改邮箱
//        webDriver.findElement(By.cssSelector("#setting_input_email")).clear();
//        webDriver.findElement(By.cssSelector("#setting_input_email")).sendKeys("qweqwe123@qq.com");
//        Thread.sleep(2000);
//        webDriver.findElement(By.cssSelector("#setting_submit_email")).click();
//
//        //修改电话号码
//        webDriver.findElement(By.cssSelector("#setting_input_phoneNum")).clear();
//        webDriver.findElement(By.cssSelector("#setting_input_phoneNum")).sendKeys("15136698733");
//        Thread.sleep(2000);
//        webDriver.findElement(By.cssSelector("#setting_submit_phoneNum")).click();
//
//        //修改密码
//        webDriver.findElement(By.cssSelector("#settings_input_oldPassword")).sendKeys("123123");
//        webDriver.findElement(By.cssSelector("#settings_input_newPassword")).sendKeys("1123456");
//        webDriver.findElement(By.cssSelector("#settings_input_passwordRepeat")).sendKeys("123456");
//        webDriver.findElement(By.cssSelector("#settings_submit_password")).click();
//
//        //修改个人简介
//        webDriver.findElement(By.cssSelector("#settings_textarea_remark")).clear();
//        webDriver.findElement(By.cssSelector("#settings_textarea_remark")).sendKeys("这是自动化测试");
//        Thread.sleep(2000);
//        webDriver.findElement(By.cssSelector("#settings_submit_remark")).click();Thread.sleep(2000);getImage(str);Thread.sleep(2000);webDriver.quit();}//修改个人信息失败public void updateInfoFail()throws IOException, InterruptedException{String str = Thread.currentThread().getStackTrace()[1].getMethodName();getImage(str);Thread.sleep(2000);webDriver.findElement(By.cssSelector("#index_nav_avatar")).click();webDriver.findElement(By.cssSelector("#index_user_settings")).click();Thread.sleep(2000);//修改个人信息//修改邮箱
//        webDriver.findElement(By.cssSelector("#setting_input_email")).clear();
//        webDriver.findElement(By.cssSelector("#setting_input_email")).sendKeys("qweqwe123");
//        Thread.sleep(2000);
//        webDriver.findElement(By.cssSelector("#setting_submit_email")).click();
//        getImage(str);//        //修改电话号码
//        webDriver.findElement(By.cssSelector("#setting_input_phoneNum")).clear();
//        webDriver.findElement(By.cssSelector("#setting_input_phoneNum")).sendKeys("15136698");
//        Thread.sleep(2000);
//        webDriver.findElement(By.cssSelector("#setting_submit_phoneNum")).click();
//        getImage(str);//修改密码
//        webDriver.findElement(By.cssSelector("#settings_input_oldPassword")).sendKeys("123123");
//        webDriver.findElement(By.cssSelector("#settings_input_newPassword")).sendKeys("1123456");//前后密码不一致
//        webDriver.findElement(By.cssSelector("#settings_input_passwordRepeat")).sendKeys("123456");
//        webDriver.findElement(By.cssSelector("#settings_input_oldPassword")).sendKeys("");//没有输入旧密码
//        webDriver.findElement(By.cssSelector("#settings_input_newPassword")).sendKeys("123456");
//        webDriver.findElement(By.cssSelector("#settings_input_passwordRepeat")).sendKeys("123456");webDriver.findElement(By.cssSelector("#settings_input_oldPassword")).sendKeys("123123");webDriver.findElement(By.cssSelector("#settings_input_newPassword")).sendKeys("123456");webDriver.findElement(By.cssSelector("#settings_input_passwordRepeat")).sendKeys("");//没有输入确认密码Thread.sleep(2000);webDriver.findElement(By.cssSelector("#settings_submit_password")).click();Thread.sleep(1000);getImage(str);webDriver.quit();}
}

短信页面

public class MessageTest extends InitUtils {public static String url = "http://127.0.0.1:58080/index.html";public MessageTest() {super(url);}//打开站内信板块,点击站内信public void getMessage() throws InterruptedException, IOException {String str = Thread.currentThread().getStackTrace()[1].getMethodName();webDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > div > a > svg")).click();Thread.sleep(2000);getImage(str);webDriver.findElement(By.cssSelector("#index_div_message_list > div:nth-child(1) > div > div.col.text-truncate > a > span:nth-child(2)")).click();Thread.sleep(2000);getImage(str);//webDriver.quit();}//回复站内信public void responseMsg()throws InterruptedException, IOException{String str = Thread.currentThread().getStackTrace()[1].getMethodName();webDriver.findElement(By.cssSelector("#btn_index_message_reply")).click();Thread.sleep(2000);getImage(str);webDriver.findElement(By.cssSelector("#index_message_reply_receive_content")).sendKeys("用来测试一下");Thread.sleep(2000);getImage(str);webDriver.findElement(By.cssSelector("#btn_index_send_message_reply")).click();Thread.sleep(2000);getImage(str);webDriver.quit();}
}

性能测试

对部分接口进行了性能测试,设置了600个线程

总结

  • 总体性能

    • 总请求数为6000,所有请求均成功执行,错误率为0.00%。

    • 平均响应时间为5.20毫秒,最小响应时间为0毫秒,最大响应时间为133毫秒。

    • 网络吞吐量为512.30 KiB/s,接收数据量为4521.95 KiB,发送数据量为113.35 KiB。

  • 各请求类型的性能

    • 发起帖子:平均响应时间为10.06毫秒,最大响应时间为32毫秒。

    • 点赞帖子:平均响应时间为5.10毫秒,最大响应时间为13毫秒。

    • 登出:平均响应时间为1.06毫秒,是所有请求中最快的。

    • 登录:平均响应时间为2.83毫秒,最大响应时间为36毫秒。

    • 获取帖子内容:平均响应时间为32.46毫秒,是所有请求中最慢的,最大响应时间为63毫秒。

    • 获取帖子详情:平均响应时间为5.24毫秒,最大响应时间为31毫秒。

    • 获取板块:平均响应时间为2.47毫秒,最大响应时间为8毫秒。

    • 获取用户帖子:平均响应时间为16.25毫秒,最大响应时间为44毫秒。

    • 获取用户详情:平均响应时间为1.17毫秒,最大响应时间为6毫秒。

    • 获取短信内容获取站内信列表:平均响应时间均为4.44毫秒,最大响应时间为133毫秒。

    • 获取站内:平均响应时间为3.39毫秒,最大响应时间为14毫秒。

  • APDEX指数

    • 所有请求的APDEX指数均为1.000,表示所有请求的响应时间都在用户可接受的范围内(容忍阈值500毫秒,沮丧阈值1.5秒)。

  • 网络使用情况

    • 接收数据量最大的是“获取帖子内容”和“获取用户帖子”,分别为4450.46 KiB和4290.84 KiB。

    • 发送数据量最大的是“发起帖子”和“登录”,分别为21.53 KiB和15.27 KiB。

  • 结论

    • 系统整体性能良好,所有请求的响应时间都在可接受范围内,且没有错误发生。

    • “获取帖子内容”和“获取用户帖子”是系统中响应时间较长的操作,可能需要进一步优化。

    • 网络吞吐量和数据传输量在合理范围内,没有明显的瓶颈。

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

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

相关文章

EasyRTC嵌入式音视频通话SDK:基于ICE与STUN/TURN的实时音视频通信解决方案

在当今数字化时代,实时音视频通信技术已成为人们生活和工作中不可或缺的一部分。无论是家庭中的远程看护、办公场景中的远程协作,还是工业领域的远程巡检和智能设备的互联互通,高效、稳定的通信技术都是实现这些功能的核心。 EasyRTC嵌入式音…

【OneAPI】网页截图API-V2

API简介 生成指定URL的网页截图或缩略图。 旧版本请参考:网页截图 V2版本新增全屏截图、带壳截图等功能,并修复了一些已知问题。 全屏截图: 支持全屏截图,通过设置fullscreentrue来支持全屏截图。全屏模式下,系统…

简单的 Python 示例,用于生成电影解说视频的第一人称独白解说文案

以下是一个简单的 Python 示例,用于生成电影解说视频的第一人称独白解说文案。这个示例使用了 OpenAI 的 GPT 模型,因为它在自然语言生成方面表现出色。 实现思路 安装必要的库:使用 openai 库与 OpenAI API 进行交互。设置 API 密钥&#…

记录小白使用 Cursor 开发第一个微信小程序(一):注册账号及下载工具(250308)

文章目录 记录小白使用 Cursor 开发第一个微信小程序(一):注册账号及下载工具(250308)一、微信小程序注册摘要1.1 注册流程要点 二、小程序发布流程三、下载工具 记录小白使用 Cursor 开发第一个微信小程序&#xff08…

六轴传感器ICM-20608

ICM-20608-G是一个6轴传感器芯片,由3轴陀螺仪和3轴加速度计组成。陀螺仪可编程的满量程有:250,500,1000和2000度/秒。加速度计可编程的满量程有:2g,4g,8g和16g。学习Linux之SPI之前,…

python可應用在金融分析的那一個方面,如何部署在linux server上面。

Python 在金融分析中應用廣泛,以下是幾個主要方面: ### 1. **數據處理與分析** - 使用 **Pandas** 和 **NumPy** 等庫來處理和分析大規模數據集,進行清理、轉換和統計運算。 - 舉例:處理歷史市場數據,分析價格趨…

Git与GitHub:理解两者差异及其关系

目录 Git与GitHub:理解两者差异及其关系Git:分布式版本控制系统概述主要特点 GitHub:基于Web的托管服务概述主要特点 Git和GitHub如何互补关系现代开发工作流 结论 Git与GitHub:理解两者差异及其关系 Git:分布式版本控…

STM32全系大阅兵(1)

本文内容参考: STM32家族系列的区别_stm32各个系列区别-CSDN博客 STM32--STM32 微控制器详解-CSDN博客

clickhouse删除一条数据

在当今数据驱动的世界中,ClickHouse作为一种高性能的列式数据库管理系统,广泛应用于需要快速分析大量数据的场景。也许对于初学者来说,掌握如何有效地管理数据,包括添加、更新和删除数据,是使用ClickHouse进行数据分析…

std::vector的模拟实现

目录 构造函数 无参构造 用n个val来初始化的拷贝构造 拷贝构造 用迭代器初始化 析构函数 reserve resize pushback pop_back 迭代器及解引用 迭代器的实现 解引用[ ] insert erase 赋值拷贝 补充 vector底层也是顺序表,但是vector可以储存不同的类…

蓝桥杯刷题周计划(第二周)

目录 前言题目一题目代码题解分析 题目二题目代码题解分析 题目三题目代码题解分析 题目四题目代码题解分析 题目五题目代码题解分析 题目六题目代码题解分析 题目七题目代码题解分析 题目八题目题解分析 题目九题目代码题解分析 题目十题目代码题解分析 题目十一题目代码题解分…

clion+arm-cm3+MSYS-mingw +jlink配置用于嵌入式开发

0.前言 正文可以跳过这段 初识clion,应该是2015年首次发布的时候, 那会还是大三,被一则推介广告吸引到,当时还在用vs studio,但是就喜欢鼓捣新工具,然后下载安装试用了clion,但是当时对cmake规…

蓝桥杯备考:离散化详解

首先,为什么要有离散化呢? 比如这道题,我们应该开一个差分数组,但是a,b之间的间隔可是太大了,难道我们要开一个2的三十二次方大小的数组吗?我们也是开不了这么大的数组的 我们就需要把这些数离…

初学者快速入门Python爬虫 (无废话版)

全篇大概 5000 字(含代码),建议阅读时间 40min 一、Python爬虫简介 1.1 什么是网络爬虫? 定义: 网络爬虫(Web Crawler)是自动浏览互联网并采集数据的程序,就像电子蜘蛛在网页间"爬行"。 分类&…

Day05 实例:正向反向连接内外网环境防火墙出入站

一、正反向连接 0、先将防火墙关闭 Linux: sudo systemctl stop firewalld Windows:netsh advfirewall set allprofiles state off 1、正向连接 1.1 Linux连接Windows 00x1 开启两台服务器 并且给Windows拖入nc.exe 00x2 Windows绑定自己5566端…

电力系统中各参数的详细解释【智能电表】

一、核心电力参数 电压 (Voltage) 单位:伏特(V) 含义:电势差,推动电流流动的动力 类型:线电压(三相系统)、相电压,如220V(家用)或380V&#xff…

【仿muduo库one thread one loop式并发服务器实现】

文章目录 一、项目介绍1-1、项目总体简介1-2、项目开发环境1-3、项目核心技术1-4、项目开发流程1-5、项目如何使用 二、框架设计2-1、功能模块划分2-1-1、SERVER模块2-1-2、协议模块 2-2、项目蓝图2-2-1、整体图2-2-2、模块关系图2-2-2-1、Connection 模块关系图2-2-2-2、Accep…

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_cycle_modules

声明在 src/core/ngx_module.h ngx_int_t ngx_cycle_modules(ngx_cycle_t *cycle);实现在 src/core/ngx_module.c ngx_int_t ngx_cycle_modules(ngx_cycle_t *cycle) {/** create a list of modules to be used for this cycle,* copy static modules to it*/cycle->modul…

Vue3实战学习(IDEA中打开、启动与搭建Vue3工程极简脚手架教程(2025超详细教程)、Windows系统命令行启动Vue3工程)(2)

目录 一、命令行中重新启动已搭建好的Vue3工程。(快速上手) (0)Windows环境下使用命令行从零到一手动搭建Vue3工程教程。 (1)首先找到已建Vue3工程的目录。 (2)无需再下载依赖包,直接执行npm ru…

使用websocket,注入依赖service的bean为null

问题:依赖注入失败,service获取不到,提示null 这是参考代码 package com.shier.ws;import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.google.gson.Gson; import com.s…