基于SSM+MVC三层架构实现软件测试管理系统

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 基于SSM+MVC三层架构实现软件测试管理系统

基于SSM实现软件测试管理系统

引言

Hello,大家好,本周博主为大家带来一个基于SSM的软件测试管理系统,系统分为两大模块,用户与bug模块

其中管理员管理用户,为用户分配角色,分为开发或测试,用户管理bug模块,其中,测试提交bug,写好bug信息,进行提交,开发人员对bug进行修改,直至测试确认bug修改完成后,结束对话。

文字表达难免表达不清楚,下面看效果图

效果图时长3分钟,要耐心看下去哦

效果图

在这里插入图片描述

技术栈

  1. 后端:==Java、Spring、Spring MVC、 MyBatis==
  2. 前端:bootstrap、jsp

软件测试管理系统

系统支持防跳墙,利用Spring MVC Interceptor拦截器实现,

实体类采用lombok插件

系统采用三层架构完成

数据表准备


t_user用户表

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `userpwd` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `realname` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `usertype` int(11) DEFAULT NULL COMMENT '账号类型,1:开发,2:测试',
  PRIMARY KEY (`id`)
) 

t_bug_topic bug主题表

CREATE TABLE `t_bug_topic` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `bug_title` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'bug主题',
  `bug_detail` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'bug详细信息',
  `bug_level` int(11) DEFAULT NULL COMMENT 'bug级别:1:功能优化、2:一般异常、3:重大异常',
  `test_user_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '测试用户id',
  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '当前日期',
  `bug_status` int(11) DEFAULT '0' COMMENT '当前bug状态,1 未处理 2 修改完成待确认 3 修改被驳回 4 修改完成已确认',
  PRIMARY KEY (`id`)
)

t_bug_trace bug跟踪表

CREATE TABLE `t_bug_trace` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `topic_id` int(11) DEFAULT NULL COMMENT 'bugid',
  `send_user_id` int(11) DEFAULT NULL COMMENT '发送人员id',
  `send_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '当前日期',
  `detail_info` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '详细信息',
  `bug_status` int(11) DEFAULT NULL COMMENT '当前状态:0 普通沟通 2 修改完成,提交确认 3 修改驳回 4 修改完成已确认',
  PRIMARY KEY (`id`)
) 

项目结构

在这里插入图片描述

Java源码

在这里插入图片描述

配置文件

在这里插入图片描述

前端结构

在这里插入图片描述

搭建项目

以Maven方式创建Web项目

整合SSM

pom依赖文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>APPTestManagerSystem</artifactId>
    <version>1.0-SNAPSHOT</version>


    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.4</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>

        <!-- mybatis依赖的坐标 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.4</version>
        </dependency>

        <!-- java连接mysql的驱动坐标 -->
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.4</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

</project>

核心源码

bean层

User用户类

package com.wanshi.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class TUser {

    private Integer id;
    private String username;
    private String userpwd;
    private String realname;
    private Integer usertype;
}

BugTopic Bug主题类

package com.wanshi.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class BugTopic {

    private Integer id;
    private String bug_title;
    private String bug_detail;
    private Integer bug_level;
    private Integer test_user_id;
    private Date create_time;
    private Integer bug_status;

    private String testUsername;

    private String createTime;

}

BugTrace Bug跟踪类

package com.wanshi.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class BugTrace {

    private Integer id;
    private Integer topic_id;
    private Integer send_user_id;
    private Date send_time;
    private String detail_info;
    private Integer bug_status;

    private String sendUserName;
    private String sendTime;
    private String userType;
}

Page 分页类

package com.wanshi.bean;

import java.util.ArrayList;
import java.util.List;

/**
 * 分页类,使用该类需传入3个参数,
 * currPage:当前页数
 * pageSize:每页显示的记录数
 * rowCount:总共的记录数
 *
 * 注意::初始化该类后,使用该类的currPageFirstRowIndex属性传入数据访问层进行分页
 * 分页完成后返回list集合,需要将返回的list集合通过该类的setList方法存入数据即可完成
 *
 * @author 王会称
 *
 * @param <T>
 */
public class Page<T> {

    /**
     * 当前页前面的页数
     */
    private static final int BeforePageNumbCount =  4;

    /**
     * 当前页后面的页数
     */
    private static final int AfterPageNumbCount = 3;

    /**
     * 当前页
     */
    private int currPage;
    /**
     * 总记录数
     */
    private int rowCount;
    /**
     * 分页的第二个参数,用于展示每页显示几条数据
     * limit arg1, arg2    arg2
     *
     */
    private int pageSize;
    /**
     * 总页数
     */
    private int pageCount;
    /**
     * 前一页
     */
    private int prevPageNumb;
    /**
     * 后一页
     */
    private int nextPageNumb;

