python接口自動化(十五)--參數關聯接口(詳解)


簡介

  我們用自動化新建任務之后,要想接着對這個新建任務操作,那就需要用參數關聯了,新建任務之后會有一個任務的Jenkins-Crumb,獲取到這個Jenkins-Crumb,就可以通過傳這個任務Jenkins-Crumb繼續操作這個新建的任務。

大致流程步驟:登錄—>新建任務—>web界面操作刪除—>抓取刪除操作請求—>提取參數—>傳參—>代碼實現。

一、刪除新建任務

1、我們前面講過登錄后新建任務后,那可以繼續接着操作:刪除剛才新建的任務

 

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主界面,你會看到:新建任務-北京-宏哥  神奇的消失了,他就這樣被你神不知鬼不覺的干掉了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM