精准测试系列《三》
前期推文:精准测试系列《二》中我们讲了一下实现的逻辑,今天的分享主要是来看看精准测试系列《二》中底层的代码是如何实现的。
今日分享主题:部署这个功能是如何实现的?
核心代码如下
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自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:
添加关注,让我们一起共同成长!