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.8Git ,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


  • 2,选择安装路径

  • 3 ,选择Logon Types为[Run services as LocalSystem (not recommended)]即可,点击[next]即可.如下图所示

  • 4, 端口默认

  • 5, java 的 安装路径


  • 6, 默认


第一次使用,配置Jenkins


  • 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 ,持续集成自动化测试的主要内容,如果未能解决你的问题,请参考以下文章

自动化测试项目持续集成到jenkins

window下jenkins自动化持续集成报告查看配置,基于python语言

Jenkins持续集成

jenkins--Jenkins+Git+codding+maven 实现自动化测试持续集成

Jenkins UI与接口自动化测试持续集成实战

Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)