    /**
     * 从第几条开始截取,分页的第一个参数
     * limit arg1, arg2    arg1
     *
     */
    private int currPageFirstRowIndex;
    /**
     * 当前页的集合
     */
    private List<T> list;
    /**
     * 当前显示的按钮数,前4后3
     */
    private List<Integer> pageButtonNumbs ;

    /**
     * 初始化分页类,传入当前页,每页的记录数,总记录数
     * @param _currPage
     * @param _pageSize
     * @param _rowCount
     */
    public Page(int _currPage, int _pageSize, int _rowCount){

        //初始化固定数据,每页的数据记录数,总记录数
        this.pageSize = _pageSize;
        this.rowCount = _rowCount;

        // 计算出当前共有多少页
        this.pageCount = this.rowCount / this.pageSize;
        if(this.rowCount% this.pageSize !=0 ){
            this.pageCount ++ ;
        }

        // 修正当前页
        this.currPage = _currPage ;
        if(this.currPage< 1 ){
            this.currPage = 1;
        }

        if(this.currPage > this.pageCount ){
            this.currPage = this.pageCount;
        }

        // 计算limit分页的第一个参数
        this.currPageFirstRowIndex = (this.currPage-1)* this.pageSize ;

        //如果小于0,那就从0开始截取
        if (this.currPageFirstRowIndex < 0) {
            this.currPageFirstRowIndex = 0;
        }

        // 计算前一页与后一页
        this.prevPageNumb = this.currPage - 1;
        this.nextPageNumb = this.currPage + 1;

        //修正前一页
        if(this.prevPageNumb<1){
            this.prevPageNumb = 1;
        }

        //修正后一页
        if(this.nextPageNumb >1 && this.nextPageNumb > this.pageCount){
            this.nextPageNumb = this.pageCount;
        }

        // 计算当前的按钮数
        this.pageButtonNumbs = new ArrayList();
        for( int i = this.currPage - BeforePageNumbCount ; i <= this.currPage+AfterPageNumbCount ;i++){
            if(i<1 || i> this.pageCount ){
                continue;
            }
            this.pageButtonNumbs.add(i);
        }

    }

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }

    public int getCurrPage() {
        return currPage;
    }

    public int getRowCount() {
        return rowCount;
    }

    public int getPageSize() {
        return pageSize;
    }

    public int getPageCount() {
        return pageCount;
    }

    public int getPrevPageNumb() {
        return prevPageNumb;
    }

    public int getNextPageNumb() {
        return nextPageNumb;
    }

    public List<Integer> getPageButtonNumbs() {
        return pageButtonNumbs;
    }

    public int getCurrPageFirstRowIndex() {
        return currPageFirstRowIndex;
    }

    @Override
    public String toString() {
        return "Page [currPage=" + currPage + ", rowCount=" + rowCount + ", pageSize=" + pageSize + ", pageCount="
                + pageCount + ", prevPageNumb=" + prevPageNumb + ", nextPageNumb=" + nextPageNumb
                + ", currPageFirstRowIndex=" + currPageFirstRowIndex + ", list=" + list + ", pageButtonNumbs="
                + pageButtonNumbs + "]";
    }
}

controller层

RouteController 路由跳转类,用于携带数据跳转到指定jsp页面进行渲染

package com.wanshi.controller;

import com.wanshi.bean.BugTopic;
import com.wanshi.bean.TUser;
import com.wanshi.service.BugTopicService;
import com.wanshi.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

@Controller
@RequestMapping("/route")
public class RouteController {

    @Autowired
    private UserService userService;

    @Autowired
    private BugTopicService bugTopicService;

    @GetMapping("/index")
    public String index() {
        return "index";
    }

    @GetMapping("/addUser")
    public String userAdd() {
        return "user/add";
    }

    @GetMapping("/updateUser")
    public String updateUser(String id, Model model) {
        TUser tUser = userService.get(Integer.valueOf(id));
        model.addAttribute("user", tUser);
        return "user/edit";
    }

    @GetMapping("/addBug")
    public String addBug() {
        return "bug/add";
    }

    @GetMapping("/updateBug")
    public String updateBug(String id, Model model) {
        BugTopic bugTopic = bugTopicService.get(Integer.valueOf(id));
        model.addAttribute("bug", bugTopic);
        return "bug/edit";
    }

    @GetMapping("/disposeBug")
    public String disposeBug(String id, HttpServletRequest request) {
        BugTopic bugTopic = bugTopicService.get(Integer.valueOf(id));
        request.getSession().setAttribute("bug", bugTopic);
        return "redirect:/bug_trace/list";
    }

}

BugTopicController bug主题控制器类

