一、 Get接口详解

1. Get请求的基本用法

做接口自动化的一般都是前后端分离的,返回json体,几乎没有返回结果是HTML的,会很复杂。
格式:requests.gett(url,data/json,headers,其他)

说明:

参数 说明
url 必填,有3种写法,下面会有详解
data 传入参数是表单类型(x-www-form)时使用,传入请求数据
json 传入参数是json类型,即content-type为application/json时使用,传入请求数据
headers 传入cookie,需要使用cookie时使用
其他 比如可传入超时时间:timeout=30

注意:

  • get请求参数原则上都是包含在url里的,但是可以灵活处理,将请求参数和url分别传入
  • 请求响应的结果一般都需要使用.json方法,将响应的文本内容按照json化处理,在Python中被处理成了一个字典类型
import  requests   #导入requests模块url_toutiao  = 'https://www.ixigua.com/tlb/comment/article/v5/tab_comments/?tab_index=0&count=10&group_id=6914830518563373581&item_id=6914830518563373581&aid=1768'
result_toutiao =  requests.get(url_toutiao)
print(result_toutiao.json())
#获取响应的结果,使用.json方法,将响应的文本内容按照json化处理,在Python中处理成了一个字典类型

2. get请求的3种写法

#get请求的写法1:标准写法
result_toutiao = requests.get(url = url_toutiao)#get请求的写法2:直接跟变量
result_toutiao = requests.get(url_toutiao)#get请求的写法3:直接跟URL,但一般不建议这样写
result_toutiao = requests.get('https://www.ixigua.com/tlb/comment/article/v5/tab_comments/?tab_index=0&count=10&group_id=6914830518563373581&item_id=6914830518563373581&aid=1768')

3. 定制请求头

  • 定制请求头:传cookie、content-type等
  • 自定义一个字典,再传给headers参数即可
#定制请求头:传cookie、content-type等
#自定义一个字典,再传给headers参数即可
url_vblog_get = 'http://182.92.178.83:8081/article/all?state=-1&page=1&count=1&keywords='#自定义一个字典
vblog_headers = {'Cookie':'adminUserName=admin; Hm_lvt_cd8218cd51f800ed2b73e5751cb3f4f9=1609825023,1609902963,1610015726,1610102905; Hm_lpvt_cd8218cd51f800ed2b73e5751cb3f4f9=1610103196; SESSION=ZDBkYmRmOWQtODQ5Zi00ZjdjLTg3ZDgtZTIxYmI5Y2U4OTkz; JSESSIONID=67921EF59A8808D21AC6E421EDC7061F'}
rel_vblog_get = requests.get(url_vblog_get,headers = vblog_headers)  #前面的headers不能修改,必须这样写
print(rel_vblog_get.json())

4. 请求参数拆分

将get请求参数不放在url里,单独拿出来做处理,使用起来会更灵活

url_vblog_get = 'http://182.92.178.83:8081/article/all'
vblog_headers = {'Cookie':'adminUserName=admin; Hm_lvt_cd8218cd51f800ed2b73e5751cb3f4f9=1609825023,1609902963,1610015726,1610102905; Hm_lpvt_cd8218cd51f800ed2b73e5751cb3f4f9=1610103196; SESSION=ZDBkYmRmOWQtODQ5Zi00ZjdjLTg3ZDgtZTIxYmI5Y2U4OTkz; JSESSIONID=67921EF59A8808D21AC6E421EDC7061F'}#将URL问号后面的参数传到自定义字典中
payload = {'state':'-1','page':'1','count':'6','keywords':'江南'}  rel_vblog_get = requests.get(url_vblog_get,headers = vblog_headers,params = payload)print(rel_vblog_get.json())
print(rel_vblog_get.url)  #查看当前访问的URL

运行结果转换为json格式后:

个人认为比较好用的json格式化工具:http://www.ab173.com/json/

5. payload的灵活运用

#payload的灵活运用
url_vblog_get = 'http://182.92.178.83:8081/article/all'
vblog_headers = {'Cookie':'adminUserName=admin; Hm_lvt_cd8218cd51f800ed2b73e5751cb3f4f9=1609825023,1609902963,1610015726,1610102905; Hm_lpvt_cd8218cd51f800ed2b73e5751cb3f4f9=1610103196; SESSION=ZDBkYmRmOWQtODQ5Zi00ZjdjLTg3ZDgtZTIxYmI5Y2U4OTkz; JSESSIONID=67921EF59A8808D21AC6E421EDC7061F'}#将URL问号后面的参数传到自定义字典中
payload = {'state':'-1','page':'1','count':'6','keywords':'江南'}  keys = ['大','刀','江南']
for key in keys:payload['keywords']=keypayload['page'] = '1'  #展示第1页payload['count'] = '2'  #每页展示2个数量rel_vblog_get = requests.get(url_vblog_get,headers = vblog_headers,params=payload)print(rel_vblog_get.json())print(rel_vblog_get.url)

