精准测试系列《三》

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

今日分享主题:部署这个功能是如何实现的?

核心代码如下

 

Step1:页面上【部署】按钮的代码

<button class='btn btn-info' id='deploy' align='center' onclick='deploy($(this))'>部署</button>

 

Step2:调用 javaScript 代码

 

 1function deploy(td) {
 2        var tr=td.parent().parent()
 3        console.log(tr);
 4        var tdlist=tr.find("td");
 5        console.log(tdlist);
 6        var id=$(tdlist[0]).find('input').val()
 7        console.log(id);
 8        if(id.length != 0) {
 9            var mymessage = confirm("确定现在部署吗?")
10            if (mymessage == true) {
11                $.ajax({
12                    url:'/jacoco_deploy/'+id,
13                    type: 'GET',
14                    dataType: 'json',
15                    timeout: 1000,
16                    cache: false,
17                    beforeSend: function () {
18                        $("#mainbody").html('<div align="center">部署执行中...</div>');
19
20                    }, //加载执行方法
21                    error: function () {
22                        alert('数据加载失败!!!');
23                    },  //错误执行方法
24                    success: function () {
25                        var time=3;
26                        setInterval(function () {
27                            if(time==0){
28                                location.href="/jacoco_index/1"
29                            }else{
30                                $("#mainbody").html('<div align="center">部署执行中,<span id="sid">'+time+'</span>s 自动后返回</div>');
31                                time--;
32                            }
33                        },1000);
34                    }
35                })
36            }
37        }
38}

 

 

Step3:flask路由规则

(r"/jacoco_deploy/(?P<id>\d*)",JacocoDeployHander),

 

Step4:部署代码

 

 1class JacocoDeployHander(RequestHandler):
 2    def get(self,id):
 3        print("the id is:",id)
 4        sql1="select env,project_name,job_branch,cover_module from jacoco_info where id="+str(id)
 5        sql2="select env,project_name,job_branch,cover_module from jacoco_info"
 6        db=conndb()
 7        result=db.get_data(sql1,sql2)
 8        print(result)
 9        env=result[0]['env']
10        project_name=result[0]['project_name']
11        branch=result[0]['job_branch']
12        module=result[0]['cover_module']
13        print("the env is:",env)
14        deploy(env, project_name, branch, module,id)
15
16        data={"meg":"success"}
17        return self.write(data)

 

 

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

 1def async(func):
 2    def wrapper(*args,**kwargs):
 3        t1=Thread(target=func,args=args,kwargs=kwargs)
 4        t1.start()
 5    return wrapper
 6@async
 7def deploy(env,project_name,branch,module,id):
 8    jd = Jenkins_delploy()
 9    jd.beta_deploy(env, project_name, branch, module)
10    jobName = jd.job_name[0]
11    for i in range(10):
12        time.sleep(30)
13        jobId = jd.getLastJobId(str(jd.job_name[0]))
14        jobStatus = jd.getJobResultStatus(jobName, jobId)
15        if (jobStatus is None):
16            jobStatus = "\'none\'"
17        else:
18            jobStatus = "'" + str(jobStatus) + "'"
19        print(jobId, jobStatus)
20        sql3 = "update jacoco_info set job_id=" + str(jobId) + ",job_status=" + jobStatus + " where id=" + str(id)
21        print(sql3)
22        db = conndb()
23        db.execute_sql(sql3)
24        if ("'SUCCESS'" == jobStatus):
25            print("exit")
26            break

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

备注:

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

欢迎关注【无量测试之道】公众号,回复【领取资源】
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、

资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。

备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

 

 添加关注,让我们一起共同成长!

 

posted on 2021-05-25 16:04  Wu_Candy  阅读(68)  评论(0编辑  收藏  举报