简介
我们用自动化新建任务之后,要想接着对这个新建任务操作,那就需要用参数关联了,新建任务之后会有一个任务的Jenkins-Crumb,获取到这个Jenkins-Crumb,就可以通过传这个任务Jenkins-Crumb继续操作这个新建的任务。
大致流程步骤:登录—>新建任务—>web界面操作删除—>抓取删除操作请求—>提取参数—>传参—>代码实现。
一、删除新建任务
1、我们前面讲过登录后新建任务后,那可以继续接着操作:删除刚才新建的任务
如果你想学习接口自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的接口自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386
【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1.【接口自动化】目前软件测试的市场行情以及测试人员能力标准。、2.【接口自动化】全面熟练Requests库以及底层方法调用逻辑、3.【接口自动化】接口自动化实战及正则和JsonPath提取器的应用等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337
2、用fiddler抓包,抓到删除新建任务的请求,从抓包结果可以看出,传的data参数是Jenkins-Crumb
3.这个Jenkins-Crumb哪里来的呢?可以看上个请求的body
4、也就是说在新建任务的时候,系统随机生成一个Jenkins-Crumb参数的值,body里面带有Jenkins-Crumb这个参数。那接下来我们提取出来就可以了
二、提取参数
1、我们需要的参数Jenkins-Crumb是在新建任务是body里Jenkins-Crumb的值,这时候从body里提出对应的参数值就行了(注意:每次保存需要修改内容,不能重复)
三、传参
1、删除新建任务的data参数传上面取到的参数:{"Jenkins-Crumb": Jenkins_Crumb}
2、data数据类型post里面填data就行
3、接着前面的新建任务操作,就可以删除成功了
注意:如果想看清楚,可以在删除新建任务出打断点,看到新建的任务后,再次执行下边的代码 看看是不是可以删掉新建任务
4、302重定向
5、content内容复制到记事本,修改后缀以后,浏览器查看有“欢迎来到Jenkins”
四、参考代码
1 # coding:utf-8
2 import requests
3 # 先打开登录首页,获取部分session
4 url = "http://localhost:8080/jenkins/j_acegi_security_check"
5 headers = {
6 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"
7 } # get方法其它加个ser-Agent就可以了
8 d = {"j_username": "admin",
9 "j_password": "111111",
10 "from": "",
11 "Submit": u"登录",
12 "remember_me": "on"
13 }
14
15 s = requests.session()
16 r = s.post(url, headers=headers, data=d)
17 #print (r.content.decode('utf-8'))
18 # 正则表达式提取账号和登录按钮
19 import re
20 t = re.findall(r'<b>(.+?)</b>', r.content.decode('utf-8')) # 用python3的这里r.content需要解码
21 print (t[0])
22 print (t[1])
23 #新建任务
24 url1 = "http://localhost:8080/jenkins/createItem"
25 body = {"name":"6666",
26 "mode": "hudson.model.FreeStyleProject",
27 "Jenkins-Crumb":"51a97fc7fbf3792823230d9bdd7ec906",
28 "json":{"name":"6666",
29 "mode": "hudson.model.FreeStyleProject",
30 "Jenkins-Crumb":"51a97fc7fbf3792823230d9bdd7ec906"
31
32 }
33 }
34 print(type (body))
35 import urllib
36 import sys
37 #获取name的值
38 name = body['name']
39 print('name:'+name)
40 #获取body的值
41 Jenkins_Crumb = body['Jenkins-Crumb']
42 print('body的值是:',body['Jenkins-Crumb'])
43 r2 = s.post(url1, data=body, verify=False)
44 #print (r2.content.decode('utf-8'))
45 #删除新建任务
46 url2 = "http://localhost:8080/jenkins/job/"+name+"/doDelete"
47 body1 = {
48 "Jenkins-Crumb": Jenkins_Crumb
49 }
50
51 r3 = s.post(url2, data=body1, verify=False)
52 print (r3.content.decode('utf-8'))
53 #删除成功重定向到主界面(由于抓包没有看到response的结果,只知道重定向主界面)
54 print(r3.url)
五、小结
1、细心地、认真的小伙伴一定会发现我代码请求的name的值是6666,或者英文,而不是“北京-宏哥”的中文,原因是中文出现的url中有时候会报错。解决办法:
1 from urllib.parse import quote
2 import urllib.request
3 name = quote(name)
4 url2 = "http://localhost:8080/jenkins/job/"+name+"/doDelete"
2、给小伙伴们演示一下,打断点
(1)在删除新建任务出打上断点,双击前边即可出现一个红色的大圆点
(2)查看jenkins主界面,没有新建任务
(3)点击右上方的昆虫图标
(4)进入debug模式,代码运行到断点处停止运行
(5)刷新主界面,再次查看jenkins主界面,有新建任务-北京-宏哥
(6)点击右边的绿色图标一次性执行完后边的代码,或者是上边拐弯蓝色图标,一步一步执行完后边的代码
(7)刷新主界面,再次查看jenkins主界面,你会看到:新建任务-北京-宏哥 神奇的消失了,他就这样被你神不知鬼不觉的干掉了