CANoe和Jenkins ,持续集成自动化测试
Posted 蚂蚁小兵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CANoe和Jenkins ,持续集成自动化测试相关的知识,希望对你有一定的参考价值。
前言
-
这篇文章断断续续我写了一个月有余,一来涉及的技术点有很多,CANoe Pythonn COM口编程,jenkins/Pipline语法,bat语法,CANoe CAPL测试架构等等;另一方面这套系统在实际应用时,会比本章所展示的内容复杂的多,我要思考该怎么剥离掉抽象复杂的代码和配置,以简单的方式让大多数人能够接受。
-
本文的
CANoe和Jenkins
系统是 基于CANoe 16 Demo
版本,无需Vector
硬件和liscense
,只要有台电脑,就可以跑通的。 -
由于这套系统中运用的众多复杂技术,真正在项目中运用jenkins来完成车载项目的并不多,学会了这套系统,可以让你部门的自动化测试程度提高几个数量级,降本增效,你的能力也会有很大的提升,涨薪指日可待。
-
全网独此一文,经验丰富的朋友可以根据博文搭建jenkins和CANoe 工程的流程思路自己创建Job和Python COM核心编程【有兴趣,但是经验欠缺且想快速掌握可以私信加我个人微信(注明来意),提供源码和技术支持👉】
-
需要安装软件:
CANoe 16 SP2 demo
,python3.8
,Git
,java
,jenkins
目录
Jenkins简介
官方介绍: Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能
通俗来说: Jenkins是一个开源的软件。这款软件可以供我们安装,安装成功以后在浏览器中输入 http://localhost:8080(或者是输入http://安装Jenkins电脑的IP:8080)会出现一个界面,在这个界面上进行一些配置,我们就可以通过这个软件来管理我们正在开发的项目,可以让它来减少我们软件开发的时候的出错率,替我们把软件合到一起,并且将有问题的部分检测出来。
- CI(Continuous integration,中文意思是持续集成)是一种软件开发实践。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。借用网络图片对CI加以理解。
- CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。下图反应的是CI/CD
的大概工作模式。
Jenkins 安装
下载和安装java
-
因为jenkins 运行需要jave 运行环境,所以我们需要先下载和安装一个java版本
-
JAVA安装包下载地址:Java Downloads | Oracle(官网地址),不熟悉JAVA,反正就直接下载最新版本的呗
- 直接安装再在默认C盘路径下,直接下一步就完事了
- 在cmd中输入 java -version 命令并回车,如果能正常显示版本信息,说明JAVA运行环境安装成功,如下图所示:
下载和安装jenkins
-
下载地址:Jenkins官方下载地址
-
1, 下载完事后,直接点击安装
- 2,选择安装路径
- 3 ,选择Logon Types为
[Run services as LocalSystem (not recommended)]
即可,点击[next]即可.如下图所示
- 4, 端口默认
- 5, java 的 安装路径
- 6, 默认
第一次使用,配置Jenkins
- 安装完毕后,在浏览器中 输入http://localhost:8080/,就显示出下面的配置步骤了
- 1, 文件路径如下,把密码copy 进去:
- 2,输入密码后,就到了
新手入门
环节 ,那就点 第一个安装推荐的插件
- 注意:如果出现部分插件安装失败,如下图所示,点击[重试]按钮,直到所有插件都安装成功为止.
- 3,填写一个管理员账号
- 4,终于配置好了,jenkins
第一个pipline Job
- 1·,创建一个HelloWorld 的pipline类型的项目
- 2,直接选择 Hello World的模板,代码就是声明式
pipline
语法的最简单的样式,然后点击保存
- 3,每次执行测试,就可以点击下Build Bow,下面的数字时执行测试的次数号
- 4,可以通过点击console output 来查看测试过程中的打印log
实战项目CANoe 工程
配置全局安全
- 将代理和SSH Server都设置成随机选取,后面再本机创建slave 节点要用,因为我们会在用一台机器上创建了master和slave节点,端口要随机,不然冲突了。
创建 slave 节点
- 我们在自己电脑上安装jenjins之后,默认就是Master 节点,但是Master节点跑 任务的时候,都是后台运行,这就导致,我们可以正常调用CANoe ,执行测试也没问题,
但是CANoe 是后台运行看不见界面的,所以我们有必要创建个 salve 节点来解决这个问题
- 2,新建节点 ,命名为
slave_1
,如果你是第一次学习,请严格用这个名字,因为pipline 测试代码用的就是这个名字,当您熟悉jenkin运行机制后,可以随便更改
- 3,这里重点配置下
slave_1
节点的工作路径: D:\\Jenkins\\slave_1 ,其它的可以都不用动。记得保存
- 4,这个时候slave 节点创建完毕了,但是还没上线,我们点击它
- 5,将 圈起来的命令拷贝到 CMD中,回车执行,注意用
管理员权限打开CMD
,不然有可能因为权限问题导致运行CANoe时权限不够的问题。
- 6,这个时候slave 节点就 上线了。
配置管理员邮箱
-
配管理员邮箱,是为了测试结果的发送(
可以先不配置。待熟悉了Jenkins整个流程后再配置也可以,不影响整个测试流程
) -
1,先找一个可用的邮箱,比如测试选用的是126邮箱
- 2,这个邮箱需要开启POP3/SMTP服务,以163邮箱的设置为例,其它邮箱怎么设置,可以百度。
- 这个时候,你会得到一个 一串数字和字母的
授权码
,记得保存下来,后面就是jenkins登录邮箱的凭证
- 3,找到
Extended E-mail Notification
,点击高级
- 4,配置下用户名+授权码 ,相当于登录验证
- 5,配置好的结果
- 6,找到
Default Content
,然后将下列代码copy 进去
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>$ENV, var="JOB_NAME"-第$BUILD_NUMBER次构建日志</title>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
<table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
<td><br />
<b><font color="#0B610B">构建信息</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>项目名称 : $PROJECT_NAME</li>
<li>项目描述 : $JOB_DESCRIPTION</li>
<li>构建编号 : 第$BUILD_NUMBER次构建</li>
<li>触发原因: $CAUSE</li>
<li>构建状态: $BUILD_STATUS</li>
<li>构建日志: <a href="$BUILD_URLconsole">$BUILD_URLconsole</a></li>
<li>构建 Url : <a href="$BUILD_URL">$BUILD_URL</a></li>
<li>工作目录 : <a href="$PROJECT_URLws">$PROJECT_URLws</a></li>
<li>项目 Url : <a href="$PROJECT_URL">$PROJECT_URL</a></li>
</ul>
</td>
</tr>
</table>
</body>
</html>
创建CANoe工程 Job
- 1·,创建一个pipline类型的项目:CANoeAutoRun
- 2 ,将
Jenkinsfile
(私信我获取)的内容全部拷贝到 Pipline 脚本中,记得保存
- 3 ,然后,就可以Build ,如果第一次Build ,是没有参数选择的,不用管,直接build
- 这里是一个实际项目的精简版本,但是功能已经足够强大
TestItems : 是一个 列表 键值对,表示要打开那个cfg ,以及测试哪个 模块,依次测试完列表内的所有测试模块
SW_Version : 测试的软件版本
ProName : 选择不同的项目,会下载不同的工程
email_list : 测试完毕后,测试结果会发送到指定人
测试过程分析
- 1 ,下图是一次完整的测试,看到到,测试分了几个步骤:
- 初始化(Initialization),实际项目可能有很多逻辑要处理,这里是精简版,没实际内容
- 同步 CANoe 工程和 Python 调用CANoe的源代码
- 处理掉当前的CANoe 进程
- 执行测试,核心步骤
- 测试完毕,邮件通知
初始化步骤(Initialization)
- 如下图打印,可以看出一些信息,是在slave_1节点运行的,以及运行路径
- Initialization,我们没做写什么代码,下面代码是pipline 脚本的一部分,就打印一些基本信息
stage('Initialization')
steps
echo 'Initialization....'
echo "Job running on: $NODE_NAME"
echo "Job running path: $WORKSPACE"
script
println "$TestItems_list"
同步CANoe工程和Python Call CANoe 源代码
- JenkinsCANoeProject 是专门为本系统测试创建的一个基于CANoe 16 Demo 版本的项目,不需要硬件和liescen ,有Git账号就可下载.可以先同步下来,熟悉下这个demo工程
- JenkinsScripts 是 调用Python 调用CANoe 源码
CANoe 测试过程
- 调用CANoe
- 加载cfg
- 加载tse
- 启动测试
- 测试模块报告收集
邮件推送结果
测试结果,包含所有测试的html测试报告和trace文件
邮件推送内容,主要内容和 总结附件
测试结果总结
- 附件 test_result.html打开就是这样,因为页面还没css修饰,有点丑,但是测试信息都在。
、 - 这里有一段全面的Log视频,可以参考下
Jenkins集成Canoe自动化测试
可能出现的问题
python 不是内部或外部命令,也不是可运行的程序
- 需要将本地的python环境 路径拷贝到 jenkins中
‘cmd’ 不是内部或外部命令,也不是可运行的程序或批处理文件。
- 添加C:\\Windows\\System32; 路径
git 不是内部或外部命令,也不是可运行的程序或批处理文件。
- 添加 git 路径
pywintypes.com_error: (-2147024891, ‘拒绝访问。’, None, None)
- 按win+r,输入“dcomcnfg”,进入组件服务,选择“DCOM配置”,找到 Vector
以上是关于CANoe和Jenkins ,持续集成自动化测试的主要内容,如果未能解决你的问题,请参考以下文章
window下jenkins自动化持续集成报告查看配置,基于python语言