Jenkins+postman+Newman简单的接口自动化持续集成

542 阅读8分钟

我正在参加「掘金·启航计划」搭建环境之前需要先理清楚各个环境的依赖关系,jenkins只支持windows命令行跟linux shell环境执行构建命令,而postman的测试脚本不能直接在命令行或shell环境执行,postman脚本需要有自己的执行环境,叫newman;而postman是基于javascript语言,所以newman环境还依赖于javascript的环境nodejs;所以整个过程是先搭建nodejs构造javascript环境,再搭建newman构造postman脚本运行环境,在集成到jenkins上。

1.    安装node.js

Node.js 就是运行在服务端的 JavaScript,是一个基于Chrome JavaScript 运行时建立的一个平台;Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好;

 

官网下载,直接安装。不用自己去配置环境变量,安装完成后会自动配好

官网地址:nodejs.org/en/

node –v 出现版本号表示安装成功

image.png Linux系统下安装:

官网下载Linux安装包,后缀为.tar.xz

①下载后安装

xz -d node-v10.15.1-linux-x64.tar.xz

tar -xvf node-v10.15.1-linux-x64.tar

②添加环境变量

打开/etc/profile文件,添加如下两行

export NODE_HOME=/hanmk/node-v10.15.1-linux-x64(node.js的安装路径)

export PATH=NODEHOME/bin:NODE_HOME/bin:PATH

③更新文件:

source /etc/profile

④检验

node -v

2.    安装newman

通过npm来安装newman,npm 是 JavaScript 的包管理工具,并且是 Node.js 平台的默认包管理工具。通过 npm 可以安装、共享、分发代码,管理项目依赖关系;

一般安装好node.js后会默认安装好npm,直接使用即可

npm -g install newman

newman –v  出现版本号表示安装成功

image.png

linux系统下:

npm -g install newman

newman –v

3. 安装 newman-reporter-html

如果想生成html格式的测试报告,还需要安装 newman-reporter-html:

npm install -g newman-reporter-html

Linux系统下:

npm install -g newman-reporter-html

4.    newman运行脚本

把接口测试脚本和环境变量脚本导出放到一个目录中,在cmd窗口中切换到该目录,执行如下命令:(-n 2表示迭代2次)

①   newman run 自动化测试.postman_collection.json –n 2 -e 测试环境.postman_environment.json 执行完成后,出现一个类似报表的东西,显示整体运行结果

image.png

② newman run 自动化测试.postman_collection.json -e 测试环境.postman_environment.json --reporters cli,json,html --reporter-json-export report-json.json --reporter-html-export report-html.html

--reporters cli,json,html --reporter-json-export report-json.json --reporter-html-export report-html.html表示生成json和html格式的报告。

在当前文件夹下生成两个报告文件:

image.png 打开html格式的文件,展示结果如下:

image.png

newman run –h查看更多参数

Newman命令:

:必填参数,是指单个请求或者从postman导出的集合文件(也就是json格式的脚本)

options是一些组合参数,介绍下我用到的几个参数

(1) -e 指定环境变量,把在postman中设置的环境变量导出,然后再把路径填写到这里即可

(2) -g 指定全局变量,把在postman中设置的全局变量导出,然后再把路径填写到这里即可

(3) -n 指定迭代次数,即运行n次脚本

(4) --timeout-request 指定请求的超时时间

(5) -r 指定运行报告的格式,可以为json格式、html格式,默认为cli格式,即在命令行展示运行结果

-d xxx.json/xxx.csv  request中请求调用的参数文件

5.    集成到Jenkins中

(1)构建自由风格的软件项目

(2)在Build标签配置shell脚本

Linux服务器选择执行shell,Windows系统选择执行Windows批处理命令;

①   在填写shell脚本或批处理命令前,需要把在postman中导出的json格式的脚本上传到服务器某个目录下

②   Jenkins在远程执行服务器中的脚本时,也需要切换到测试脚本所在目录(或者直接以绝对路径指定脚本),然后调用newman命令来执行

image.png

image.png

注意:在运行Windows批处理命令时,newman run后面的文件可以直接使用绝对路径;

如果想使用相对路径:

方式一:使用Jenkins 的工作空间

需要将被测脚本放置在Jenkins的工作空间中,默认在安装目录(C:\Program Files (x86)\Jenkins)下的workspace\postman自动化接口测试(构建的项目名称)

方式二:使用自定义的工作空间

在Jenkins的general中点击高级,勾选“使用自定义的工作空间”,将被测脚本、环境变量及参数文件放置到该目录下

 

Linux系统中:

source /etc/profile  #不添加此命令,会导致Jenkins在构建时,提示找不到newman命令从而构建失败

 

#!/bin/bash -ilex

 

cd /hanmk/postman_script    #被测脚本所在目录

 

newman run Test.postman_collection.json -e base_url.postman_environment.json --reporters cli,json,html,junit --reporter-json-export report-json.json --reporter-html-export report-html.html --reporter-junit-export report-xml.xml

 

注意:

如果在Windows系统,Jenkins构建项目后提示:'newman' 不是内部或外部命令,也不是可运行的程序或批处理文件。

原因:本地nodejs自定义安装,自动生成环境变量。

解决办法:nodejs在系统环境变量中,而npm生成到了用户环境变量里,因此将npm配置到系统环境变量中就成功了