package com.wanshi.controller;

import com.wanshi.bean.BugTopic;
import com.wanshi.bean.Page;
import com.wanshi.service.BugTopicService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

@Controller
@RequestMapping("/bug_topic")
public class BugTopicController {


    @Autowired
    private BugTopicService bugTopicService;

    private static final Integer PageSize = 2;

    @GetMapping("/page")
    public String page(HttpServletRequest request, Model model) {
        String bugTitle = request.getParameter("bug_title");
        String bugLevel = request.getParameter("bug_level");
        String testUsername = request.getParameter("test_username");
        String pageNumb = request.getParameter("pageNumb");
        Integer currPage = 1;
        if (pageNumb != null && !pageNumb.equals("")) {
            currPage = Integer.valueOf(pageNumb);
        }
        Page<BugTopic> page = bugTopicService.page(bugTitle, bugLevel, testUsername, currPage, PageSize);
        model.addAttribute("pager", page);
        model.addAttribute("bugTitle", bugTitle);
        model.addAttribute("bugLevel", bugLevel);
        model.addAttribute("testUsername", testUsername);
        return "bug/list";
    }

    @PostMapping("/addHandle")
    public String addHandle(BugTopic bugTopic) {
        bugTopicService.insert(bugTopic);
        return "redirect:/bug_topic/page";
    }

    @PostMapping("/editHandle")
    public String editHandle(BugTopic bugTopic) {
        System.out.println(bugTopic);
        bugTopicService.update(bugTopic);
        return "redirect:/bug_topic/page";
    }

}

service层

BugTopicService

package com.wanshi.service;

import com.wanshi.bean.BugTopic;
import com.wanshi.bean.Page;

import java.util.List;

public interface BugTopicService {

    Page<BugTopic> page(String bugTitle, String bugLevel, String testUsername, Integer currPage, Integer pageSize);

    void update(BugTopic bugTopic);

    void insert(BugTopic bugTopic);

    BugTopic get(Integer id);
}

BugServiceImpl 实现类

package com.wanshi.service.impl;

import com.wanshi.bean.BugTopic;
import com.wanshi.bean.Page;
import com.wanshi.mapper.BugTopicMapper;
import com.wanshi.service.BugTopicService;

import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class BugTopicServiceImpl implements BugTopicService {

    private BugTopicMapper bugTopicMapper;

    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");

    public void setBugTopicMapper(BugTopicMapper bugTopicMapper) {
        this.bugTopicMapper = bugTopicMapper;
    }

    public Page<BugTopic> page(String bugTitle, String bugLevel, String testUsername, Integer currPage, Integer pageSize) {
        Map<String, Object> maps = new HashMap<String, Object>();
        maps.put("bugTitle", bugTitle);
        maps.put("bugLevel", bugLevel);
        maps.put("testUsername", testUsername);
        Integer rowCount = bugTopicMapper.getTotal(maps);
        Page<BugTopic> page = new Page<BugTopic>(currPage, pageSize, rowCount);
        maps.put("currPage", page.getCurrPageFirstRowIndex());
        maps.put("pageSize", pageSize);
        List<BugTopic> bugTopicList = bugTopicMapper.page(maps);
        for (BugTopic bugTopic : bugTopicList) {
            bugTopic.setCreateTime(sdf.format(bugTopic.getCreate_time()));
        }
        page.setList(bugTopicList);
        return page;
    }

    public void update(BugTopic bugTopic) {
        bugTopicMapper.update(bugTopic);
    }

    public void insert(BugTopic bugTopic) {
        bugTopicMapper.insert(bugTopic);
    }

    public BugTopic get(Integer id) {
        BugTopic bugTopic = bugTopicMapper.get(id);
        bugTopic.setCreateTime(sdf.format(bugTopic.getCreate_time()));
        return bugTopic;
    }
}

mapper层

BugTopicMapper

package com.wanshi.mapper;

import com.wanshi.bean.BugTopic;

import java.util.List;
import java.util.Map;

public interface BugTopicMapper {

    List<BugTopic> page(Map<String, Object> maps);

    void update(BugTopic bugTopic);

    void insert(BugTopic bugTopic);

    BugTopic get(Integer id);

    Integer getTotal(Map<String, Object> maps);
}

BugTopicMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wanshi.mapper.BugTopicMapper">

    <select id="page" resultType="com.wanshi.bean.BugTopic">
        SELECT bug.*, user.`realname` testUsername FROM t_bug_topic bug JOIN t_user1105 USER ON user.id = bug.test_user_id
        <where>
            <if test="bugTitle != null and bugTitle != ''">
                bug_title like concat('%',#{bugTitle},'%')
            </if>
            <if test="bugLevel != null and bugLevel != ''">
                and bug_level = #{bugLevel}
            </if>
            <if test="testUsername != null and testUsername != ''">
                and test_user_id = (SELECT u.`id` FROM t_user1105 u WHERE realname LIKE concat('%',#{testUsername},'%'))
            </if>
        </where>
        limit #{currPage}, #{pageSize}
    </select>

    <insert id="insert">
        insert into t_bug_topic (bug_title, bug_detail, bug_level,test_user_id)
        values (#{bug_title}, #{bug_detail}, #{bug_level}, #{test_user_id})
    </insert>

    <update id="update">
        update t_bug_topic
        <set>
            <if test="bug_title != null and bug_title != ''">bug_title = #{bug_title},</if>
            <if test="bug_detail != null and bug_detail != ''">bug_detail = #{bug_detail},</if>
            <if test="bug_level != null and bug_level != ''">bug_level = #{bug_level},</if>
            <if test="test_user_id != null and test_user_id != ''">test_user_id = #{test_user_id},</if>
            <if test="bug_status != null and bug_status != ''">bug_status = #{bug_status},</if>
            create_time = now()
        </set>
        where id = #{id}
    </update>

    <select id="get" resultType="com.wanshi.bean.BugTopic">
        SELECT bug.*, user.`realname` testUsername FROM t_bug_topic bug JOIN t_user1105 USER ON user.id = bug.test_user_id where bug.`id` = #{id}
    </select>

    <select id="getTotal" resultType="int">
        select count(*) from t_bug_topic
        <where>
            <if test="bugTitle != null and bugTitle != ''">
                bug_title like concat('%',#{bugTitle},'%')
            </if>
            <if test="bugLevel != null and bugLevel != ''">
                and bug_level = #{bugLevel}
            </if>
            <if test="testUsername != null and testUsername != ''">
                and test_user_id = (SELECT u.`id` FROM t_user1105 u WHERE realname LIKE concat('%',#{testUsername},'%'))
            </if>
        </where>
    </select>

</mapper>

项目源码就分享到此,由于文件太多,本博客只介绍核心类,若对本项目感兴趣的老铁,可在下方链接获取完整项目

结语

本博客到此结束,系统还是有些逻辑性的,建议多练习,巩固知识,提示自己的逻辑思维能力

完整项目链接:基于SSM框架软件测试管理系统

提取码: jg3f

有任何问题均可在评论区留言或私信我

只求您能留下您宝贵的足迹,等啥呢,都看到这啦,还不来个一键三连嘛(==收藏+关注+评论==)

感谢您的支持,我们下篇见~

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
数据采集 机器学习/深度学习 大数据
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
这篇文章详细介绍了C3D架构在行为检测领域的应用,包括训练和测试步骤,使用UCF101数据集进行演示。
80 1
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
|
1月前
|
存储 前端开发 调度
Flux 与传统的 MVC 架构模式区别
Flux是一种用于构建用户界面的架构模式,与传统的MVC架构不同,它采用单向数据流,通过Dispatcher统一管理数据的分发,Store负责存储数据和业务逻辑,View只负责展示数据,使得应用状态更加可预测和易于维护。
|
14天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
52 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
4月前
|
设计模式 前端开发 数据库
哇塞!Rails 的 MVC 架构也太牛了吧!快来看看这令人惊叹的编程魔法,开启新世界大门!
【8月更文挑战第31天】《Rails中的MVC架构解析》介绍了Ruby on Rails框架核心的MVC设计模式,通过模型(Model)、视图(View)和控制器(Controller)三部分分离应用逻辑,利用Active Record进行数据库操作,ERB模板渲染视图,以及控制器处理用户请求与业务逻辑,使代码更易维护和扩展,提升团队开发效率。
84 0
|
1月前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
38 1
|
2月前
|
监控 测试技术
如何进行系统压力测试?
【10月更文挑战第11天】如何进行系统压力测试?
173 34
|
2月前
|
存储 监控 网络协议
服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
【10月更文挑战第11天】服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
150 32
|
1月前
|
缓存 监控 测试技术
全网最全压测指南!教你如何测试和优化系统极限性能
大家好,我是小米。本文将介绍如何在实际项目中进行性能压测和优化,包括单台服务器和集群压测、使用JMeter、监控CPU和内存使用率、优化Tomcat和数据库配置等方面的内容,帮助你在高并发场景下提升系统性能。希望这些实战经验能助你一臂之力!
93 3
|
1月前
|
编解码 安全 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(10-2):保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali——Liinux-Debian:就怕你学成黑客啦!)作者——LJS
保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali以及常见的报错及对应解决方案、常用Kali功能简便化以及详解如何具体实现
|
3月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
498 37