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