zoukankan      html  css  js  c++  java
  • python回调函数应用-获取jenkins构建结果

    需求背景:

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

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

    理解回调函数:

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

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

     基本思路:

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

      version1:

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

     1 def mainfunc(func):
     2     '''
     3     
     4     :param func: callback func Name
     5     :return: 
     6     '''
     7     print('start build job')
     8     func()
     9     print('send report to ding wen qi')
    10 
    11 
    12 def callback():
    13     '''
    14     
    15     :return: jenkins job build state
    16     '''
    17     print('jenkins is done')
    18 
    19 mainfunc(callback)

       version2:

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

     1 def callback():
     2     '''
     3 
     4     :return: jenkins job build state
     5     '''
     6     num = random.randint(1,10)
     7     #利用randint随机生成一个num 假装enkins是返回的构建结果。偶数认为已经构建结束,奇数认为仍在构建中
     8     print(num)
     9     if num % 2 != 0:#奇数
    10         print('kins is building job')
    11         return  {'buildState':False}
    12     else:#偶数
    13         print('jenkins is done')
    14         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

      结果:

    1 step1:start build job
    2 step2:jenkins is building job
    3 step2:jenkins is building job
    4 step2:jenkins is done
    5 step3:send report to ding wen qi

      version4:

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

    1 time.sleep(2)

      完整的demo代码:

     1 import random
     2 import time
     3 
     4 def mainfunc(func):
     5     '''
     6     :param func: callback func Name
     7     :return:
     8     '''
     9     print('step1:start build job')
    10 
    11     #根据callback返回的状态,决定是否进行下一步操作
    12     while True:
    13         flag = func()
    14         if flag :
    15             print('step3:send report')
    16             break
    17 
    18 def callback():
    19     '''
    20     :return: jenkins job build state
    21     '''
    22     #jenkins构建job需要至少3分钟,所以每隔1分钟请求一次
    23     time.sleep(2)
    24     num = random.randint(1,100)
    25     #利用randint随机生成一个num 假装enkins是返回的构建结果。偶数认为已经构建结束,奇数认为仍在构建中
    26     # print(num)
    27     if num % 2 != 0:#奇数
    28         print('step2:jenkins is building job')
    29         return  False
    30     else:#偶数
    31         print('step2:jenkins is done')
    32         return True
    33 
    34 mainfunc(callback)
  • 相关阅读:
    InjectAPC全部项目(Win32和Win64位)
    Codeforces Round #377 (Div. 2)
    Codeforces Canada Cup 2016
    UVa 1395 (最小生成树)
    空间表SpaceList
    线程中的临界区的应用
    【题解】狼和羊-C++
    【基础算法-树状数组】入门-C++
    【题解】在你窗外闪耀的星星-C++
    【题解】[NOIP模拟题]我要的幸福-C++
  • 原文地址:https://www.cnblogs.com/kaerxifa/p/11486312.html
Copyright © 2011-2022 走看看