前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用Jenkins pipeline配置测试工具

利用Jenkins pipeline配置测试工具

作者头像
顾翔
发布2020-02-19 15:32:48
3K0
发布2020-02-19 15:32:48
举报

最近学习了翟志军老师写的《Jenkins 2.X实践指南》书中的第5章:代码质量一节,发现两方面问题:

1, 书中的描述不够清晰;

2, 也许是版本的问题,有些操作发生变化。

现在把我的学习结果汇集成此文,并且详细介绍我在学习过程中遇到的坑,希望对大家有所帮助。

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

1, 准备被测代码;

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

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

4, 修改pom.xml文件;

5, 建立jenkinsfile文件。

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

1 设置环境变量

1.1 JDK

1.1.1配置JDK

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

图1 Jenkins JDK配置前的界面

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

图2 Jenkins JDK配置后的界面

1.2 MAVEN

1.2.1 配置MAVEN

在“全局工具配置中(Global Tool Configuration)”找到图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"

}

}

}

}

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

1.3 Python

1.3.1安装Jenkins PyenvPipeline插件

进入Jenkins插件中心,下载安装Pyenv Pipeline,如图4所示。

图4安装Jenkins Pyenv Pipeline插件

1.3.2 安装virtualenv

1. 下载虚拟环境

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

C:\Users\xiang>pip3 installvirtualenvwrapper-win

2. 配置环境变量WORKN_HOME,值为C:\Users\{username}\Envs。如图5所示。

图5 配置WORKN_HOME环境变量

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

C:\Users\xiang>mkvirtualenv bobbyvir

1.3.3 建立Jenkinsfile

pipeline{

agent any

stages{

stage("Build"){

steps{

withPythonEnv("C:\\Users\\xiang\\AppData\\Local\\Programs\\Python\\Python38\\"){

bat "python--version"

}

echo "python is ok"

}

}

}

}

其中C:\\Users\\xiang\\AppData\\Local\\Programs\\Python\\Python38\\为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 {

private static int result;

public void add(int n) {

result = result + n;

}

public void substract(int n) {

result = result - n;

}

public void multiply(int n) {

result= result * n;

}

public void divide(int n) {

result = result / n;

}

publicvoid square(int n) {

result = n * n;

}

public void squareRoot(int n) {

for (; ;) ;

}

public void clear() {

result = 0;

}

public int getResult() {

return result;

}

}

这个文件位于.\src\main\java\com\jerry\mytest\Calculator.java。测试程序为:

packagecom.jerry.mytest;

importorg.testng.annotations.Test;

importorg.testng.AssertJUnit;

importorg.testng.annotations.BeforeMethod;

publicclass CalculatorTest {

private static Calculator calculator = newCalculator();

@Test

public void testAdd() {

calculator.add(2);

calculator.add(3);

AssertJUnit.assertEquals(5,calculator.getResult());

}

@Test

public void testSubstract() {

calculator.add(5);

calculator.substract(3);

AssertJUnit.assertEquals(2, calculator.getResult());

}

@Test

public void testMultiply() {

calculator.add(3);

calculator.multiply(2);

AssertJUnit.assertEquals(6,calculator.getResult());

}

@Test

public void testDivide() {

calculator.add(9);

calculator.divide(3);

AssertJUnit.assertEquals(3,calculator.getResult());

}

@BeforeMethod

public void beforeMethod() {

calculator.clear();

}

}

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

2.1.2安装Jenkins的PMD插件

进入Jenkins插件中心,安装PMD插件,如图6所示。

图6 安装Jenkins PMD插件

2.1.3修改pom.xml文件

<dependency>

<groupId>com.alibaba.p3c</groupId>

<artifactId>p3c-pmd</artifactId>

<version>1.3.5</version>

<scope>test</scope>

</dependency>

<plugin> <groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-jxr-plugin</artifactId>

<version>2.3</version>

</plugin>

2.1.4建立Jenkinsfile

