需求背景:

  现在用jenkins构建自动化测试(2个job),公司现将自动化纳入到发布系统

  要求每次构建成功之后,把测试结果发送给发布系统。这就需要先获取jenkins构建的结果,如果构建结束,才能发送测试结果,否则就要等待jenkins构建结束。

理解回调函数:

  像这样类似:男女朋友约会结束,男方要求女方到家后发1个信息,告诉他安全到家了。就是python回调函数的应用场景。男女朋友约会结束是在主函数mainfunc中,女朋友回家这个动作由callback函数完成。

  在mainfunc函数中,男朋友会接收女朋友发送已到家的消息,那怎么接收呢?就是通过调用callback这个函数来获得女朋友到家的状态,这个过程就称之为回调函数

 基本思路:

  • 先用一个demo理清自己的思路,要做哪些事?共分几个步骤?
  • 每个步骤要完成哪些事情?这些思路搞定之后,代码也就完成了。
  • 这里的有一个技巧:先用randomint随机生成一个数字,用来代表jenkins的构建结果状态,而不是每次都真的去请求接口。因为这会增加验证结果的时间成本,分散精力。
  • 最后整个流程顺下来,再把随机数部分替换为真正去请求jenkins接口,这会大大节约调试时间。

  version1:

  demo 理清思路,用简单的代码描述清楚自己想要实现的效果

 def mainfunc(func):
''' :param func: callback func Name
:return:
'''
print('start build job')
func()
print('send report to ding wen qi') def callback():
''' :return: jenkins job build state
'''
print('jenkins is done') mainfunc(callback)

  version2:

  callback函数,获取job的构建状态。该函数返回一个状态,true或false。true表示job已经构建结束,false表示程序仍然在构建中

 def callback():
''' :return: jenkins job build state
'''
num = random.randint(1,10)
#利用randint随机生成一个num 假装enkins是返回的构建结果。偶数认为已经构建结束,奇数认为仍在构建中
print(num)
if num % 2 != 0:#奇数
print('kins is building job')
return {'buildState':False}
else:#偶数
print('jenkins is done')
return {'buildState': True}

  version3:

  mainfunc接收callback返回的状态,true:做send report操作,false 再次调用func函数确认,直到结果是true

    while True:
flag = func()
if flag :
print('step3:send report to ding wen qi')
break

  结果:

 step1:start build job
step2:jenkins is building job
step2:jenkins is building job
step2:jenkins is done
step3:send report to ding wen qi

  version4:

  加入等待时间,在询问jenkins是否构建结束之前,先等上10秒1钟(正常1个job至少构建1分钟以上,不停询问很浪费资源)

 time.sleep(2)

  完整的demo代码:

 import random
import time def mainfunc(func):
'''
:param func: callback func Name
:return:
'''
print('step1:start build job') #根据callback返回的状态,决定是否进行下一步操作
while True:
flag = func()
if flag :
print('step3:send report')
break def callback():
'''
:return: jenkins job build state
'''
#jenkins构建job需要至少3分钟,所以每隔1分钟请求一次
time.sleep(2)
num = random.randint(1,100)
#利用randint随机生成一个num 假装enkins是返回的构建结果。偶数认为已经构建结束,奇数认为仍在构建中
# print(num)
if num % 2 != 0:#奇数
print('step2:jenkins is building job')
return False
else:#偶数
print('step2:jenkins is done')
return True mainfunc(callback)

