精准测试系列《三》

2022-07-04 20:53:28 浏览数 (1)

这是无量测试之道的第204篇原创

前期推文:精准测试系列《二》中我们讲了一下实现的逻辑,今天的分享主要是来看看精准测试系列《二》中底层的代码是如何实现的。

今日分享主题:部署这个功能是如何实现的?
核心代码如下
Step1:页面上【部署】按钮的代码
代码语言:javascript复制
<button class='btn btn-info' id='deploy' align='center' onclick='deploy($(this))'>部署</button>
Step2:调用 javaScript 代码
代码语言:javascript复制
function deploy(td) {
        var tr=td.parent().parent()
        console.log(tr);
        var tdlist=tr.find("td");
        console.log(tdlist);
        var id=$(tdlist[0]).find('input').val()
        console.log(id);
        if(id.length != 0) {
            var mymessage = confirm("确定现在部署吗?")
            if (mymessage == true) {
                $.ajax({
                    url:'/jacoco_deploy/' id,
                    type: 'GET',
                    dataType: 'json',
                    timeout: 1000,
                    cache: false,
                    beforeSend: function () {
                        $("#mainbody").html('<div align="center">部署执行中...</div>');

                    }, //加载执行方法
                    error: function () {
                        alert('数据加载失败!!!');
                    },  //错误执行方法
                    success: function () {
                        var time=3;
                        setInterval(function () {
                            if(time==0){
                                location.href="/jacoco_index/1"
                            }else{
                                $("#mainbody").html('<div align="center">部署执行中,<span id="sid">' time '</span>s 自动后返回</div>');
                                time--;
                            }
                        },1000);
                    }
                })
            }
        }
}
Step3:flask路由规则
代码语言:javascript复制
(r"/jacoco_deploy/(?P<id>d*)",JacocoDeployHander),
Step4:部署代码
代码语言:javascript复制
class JacocoDeployHander(RequestHandler):
    def get(self,id):
        print("the id is:",id)
        sql1="select env,project_name,job_branch,cover_module from jacoco_info where id=" str(id)
        sql2="select env,project_name,job_branch,cover_module from jacoco_info"
        db=conndb()
        result=db.get_data(sql1,sql2)
        print(result)
        env=result[0]['env']
        project_name=result[0]['project_name']
        branch=result[0]['job_branch']
        module=result[0]['cover_module']
        print("the env is:",env)
        deploy(env, project_name, branch, module,id)

        data={"meg":"success"}
        return self.write(data)

这里实际是调用了一个 deploy 的方法,这个方法被加上一个 async 的注解,用来表示异常调用,独立开启一个线程来调用部署。

代码语言:javascript复制
def async(func):
    def wrapper(*args,**kwargs):
        t1=Thread(target=func,args=args,kwargs=kwargs)
        t1.start()
    return wrapper
@async
def deploy(env,project_name,branch,module,id):
    jd = Jenkins_delploy()
    jd.beta_deploy(env, project_name, branch, module)
    jobName = jd.job_name[0]
    for i in range(10):
        time.sleep(30)
        jobId = jd.getLastJobId(str(jd.job_name[0]))
        jobStatus = jd.getJobResultStatus(jobName, jobId)
        if (jobStatus is None):
            jobStatus = "'none'"
        else:
            jobStatus = "'"   str(jobStatus)   "'"
        print(jobId, jobStatus)
        sql3 = "update jacoco_info set job_id="   str(jobId)   ",job_status="   jobStatus   " where id="   str(id)
        print(sql3)
        db = conndb()
        db.execute_sql(sql3)
        if ("'SUCCESS'" == jobStatus):
            print("exit")
            break

至此部署的相关核心代码如上所示,里面的逻辑也不是很难理解,主要是要在整体上有一个全局的理解,然后再结合着掌握的技术体系给实现出来。

备注:

关于 Python 如何调用 jenkins 做发布操作的,这个在前期的推文 Python 调用Jenkins API自动化发布服务(完整版)中分享过,可以温习一下,这里不再赘述。

end

0 人点赞