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)