python利⽤session保持登录状态
在接⼝测试的过程中,经常会遇到有些接⼝需要在登录的状态下才能运⾏,否则会进⾏相应的提⽰,例如“请登录”:
我们有2种解决办法:
1、每次接⼝请求后获取到响应中的cookie,然后下次请求带上这个cookie,参考http_request2.py
2、使⽤requests的session会话对象
也就是requests的session会话对象来进⾏处理。会话对象让你能够跨请求保持某些参数。它也会在同⼀个 Session 实例发出的所有请求之间保持 cookie,期间使⽤urllib3的 connection pooling 功能。所以如果你向同⼀主机发送多个请求,底层的 TCP 连接将会被重⽤,
从⽽带来显著的性能提升。test2.py使⽤session来保持会话:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File  : test.py
# @Author: jing
# @Date  : 2018/12/19
# @Desc  :
#  blog.csdn/u013383813/article/details/76736720/
#发起⼀个get请求
import requests      # requess是第三⽅的,所以需要导⼊
import json
login_url='192.168.135.128:9999/futureloan/mvc/api/member/login'  #登录接⼝地址
login_data={'mobilephone':'134********','pwd':'123456'} #请求的数据是字典格式
recharge_url='192.168.135.128:9999/futureloan/mvc/api/member/withdraw'  #登录接⼝地址
recharge_data={'mobilephone':'134********','amount':'100'} #请求的数据是字典格式
print(json.dumps(login_data))
print(type(json.dumps(login_data)))
s=requests.Session()  #建⽴⼀个session会话,来保持会话,在需要登录的接⼝中能保持会话,不需要加cookie
# 1、发起get请求(请求数据附在url后⾯):请求数据为key:value格式
# 在get请求中使⽤params关键字,以⼀个字典来传递这些参数
# 如果要将参数放在url中传递,使⽤params参数,可以是字典或者字符串,发起请求时,参数附在url后⾯
(url=login_url,params=login_data)
(url=recharge_url,params=recharge_data)  #发起⼀个get请求,并将响应结果存在responsesdata中
# get请求的参数是附在url的后⾯,所以没有请求体
session如何设置和读取
print(responsesdata2.url)  # 输出 192.168.135.128:9999/futureloan/mvc/api/member/withdraw?mobilephone=134********&amount=100
quest.body) #输出 None,因为get请求没有body
# 2、发起post请求(请求数据在body中):请求数据格为key:value格式和json格式
# 如果要将参数放在request body中传递(以formm表单传递),使⽤data参数,可以是字典,字符串,json或者是类⽂件对象
# 1、在post请求中使⽤data关键字,以⼀个字典(key:value)来传递这些参数。发起请求时参数在body中
responsesdata1=s.post(url=login_url,data=login_data)
responsesdata2=s.post(url=recharge_url,data=recharge_data)
#post请求的参数是在请求体body中,不会附在url后⾯
print(responsesdata2.url)  # 输出 192.168.135.128:9999/futureloan/mvc/api/member/withdraw
quest.body)  # 输出post请求的body:pwd=123456&mobilephone=134********
print(responsesdata1.json())
print(responsesdata2.json())
# 2、在post请求中使⽤data关键字,以json来传递这些参数。发起请求时参数在body中
ss.post(url=login_url,data=json.dumps(login_data),headers={'Content-Type':'application/json'})  #将字典格式的data1转换成json格式传递数据json.dumps(login_data)
:wwwblogs/insane-Mr-Li/p/9145152.html
修改http_request2.py,使⽤session来保持登录状态:
#读取多条测试⽤例
#1、导⼊requests模块
import  requests
#从 class_12_19.do_excel1导⼊read_data函数
from do_excel2 import read_data
from do_excel2 import write_data
from do_excel2 import count_case
#定义http请求函数
ss=requests.session()
def http_request3(method,url,data):
if  method=='get':
print('发起⼀个get请求')
(url=url,params=data)
else:
print('发起⼀个post请求')
result=ss.post(url=url,data=data)
return result  #返回响应体
# return result.json()  #返回响应结果:结果是字典类型:{'status': 1, 'code': '10001', 'data': None, 'msg': '登录成功'}
#从Excel读取到多条测试数据
sheets=['login','recharge','withdraw']
for sheet1 in sheets:
max_row=count_case(sheet1)
for case_id in range(1,max_row):
data=read_data(sheet1,case_id)
print('读取到第{}条测试⽤例:'.format(data[0]))
print('测试数据 ',data)
#print(type(data[2]))
#调⽤函数发起http请求
result=http_request3(data[4],data[2],eval(data[3]))
print('响应结果为 ',result.json())
#将测试实际结果写⼊excel
#write_data(case_id+1,6,result['code'])
write_data(sheet1,case_id+1,7,str(result.json()))
#对⽐测试结果和期望结果
if result.json()['code']==str(data[5]):
print('测试通过')
#将⽤例执⾏结果写⼊Excel
write_data(sheet1,case_id+1,8,'Pass')
else:
write_data(sheet1,case_id+1,8,'Fail')
print('测试失败')
http_request3.py
import requests
import json
ss=requests.session()  # cookies 参数可以⽤session⾃动关联
class HttpRequest():
def http_request(self,url,method,data1):
if method=='get':
(url=url,params=data1)  #get请求⽤params传递字典格式的数据
else:
#在通过requests.post()进⾏POST请求时,传⼊报⽂的参数有两个,⼀个是data,⼀个是json:常见的form表单可以直接使⽤data参数进⾏报⽂提交,⽽data的对象则是python中的字典类型;
res=ss.post(url=url,data=data1)  #post请求⽤data传递字典格式的数据
# res=ss.post(url=url,data=json.dumps(data1),headers={'Content-Type':'application/json'})  #将字典格式的data1转换成json格式传递数据;因为此接⼝只⽀持key:value格式,所以传递json格式的时候会报错print(res.json())
print(res.url)
quest.body)
return res
# 下⾯是发送的是post请求:参数是在body⾥⾯,body=pwd=123456&mobilephone=134********
# #pt1.1: {'msg': '登录成功', 'data': None, 'status': 1, 'code': '10001'}
# 192.168.135.128:9999/futureloan/mvc/api/member/login
# pwd=123456&mobilephone=134********
# 下⾯发送的是get请求:参数是附在url的后⾯,body为Nome
# #pt1.2: {'msg': '⽤户名或密码错误', 'data': None, 'status': 0, 'code': '20111'}
# 192.168.135.128:9999/futureloan/mvc/api/member/login?pwd=12345678&mobilephone=134********
# # None
httprequest.py

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。