6. 超时

应用场景:接口发送出去后到底有没有响应

如果不设置超时,会出现的问题:如果后端不给响应,接口就会一直请求,程序会一直等待。

设置超时的方法:

  • 超时设置:timeout,单位是秒,一般设置为30秒,30秒后如果还没有响应,就报超时。或重试3次,每次30秒还是没有响应,就不会再请求。
  • 超时是对程序的一个保护机制,避免一直请求无响应,让程序更加健壮
  • 一般加了超时如果无响应会报错,程序不会继续往下执行。所以通常需要将超时放在try语句中
try:rel_vblog_get = requests.get(url_vblog_get,headers = vblog_headers,params=payload,timeout=1)
except:print('继续运行')


7. 各属性获取

获取属性 方法
获取url地址 .url
获取服务器响应的内容 .text
获取编码格式 .encoding
获取json格式 .json()
获取响应状态码 .status_code
获取cookie .cookies
url_vblog_get = 'http://182.92.178.83:8081/article/all'
vblog_headers = {'Cookie':'adminUserName=admin; Hm_lvt_cd8218cd51f800ed2b73e5751cb3f4f9=1609825023,1609902963,1610015726,1610102905; JSESSIONID=0DBC5567722FDBC3723824B22C1BFAD4'}
payload = {'state':'-1','page':'1','count':'6','keywords':'江南'}  #将URL问号后面的参数传到自定义字典中
rel_vblog_get = requests.get(url_vblog_get,headers = vblog_headers,params=payload,timeout=1)print(rel_vblog_get.url)   #打印url地址:.url
print(rel_vblog_get.text)  #打印服务器响应的内容:.text
print(rel_vblog_get.encoding)     #打印编码格式:.encoding
print(rel_vblog_get.json())         #打印json格式:.json()
print(rel_vblog_get.status_code)  #打印响应状态码:.status_code
print(rel_vblog_get.cookies)      #打印cookie:.cookies

二、 Post接口详解

1. Post请求的基本用法

格式:requests.post(url,data/json,headers,其他)

说明:

参数 说明
url 必填,有3种写法,同get一样
data 传入参数是表单类型(x-www-form)时使用,传入请求数据
json 传入参数是json类型,即content-type为application/json时使用,传入请求数据
headers 传入cookie,需要使用cookie时使用
其他 比如可传入超时时间:timeout=30
import requests
#post请求
url = 'http://182.92.178.83:8081/login'
#传入的参数需要处理成字典类型
data_post={'username':'sang','password':'123'}#传入的参数是表单类型(x-www-form)的,使用data;传入的参数是json类型,使用json
result = requests.post(url=url,data=data_post)   #post请求
print(result.json())   #打印请求结果

2. 获取cookie

获取cookie的思路:

(1)使用.cookies获取到cookie jar

(2)使用requests.utils.dict_from_cookiejar(cookies)从cookie jar中获取到cookie的字典形式

(3)进行拼接,得到我们传入的cookie形式

cookies = result.cookies   #获取cookies
print(cookies,type(cookies))  #打印cookie和cookies的类型dict_cookie = requests.utils.dict_from_cookiejar(cookies)  #从cookiejar里面返回一个字典
print(dict_cookie)finally_cookie = 'JSESSIONID='+dict_cookie['JSESSIONID']  #拿到需要的cookie信息,将其拼接起来
print(finally_cookie)  #这个cookie在后续的操作中都可以调用

3. 模块封装

  • 封装的模块

一般会将较长使用的模块作为公共模块封装起来,比如获取cookie

import requests
def get_cookie():   #自定义获取cookie的函数# post请求url = 'http://182.92.178.83:8081/login'data_post = {'username': 'sang', 'password': '123'}result = requests.post(url=url, data=data_post)  # post请求cookies = result.cookies  # 获取cookiesdict_cookie = requests.utils.dict_from_cookiejar(cookies)  # 从cookiejar里返回一个字典finally_cookie = 'JSESSIONID=' + dict_cookie['JSESSIONID']  # 拿到需要的cookie信息    return finally_cookie  # 这个cookie在后续的操作中都可以调用

  • 函数调用

函数调用之前需要导入该函数,导入后即可直接调用

