环境
  CentOS Linux release 7.6.1810
  jdk1.8.0_65
  apache-tomcat-8.5.45
  Jenkins-2.235.5
  apache-maven-3.6.3
  git-2.9.5
  gradle-6.6.1
  SonarQube-6.7.7(LTS)
  sonar-scanner-cli-4.2.0.1873
拓扑:
  node1:安装GitLab、SonarQube
  node2:安装Jenkins、Git、MAVEN

我们开发的软件都需要测试,才能上线,软件测试按阶段划分:
(1)单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。
(2)集成测试(integration testing),是单元测试的下一阶段,是指将通过测试的单元模块组装成系统或子系统,再进行测试,重点测试不同模块的接口部门。
(3)系统测试(system testing),指的是将整个软件系统看做一个整体进行测试,包括对功能、性能,以及软件所运行的软硬件环境进行测试。
(4)验收测试(acceptance testing),指的是在系统测试的后期,以用户测试为主,或有测试人员等质量保障人员共同参与的测试,它也是软件正式交给用户使用的最后一道工序。

一般性能测试:指的是让被测系统在正常的软硬件环境下运行,不向其施加任何压力的性能测试。
稳定性测试也叫可靠性测试(reliability testing):是指连续运行被测系统检查系统运行时的稳定程度。
负载测试(load testing):是指让被测系统在其能忍受的压力的极限范围之内连续运行,来测试系统的稳定性。
压力测试(stress testing):是指持续不断的给被测系统增加压力,直到将被测系统压垮为止,用来测试系统所能承受的最大压力。

一、单元测试
每种编程语言都有单元测试框架,比如java语言中JUnit,执行单元测试的工作一般由自动化构建工具完成,但是构建工具只是执行了单元测试的命令,将单元测试调用起来,构建工具不会帮我们创建单元测试用例,单元测试都是开发事先写好的。

1、Junit单元测试报告
这里演示一个jenkins使用JUnit插件收集展示单元测试报告的示例:
(1)Jenkins安装JUnit插件
(2)创建一个MultiBranch pipeline 工程
maven项目pom.xml中引入maven-surefire-plugin插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <!--表示执行任何子目录下所有命名以Tests结尾的java类 -->
        <includes>
            <include>**/*Tests.java</include>
        </includes>
        <!--表示不执行任何子目录下所有命名以Test开头的java类 -->
        <!--
        <excludes>
            <exclude>**/Test*.java</exclude>
        </excludes>
        -->
    </configuration>
</plugin>

完整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>com.macro.mall</groupId>
    <artifactId>mall-tiny</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <name>mall-tiny</name>
    <description>mall-tiny project</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <skipTests>false</skipTests>
        <!--该方法有漏洞,容易被黑客远程放入挖矿机镜像,开启需做好防范,
        年少无知的我,开放2375,没做ip限制,被拉去挖矿了。。。
        推荐使用CA加密端口-->
        <docker.host>http://192.168.118.106:2375</docker.host>
        <docker.maven.plugin.version>1.2.2</docker.maven.plugin.version>
        <druid.version>1.1.10</druid.version>
        <hutool.version>4.5.7</hutool.version>
        <swagger2.version>2.9.2</swagger2.version>
        <swagger-models.version>1.6.0</swagger-models.version>
        <swagger-annotations.version>1.6.0</swagger-annotations.version>
        <mysql-connector.version>8.0.16</mysql-connector.version>
        <jjwt.version>0.9.0</jjwt.version>
        <mybatis-plus.version>3.3.2</mybatis-plus.version>
        <velocity.version>2.2</velocity.version>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <dependencies>
        <!--SpringBoot通用依赖模块-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--SpringBoot校验框架-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <!--集成druid连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>${druid.version}</version>
        </dependency>
        <!--Mysql数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql-connector.version}</version>
        </dependency>
        <!--Swagger-UI API文档生产工具-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${swagger2.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${swagger2.version}</version>
        </dependency>
        <!--解决Swagger 2.9.2版本NumberFormatException-->
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-models</artifactId>
            <version>${swagger-models.version}</version>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>${swagger-annotations.version}</version>
        </dependency>
        <!--redis依赖配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!--SpringSecurity依赖配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <!--Hutool Java工具包-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>${hutool.version}</version>
        </dependency>
        <!--JWT(Json Web Token)登录支持-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>${jjwt.version}</version>
        </dependency>
        <!--lombok依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--SpringBoot配置处理-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <!--MyBatis Plus 依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>
        <!--MyBatis Plus 代码生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>
        <!--Velocity模板引擎-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>${velocity.version}</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <!--表示执行任何子目录下所有命名以Tests结尾的java类 -->
                    <includes>
                        <include>**/*Tests.java</include>
                    </includes>
                    <!--表示不执行任何子目录下所有命名以Test开头的java类 -->
                    <!--
                    <excludes>
                        <exclude>**/Test*.java</exclude>
                    </excludes>
                    -->
                </configuration>
            </plugin>
            <!-- docker-maven-plugin 插件就是为了帮助我们在Maven工程中,通过简单的配置,自动生成镜像并推送到仓库中。
                微服务部署有两种方法:
                (1)手动部署:首先基于源码打包生成jar包(或war包),写个Dockerfile文件,基于基础镜像搞个新镜像,将jar包(或war包)上传至虚拟机并拷贝至JDK容器。(太麻烦了)
                (2)通过Maven插件自动部署。 这也是企业实际开发中经常使用的方法。
                参考:
                https://blog.csdn.net/weixin_44424668/article/details/104062822
                https://www.cnblogs.com/jpfss/p/10945324.html
             -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>${docker.maven.plugin.version}</version>
                <executions>
                    <execution>
                        <id>build-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!--修改imageName节点的内容,改为私有仓库地址和端口,再加上镜像id和TAG,我们要直接传到私服-->
                    <!--配置最后生成的镜像名,docker images里的,我们这边取项目名:版本-->
                    <imageName>192.168.82.46:18083/${project.artifactId}:${project.version}</imageName>
                    <dockerHost>${docker.host}</dockerHost>
                    <!--基础镜像,相当于Dockerfile里的from-->
                    <baseImage>ascdc/jdk8</baseImage>
                    <!--入口点,project.build.finalName就是project标签下的build标签下的filename标签内容,testDocker-->
                    <!--相当于启动容器后,会自动执行java-jar/testDocker.jar-->
                    <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint>
                    <!--是否推送到docker私有仓库  设置为true 每次构建都要推送镜像-->
                    <!--<pushImage>true</pushImage>-->
                    <!-- 要在$MAVEN_HOME/settings.xml中配置对应的serverId才行 否咋报错Fail : no basic auth credentials -->
                    <serverId>cicd-docker-release</serverId>
                    <registryUrl>192.168.82.46:18083</registryUrl>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <!--
                                把哪个文件上传到docker,相当于Dockerfile里的add testDocker.jar
                                mvn clean,mvn install一下,先放到本地仓库再说
                                mvn docker:build命令创建镜像,如果还要上传,加个-DpushImage参数
                                mvn clean package docker:build 只执行 build 操作
                                mvn clean package docker:build -DpushImage 执行 build 完成后 push 镜像
                                mvn clean package docker:build -DpushImageTag 执行 build 并 push 指定 tag 的镜像
                            -->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
View Code

相关文章:

  • 2021-04-10
  • 2021-10-19
  • 2021-09-08
  • 2022-01-08
  • 2021-05-27
  • 2021-05-21
  • 2021-06-16
猜你喜欢
  • 2021-12-31
  • 2022-01-12
  • 2021-07-31
相关资源
相似解决方案