接口自动化-get/post接口详解

一、 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']=key
    payload['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  # 获取cookies
    dict_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_exam

def 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)  #批量生成cookie
           with 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_cookie

url = '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())

在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
不多说废话,看题目,本教程适合练手,会python+android基础的人群,文件较大,上传乃是下载链接,下面上目录: 1-1 课程导学 2-1 如何学好Android App性能测试? 2-10 详解【电量】监控值的获取方法 \' D, l" p) d6 d. K9 [7 p 2-11 详解【电量】监控脚本实现和数据分析 O, e4 X& K0 S% h8 v8 V9 ? 2-12 详解【内存】监控值的获取方法 k! e6 e# C" K% z9 k- l 2-13 详解【内存】监控脚本实现和数据分析0 d; e- S% G6 r3 H: g 2-14 详解【FPS&过度渲染】的概念和监控方法 - 分析页面卡慢的方法# G! _2 O9 T* j" K s3 v6 C0 l 2-2 工欲善其事必先利其器-性能测试环境准备 2-3 详解【启动时间】监控值的获取方法0 n( p* l; g C 2-4 详解【启动时间】监控脚本实现% B2 z( C( E& S: n r1 e 2-5 详解【启动时间】数据分析 2-6 【启动时间】时间戳差值监控方法概要介绍 2-7 详解【CPU】监控值的获取方法、脚本实现和数据分析 2-8 详解【流量】监控值的获取方法7 r7 ~/ D5 |+ h9 m9 i6 p) b: Y 2-9 详解【流量】监控脚本实现和数据分析2 [9 {# {$ c9 k/ T, `/ t" \ 3-1 为什么需要使用框架实现自动化测试? 3-10 UnitTest框架之TestCase,TestSuite,TestRunner简介3 A2 {1 F2 @; K 3-11 UnitTest框架之TestSuite,TestRunner自动化测试 3-12 数据驱动框架DDT简介 3-13 数据驱动框架DDT的使用方法 3-14 数据驱动框架DDT实战; 3-2 准备一个被测APP 3-3 工欲善其事必先利其器-自动化测试环境准备 3-4 Android App自动化测试(一) 3-5 Android App自动化测试(二) 3-6 Android App自动化测试(三) 3-7 UnitTest框架之TestFixture简介 3-8 UnitTest框架之TestFixture自动化测试(一) 3-9 UnitTest框架之TestFixture自动化测试(二) 4-1 如何学好Android App API接口测试? 4-10 Fiddler构造HTTP Get请求 4-11 Fiddler构造HTTP Post请求 4-12 Fiddler抓取手机上的网络数据包 4-13 为什么使用PostMan做API接口测试 4-14 工欲善其事必先利其器-PostMan工具准备 4-15 PostMan测试HTTP Get请求 4-16 PostMan测试HTTP Post请求 4-17 数据驱动DDT实现API接口自动化测试简介) 4-18 Python requests测试HTTP中的Get、Post请求 4-19 数据驱动DDT实现API接口自动化测试(一) 4-2 什么是API 4-20 数据驱动DDT实现API接口自动化测试(二); 4-3 抓包神器Fiddler简介 4-4 Fiddler抓包原理解析 4-5 Fiddler修改客户端发出的请求(一) 4-6 Fiddler修改客户端发出的请求(二) 4-7 Fiddler修改服务器端返回的内容 4-8 Fiddler实现会话的过滤、对比及请求的编解码 4-9 Fiddler实现Host的配置 5-1 测试工程师为什么需要掌握持续集成? 5-2 持续集成的概念、流程和意义 5-3 讲解持续集成工具Jenkins3 5-4 Jenkins工具密码的修改 5-5 Jenkins工具的配置说明 5-6 Jenkins工具系统配置和Job配置 5-7 Jenkins工具手动持续集成实战 5-8 Jenkins工具自动化持续集成实战 6-1 Native App自动化测试及Appuim框架介绍 6-2 自动化测试环境、元素识别工具、脚本设计原则-LOVE原则的讲解 6-3 Native App自动化脚本的实现 6-4 Appium自动化测试框架API讲解与案例实践(一) 6-5 Appium自动化测试框架API讲解与案例实践(二) 6-6 Appium自动化测试框架API讲解与案例实践(三) 6-7 Appium自动化测试框架API讲解与案例实践(四) 6-8 Appium自动化测试框架API讲解与案例实践(五) 6-9 Appium自动化测试框架API讲解与案例实践(六) 7-1 Hybrid App自动化测试概要 7-2 Appium基于Sele
192.168.85.1 - - [26/Jun/2022:06:07:07 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 24 192.168.85.1 - - [26/Jun/2022:06:07:11 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 24 192.168.85.1 - - [26/Jun/2022:06:07:11 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 24 192.168.85.1 - - [26/Jun/2022:06:07:11 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 200 12925 192.168.85.1 - - [26/Jun/2022:06:07:11 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 200 12925 192.168.85.1 - - [26/Jun/2022:06:07:11 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 200 12925 192.168.85.1 - - [26/Jun/2022:06:07:11 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 200 14 192.168.85.1 - - [26/Jun/2022:06:08:06 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 15 192.168.85.1 - - [26/Jun/2022:06:08:16 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 1227 192.168.85.1 - - [26/Jun/2022:06:10:15 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 79 192.168.85.1 - - [26/Jun/2022:06:13:25 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 404 752 192.168.85.1 - - [26/Jun/2022:06:16:42 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 35 192.168.85.1 - - [26/Jun/2022:06:16:57 -0400] "GET //struts2-showcase/hhh.jsp HTTP/1.1" 403 642 192.168.85.1 - - [26/Jun/2022:06:18:55 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 35 192.168.85.1 - - [26/Jun/2022:06:19:02 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 35 192.168.85.1 - - [26/Jun/2022:06:19:09 -0400] "GET //struts2-showcase/hhh1.jsp HTTP/1.1" 403 642 192.168.85.1 - - [26/Jun/2022:06:19:34 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 400 192.168.85.1 - - [26/Jun/2022:06:20:37 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 5 192.168.85.1 - - [26/Jun/2022:06:20:42 -0400] "GET //struts2-showcase/hhh1.jsp HTTP/1.1" 403 642 192.168.85.1 - - [26/Jun/2022:06:20:46 -0400] "GET //struts2-showcase/hhh.jsp HTTP/1.1" 403 642 192.168.85.1 - - [26/Jun/2022:06:20:51 -0400] "GET /struts2-showcase/hhh.jsp HTTP/1.1" 403 642
07-12

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓晓白的软件测试进阶之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值