pipeline{

agent any

tools{

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为构建完毕后的界面,没有发现违法规则的地方。

图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</groupId>

<artifactId>maven-surefire-plugin</artifactId>

<version>2.4.2</version>

<configuration>

<skipTests>true</skipTests>

</configuration>

</plugin>

<dependency>

<groupId>org.testng</groupId>

<artifactId>testng</artifactId>

<version>6.14.2</version>

</dependency>

2.2.3建立Jenkinsfile

stage('junit'){

steps {

bat "mvn test"

}

}

post{

always{

junit testResults: "**/target/surefire-reports/*.xml"

}

}

2.2.4 构建

图9为构建完毕后的界面,点击TestResult 超链可以查看详细地测试结果。

图9 JUnit构建结果

2.3 Jacoco

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

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

进入Jenkins插件中心,安装Jacoco插件,如图10所示。

图10 安装Jenkins Jacoco插件

2.3.2修改pom.xml文件

<build>

<plugins>

<plugin>

<groupId>org.jacoco</groupId>

<artifactId>jacoco-maven-plugin</artifactId>

<version>0.8.2</version>

<executions>

<execution>

<id>prepare-agent</id>

<goals>

<goal>prepare-agent</goal>

</goals>

</execution>

<execution>

<id>report</id>

<phase>prepare-package</phase>

<goals>

<goal>report</goal>

</goals>

</execution>

<execution>

<id>post-unit-test</id>

<phase>test</phase>

<goals>

<goal>report</goal>

</goals>

<configuration>

<dataFile>target/jacoco.exec</dataFile>

<outputDirctory>target.jacoco.exec</outputDirctory>

</configuration>

</execution>

</executions>

<configuration>

<syatemPropertyVariable>

<jacoco-agent.destfile>target/jacoco.exec/</jacoco-agent.destfile>

</syatemPropertyVariable>

</configuration>

</plugin>

</plugins>

</build>

注意:jacoco-maven-plugin必须设置在<build>… </build>之间。

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所示。

图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

execution:

- scenario: simple

scenarios:

simple:

script: ebusiness.jmx

modules:

jmeter:

download-link:https://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-{version}.zip

version:5.2.1

配置yml文件千万需要注意:

  1. 1. 冒号:后面必须有空格;
  2. 2. 文件里面不允许出现Tab,要以空格代替。

在这里:

  • ebusiness.jmx为需要进行性能测试的由JMeter生成的文件
  • 采用清华镜像网站mirrors.tuna.tsinghua.edu.cn,提高执行速度。
  • 建立Jenkinsfile

pipeline{

agent any

stages{

stage('performance test'){

steps{

bzt params:'blaze_exist_jmeter_config.yml'

}

}

}

}

配置完毕,可以手工运行如下命令进行测试。

C:\Users\xiang\.jenkins\workspace\JMeter>btzblaze_exist_jmeter_config.yml

2.4.5构建

图13为构建完毕后的界面,点击PerformanceReport超链可以查看详细地测试结果。

图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所示。

图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:插件库路径,一般插件存储在. \extensions\plugins\路径下。
  • 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为例。

严格按照https://www.cnblogs.com/advLuo/p/11455942.html进行配置。特别注意图15和图16。

图15 数据库的排序方式

图16 打开1443端口

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

3. 配置参数

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

sonar.jdbc.url=jdbc:sqlserver://localhost;databaseName=sonar

sonar.jdbc.username=sa

sonar.jdbc.password=123456

sonar.login=admin

sonar.password=admin

其中:

  • sonar.jdbc.url=jdbc:sqlserver://localhost;databaseName=sonar # sonar为数据库名;
  • sonar.jdbc.username=sa #SQLServer的登录名;
  • sonar.jdbc.password=123456 #SQLServer的登录密码;
  • sonar.login=admin #sonar web的登录名;
  • sonar.password=admin #sonar web的登录密码。
  • 修改pom.xml文件

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<maven.compiler.source>11</maven.compiler.source>

<maven.compiler.target>11</maven.compiler.target>

</properties>

<build>

</plugins>

<plugin>

<groupId>org.sonarsource.scanner.maven</groupId>

<artifactId>sonar-maven-plugin</artifactId>

<version>3.5.0.1254</version>

</plugin>

</plugins>

</build>

<maven.compiler.source>11</maven.compiler.source>和<maven.compiler.target>11</maven.compiler.target>表示使用的是JDK 11。

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

C:\Users\xiang\.jenkins\workspace\pmd>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://<ip>:9000(其中<ip>为SonarQube所在的IP地址),进入SonarQube的Web页面,用./conf/sonar.properties设立的账号登录系统。在插件管理中心(“admin->Application market”)中搜索“Chinese PackLOCALIZATION”,如图19所示,最后选择后重新启动SonarQube服务,界面变为中文。

图19 SonarQube安装中文插件

2.5.5 设置SonarQube安全权限

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

图20 enableForce user authentication

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

图21 设置用户令牌

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

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

C:\Users\xiang\.jenkins\workspace\pmd>mvnclean verify sonar:sonar -Dsonar.login=6cdf6f3176211d67dbf469712168c005c48f8c4d-Dsonar.host.url=http://127.0.0.1:9000

其参数含义为:

  • -Dsonar.login:为产生的令牌;
  • -Dsonar.host.url:为WEB URL地址。
  • 配置SonarQubeScanner插件

在Jenkins的“全局属性”配置SonarQube Scanner插件,如图22所示。

图22 安装Jenkins Jacoco插件

Serverauthentication token建立上一节设置的令牌,如图23所示。

图23 建立令牌

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

2.6.7设置Webhooks

进入SonarQube,选择菜单“配置->配置->网络调用( Webhooks)- >新建”,如图24所示。

图24 设置Webhooks

其中:

  • 名称:任意;
  • URL:Jenkins URL/sonarqube-webhook/。

设置Webhooks的目的是让SonarQube能够找到Jenkins,在分析完毕后可以把结果返回Jenkins。

2.6.8建立Jenkinsfile

pipeline{

agent any

tools{

maven 'mvn-3.6.3'

}

stages{

stage('Code Analysis'){

steps{

withSonarQubeEnv('sonarqube'){

bat '''

mvn clean verify sonar:sonar \

-Dsonar.login=6cdf6f3176211d67dbf469712168c005c48f8c4d\

-Dsonar.host.url=http://127.0.0.1:9000

'''

}

}

}

stage('Quality Gate'){

steps{

script {

timeout(time:1,unit:'HOURS'){

sleep(5)

def qg = waitForQualityGate()

if (qg.status != 'OK') {

echo "Status:${qg.status}"

error "Pipelineaborted due to quality gate failure: ${qg.status}"

}

}

}

}

}

}

}

2.6.7 查看质量阈

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

图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插件

到https://download.csdn.net/download/qq_36752632/11237005下载p3c-pmd-1.3.6.jar,下载完毕将其放入%SONAR_HOME%\extensions\plugins\目录下(千万注意,每次重新启动SonarQube必须把p3c-pmd-1.3.6.jar放在其他路径下,启动成功然后再放进来,否则SonarQube会启动失败)

2.6.2 配置PMD插件

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

图26新建质量配置

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

图27 设置质量配置

如图28,点击批量修改。

图28 接受PMD规则

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

[INFO] Qualityprofile for java: p3cPMD

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

2.7集成Allure测试报告

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

2.7.1 Allure的下载和安装

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

设置环境参数%ALLURE_HOME%,将%ALLURE_HOME%\bin加入path中,如图29所示。

图29 设置Allure环境参数

2.7.2 安装配置Jenkins Allure插件

进入Jenkins插件中心,安装Allure插件,如图30所示。

图30 安装Jenkins Allure插件

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

图31 配置Allure Commandline

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

进入配置,设置“全局属性”-工具位置列表,配置Allure Commandline,如图32所示。

图32 AllureCommandline全局属性配置

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

2.7.3修改pom.xml文件

<groupId>com.jerry</groupId>

<artifactId>mytest</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>jar</packaging>

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-surefire-plugin</artifactId>

<version>2.20</version>

<configuration>

<systemPropertyVariables>

<allure.results.directory>${project.build.directory}/allure-results/${maven.build.timestamp}</allure.results.directory>

<allure.link.issue.pattern>https://example.org/browse/{}</allure.link.issue.pattern>

<allure.link.tms.pattern>https://example.org/browse/{}</allure.link.tms.pattern>

</systemPropertyVariables>

<includes>

<include>**/**.java</include>

</includes>

<argLine>

-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"

</argLine>

</configuration>

<dependencies>

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjweaver</artifactId>

<version>${aspectj.version}</version>

</dependency>

</dependencies>

</plugin>

</plugins>

</build>

<properties>

<aspectj.version>1.8.10</aspectj.version>

<maven.build.timestamp.format></maven.build.timestamp.format>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<maven.compiler.encoding>UTF-8</maven.compiler.encoding>

<java.version>1.8</java.version>

<maven.compiler.source>1.8</maven.compiler.source>

<maven.compiler.target>1.8</maven.compiler.target>

</properties>

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.12</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>io.qameta.allure</groupId>

<artifactId>allure-testng</artifactId>

<version>2.12.1</version>

</dependency>

</dependencies>

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

"**/Test*.java"

"**/*Test.java"

"**/*Tests.java"

"**/*TestCase.java“

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

2.7.4建立Jenkinsfile

pipeline{

agent any

tools{

maven 'mvn-3.6.3'

}

stages{

stage('junit'){

steps {

bat "mvn test"

}

}

}

post{

always{

junit testResults: "**/target/surefire-reports/*.xml"

script{

allure([

includeProperties:false,

jdk:'',

properties: [],

reportBuildPolicy:'ALWAYS',

results: [[path: 'target/allure-results']]

])

}

}

}

}

2.7.5构建

构建完毕,点击Allure Report链接即可以查看Allure报告,如图33所示。

图33 Allure报告

2.8 所有功能测试的集成

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

2.8.1修改pom.xml文件

由于Jacoco和Allure都要使用maven-surefire-plugin,所以需要在maven-surefire-plugin配置<argLine>…</argLine>中加入${jacocoArgLine} -Xmx256M参数:

<argLine>

${jacocoArgLine} -Xmx256M

-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"

</argLine>

否则Jacoco不起作用。注意,由于Allure也存在<argLine>…</argLine>参数,必须把这两个参数放在一起。我开始是这样设置的,结果Jacoco仍旧不可运行。

<argLine>

${jacocoArgLine} -Xmx256M

</argLine>

<argLine>

-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"

</argLine>

追踪的pom.xml如下:

<groupId>com.jerry</groupId>

<artifactId>mytest</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>jar</packaging>

<name>mytest</name>

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

<build>

<plugins>

<plugin>

<groupId>org.jacoco</groupId>

<artifactId>jacoco-maven-plugin</artifactId>

<version>0.8.2</version>

<executions>

<execution>

<id>pre-unit-test</id>

<goals>

<goal>prepare-agent</goal>

</goals>

<configuration>

<propertyName>jacocoArgLine</propertyName>

</configuration>

</execution>

<execution>

<id>post-unit-report</id>

<phase>package</phase>

<goals>

<goal>report</goal>

</goals>

</execution>

<execution>

<id>prepare-agent</id>

<goals>

<goal>prepare-agent</goal>

</goals>

</execution>

<execution>

<id>report</id>

<phase>prepare-package</phase>

<goals>

<goal>report</goal>

</goals>

</execution>

<execution>

<id>post-unit-test</id>

<phase>test</phase>

<goals>

<goal>report</goal>

</goals>

<configuration>

<dataFile>target/jacoco.exec</dataFile>

<outputDirctory>target.jacoco.exec</outputDirctory>

</configuration>

</execution>

</executions>

<configuration>

<syatemPropertyVariable>

<jacoco-agent.destfile>target/jacoco.exec/</jacoco-agent.destfile>

</syatemPropertyVariable>

</configuration>

</plugin>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-surefire-plugin</artifactId>

<version>2.20</version>

<configuration>

<!--<argLine>${jacocoArgLine} -Xmx256M</argLine>-->

<skip>false</skip>

<testFailureIgnore>false</testFailureIgnore>

<skipTests>false</skipTests>

<systemPropertyVariables>

<allure.results.directory>${project.build.directory}/allure-results/${maven.build.timestamp}</allure.results.directory>

<allure.link.issue.pattern>https://example.org/browse/{}</allure.link.issue.pattern>

<allure.link.tms.pattern>https://example.org/browse/{}</allure.link.tms.pattern>

</systemPropertyVariables>

<includes>

<include>**/**.java</include>

</includes>

<argLine>

${jacocoArgLine} -Xmx256M

-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"

</argLine>

<!--<excludes>

<exclude>**/controller/*ControllerTest.java</exclude>

</excludes>-->

</configuration>

<dependencies>

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjweaver</artifactId>

<version>${aspectj.version}</version>

</dependency>

</dependencies>

</plugin>

</plugins>

</build>

<properties>

<aspectj.version>1.8.10</aspectj.version>

<maven.build.timestamp.format></maven.build.timestamp.format>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<maven.compiler.encoding>UTF-8</maven.compiler.encoding>

<java.version>1.8</java.version>

<maven.compiler.source>1.8</maven.compiler.source>

<maven.compiler.target>1.8</maven.compiler.target>

</properties>

<dependencies>

<dependency>

<groupId>com.alibaba.p3c</groupId>

<artifactId>p3c-pmd</artifactId>

<version>1.3.5</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.12</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.testng</groupId>

<artifactId>testng</artifactId>

<version>6.14.2</version>

</dependency>

<dependency>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-resources-plugin</artifactId>

<version>2.4.3</version>

</dependency>

</dependencies>

2.8.2 建立Jenkinsfile

pipeline{

agent any

tools{

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{

script {

timeout(time:1,unit:'HOURS'){

sleep(5)

def qg = waitForQualityGate()

echo qg.status

if (qg.status != 'OK') {

echo "Status:${qg.status}"

error "Pipelineaborted due to quality gate failure: ${qg.status}"

}

}

}

}

}

}

post{

always{

junit testResults: "**/target/surefire-reports/*.xml"

pmd(canRunOnFailed:true,pattern:'**/target/pmd.xml')

script{

allure([

includeProperties:false,

jdk:'',

properties: [],

reportBuildPolicy:'ALWAYS',

results: [[path: 'target/surefire-reports']]

])

}

}

}

}

