利用Jenkins pipeline配置测试工具

利用Jenkins pipeline 配置测试工具一般来说包含以下几个步骤:

1, 准备被测代码;

2, 安装测试工具,进行相应配置;

3, 安装Jenkins 对应插件,并且进行配置;

4, 修改文件;

5, 建立jenkinsfile 文件。

由于这里要用到最新版本的Sonaqube ,必须支持JDK11 。

1 设置环境变量1.1 JDK 1.1.1 配置JDK

在“全局工具配置中(Global Tool Configuration )”找到图1 选项。
利用Jenkins pipeline配置测试工具_第1张图片
图1 Jenkins JDK 配置前的界面

在初始化界面,有一个“Please enter your username/password”的超级链接,点击进去,如果你没有设置过Oracle 账号,请设置一个,然后在这里输入注册好的用户名和密码。安装完毕如图2 所示。
利用Jenkins pipeline配置测试工具_第2张图片
图2 Jenkins JDK 配置后的界面

1.2MAVEN

1.2.1 配置MAVEN

在“全局工具配置中(Global Tool Configuration )”找到图3 选项。

利用Jenkins pipeline配置测试工具_第3张图片
图3 Jenkins MAVEN 配置后的界面

1.2.2 建立Jenkinsfile

在Jenkinsfile 中作如下设置。

pipeline{ agent any tools{ maven ‘mvn-3.6.3’ } stages{ stage( ‘Build’){ steps { bat “mvn -v” echo"Finsh installMaven"
}}}}

注意,这里中的mvn-3.6.3 必须与图3 中设置得一致。

1.3 Python1.3.1 安装Jenkins PyenvPipeline 插件

进入Jenkins 插件中心,下载安装Pyenv Pipeline ,如图4 所示。
在这里插入图片描述
图4 安装Jenkins Pyenv Pipeline 插件

1.3.2 安装virtualenv 1. 下载虚拟环境

打开cmd ,通过以下命令安装虚拟环境。

C:Usersxiang>pip3 installvirtualenvwrapper-win

  1. 配置环境变量WORKN_HOME ,值为C:Users{username}Envs 。如图5 所示。
    利用Jenkins pipeline配置测试工具_第4张图片
    图5 配置WORKN_HOME 环境变量

  2. 创建当前版本虚拟环境

C:Usersxiang>mkvirtualenv bobbyvir

1.3.3 建立Jenkinsfile

pipeline{
agent anystages{stage( “Build”){ steps{withPythonEnv( “C:UsersxiangAppDataLocalProgramsPythonPython38”){ bat “python–version”}echo"python is ok"}}}}

其中C:UsersxiangAppDataLocalProgramsPythonPython38 为python 的安装路径。

2. 配置测试工具2.1 PMD

PMD 是一款采用BSD 协议发布的Java 程序代码检查工具。该工具可以做到检查Java 代码中是否含有未使用的变量、是否含有空的抓取块、是否含有不必要的对象等。该软件功能强大,扫描效率高,是Java 程序员debug 的好帮手。

与其他分析工具不同的是, PMD 通过静态分析获知代码错误。也就是说在不运行 Java 程序的情况下,报告错误。
PMD 附带了许多可以直接使用的规则,利用这些规则可以找出 Java 源程序的许多问题。
此外,用户还可以自己定义规则。检查 Java 代码是否符合某些特定的编码规范。常见的类型如下:
①潜在的bug :空的try/catch/finally/switch 语句。

②未使用的代码:未使用的局部变量、参数、私有方法等。

③可选的代码:String/StringBuffer 的滥用。

④复杂的表达式:不必须的if 语句、可以使用while 循环完成的for 循环。

⑤重复的代码:拷贝/ 粘贴代码意味着拷贝/ 粘贴bugs 。

⑥循环体创建新对象:尽量不要再for 或while 循环体内实例化一个新对象。

⑦资源关闭:Connect ,Result ,Statement 等使用之后确保关闭掉。

此外,用户还可以自己定义规则,检查Java 代码是否符合某些特定的编码规范。例如,你可以编写一个规则,要求PMD 找出所有创建Thread 和Socket 对象的操作。

2.1.1 建立Project

这个Project 为基于Java 的TestNGProject 。被测程序如下:

