Jenkins 持续集成 【CICD】
持续集成 (Continuous integration,简称CI)
持续集成是一种开发实践,它倡导团队成员频繁的集成他们的工作,每次集成都通过自动化构建(包括编译、构建、打包、部署、自动化测试)来验证,从而尽快地发现集成中的错误。让产品可以快速迭代,同时还能保持高质量。
Jenkins是基于Java开发的持续集成工具,开源免费,官网:https://jenkins.io/
测试常用的场景: 使用Jenkins实现自动化的持续集成测试,达到无人值守测试的境界。【释放人力 7 *24】
- 代码提交给Jenkins
- Jenkins做好定时任务: 持续构建执行
- 构建完成后把测试报告发送邮箱,查看结果,定位分析问题。
【allure报告】
一、安装和配置Jenkins【依赖java环境:安装Java环境-JDK】
安装Java环境-JDK
1、电脑安装好jdk,配置环境变量;
- 在系统变量中添加JAVA_HOME,对应的值是jdk的安装路径 【】
- 在系统变量path里面,追加%JAVA_HOME%\bin
- 在命令行模式下,输入:java -version
安装Jenkins
2、【免安装Jenkins】-安装包里面有安装好了所需要的插件+组件,Jenkins默认访问外网的,建议大家使用我的Jenkins免安装版本
- windows下启动 D:\apache-tomcat-8.5.43\bin 点击 startup.bat
- jenkins运行时,这个脚本框要一直启动着
- 访问jenkins地址(本地回环地址)
http://localhost:8080/jenkins/
或http://127.0.0.1:8080/jenkins/
注意:学习的阶段,Jenkins部署在本地的,只能在我的局域网内部访问;
真实的工作中,Jenkins部署在公司的服务器里面,外网访问公司里面,会由开发/运维会提前帮你部署的,不需要你部署的。
- 登录: 默认用户名:admin
- 初始密码:
- C:\Users\Administrator.jenkins\secrets\initialAdminPassword 获取
配置Jenkins
3、Jenkins里配置jdk和git、allure、邮箱等
进入Manage Jenkins -> Configure System:
1)配置系统管理员邮箱地址:
2)配置Extended E-mail Notification:
常见邮箱服务地址:https://blog.csdn.net/ning521513/article/details/79217203
这个SMTP服务密码:是一串如下的随机码,请逐字输入:
3) 以类似的配置配置Email Notification:
4)点击测试邮件配置是否OK。
Jenkins在运行中需要使用各种工具环境,包括JDK、Git、Allure等,我们需要在Jenkins所在主机关联配置这些工具。
1、jdk配置:manager Jenkins > Global Tool Configuration >
2、git的配置: 前提你的系统环境变量里配置好了git环境变量。【path里配置了git的环境变量】
3、allure的配置:
注意:如果没有这个配置,需要去安装对应的插件。manager Jenkins >Manger Plugins>可选插件 ,搜索allure 安装即可。
以上准备工作做好之后,我们可以开始配置Jenkins做自动化项目的持续集成了。
二:Jenkins新建工程
1、新建Item
2、输入一个任务名称 ---- 建议尽量英文/数字形式
3、点击选中 Freestyle project
4、点击【确定】
此时,jenkins首页已经有了你刚创建的工程 (球是灰色–因为你没有构建过)
每个项目都有自己的工作区,是用来放代码的
添加凭据L:确保是gitee上可以登录成功的用户名和密码。
1)类型:Usernamewith password
2)用户名:gitee账户 3)密码:gitee密码
1、xxxx工作空间 —> 配置—>构建—>增加构建步骤
2、选择 Execute Windows batch command
3、输入命令 :如python main.py 或 python run.py
构建触发器【实现定时任务】–无人值守测试
xxxx工作空间 —> 配置—>构建触发器
2、定时构建: 点击日程表 右侧 ?
2、定时构建: 点击日程表 右侧 ?
* * * * *
分钟【0-59】 小时【0-23】 日【1-31】月【1-12】 周【0-7 】
1、每天的晚上八点钟执行代码: 0 20 * * *
2、每月的10号晚上0点执行: 0 0 10 * *、
3、每天晚上的八点10分到15分: 10-15 20 * * *
4、每间隔10分钟: */10 * * * *
5、每间隔1小时: * /1 * * *
6、前三十分钟内每间隔5分钟: 0-30/5 * * * *
7、每天的20,21,23点执行: 0 20,21,23 * * *
8、每周一-周五(工作日期间)间隔4小时执行自动化测试任务: */4 * * 1-5
也可以与其他的任务关联(Build after other projects are built)实际有可能我们运行项目不是一定要定时去执行的,可能开发每次发版我们就需要构建我们的自动化测试脚本,来测试开发的新代码是否存在问题。等到开发的Jenkins任务构建结束之后再开始构建我们的自动化测试任务
添加allure报告
xxxx工作空间 —> 配置—>构建后操作
添加allure report
添加完成后,每次构建完成后,都会生成allure的报告文件。
添加后再次构建就会出现allure报告。
构建后操作 -发送邮件
https://blog.csdn.net/Wjhsmart/article/details/109203361 查询邮箱smtp服务地址
工作空间 —> 配置—>构建后操作 -> Editable Email Notification
邮件内容HTML模板: 【直接复制即可】
项目名称:${PROJECT_NAME}<br><hr>
构建编号:${BUILD_NUMBER}<br><hr>
构建状态:${BUILD_STATUS}<br><hr>
触发原因:${CAUSE}<br><hr>
测试报告:<a href="${BUILD_URL}allure/">${BUILD_URL}allure/</a>
<br><hr>
邮件内容HTML模板: 【直接复制即可】
构建日志地址:<a
href="${BUILD_URL}console">${BUILD_URL}console/</a><br><hr>
allure报告定制
参考文章:testingpai.com/article/1595507295429
装饰器: 增强 扩展函数 和方法的功能。类装饰器 方法装饰器 --扩展类和方法的功能。 【测试开发】
1、定制测试用例的标题
# 第二步: pytest测试用例方法
@pytest.mark.p1
@allure.title("{data[用例标题]}") # 使用测试用例的excel的用例
标题描述每一条用例 更直观
@pytest.mark.parametrize("data",all_cases)
def test_cart_case(data): # 调用夹具resp = requests_api(data)expected = data["预期结果"] # 从excel读取预期结果db_assert = data["数据库断言"]response_assert(expected,resp)# 数据库断言database_assert(db_assert)
注意1:但是直接这样做完,这个标题显示格式错乱的。要优化可以如下操作:
- 1、找到Python目录下: D:\Python39\Lib\sitepackages\allure_pytest\listener.py
- 2、打开这个文件搜索: test_result.parameters.extend
- 3、将对应的内容变成: test_result.parameters.extend([])
- 4、重新运行run文件,生成allure报告。
2、定制测试套件名字
@allure.suite("购物车模块")
3、定制测试步骤
@allure.step("替换占位符变量")
相关文章:

Jenkins 持续集成 【CICD】
持续集成 (Continuous integration,简称CI) 持续集成是一种开发实践,它倡导团队成员频繁的集成他们的工作,每次集成都通过自动化构建(包括编译、构建、打包、部署、自动化测试)来验证ÿ…...

【CHI】(十二)Memory Tagging
目录 1. Introduction 2. Message extensions 3. Tag coherency 4. Read transaction rules 4.1 TagOp values 4.2 Permitted initial MTE tag states 5. Write transactions 5.1 Permitted TagOp values 5.2 TagOp, TU, and tags relationship 6. Dataless transact…...

Vue - 你知道Vue组件之间是如何进行数据传递的吗
难度级别:中级及以上 提问概率:85% 这道题还可以理解为Vue组件之间的数据是如何进行共享的,也可以理解为组件之间是如何通信的,很多人叫法不同,但都是说的同一个意思。我们知道,在Vue单页面应用项目中,所有的组件都是被嵌套在App.vue内…...

IP网络对讲广播系统审计
前言 这个系统是前两年在一个内网遇到的,当时顺手试了一个admin登陆之后再没有然后了,最近发现有大佬分享关于这个系统的漏洞,于是就把自己当初看的几个漏洞分享一下,系统比较简单,漏洞点很多,不要做坏事哦…...
蓝桥杯刷题--python38
197. 阶乘分解 - AcWing题库 def init(n): for i in range(2,n1): if not st[i]:primes.append(i) j0 while primes[j]*i<n: st[i*primes[j]]1 if i%primes[j]0: break j1 nint(input(…...
【LeetCode热题100】33. 搜索旋转排序数组(二分)
一.题目要求 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], …...

基于Leaflet.js的Marker闪烁特效的实现-模拟预警
目录 前言 一、闪烁组件 1、关于leaflet-icon-pulse 2、 使用leaflet-icon-pulse 3、方法及参数简介 二、闪烁实例开发 1、创建网页 2、Marker闪烁设置 3、实际效果 三、总结 前言 在一些地质灾害或者应急情况当中,或者热门预测当中。我们需要基于时空位置来…...

Vue-05
v-model 应用于其他表单元素 常见的表单元素都可以用v-model绑定关联 → 快速获取或设置表单元素的值 它会根据控件类型自动选取正确的方法来更新元素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name…...
Mongodb中一个小巧的数据更新命令$inc
学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第55篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。 $inc是一个很小巧的命令。说它小巧,一个是因为短,只有三个字符。另一个是说…...

Java基于SpringBoot+Vue的专家医院预约挂号系统,附源码
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

STM32一个地址未对齐引起的 HardFault 异常
1. 概述 客户在使用 STM32G070 的时候,KEIL MDK 为编译工具,当编译优化选项设置为Level0 的时候,程序会出现 Hard Fault 异常,而当编译优化选项设置为 Level1 的时候,则程序运行正常。表面上看,这似乎是 K…...

spring事务那些事
实际工作中还会面临千奇百怪的问题,看下面返个例子(注意MySql数据库测试): //1.hello1Service 调用 hello2Service Transactional(propagation Propagation.REQUIRED,rollbackFor Exception.class) public void doUpdate() {//…...

设计模式深度解析:AI大模型下的策略模式与模板方法模式对比解析
🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL应用》 💪🏻 制定明确可量化的目标,坚持默默的做事。 策略模式与模板方法模式对比解析 文章目录 🌟引言🌟Part 1:…...
贪婪算法python实现
贪婪算法(Greedy Algorithm)是一种解决问题的策略,它基于一种贪心的思想:在每一步选择中都采取当前状态下最好或最优的选择,从而希望最终能够得到全局最优解。 其核心思想可以简单概括为“当前局部最优选择”ÿ…...

(一)基于IDEA的JAVA基础12
一维数组 为什么使用数组: 当我们需要存储一系列数据的时候,就需要用到数组,如果不使用数组,我们就要需要一个一个的去声明变量,这样浪费内存空间,同时效率低下。 什么是数组: 数组本身就是一个变量,只…...
vue3中封装table表格
封装实例useTable import {ref } from vue export function useTable(api) {const data = ref([])const refre...

【Redis】Redis的使用
登录redis [roottest2 ~]# redis-cli 127.0.0.1:6379> 或[roottest2 ~]# redis-cli -h 192.168.67.12 -p 6379 192.168.67.12:6379> redis-benchmark 测试工具 redis-benchmark 是官方自带的Redis性能测试工具,可以有效的测试Redis服务的性能 基本的测试语…...
【机器学习300问】60、图像分类任务中,训练数据不足会带来什么问题?如何缓解图像数据不足带来的问题?
在机器学习中,绝大部分模型都需要大量的数据进行训练和学习(包括有监督学习和无监督学习),然而在实际应用中经常会遇到训练数据不足的问题。就比如图像分类这样的计算机视觉任务,确实依赖于大规模且多样化的训练数据以…...

鸿蒙内核源码分析 (内存管理篇) | 虚拟内存全景图是怎样的
初始化整个内存 OsSysMemInitOsMainmain从 main() 跟踪可看内存部分初始化是在 OsSysMemInit() 中完成的。 UINT32 OsSysMemInit(VOID) {STATUS_T ret;OsKSpaceInit();//内核空间初始化ret OsKHeapInit(OS_KHEAP_BLOCK_SIZE);// 内核动态内存初始化 512K if (ret ! LOS_OK…...

基于深度学习的电动自行车头盔佩戴检测系统
文章目录 1. 文档说明2. 运行环境说明2.1 硬件配置2.2 软件配置2.3 程序依赖库 3. 基本环境配置3.1 软件安装3.1.1 集成开发环境安装与配置3.1.2 数据库安装与配置3.1.3 编程语言安装3.1.4 CUDA和cuDNN安装与配置3.1.5 机器学习库安装 3.2 依赖库安装 4. 运行程序资源下载地 1.…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...

实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...

解析“道作为序位生成器”的核心原理
解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制,重点解析"道作为序位生成器"的核心原理与实现框架: 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...