python接口自动化(十五)--参数关联接口(详解)

简介: 我们用自动化新建任务之后,要想接着对这个新建任务操作,那就需要用参数关联了,新建任务之后会有一个任务的Jenkins-Crumb,获取到这个Jenkins-Crumb,就可以通过传这个任务Jenkins-Crumb继续操作这个新建的任务。

简介


  

我们用自动化新建任务之后,要想接着对这个新建任务操作,那就需要用参数关联了,新建任务之后会有一个任务的Jenkins-Crumb,获取到这个Jenkins-Crumb,就可以通过传这个任务Jenkins-Crumb继续操作这个新建的任务。

大致流程步骤:登录—>新建任务—>web界面操作删除—>抓取删除操作请求—>提取参数—>传参—>代码实现。


一、删除新建任务



1、我们前面讲过登录后新建任务后,那可以继续接着操作:删除刚才新建的任务

1232840-20190410100142473-890749140.png


2、用fiddler抓包,抓到删除新建任务的请求,从抓包结果可以看出,传的data参数是Jenkins-Crumb

1232840-20190410100833406-1133193107.png


3.这个Jenkins-Crumb哪里来的呢?可以看上个请求的body


1232840-20190410101314596-1293215964.png


4、也就是说在新建任务的时候,系统随机生成一个Jenkins-Crumb参数的值,body里面带有Jenkins-Crumb这个参数。那接下来我们提取出来就可以了


二、提取参数



1、我们需要的参数Jenkins-Crumb是在新建任务是body里Jenkins-Crumb的值,这时候从body里提出对应的参数值就行了(注意:每次保存需要修改内容,不能重复)


1232840-20190410102243835-275675165.png


三、传参



1、删除新建任务的data参数传上面取到的参数:{"Jenkins-Crumb": Jenkins_Crumb}

2、data数据类型post里面填data就行

3、接着前面的新建任务操作,就可以删除成功了


注意:如果想看清楚,可以在删除新建任务出打断点,看到新建的任务后,再次执行下边的代码 看看是不是可以删掉新建任务


1232840-20190410103226878-1130583889.png


4、302重定向


1232840-20190410103106417-321307515.png


5、content内容复制到记事本,修改后缀以后,浏览器查看有“欢迎来到Jenkins


1232840-20190410103459932-438816878.png


四、参考代码



# coding:utf-8
import requests
# 先打开登录首页,获取部分session
 url = "http://localhost:8080/jenkins/j_acegi_security_check"
headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"
          }  # get方法其它加个ser-Agent就可以了
 d = {"j_username": "admin",
     "j_password": "111111",
     "from": "",
     "Submit": u"登录",
     "remember_me": "on"
     }
 s = requests.session()
 r = s.post(url, headers=headers, data=d)
#print (r.content.decode('utf-8'))
# 正则表达式提取账号和登录按钮
import re
 t = re.findall(r'<b>(.+?)</b>', r.content.decode('utf-8'))   # 用python3的这里r.content需要解码
 print (t[0])
 print (t[1])
#新建任务
 url1 = "http://localhost:8080/jenkins/createItem"
body = {"name":"6666",
        "mode": "hudson.model.FreeStyleProject",
        "Jenkins-Crumb":"51a97fc7fbf3792823230d9bdd7ec906",
        "json":{"name":"6666",
                "mode": "hudson.model.FreeStyleProject",
                "Jenkins-Crumb":"51a97fc7fbf3792823230d9bdd7ec906"
        }
}
print(type (body))
import urllib
import sys
#获取name的值
name = body['name']
 print('name:'+name)
#获取body的值
 Jenkins_Crumb = body['Jenkins-Crumb']
print('body的值是:',body['Jenkins-Crumb'])
 r2 = s.post(url1, data=body, verify=False)
 #print (r2.content.decode('utf-8'))
#删除新建任务
 url2 = "http://localhost:8080/jenkins/job/"+name+"/doDelete"
 body1 = {
            "Jenkins-Crumb": Jenkins_Crumb
}
 r3 = s.post(url2, data=body1, verify=False)
 print (r3.content.decode('utf-8'))
#删除成功重定向到主界面(由于抓包没有看到response的结果,只知道重定向主界面)
 print(r3.url)