python回调函数应用-获取jenkins构建结果的更多相关文章

  1. Python回调函数用法实例详解

    本文实例讲述了Python回调函数用法.分享给大家供大家参考.具体分析如下: 一.百度百科上对回调函数的解释: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函 ...

  2. Python 回调函数

    什么是回调函数? 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数: 这是官方的解释,理解上有点费 ...

  3. IT小鲜肉 Widgets Tree 单选、多选、相关回调函数、获取选中的节点功能

    写一个树控件并没有想象中的那么容易,今天又花了我一个1个多小时,主要为IT小鲜肉 Widgets Tree控件添加了 单选.多选.选择前和选择后两个回调函数.获取选中节点的功能.后面会继续努力完善这个 ...

  4. Python回调函数用法实例

    Python回调函数用法实例 作者:no.body链接:https://www.zhihu.com/question/19801131/answer/27459821 什么是回调函数? 我们绕点远路来 ...

  5. 16.Python input()函数:获取用户输入的字符串

    input() 函数用于向用户生成一条提示,然后获取用户输入的内容.由于 input() 函数总会将用户输入的内容放入字符串中,因此用户可以输入任何内容,input() 函数总是返回一个字符串. 例如 ...

  6. 计算机基础,Python - 回调函数,使用装饰器注册回调函数

    1. 参考: https://en.wikipedia.org/wiki/Callback_(computer_programming) https://developer.mozilla.org/e ...

  7. python 回调函数,最简单的例子

    回调的英文定义: A callback is a function that is passed as an argument to another function and is executed ...

  8. opengl键盘回调函数不能获取Ctrl+c的问题

    我要令窗口在按下 Ctrl+c 之后关闭. 关键代码如下: /* 这段代码位于键盘回调函数中 */ if ((glutGetModifiers() == GLUT_ACTIVE_CTRL) & ...

  9. WPF异步回调时回调函数如何获取异步函数产生的变量

    有这么一个问题,WPF在使用异步回调的时候,回调函数需要用到异步函数里产生的一个变量,例如异步函数里查询数据库得到了一个DataTable,如何传递给回调函数呢? [方案一]使用全局变量 很容易想到的 ...

随机推荐

  1. Scrapy 教程(八)-分布式爬虫

    scrapy 本身并不是一个分布式框架,而 Scrapy-redis 库使得分布式成为可能: Scrapy-redis 并没有重构框架,而是基于redis数据库重写了框架的某些组件. 分布式框架要解决 ...

  2. Structs2下的MyFirstTest

    1.这是<Struts2-权威指南>第二章的例子 2.博文主要说明在eclipse下如何创建一个struts2项目 3.实现功能:在login.jsp输入用户名和密码,若用户名为scott ...

  3. 2. Docker部署tomcat, nginx, redis,及docker私有仓库

    1. 部署tomcat 1.1 下载tomcat       docker pull tomcat:7-jre8 1.2 部署容器  docker run -di --name=tomcat -p 8 ...

  4. Jmeter添加压力机

    名词解释: 主控机:启动Jmeter 的机器 负载机:为压力测试提供除主控机之外资源的机器 步骤: 1.先在其他的负载机(另外的电脑)上启动jmeter-server (jmeter-server.b ...

  5. 关于websocket 在生产环境中遇到的问题 及 解决办法

    一  生产环境说明 1) tornado 4.2 2) Tornado-MySQL 3) supervisor 3.0b2 4) protobuf 2.6.1 5) python 2.7.6 6) n ...

  6. SpringBoot_03mybatisPlus

    注意: mybatisPlus默认加载resources下的mapper文件夹下的xml文件 默认将数据库表的字段用驼峰标识转换成实体类的属性 官方网站: https://mp.baomidou.co ...

  7. jQuery学习总结06-插件开发

    本文是参考了Joey的博客后整理的. 先从一个简单扩展jQuery对象的demo开始说起: //sample:扩展jquery对象的方法,redTextColor()用于改变字体颜色. (functi ...

  8. Tomcat启动慢的原因及解决方法

    Tomcat启动慢的原因及解决方法 在CentOS启动Tomcat时,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是session引起的随机数问题导致的.Tocmat的Session ID ...

  9. octave-bug - 报告 GNU Octave 中的 bug

    SYNOPSIS 总览 octave-bug [-s subject] DESCRIPTION 描述 octave-bug 是一个 shell 脚本,用于以一种标准的格式撰写有关 Octave 的 b ...

  10. linux下的系统服务管理及日志管理

    1.ntsysv服务配置工具 用来配置哪些服务开启或关闭,图形界面,使用键盘来操作. 安装ntsysv服务的命令:yum install -y ntsysv 直接运行命令ntsysv 弹出配置界面: ...