• requests的封装


    1 # jmeter/postman等测试工具都可以向后端服务器发起请求,并且可以参数化,可以将用例放在CSV/Excle中,使用Jmeter也可以自动生成聚合报告等都可以做
     2 # 为什么还要用程序向服务端发起请求呢
     3 # 工具不能满足所有场景,发起的请求中处理的逻辑过于复杂,使用Jmeter很难处理,使用程序就非常灵活,可以随心设计
     4 # 工具并不智能,不能做到100%/70%/80%的自动化,还是需要手动执行,手动生成报告,设计逻辑,还要手写。使用程序,完全可以达到80%-90%的自动化,如果做回归测试,使用程序的话,效率会更高,同时程序可以和jekins形成持续集成
     5 # 即使用程序拓展性更好
     6 
     7 
     8 # 使用程序模拟客户端发起请求
     9 import requests
    10 
    11 # 使用测试工具jmeter/postman/fidder等是跳过前端的js/html/css发起的请求,看不到真正的页面,只能看到返回的代码
    12 # 向服务器发起请求:(根据接口文档)
    13 # 1.构造请求URL
    14 url="http://xxxxxx.com/futureloan/mvc/api/member/register"   # 注册接口的url
    15 # 2.构造请求参数
    16 params = {
    17     "mobilephone":"18244446666",
    18     "pwd":"123456",
    19     "regname":"大佬"
    20 }
    21 
    22 # 可通过构建字典修改请求头信息
    23 # 不一定要改请求头,如果User-Agent不规范,请求时可能无法通过,因为它会做反爬虫措施,所以有的需要自己添加合法的请求头,但大多数情况不需要修改
    24 headers = {
    25     "User-Agent":"Mozilla/5.0 wuyanliuse"     #自定义一个User-Agent为wuyanliuse  # 大多数浏览器都是基于Mozilla/5.0协议
    26 }
    27 
    28 
    29 # 3.向服务端发起get请求
    30 # 如果给params传参,那么是以查询字符串参数的形式来传参的
    31 # res = requests.get(url,params=params) # 返回的是一个Response对象,可将它当作是一个响应报文 
    32 res = requests.get(url,params=params, headers=headers)  #url位置参数 params关键字参数 # 将修改的headers传过来 #返回的是一个Response对象,可将它当作是一个响应报文
    33 print(res.status_code) # 获取响应状态码
    34 print(res.text) # 获取响应报文
    35 print(res.json()) # 将响应报文转换为python中的数据类型  #这里只针对于返回的是json格式的响应报文才可使用该方法,否则会报错
    36 print(res.headers) # 获取响应头信息
    37 print(res.headers["Content-Type"]) # 获取响应头中的Content-Type
    38 print(res.request["headers"]) # 获取请求中的请求头信息
    39 print(res.request["method"]) # 获取请求中的请求方法
    40 print(res.cookies) # 获取cookie数据,返回的是RequestsCookieJar[]信息
    1 import requests
     2 
     3 # 向服务器发起请求:(根据接口文档)
     4 # 1.构造请求URL
     5 url="http://xxxxxx.com/futureloan/mvc/api/member/register"   # 注册接口的url
     6 # 2.构造请求参数
     7 params = {
     8     "mobilephone":"18244446668",
     9     "pwd":"123456",
    10     "regname":"大佬"
    11 }
    12 
    13 headers = {
    14     "User-Agent":"Mozilla/5.0 wuyanliuse"
    15 }
    16 
    17 # 3.向服务端发起post请求
    18 # 如果给params传参,那么一定是以查询字符串参数的形式来传参的
    19 res = requests.post(url,params=params, headers=headers)  # 返回的是一个Response对象,可将它当作是一个响应报文
    20 
    21 # 如果给data传参,那么会以x-www-form-urlencoded的形式来传参
    22 res1 = requests.post(url,data=params, headers=headers)
    23 
    24 # 如果给json传参,那么会以json格式的字符串形式来传参
    25 # 这里的params既可以是字典,也可以是json格式的字符串
    26 res2 = requests.post(url,json=params, headers=headers)
    27 
    28 # 所有的参数都转化为字典来传参就不会出错--->params/data/json都可以传;请求头如果构造成字典再进行传参也不容易出错
    1 import json
     2 import requests
     3 
     4 
     5 class HandleRequest:
     6     """
     7     处理请求
     8     """
     9     def __init__(self):
    10         self.one_session = requests.Session()
    11 
    12     def to_request(self,url,method="post",data=None,is_json=False):
    13         # data = '{"name":"等等"}'   # json格式的字符串
    14         data = "{'name':'等等'}"   # 字典类型的字符串
    15         if isinstance(data, str):
    16             try:
    17                 data = json.loads(data)
    18             except Exception as e:
    19                 print("使用日志器来记录日志")
    20                 data = eval(data)  # 使用eval函数对参数转换,避免传的参数是单引号,这样单引号双引号就都不会报错了
    21 
    22         method = method.lower()  # 方法名统一转换为小写
    23         if method == "get":
    24             self.one_session.get(url,params=data)
    25         elif method == "post":
    26             if is_json:  # 如果is_json为True,那么以json格式来传参
    27                 res = self.one_session.post(url, json=data)
    28             else:   # 如果is_json为False,那么以www-form表单形式来传参
    29                 res = self.one_session.post(url, data=data)
    30         else:
    31             res = None
    32             print("不支持【()】其他方法的请求".format(method))   #也可使用日志器进行记录
    33 
    34         def close(self):
    35             self.one_session.close()
    36 
    37 
    38 if __name__ == '__main__':
    39     # 1.构造请求URL
    40     login_url = "http://xxxxx.com/futureloan/mvc/api/member/login"  # 注册接口的url
    41     recharge_url = "http://xxxxx.com/futureloan/mvc/api/member/recharge"
    42     # 2.创建请求参数
    43     login_params = {
    44         "mobilephone": "18244446668",
    45         "pwd": "123456",
    46         "regname": "大佬"
    47     }
    48     recharge_params = {
    49         "mobilephone": "18244446668",
    50         "amount": "50000000"
    51     }
    52 
    53     headers = {
    54         "User-Agent": "Mozilla/5.0 wuyanliuse",
    55     }
    56 
    57 
    58     do_request = HandleRequest() # 创建HandleRequest对象
    59     # 先登录
    60     do_request.to_request(method='post',url=login_url,data=login_params)
    61     # 再充值
    62     do_request.to_request(method='post', url=recharge_url, data=recharge_params)   # 默认以www-form表单形式传参
    63     # 如果是以json格式传参:do_request.to_request(method='post', url=recharge_url, data=recharge_params,is_json=True)
  • 相关阅读:
    《那些年啊,那些事——一个程序员的奋斗史》——95
    更精炼更专注的RTMPClient客户端EasyRTMPClient,满足直播、转发、分析等各种需求libEasyRTMPClient接口调用说明
    RTSP播放器网页web无插件直播流媒体音视频播放器libEasyPlayerRTSP库接口调用说明
    支持Windows/Linux 32&64/ARM各平台的简单高效RTSPClient工具库libEasyRTSPClient库接口调用说明
    支持H.264/G.711/G.726/AAC视频格式RTSP开源推流组件libEasyPusher库接口调用说明
    RTSP播放器网页web无插件直播流媒体音视频播放器libEasyPlayerRTSP库接口调用说明
    简单高效易用Windows/Linux/ARM/Android/iOS全平台实现RTMP推送组件EasyRTMP如何通过海康的SDK获取视频流推送到RTMP流媒体服务器
    支持8K播放且低延时高并发全功能的流媒体播放器EasyPlayerPro如何播放H.265视频?
    支持H.264/G.711/G.726/AAC视频格式RTSP开源推流组件EasyPusherWin推送到EasyDarwin服务器失败问题解决
    NVR录像机RTSP协议实时流转RTMP协议直播流推送方案EasyRTMPLive运行报0xc000007b错误的原因解析
  • 原文地址:https://www.cnblogs.com/gdq8023/p/14781726.html
Copyright © 2020-2023  润新知