2.7.3构建

构建完毕,如图34设置。

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

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

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

  1. 安装JDK8 JDK 10
  2. 进入C:\Program Files (x86)\Common Files\Oracle\Java\javapath,删除里面的三个文件
  3. 以管理员身份运行CMD

C:\>cd C:\Program Files\Java\jdk-11.0.5

  1. 使用命令

C:\Program Files\Java\jdk-11.0.5>bin\jlink.exe--module-path jmods --add-modules java.desktop --output jre

手动生成JRE

  1. 配置环境变量,如图35所示。

图35 设置多版本的JDK

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

科学是一种强有力的工具。怎样用它,究竟是给人带来幸福还是带来灾难,全取决于人自己,而不取决于工具。刀子在人类生活上是有用的,但它也能用来杀人。

——爱因斯坦

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试培训 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 设置环境变量
    • 1.1 JDK
      • 1.1.1配置JDK
    • 1.2 MAVEN
      • 1.2.1 配置MAVEN
      • 1.2.2 建立Jenkinsfile
    • 1.3 Python
      • 1.3.1安装Jenkins PyenvPipeline插件
      • 1.3.2 安装virtualenv
      • 1.3.3 建立Jenkinsfile
  • 2. 配置测试工具
    • 2.1 PMD
      • 2.1.1建立Project。
      • 2.1.2安装Jenkins的PMD插件
      • 2.1.3修改pom.xml文件
      • 2.1.4建立Jenkinsfile
      • 2.1.5构建
    • 2.2 JUnit
      • 2.2.1安装Jenkins JUnit插件
      • 2.2.2 修改pom.xml文件
      • 2.2.3建立Jenkinsfile
      • 2.2.4 构建
    • 2.3 Jacoco
      • 2.3.2修改pom.xml文件
      • 2.3.3立Jenkinsfile
      • 2.3.4构建
    • 2.4 基于Taurus的性能测试
      • 2.4.1安装Jenkins Performance插件
      • 2.4.2安装Taurus
      • 2.4.3配置yml文件
      • 2.4.5构建
    • 2.5 SonarQube
      • 2.5.1 下载安装配置SonarQube
      • 2.5.3 下载Jenkins SonarQube Scanner插件
      • 2.5.4 设置SonarQube中文界面
      • 2.5.5 设置SonarQube安全权限
      • 2.6.7设置Webhooks
      • 2.6.8建立Jenkinsfile
      • 2.6.7 查看质量阈
      • 2.6.7构建
      • 2.6.9 注意事项
    • 2.6SonarQube中加入PMD规则
      • 2.6.1 下载SonarQube的PMD插件
      • 2.6.2 配置PMD插件
    • 2.7集成Allure测试报告
      • 2.7.1 Allure的下载和安装
      • 2.7.2 安装配置Jenkins Allure插件
      • 2.7.3修改pom.xml文件
      • 2.7.4建立Jenkinsfile
      • 2.7.5构建
    • 2.8 所有功能测试的集成
      • 2.8.1修改pom.xml文件
      • 2.8.2 建立Jenkinsfile
      • 2.7.3构建
  • 3.让一个系统同时支持多个版本的JDK
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档