(3)将newman生成的html格式的测试报告在Jenkins中展示出来

①   需要安装插件:Publish HTML reports

在插件管理中搜索并下载安装:

image.png

②   安装完成并重启完Jenkins后,在项目配置中-构建后操作-增加构建后操作步骤-publish html reports

image.png

image.png

HTML directory to archive (要归档的HTML目录):填写相对于工作空间的html报告所在的目录,需要填写真实存在的目录名称(该文件夹需要事先创建好)

Index page[s](索引页): 报告目录中提供链接的文件,需要填写一个已经存在的html文件(此处可以在htmlreports中创建一个html文件,或者直接把newman生成的html格式的报告放到这个目录下)

Index page title[s] (Optional):选填项,索引页标题,不填会默认取html的文件名

Report title(报告标题):要为构建/项目显示的报告的名称

 

之所以需要自己创建报告目录和报告文件,是因为这个插件不会自己创建这些,如果工作空间没有这些目录和文件,构建的时候会报错

 

③   完成配置后,进行构建,构建成功后,可点击查看html格式的报告

image.png

image.png

image.png 构建成功后,可查看到生成的测试报告文件:

image.png

image.png ④   解决html报告显示样式问题:

jenkins从安全性考虑,禁止了css和js的加载,所以无法展示

1.下载插件:Groovy Postbuild,安装并重启

image.png 2.项目配置-增加构建后操作步骤:Groovy Postbuild,添加groovy script: System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")

image.png

image.png 3.再次构建,可查看到在jenkins中展示的html格式的测试报告如下:

image.png 或者修改jenkins配置文件:

打开jenkins安装目录下的jenkins.xml文件,找到arguments这一行,修改如下,改好后保存,重启jenkins

原来是:-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar

修改后:-Xrs -Xmx256m -Dhudson.model.DirectoryBrowserSupport.CSP= -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar

 

 

构建过程中出现的问题:

问题1:控制台输出中文乱码

解决办法:

  1. 进入【系统管理】->【系统设置】->全局属性:KEY: LANG; VALUE:zh.CH.UTF-8

image.png

2. 修改Jenkins所在目录下的Jenkins.xml文件,找到,在中间添加-Difile.encoding=utf-8

image.png

  1. 设置jenkins所在服务器环境变量,右键我的电脑→属性→高级系统设置→环境变量→新建系统变量,添加变量名:JAVA_TOOL_OPTIONS   变量值:-Dfile.encoding=UTF8

image.png

4. 完成上述步骤,重启Jenkins服务,立即构建

 

问题2::控制台输出结果中:Build step 'Execute Windows batch command' marked build as failure问题

原因:jenkins执行命令,会把命令生成一个批处理文件执行,而newman命令对于批处理来说是外部命令,所以要加call表示调用。而jenkins执行windows命令,若退出代码不为0 ,则jenkins会将构建标记为失败,所以需要加上exit 0表示执行完成退出

解决方法:构建命令在newman前面加上call,最后加上exit 0

(4) 行结果自动发送邮件

①  下载并安装插件:Email Extension Plugin

image.png

② 统配置,配置邮箱信息

image.png

1. 配置Jenkins Location

image.png

Jenkins url:默认是http://localhost:8080/,修改为自己电脑的ip地址,后面跟jenkins的默认端口

系统管理员邮件地址:这个系统管理员邮件地址和发件人的地址必须保持一致,否则邮件无法发出

2.Extended E-mail Notification

image.png Default Content Type:默认的邮件内容格式,文本类型或HTML类型

Default Recipients:设置默认的邮件接收人,设置后就可以在任务的配置中使用$DEFAULT_RECIPIENTS来直接发送邮件,非常方便       

具体的格式:抄送用“cc:”前缀,密送用“bcc:”前缀,不使用前缀默认为收件人;多个接收人,用英文逗号分隔,比如cc:someone@example.com, bcc:bob@example.com Default Subject:默认的邮件主题,BUILDNUMBERBUILD_NUMBER , BUILD_STATUS!构建的编号和构建的状态

Default Content:默认内容,这步可以省略,具体可以到任务的配置中去设置

  1. 配置触发器Trigger

image.png

Default Triggers:默认的邮件触发器,就是什么情况下触发邮件的发送
image.png

  1. 配置Jenkins自带的邮件功能

image.png

  1. 测试发送邮件

image.png

③构建后操作

在项目中-配置-增加构建后操作步骤:选择editable email notification:

image.png

image.png

1.       邮件主题和内容

可以使用默认的:DEFAULTSUBJECTDEFAULT_SUBJECT、DEFAULT_CONTENT

使用默认的主题和内容,则显示如下:

image.png 也可以修改邮件内容,修改如下:

image.png

修改后邮件内容显示如下:    

image.png

2.       添加附件

image.png

Attachment:邮件附件,选填项,可以将测试报告添加到邮件附件中,取htmlreports目录下的所有以.html格式的文件

Attach Build Log:邮件的构建日志,选填项,我选择的是发送邮件的附件会包含压缩后的项目构建的日志,也可以选择压缩或不压缩

3.       修改触发器
点击advanced settings

image.png

Triggers选择always:表示立即构建就会发送邮件,也可以设置为成功或失败时发送

image.png

④  构建,验证

保存设置后,立即构建,待构建完成,查看控制台日志和邮箱是否接收到正确的邮件

控制台日志:

image.png