zoukankan      html  css  js  c++  java
  • python利用session保持登录状态

    在接口测试的过程中,经常会遇到有些接口需要在登录的状态下才能运行,否则会进行相应的提示,例如“请登录”:
    我们有2种解决办法:
    1、每次接口请求后获取到响应中的cookie,然后下次请求带上这个cookie,参考http_request2.py

     2、使用requests的session会话对象

       也就是requests的session会话对象来进行处理。会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之

       间保持 cookie, 期间使用 urllib3 的 connection pooling 功能。所以如果你向同一主机发送多个请求,底层的 TCP 连接将会被重用,

       从而带来显著的性能提升。test2.py使用session来保持会话:

     参考链接:https://blog.csdn.net/u013383813/article/details/76736720/

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @File  : test.py
    # @Author: jing
    # @Date  : 2018/12/19
    # @Desc  :
    #   https://blog.csdn.net/u013383813/article/details/76736720/
    #发起一个get请求
    import requests      # requess是第三方的,所以需要导入
    import json
    login_url='http://192.168.135.128:9999/futureloan/mvc/api/member/login'  #登录接口地址
    login_data={'mobilephone':'13417467890','pwd':'123456'} #请求的数据是字典格式
    recharge_url='http://192.168.135.128:9999/futureloan/mvc/api/member/withdraw'  #登录接口地址
    recharge_data={'mobilephone':'13417467890','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后面
    responsesdata1=s.get(url=login_url,params=login_data)
    responsesdata2=s.get(url=recharge_url,params=recharge_data)   #发起一个get请求,并将响应结果存在responsesdata中
    
    # get请求的参数是附在url的后面,所以没有请求体
    print(responsesdata2.url)  # 输出 http://192.168.135.128:9999/futureloan/mvc/api/member/withdraw?mobilephone=13417467890&amount=100
    print(responsesdata2.request.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) # 输出 http://192.168.135.128:9999/futureloan/mvc/api/member/withdraw print(responsesdata2.request.body) # 输出post请求的body:pwd=123456&mobilephone=13417467890 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)

    python3+requests:post请求四种传送正文方式(详解):https://www.cnblogs.com/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请求')
            result=ss.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':
                res=ss.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)
            print(res.request.body)
            return res
    
    # 下面是发送的是post请求:参数是在body里面,body=pwd=123456&mobilephone=13417467890
    # #pt1.1: {'msg': '登录成功', 'data': None, 'status': 1, 'code': '10001'}
    # http://192.168.135.128:9999/futureloan/mvc/api/member/login
    # pwd=123456&mobilephone=13417467890
    
    
    # 下面发送的是get请求:参数是附在url的后面,body为Nome
    # #pt1.2: {'msg': '用户名或密码错误', 'data': None, 'status': 0, 'code': '20111'}
    # http://192.168.135.128:9999/futureloan/mvc/api/member/login?pwd=12345678&mobilephone=13417467890
    # # None
    httprequest.py
  • 相关阅读:
    Blank page instead of the SharePoint Central Administration site
    BizTalk 2010 BAM Configure
    Use ODBA with Visio 2007
    Handling SOAP Exceptions in BizTalk Orchestrations
    BizTalk与WebMethods之间的EDI交换
    Append messages in BizTalk
    FTP protocol commands
    Using Dynamic Maps in BizTalk(From CodeProject)
    Synchronous To Asynchronous Flows Without An Orchestration的简单实现
    WSE3 and "Action for ultimate recipient is required but not present in the message."
  • 原文地址:https://www.cnblogs.com/yhms/p/10305282.html
Copyright © 2011-2022 走看看