packagecom.jerry.mytest;publicclass Calculator {privatestaticintresult; publicvoidadd( intn ) { result = result + n;}
publicvoidsubstract( intn ) { result = result - n; }

publicvoidmultiply( intn ) { result= result * n;}publicvoiddivide( intn ) { result = result / n;}publicvoid square( intn ) { result = n * n;}publicvoidsquareRoot( intn ) { for(; ; }publicvoidclear( ) { result = 0; }publicintgetResult( ) { returnresult; }}

这个文件位于.srcmainjavacomjerrymytestCalculator.java 。测试程序为:

packagecom.jerry.mytest;
importorg.testng.annotations.Test;importorg.testng.AssertJUnit;importorg.testng.annotations.BeforeMethod;

publicclass CalculatorTest {privatestaticCalculator calculator = newCalculator;

@ TestpublicvoidtestAdd( ) { calculator. add( 2); calculator. add( 3); AssertJUnit.assertEquals( 5,calculator.getResult); }

@ Test

publicvoidtestSubstract( ) { calculator. add( 5); calculator.substract( 3); AssertJUnit.assertEquals( 2, calculator.getResult); }@ Test

publicvoidtestMultiply( ) { calculator. add( 3); calculator.multiply( 2); AssertJUnit.assertEquals( 6,calculator.getResult); }

@ TestpublicvoidtestDivide( ) { calculator. add( 9); calculator.divide( 3); AssertJUnit.assertEquals( 3,calculator.getResult); }

@ BeforeMethodpublicvoidbeforeMethod( ) { calculator.clear;

}}

下面没有特别说明都用这个Project 。

2.1.2 安装Jenkins 的PMD 插件

进入Jenkins 插件中心,安装PMD 插件,如图6 所示。
点击进入看图评论
图6 安装Jenkins PMD 插件

2.1.3 修改pom.xml 文件

< dependency> < groupId> com.alibaba.p3c < artifactId> p3c-pmd < version> 1.3.5 < scope> test …< plugin> < groupId> org.apache.maven.plugins < artifactId> maven-jxr-plugin < version> 2.3

2.1.4 建立Jenkinsfile

pipeline{agent anytools{maven ‘mvn-3.6.3’}stages{stage( ‘pmd’){ steps {bat "mvn pmd:pmd"bat “mvn pmd:pmd”}}}post{always{pmd(canRunOnFailed: true,pattern: ‘**/target/pmd.xml’)
}}}

2.1.5 构建

图7 为构建完毕后的界面,没有发现违法规则的地方。
利用Jenkins pipeline配置测试工具_第5张图片
图7 PMD 构建结果

2.2 JUnit

关于JUnit ,在这里就不做过多介绍,大家应该比较熟悉。

2.2.1 安装Jenkins JUnit 插件

进入Jenkins 插件中心,安装JUnit 插件,如图8 所示。
在这里插入图片描述

图8 安装Jenkins JUnit 插件

2.2.2 修改pom.xml 文件

< plugin> < groupId> org.apache.maven.plugins < artifactId> maven-surefire-plugin < version> 2.4.2 < configuration> < skipTests> true
< dependency> < groupId> org.testng < artifactId> testng < version> 6.14.2

2.2.3 建立Jenkinsfile

stage( ‘junit’){ steps {bat “mvn test”}}post{always{junit testResults: “**/target/surefire-reports/*.xml”}}

2.2.4 构建

图9 为构建完毕后的界面,点击TestResult 超链可以查看详细地测试结果。
利用Jenkins pipeline配置测试工具_第6张图片
图9 JUnit 构建结果

2.3 Jacoco

JaCoCo 支持多种覆盖率的统计,包括:

行覆盖率:度量被测程序的每行代码是否被执行,判断标准行中是否至少有一个指令被执行;
类覆盖率:度量计算 class 类文件是否被执行;
分支覆盖率:度量 if 和 switch 语句的分支覆盖情况,计算一个方法里面的总分支数,确定执行和不执行的 分支数量;
方法覆盖率:度量被测程序的方法执行情况,是否执行取决于方法中是否有至少一个指令被执行;
指令覆盖:计数单元是单个 java 二进制代码指令,指令覆盖率提供了代码是否被执行的信息,度量完全 独立源码格式;
圈复杂度:在(线性)组合中,计算在一个方法里面所有可能路径的最小数目,缺失的复杂度同样表示测 试案例没有完全覆盖到这个模块。 3.1 安装 Jenkins Jacoco 插件
进入Jenkins 插件中心,安装Jacoco 插件,如图10 所示。
利用Jenkins pipeline配置测试工具_第7张图片
图10 安装Jenkins Jacoco 插件

2.3.2 修改pom.xml 文件

< build> < plugins> < plugin> < groupId> org.jacoco < artifactId> jacoco-maven-plugin < version> 0.8.2 < executions> < execution> < id> prepare-agent < goals> < goal> prepare-agent < execution> < id> report < phase> prepare-package < goals> < goal> report < execution> < id> post-unit-test < phase> test < goals> < goal> report < configuration> < dataFile> target/jacoco.exec < outputDirctory> target.jacoco.exec < configuration> < syatemPropertyVariable> < jacoco-agent.destfile> target/jacoco.exec/
注意:jacoco-maven-plugin 必须设置在… 之间。

2.3.3 立Jenkinsfile

…stage( ‘jacoco’){ steps{bat "mvn clean install"jacoco(execPattern: ‘target/**/.exec ', //代码覆盖率统计文件位置classPattern: ‘target/classes’, //class文件位置sourcePattern: ‘src/main.java’, //源代码文件位置exclusionPattern: 'src/test’, //排除分析文件位置skipCopyOfSrcFiles: false, //是否禁用每行每行覆盖率文件的原文件显示changeBuildStatus: true, minimumInstructionCoverage: ‘30’, maximumInstructionCoverage: ‘70’, //字节码指令覆盖率minimumLineCoverage: ‘30’, maximumLineCoverage: ‘70’, //行覆盖率minimumComplexityCoverage: ‘30’, maximumComplexityCoverage: ‘70’, //圈复杂度覆盖率minimumMethodCoverage: ‘30’, maximumMethodCoverage: ‘70’, //方法覆盖率minimumClassCoverage: ‘30’, maximumClassCoverage: ‘70’, //类覆盖率minimumBranchCoverage: ‘30’, maximumBranchCoverage: ‘70’, //分支覆盖率buildOverBuild: true, //各个维度覆盖率变化量阈值deltaInstructionCoverage: ‘80’, deltaLineCoverage: ‘80’, deltaMethodCoverage: ‘80’, deltaClassCoverage: ‘80’, deltaComplexityCoverage: ‘80’, deltaBranchCoverage: ‘80’)}}…
当代码的覆盖率不符合设置的阈值,构建结束将会显示错误。

2.3.4 构建

为了描述方便,在这里jacoco 方法不带任何参数,也就不做任何合法性检查,仅仅在构建结束展示覆盖率结果。构建完成结果如图11 所示。

利用Jenkins pipeline配置测试工具_第8张图片
图11 Jacoco 构建结果

2.4 基于Taurus的性能测试

这个案例需要单独建立一个Jenkins Project 。

基于Taurus 的性能测试是基于Python 的,使用之前请务必确认系统中已经安装了Python 环境,并且按照第1.3 节进行配置。

Taurus 能够支持现有JMeter 、Grinder 、Gatling 、Selenium 测试引擎的能力,同时也能够支持直接解析原生脚本,如JMeter JMX 文件。其默认执行引擎是JMeter ,因此,如果已经使用JMeter 创建了JMX 文件,那么使用Taurus 可以很容易地运行,只需使用bzt 命令以及JMX 路径即可。

2.4.1 安装Jenkins Performance 插件

进入Jenkins 插件中心,安装Jacoco 插件,如图12 所示。
在这里插入图片描述

图12 安装Jenkins Performance 插件

2.4.2 安装Taurus

在安装Performance 插件的时候会自行安装Taurus 。打开CMD ,运行如下代码。

pip3 install bzt

2.4.3 配置yml 文件

blaze_exist_jmeter_config.yml

xecution: -scenario: simplescenarios: simple: : ebusiness.jmxmodules: jmeter: download-link: https://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-{version}.zipversion: 5.2.1
配置yml文件千万需要注意:

  1. 冒号:后面必须有空格;

  2. 文件里面不允许出现Tab,要以空格代替。

在这里:

ebusiness.jmx 为需要进行性能测试的由 JMeter 生成的文件
采用清华镜像网站 mirrors.tuna.tsinghua.edu.cn ,提高执行速度。
建立Jenkinsfile
pipeline{agent anystages{stage( ‘performance test’){ steps{bzt params: ‘blaze_exist_jmeter_config.yml’}}}}
配置完毕,可以手工运行如下命令进行测试。

C:Usersxiang.jenkinsworkspaceJMeter>btzblaze_exist_jmeter_config.yml

2.4.5 构建

图13 为构建完毕后的界面,点击PerformanceReport 超链可以查看详细地测试结果。
利用Jenkins pipeline配置测试工具_第9张图片

图13 JMeter 构建结果

2.5 SonarQube

SonarQube 基于本地服务和mvn 命令进行的代码分析,并将分析结果推送到sonar 服务器中。

SonarQube 采用wrapper 技术。在实际开发过程中很多模块需要独立运行,他们并不会以web 形式发布,传统的做法是将其压缩为jar 包独立运行,这种形式简单易行也比较利于维护,但是一旦服务器重启或出现异常时,程序往往无法自行修复或重启。解决服务器重启的传统做法是编写一段shell 脚本随服务器启动而运行,但是这样做只是治标,那么我们想寻求一种“治本”的方式该怎么办呢?

Java Service Wrapper 就轻松而简单的为我们解决了这些问题。“Java ServiceWrapper” 顾名思义,将我们的Java 程序包装成系统服务,这样就可以随着系统的运行而自动运行,当然JavaService Wrapper( 下面简称Wrapper) 的功能绝不仅于此。

2.5.1 下载安装配置SonarQube 1. 下载安装

到https://www.sonarqube.org/downloads/ 下载最新版本的SonarQube ,本文使用的是8.1.0.31237 。下载完毕进行安装,安装完毕的目录结构如图14 所示。
利用Jenkins pipeline配置测试工具_第10张图片

图14 SonarQube 的目录结构

bin :执行文件路径,其中:
linux-x86-64 :为 Linux 的执行路径;
macosx-universal-64 :为 MAC 的执行路径;
windows-x86-64 :为 64 Windows 的执行路径。
conf :配置文件路径,其中:
sonar.properties :配置 sonar ;
u wrapper.conf :配置wrapper 。

extensions :插件库路径,一般插件存储在 . extensionsplugins 路径下。
log :日志文件,其中:
web.log :为 SonarQube WEB 的日志文件;
sonar.log :为 Sonar 服务器的日志文件。
配置数据库
SonarQube 已经不支持MySQL ,现在支持Oracle 11g/12c/18c/19c 、PostgreSQL 9.3 or greater 和Microsoft SQLServer 2014/2016/2017and SQL Azure 。这里我们以MicrosoftSQLServer 2014 为例。
利用Jenkins pipeline配置测试工具_第11张图片

图15 数据库的排序方式
利用Jenkins pipeline配置测试工具_第12张图片
图16 打开1443 端口

注意数据库必须用户SQL Server 登录,如何设置,请参看https://jingyan.baidu.com/article/380abd0aa8f2311d90192cd0.html 。

3. 配置参数

打开./conf/sonar.properties ,进行如下配置。

sonar.jdbc.url=jdbc:sqlserver: //localhost;databaseName=sonarsonar.jdbc.username=sasonar.jdbc.password= 123456sonar.login=adminsonar.password=admin
sonar.jdbc.url=jdbc:sqlserver://localhost;databaseName=sonar # sonar 为数据库名;
sonar.jdbc.username=sa #SQLServer 的登录名;
sonar.login=admin #sonar web 的登录名;
sonar.password=admin #sonar web 的登录密码。
修改文件
< properties> < project.build.sourceEncoding> UTF-8 < maven.compiler.source> 11 < maven.compiler.target> 11 …< build> …< plugin> < groupId> org.sonarsource.scanner.maven < artifactId> sonar-maven-plugin < version> 3.5.0.1254
1111 表示使用的是JDK 11 。

配置完毕在项目根目录处运行下面命令,手工测试一下。

C:Usersxiang.jenkinsworkspacepmd>mvn cleanverify sonar:sonar

在SonarQube 的“项目”菜单内显示图17 界面。
在这里插入图片描述

图17 SonarQube 运行结果页面

请确认图17 右上方运行时间是否正确。

2.5.3 下载Jenkins SonarQube Scanner 插件

进入Jenkins 插件中心,安装SonarQube Scanner 插件,如图18 所示。
在这里插入图片描述

图18 安装Jenkins SonarQube Scanner 插件

2.5.4 设置SonarQube 中文界面

启动登录SQL Server2014后,再启动SonarQube。打开浏览器,在地址栏中输入http://:9000 (其中 为SonarQube 所在的IP 地址),进入SonarQube 的Web 页面,用./conf/sonar.properties 设立的账号登录系统。在插件管理中心(“admin->Application market ”)中搜索“Chinese PackLOCALIZATION ”,如图19 所示,最后选择后重新启动SonarQube 服务,界面变为中文。
在这里插入图片描述

图19 SonarQube 安装中文插件

2.5.5 设置SonarQube 安全权限

选择菜单“配置权限-> 权限->enable Force userauthentication ”,如图20 所示。

利用Jenkins pipeline配置测试工具_第13张图片

图20 enableForce user authentication

然后选择菜单“配置权限-> 用户-> 令牌”,设置用户令牌,如图21 所示。

利用Jenkins pipeline配置测试工具_第14张图片

图21 设置用户令牌

请务必记下这里产生的令牌,以后将无法显示获得。(由于截图存在先后循序,图21显示与后面不一致,以后面为准)。

建立完毕,配置完毕在项目根目录处运行下面命令,手工测试一下。

其参数含义为:

-Dsonar.login :为产生的令牌;
-Dsonar.host.url :为 WEB URL 地址。
配置SonarQubeScanner 插件
在Jenkins 的“全局属性”配置SonarQube Scanner 插件,如图22 所示。
利用Jenkins pipeline配置测试工具_第15张图片

图22 安装Jenkins Jacoco 插件

Serverauthentication token 建立上一节设置的令牌,如图23 所示。
利用Jenkins pipeline配置测试工具_第16张图片

图23 建立令牌

上图中Secret 中输入上一节产生的令牌。

2.6.7 设置Webhooks

进入SonarQube ,选择菜单“配置配置-> 网络调用( Webhooks)- > 新建”,如图24 所示。
利用Jenkins pipeline配置测试工具_第17张图片

图24 设置Webhooks

名称:任意;
URL : Jenkins URL/sonarqube-webhook/ 。
设置Webhooks 的目的是让SonarQube 能够找到Jenkins ,在分析完毕后可以把结果返回Jenkins 。

2.6.8 建立Jenkinsfile

pipeline {agent anytools{maven ‘mvn-3.6.3’}stages{stage( ‘Code Analysis’){ steps{withSonarQubeEnv( ‘sonarqube’){ bat ‘’‘mvn clean verify sonar:sonar -Dsonar.login=6cdf6f3176211d67dbf469712168c005c48f8c4d -Dsonar.login=admin -Dsonar.password=admin -Dsonar.host.url=http://127.0.0.1:9000’’’}}}stage( ‘Quality Gate’){ steps{ {timeout( time: 1,unit: ‘HOURS’){ sleep( 5) def qg = waitForQualityGateif(qg.status != ‘OK’) { echo “Status: ${qg.status}” error “Pipeline aborted due to quality gate failure: ${qg.status}” }}}}}}}

2.6.7 查看质量阈

选择菜单“质量阈”,可以查看默认的质量阈值,如图25 所示。

利用Jenkins pipeline配置测试工具_第18张图片
图25 质量阈

2.6.7 构建

构建完毕,在项目的左边会产生一个

图标,点击进入可以查看SonarQube 整体分析结果。如果这次分析不符合图25 设置的质量阈,这次构建会产生失败信息。

2.6.9 注意事项

令牌是SonarQube是中非常重要的选项,前后必须保持一致,否则构建中会返回http 401错误从而导致构建失败。关于这方面资料网上几乎没有,我在这里栽了个大跟头,各位千万需要注意。

2.6SonarQube中加入PMD规则

在第2.1 节中,我们介绍了PMD ,这里来介绍如何让SonarQube 中加入PMD 规则。

2.6.1 下载SonarQube 的PMD 插件2.6.2 配置PMD 插件

选择菜单“质量配置创建”,按图26 设置,语言选择JAVA 。

利用Jenkins pipeline配置测试工具_第19张图片
图26 新建质量配置

按照图27 选择“默认” (由于此图已经设置了默认,所以没有这个选项了)和“激活更多规则”。

利用Jenkins pipeline配置测试工具_第20张图片

图27 设置质量配置

如图28 ,点击批量修改。
利用Jenkins pipeline配置测试工具_第21张图片

图28 接受PMD 规则

建立完毕会显示P3M已经过时,不要理它。在运行构建的时候可以从“Console Output ”中存在:

[INFO] Qualityprofile for java: p3cPMD

信息证明,SonarQube 已经对这个规则进行了检验。

2.7 将SonarQube的分析结果上传到gitlab上

2.7.1 在gitlab 上建立项目

在https://www.gitlab.com 上建立项目mytest 。

2.7.2 下载插件

下载sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar 或sonar-gitlab-plugin-X.X.X .jar 到%SONARQUBE_HOME%extensionsplugins 。下面为Sonrqube 版本号与sonar-gitlab-plugin 的版本号对应关系:

<5.4 :sonar-gitlab-plugin-X.X.X .jar <= 1.6.61.665.4 。

=5.6 :sonar-gitlab-plugin-1.7.01.7.0 .jar 。

<8.0 >5.6 :sonar-gitlab-plugin-X.X.X .jar >1.7.02.1.0 。

8.0 或8.1 :sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar 。

2.7.3 配置GitHub

在SonarQube ,选择菜单“配置配置-> GitHub ”, 设置sonar.gitlab.url= https://gitlab.com/xianggu625/ 。

2.7.4 下载sonarscean-8.1.0

下载完毕,放在本地C:sonarscean-8.1.0 。

2.7.5 配置sonar-scanner.properties

位于%SONARYSCEAN_HOME%/conf/sonar-scanner.properties 。

#Configure here general information about the environment, such as SonarQube server connection details for example#No information about specific project should appear here#----- Default SonarQube serversonar.host.url=http://127.0.0.1:9000#----- Default source code encodingsonar.sourceEncoding=UTF-8

2.7.6 建立sonar-project.properties 文件

在项目本地建立文件sonar-project.properties 。

sonar.projectKey=com.jerry:mytest #为SonarQube的url后id的参数 sonar.projectName=mytestsonar.projectVersion=1.0 sonar.sources=srcsonar.language=java sonar.sourceEncoding=UTF-8sonar.java.binaries=target/classes #新版本sonarqube必须有这个参数
sonar.java.binaries=target/classes #新版本sonarqube必须有这个参数

2.7.7 建立Jenkinsfile

pipeline{agentanytools{maven’mvn-3.6.3’ }stages{stage(‘CodeAnalysis’){steps{withSonarQubeEnv(‘sonarqube’){bat’’‘mvnclean verify sonar:sonar -Dsonar.login= 6cdf6f3176211d67dbf469712168c005c48f8c4d -Dsonar.login=admin -Dsonar.password=admin -Dsonar.host.url=http://127.0.0.1:9000’’’}}}stage(‘QualityGate’){steps{{timeout(time: 1,unit:‘HOURS’){sleep(5)defqg = waitForQualityGateif(qg.status != ‘OK’) {echo"Status: ${qg.status}"error"Pipeline aborted due to quality gate failure: KaTeX parse error: Expected 'EOF', got '}' at position 13: {qg.status}"}̲defGIT_COMMIT_I…{git_commit_ID}-Dsonar.login=6cdf6f3176211d67dbf469712168c005c48f8c4d’’’}}}}}}

2.8集成Allure测试报告

Allure2 是一个非常完美的测试报告生成器,这里我们来讲解如何使用Allure 产生TestNG 的测试报告。

2.8.1 Allure 的下载和安装

下载allure-commandline ,拷贝在本地目录下(C:allure-2.10.0 )。

设置环境参数%ALLURE_HOME% ,将%ALLURE_HOME%bin 加入path 中,如图29 所示。
利用Jenkins pipeline配置测试工具_第22张图片
图29 设置Allure 环境参数

2.8.2 安装配置Jenkins Allure 插件

进入Jenkins 插件中心,安装Allure 插件,如图30 所示。
利用Jenkins pipeline配置测试工具_第23张图片

图30 安装Jenkins Allure 插件

在“全局工具配置中(Global Tool Configuration )”找到图31 选项。
利用Jenkins pipeline配置测试工具_第24张图片
图31 配置Allure Commandline

注意:安装目录为“C:allure-2.10.0”,千万不要包含bin目录,即:C:allure-2.10.0bin,否则会引起构建失败。

进入配置,设置“全局属性”- 工具位置列表,配置Allure Commandline ,如图32 所示。
利用Jenkins pipeline配置测试工具_第25张图片

图32 AllureCommandline 全局属性配置

这里目录仍旧为“C:allure-2.10.0”,不要包含bin路径。

2.8.3 修改pom.xml 文件

< build> < plugins> < plugin> < groupId> org.apache.maven.plugins < artifactId> maven-surefire-plugin < version> 2.20 < configuration> < systemPropertyVariables> < allure.results.directory> p r o j e c t . b u i l d . d i r e c t o r y / a l l u r e − r e s u l t s / {project.build.directory}/allure-results/ project.build.directory/allureresults/{maven.build.timestamp} < allure.link.issue.pattern> https://example.org/browse/{} < allure.link.tms.pattern> https://example.org/browse/{} < includes> < include> /.java < argLine> -javaagent:" s e t t i n g s . l o c a l R e p o s i t o r y / o r g / a s p e c t j / a s p e c t j w e a v e r / {settings.localRepository}/org/aspectj/aspectjweaver/ settings.localRepository/org/aspectj/aspectjweaver/{aspectj.version}/aspectjweaver-${aspectj.version}.jar" < dependencies> < dependency> < groupId> org.aspectj < artifactId> aspectjweaver < version> ${aspectj.version}
< properties> < aspectj.version> 1.8.10 < maven.build.timestamp.format> < project.build.sourceEncoding> UTF-8 < maven.compiler.encoding> UTF-8 < java.version> 1.8 < maven.compiler.source> 1.8 < maven.compiler.target> 1.8

< dependencies> < dependency> < groupId> junit < artifactId> junit < version> 4.12 < scope> test < dependency> < groupId> io.qameta.allure < artifactId> allure-testng < version> 2.12.1

这里特别需要注意,maven-surefire-plugin要求,测试文件必须是以下格式:

“**/Test*.java”

“**/*Test.java”

“**/*Tests.java”

"**/*TestCase.java“

加入“/.java”可以不受这个条件控制。

2.8.4 建立Jenkinsfile

pipeline{agentanytools{maven’mvn-3.6.3’}stages{stage(‘junit’){steps{bat"mvn test"}}}post{always{junittestResults: “**/target/surefire-reports/*.xml”{allure([includeProperties: false,jdk: ‘’,properties: [],reportBuildPolicy: ‘ALWAYS’,results: [[path: ‘target/allure-results’]]])}}}}

2.8.5 构建

构建完毕,点击Allure Report链接即可以查看Allure 报告,如图33 所示。
利用Jenkins pipeline配置测试工具_第26张图片
图33 Allure 报告

2.9 所有功能测试的集成

这里我们来介绍除了JMeter 的功能测试的集成。

2.9.1 修改pom.xml 文件

由于Jacoco 和Allure 都要使用maven-surefire-plugin ,所以需要在maven-surefire-plugin 配置… 中加入

j a c o c o A r g L i n e − X m x 256 M 参 数 : … < a r g L i n e > {jacocoArgLine}-Xmx256M参数: … jacocoArgLineXmx256M<argLine>{jacocoArgLine}-Xmx256M -javaagent: " ${settings.localRepository}/org/aspectj/aspectjweaver/ ${aspectj.version}/aspectjweaver- ${aspectj.version}.jar" …
否则Jacoco 不起作用。 注意,由于Allure也存在…参数,必须把这两个参数放在一起。我开始是这样设置的,结果Jacoco仍旧不可运行。

…${jacocoArgLine}-Xmx256M …-javaagent: " ${settings.localRepository}/org/aspectj/aspectjweaver/ ${aspectj.version}/aspectjweaver- ${aspectj.version}.jar" …
追踪的如下:

< projectxmlns= "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
< groupId> com.jerry < artifactId> mytest < version> 0.0.1-SNAPSHOT < packaging> jar

< name> mytest < url> http://maven.apache.org

< build> < plugins> < plugin> < groupId> org.jacoco < artifactId> jacoco-maven-plugin < version> 0.8.2 < executions> < execution> < id> pre-unit-test < goals> < goal> prepare-agent < configuration> < propertyName> jacocoArgLine < execution> < id> post-unit-report < phase> package < goals> < goal> report < execution> < id> prepare-agent < goals> < goal> prepare-agent < execution> < id> report < phase> prepare-package < goals> < goal> report < execution> < id> post-unit-test < phase> test < goals> < goal> report < configuration> < dataFile> target/jacoco.exec < outputDirctory> target.jacoco.exec < configuration> < syatemPropertyVariable> < jacoco-agent.destfile> target/jacoco.exec/ < plugin> < groupId> org.apache.maven.plugins < artifactId> maven-surefire-plugin < version> 2.20 < configuration> < skip> false < testFailureIgnore> false < skipTests> false < systemPropertyVariables> < allure.results.directory> p r o j e c t . b u i l d . d i r e c t o r y / a l l u r e − r e s u l t s / {project.build.directory}/allure-results/ project.build.directory/allureresults/{maven.build.timestamp} < allure.link.issue.pattern> https://example.org/browse/{} < allure.link.tms.pattern> https://example.org/browse/{} < includes> < include> /.java < argLine> j a c o c o A r g L i n e − X m x 256 M − j a v a a g e n t : " {jacocoArgLine} -Xmx256M-javaagent:" jacocoArgLineXmx256Mjavaagent:"{settings.localRepository}/org/aspectj/aspectjweaver/ a s p e c t j . v e r s i o n / a s p e c t j w e a v e r − {aspectj.version}/aspectjweaver- aspectj.version/aspectjweaver{aspectj.version}.jar" < dependencies> < dependency> < groupId> org.aspectj < artifactId> aspectjweaver < version> ${aspectj.version} < properties> < aspectj.version> 1.8.10 < maven.build.timestamp.format> < project.build.sourceEncoding> UTF-8 < maven.compiler.encoding> UTF-8 < java.version> 1.8 < maven.compiler.source> 1.8 < maven.compiler.target> 1.8

< dependencies> < dependency> < groupId> com.alibaba.p3c < artifactId> p3c-pmd < version> 1.3.5 < scope> test < dependency> < groupId> junit < artifactId> junit < version> 4.12 < scope> test < dependency> < groupId> org.testng < artifactId> testng < version> 6.14.2 < dependency> < groupId> org.apache.maven.plugins < artifactId> maven-resources-plugin < version> 2.4.3

2.9.2 建立Jenkinsfile

pipeline {agent anytools{maven ‘mvn-3.6.3’}stages{stage( ‘pmd’){ steps {bat “mvn pmd:pmd”}}stage( ‘junit’){ steps {bat “mvn clean test”}}stage( ‘jacoco’){ steps{bat “mvn clean install"jacoco}}stage( ‘Code Analysis’){ steps{withSonarQubeEnv( ‘sonarqube’){ bat ‘’‘mvn clean verify sonar:sonar -Dsonar.login=6cdf6f3176211d67dbf469712168c005c48f8c4d -Dsonar.login=admin -Dsonar.password=admin -Dsonar.host.url=http://127.0.0.1:9000’’’}}}stage( ‘Quality Gate’){ steps{ {timeout(time:1,unit: ‘HOURS’){ sleep(5)def qg = waitForQualityGateechoqg.status if(qg.status != ‘OK’) { echo"Status: ${qg.status}” error “Pipeline aborted due to quality gate failure: ${qg.status}” }}}}}}post{always{junit testResults: "/target/surefire-reports/*.xml"pmd(canRunOnFailed: true,pattern: '/target/pmd.xml’) {allure([includeProperties: false, jdk: ‘’, properties: [],reportBuildPolicy: ‘ALWAYS’, results: [[path: ‘target/surefire-reports’]] ])}}}}

2.9.3 构建

构建完毕,如图34 设置。
利用Jenkins pipeline配置测试工具_第27张图片

图34 所有功能测试的集成构建结果

3 .让一个系统同时支持多个版本的JDK

前面说过,由于SonarQube 需要使用JDK11 ,但是我们许多产品还是仅支持JDK8 ,在这里来介绍如何让一个系统同时支持多个版本的JDK 。

安装 JDK8 JDK 10
进入 C:Program Files (x86)Common FilesOracleJavajavapath ,删除里面的三个文件
以管理员身份运行 CMD
C:>cd C:Program FilesJavajdk-11.0.5

使用命令
C:Program FilesJavajdk-11.0.5>binjlink.exe–module-path jmods --add-modules java.desktop --output jre

手动生成JRE

配置环境变量,如图 35 所示。
利用Jenkins pipeline配置测试工具_第28张图片

图35 设置多版本的JDK

JAVA 的其他环境变量按照以前方法设置。如果要切换到JDK ,把JAVA_HOME 的值设置为:%JAVA_HOME11% 。

你可能感兴趣的:(自动化工具,jenkins,测试工具,maven)