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)
原文地址:https://www.cnblogs.com/gdq8023/p/14781726.html