import requests
from  public.get_cookie import get_cookie  #导入自定义函数cookies = get_cookie()  #函数调用
url_vblog_get = 'http://182.92.178.83:8081/article/all'
vblog_headers = {'Cookie':cookies}
payload = {'state':'-1','page':'1','count':'6','keywords':'江南'}
rel_vblog_get = requests.get(url_vblog_get,headers = vblog_headers,params=payload,timeout=1)print(rel_vblog_get.json())         #打印json格式:.json()

4. 批量获取cookie脚本

Jmeter里面模拟不了提交试卷(提交试卷是不可能要先登录一下再去提交,单测提交试卷接口和登录没有任何关系),而在jmeter里面为了实现批量提交试卷,先进行了登录,这是jmeter不足的一个地方。

如何解决?可以通过写脚本的方式:

批量获取cookie的思路:

(1)准备工作:准备一个用户信息文件,最好是CSV格式,里面放有批量的用户信息,比如100个用户名和密码

(2)初始化操作:以覆盖写(w)的方式,打开一个csv文件,写入一个空字符串。

  • 这个文件是后面用来写入cookie信息的。由于cookie一直都在变化,我们每次都需要获取最新的cookie信息,所以在写入cookie前需要保证文件已被清空。
  • 此处还可以使用删除的方式,方法多样。
  • 打开文件的路径可以使用相对路径,也可以使用绝对路径,相对路径中,两个点(. .)是返回上级的意思

(3)读取预先准备好的用户信息文件,获得批量的用户名和密码

  • 由于用户信息本身就有换行,需要使用.strip去掉首位的空格及换行符,输出结果为一个字符串
  • 使用.split将字符串分割成一个列表,由于CSV文件是按逗号隔开的,故此处以逗号作为分割线
  • 获取列表中的元素,按下标取即可得到我们想要的用户名和密码

(4)调用获取cookie的函数,得到批量的cookie
(5)将获取到的批量cookie以追加写(a)的方式写入步骤2中已被清空的文件

  • 此处如果使用覆盖写(w),最后只会有最后一行的cookie
from public.get_cookie_exam import get_cookie_examdef piliang_get_cookies():with open('../exam_files/exam_cookies.csv','w') as cookies_exam:cookies_exam.write('')  #文件初始化,保证每次cookie写入时文件都是空的#此处也可以使用相对路径:../exam_files/userinfo.csv#读取用户信息
with open(r'G:\0-编学编测\3-第三阶段\jiekou\exam_files\userinfo.csv','r') as userinfo:          for user in userinfo:user = user.strip()  #去掉首位的空格以及换行符#print(user)   #直接输出的结果是一个字符串user_list = user.split(',')  #将字符串分割成一个列表,按逗号隔开cookies = get_cookie_exam(user_list[0],user_list[1])  #调用获取cookie的函数,并批量传参#print(cookies)  #批量生成cookiewith open('../exam_files/exam_cookies.csv','a') as cookies_exam:  #以追加写的方式将cookie写入文件(如果使用覆盖写w,则只会留最后一行)cookies_exam.write(cookies+'\n')  #直接拼接写只会写在一行,所有需要加一个换行符piliang_get_cookies()  #调用批量获取cookie的函数

  • 生成的新cookie

5. Post+put+delete

每一次增(post)、删(delete)、改(put)之后都会查(get)一下


import requests
from public.get_cookie import get_cookieurl = 'http://182.92.178.83:8081/admin/category/'
payload_select = {'cateName':'requests0110'}
cookies=get_cookie()  #调用get_cookie函数
vblog_headers = {'Cookie':cookies}#post:新增
rel_select_catename = requests.post(url,data=payload_select,headers = vblog_headers)
#表单类型,使用data
print(rel_select_catename.json())#put:编辑
payload_update={'id':'56','cateName':'request011001'}
rel_update_catename = requests.put(url,data=payload_update,headers=vblog_headers)
print(rel_update_catename.json())#delete:删除,删除没有参数
url_delete_catename = 'http://182.92.178.83:8081/admin/category/56'
rel_delete_catename = requests.delete(url,headers = vblog_headers)
print(rel_delete_catename.json())