五、小结



1、细心地、认真的小伙伴一定会发现我代码请求的name的值是6666,或者英文,而不是“北京-宏哥”的中文,原因是中文出现的url中有时候会报错。解决办法:


from urllib.parse import quote
import urllib.request
 name = quote(name)
 url2 = "http://localhost:8080/jenkins/job/"+name+"/doDelete"


2、给小伙伴们演示一下,打断点

(1)在删除新建任务出打上断点,双击前边即可出现一个红色的大圆点


1232840-20190410151411971-729052573.png


(2)查看jenkins主界面,没有新建任务


1232840-20190410151819124-1886457889.png

 

(3)点击右上方的昆虫图标


1232840-20190410151619234-957694967.png


(4)进入debug模式,代码运行到断点处停止运行

1232840-20190410151903262-329092371.png


(5)刷新主界面,再次查看jenkins主界面,有新建任务-北京-宏哥


1232840-20190410152051748-1639698550.png


(6)点击右边的绿色图标一次性执行完后边的代码,或者是上边拐弯蓝色图标,一步一步执行完后边的代码

1232840-20190410152454855-780685709.png


(7)刷新主界面,再次查看jenkins主界面,你会看到:新建任务-北京-宏哥  神奇的消失了,他就这样被你神不知鬼不觉的干掉了


1232840-20190410152953831-1349312086.png

相关文章
|
14天前
|
C语言 Python
python 调用c接口
【10月更文挑战第12天】 ctypes是Python的一个外部库,提供和C语言兼容的数据类型,可以很方便地调用C DLL中的函数
37 0
|
8天前
|
数据安全/隐私保护 Python
python之自动化进入CSDN
python之自动化进入CSDN
15 0
|
3天前
|
JSON 测试技术 持续交付
自动化测试与脚本编写:Python实践指南
自动化测试与脚本编写:Python实践指南
10 1
|
5天前
|
数据采集 机器学习/深度学习 搜索推荐
Python自动化:关键词密度分析与搜索引擎优化
Python自动化:关键词密度分析与搜索引擎优化
|
17天前
|
运维 监控 网络安全
自动化运维的魔法:如何用Python简化日常任务
【10月更文挑战第9天】在数字时代的浪潮中,运维人员面临着日益增长的挑战。本文将揭示如何通过Python脚本实现自动化运维,从而提高效率、减少错误,并让运维工作变得更具创造性。我们将探索一些实用的代码示例,这些示例将展示如何自动化处理文件、监控系统性能以及管理服务器配置等常见运维任务。准备好让你的运维工作升级换代了吗?让我们开始吧!
|
23天前
|
运维 监控 网络安全
Python 在网络运维方面的自动化应用实例
Python 在网络运维方面的自动化应用实例
49 4
|
25天前
|
JSON 缓存 API
在 Python 中使用公共类处理接口请求的响应结果
在 Python 中使用公共类处理接口请求的响应结果
21 1
|
26天前
|
Java 程序员 C++
【Python】链式、嵌套调用、递归、函数栈帧、参数默认值和关键字参数
【Python】链式、嵌套调用、递归、函数栈帧、参数默认值和关键字参数
20 0
【Python】链式、嵌套调用、递归、函数栈帧、参数默认值和关键字参数
|
15天前
|
存储 C++ Python
[oeasy]python037_ print函数参数_sep分隔符_separator
本文介绍了Python中`print`函数的`sep`参数,即分隔符。通过回顾上文内容,解释了类型与`type`的概念,并强调了参数类型的重要性。文章详细探讨了`print`函数如何使用`sep`参数来分隔输出值,默认分隔符为空格(序号32)。还讨论了如何修改分隔符为其他字符,如冒号,并解释了为何反斜杠需要使用双反斜杠表示。最后,文章追溯了`sep`名称的由来,以及相关词汇的历史背景,如盎格鲁-萨克逊人的武器和语言。
15 0
|
20天前
|
存储 算法 API
Python学习五:函数、参数(必选、可选、可变)、变量、lambda表达式、内置函数总结、案例
这篇文章是关于Python函数、参数、变量、lambda表达式、内置函数的详细总结,包含了基础知识点和相关作业练习。
22 0