接口自动化-get/post接口详解相关推荐

  1. python接口自动化发送get请求 详解(一)

    前言:接口自动化实现自动化脚本比较稳定,主要用到requests模块,后面我会把这个模块单独拉出来写一下. 一.环境安装 1.用pip安装requests模块 >>pip install ...

  2. Java8-5-Function函数式接口进阶与默认方法详解

    Java8-5-函数式接口进阶与默认方法详解 上一篇我们快速的借助示例演示了stream api的简单应用,体会到了使用stream api对集合处理的便捷和其与函数式接口密不可分的关系,所以为了更高 ...

  3. 转载:linux驱动层到应用层的重要接口sys文件系统---/sys目录详解

    linux驱动层到应用层的重要接口sys文件系统---/sys目录详解 Linux2.6内核中引入了sysfs文件系统.sysfs文件系统整理的设备驱动的相关文件节点,被视为dev文件系统的替代者.同 ...

  4. 调用百度ai接口实现图片文字识别详解

    调用百度ai接口实现图片文字识别详解 首先先介绍一下这篇博文是干嘛的,为了不浪费大家时间.公司最近和短视频公司合作,需要监控app的截图上的文字是否符合规范,也就是确保其没有违规的文字.到网上找了一些 ...

  5. TYPE-C接口的工作原理图文详解

    TYPE-C接口的工作原理图文详解 发表于 2018-01-29 09:53:53 电子常识 +关注 2016年,有一个名词在手机上非常火,几乎所有的旗舰手机都会提到这个名词,说到这,大家应该都够猜到 ...

  6. 银行接口的私钥和公钥详解

    银行接口的私钥和公钥详解 中国银行.建设银行.农业银行.工商银行.招商银行等支付接口的私钥和公钥详解 密钥: 我理解是公钥+私钥的统称. 密钥对: 公钥(证书)和私钥成对存在. 通信双方各持有自己的私 ...

  7. [享学Eureka] 三十一、DiscoveryClient透彻解析(八):接口方法和shutdown()方法详解

    成为一个成功者最重要的条件,就是每天精力充沛的努力工作,不虚掷光阴. –> 返回Netflix OSS套件专栏汇总 <– 代码下载地址:https://github.com/f641385 ...

  8. Android自动化大讲堂34--终极自动化框架UIAutomator使用详解

    <深入理解Android自动化测试> 又双叒叕重印咯!!! 无以为报,只能改版得更漂亮一点来答谢各位的厚爱! 好了,废话少说,咱们开始吧! 终极自动化框架UIAutomator使用详解 注 ...

  9. fofa自动化爬虫脚本更新+详解

    fofa自动化爬虫脚本更新+详解 起因 最近要用到fofa爬虫,为什么要用爬虫不用api,问就是穷,想起来之前写过一个相关的脚本:Fofa-python-脚本,是很久以前写的了,之前写的时候有点问题, ...

  10. python自动化xmind to testcase详解

    python自动化xmind to testcase详解 前文: 看过一些文章写得xmind2testlink,比较简单化对于初学者来说还是比较花时间去理解其中的一些步骤,所以整理下了前辈们的操作再加 ...

最新文章

  1. 以太网控制芯片DM9000在2440裸机上终于能正确接收数据了(源代码工程已经上传)...
  2. 财务大数据比赛有python吗-【教改实验班简介】财务大数据分析班
  3. layui 自定义排序_thinkphp5+layui异步修改排序
  4. 《leetcode》longest-consecutive-sequence
  5. outerDocument访问外部属性方法
  6. python查询mysql数据库_用python操作mysql数据库(之简单查询操作)
  7. minHash最小哈希原理
  8. 104.202.60.2/.index.php,web扫描
  9. 【ROS学习笔记】(七)服务端Server的实现
  10. python电话通知_教你如何用Python向手机发送通知
  11. python爬虫入门
  12. win7硬盘安装ubuntu经验
  13. 一个字节8位,无符号类型,最大值为什么是2的8次方-1,范围0-255
  14. 全差分运放阻抗匹配计算(一)
  15. Android开发之获取当前展示的activity的包名,类名
  16. 硬件基础知识----(1)基本概念
  17. java老版手机游戏合集破解
  18. 摄氏度符号英文计算机语言,英文文章里摄氏度符号打法
  19. Java程序猿搬砖笔记(七)
  20. 第十代晨风机器人_第十代QQ机器人下载_第十代QQ机器人 v20180102 官方版 - 西西下载...

热门文章

  1. android studio接口在哪设置,Android定位SDK
  2. linux生成密钥公钥,linux 生成密钥和公钥,实现免密登录
  3. 面试题:数据库的优化
  4. 基于小波变换的数字水印技术
  5. SVN 下载与安装(超简单)!!!
  6. ecshop全套系统测试用例
  7. PHP多功能自动发卡平台源码 带手机版 带多套商户模板
  8. Maven的打包命令
  9. Office2010的故事 1、从精简版无法升级
  10. 计算机中缺失freeimage.dll,FreeImage.dll