1 # 首先根据接口的请求:确认使用requests库
2 终端下安装:pip install requests
3 # 对于零散的代码进行类的封装: my_requests.py
4 import requests
5
6
7 class MyRequests:
8
9 # 初始化方法
10 def __init__(self):
11 # 请求头
12 self.headers = {"X-Lemonban-Media-Type": "lemonban.v2"}
13
14 # 属性
15 # 方法 post/put.. json=XXX , get.. params=XXX
16 def send_requests(self,method,url, data,token=None):
17 # 处理请求头
18 self.__deal_header(token)
19 # 调用requests的方法去发起一个请求。并得到响应结果
20 if method.upper() == "GET":
21 resp = requests.request(method, url, params=data, headers=self.headers)
22 else:
23 resp = requests.request(method, url, json=data, headers=self.headers)
24 return resp
25
26 def __deal_header(self,token=None):
27 if token:
28 self.headers["Authorization"] = "Bearer {}".format(token)
29
30 if __name__ == '__main__':
31 mr = MyRequests()
32 url = "http://api.lemonban.com/futureloan/member/register"
33 req_data = {
34 "mobile_phone": "18610100022",
35 "pwd": "123456789",
36 "reg_name": "py37小简"
37 }
38 method = "post"
39 resp = mr.send_requests(method,url,req_data)
40 print(resp.json())
41
42 # url地址
43 url = "http://api.lemonban.com/futureloan/member/login"
44 # 请求类型:post
45
46 # 请求体
47 req_data = {
48 "mobile_phone": "18610100020",
49 "pwd": "123456789"
50 }
51 method = "post"
52 resp = mr.send_requests(method,url, req_data)
53 print(resp.json())
54
55 # 提取出来,给到下一接口去作为请求
56 json_res = resp.json()
57 token = json_res["data"]["token_info"]["token"]
58 member_id = json_res["data"]["id"]
59
60 url = "http://api.lemonban.com/futureloan/member/recharge"
61 # 请求数据
62 req_data = {
63 "member_id": member_id,
64 "amount": 1000
65 }
66 method = "post"
67 resp = mr.send_requests(method,url, req_data,token=token)
68 print(resp.josn())
69 # 数据驱动应用
70 DDT Data driven test
71 python 有一个第三方库:ddt 用在unittest框架上
72 @ddt
73 pytest测试框架:本身就有驱动的实现 @pytest.markparametrized(...)
74 使用场景:有很多组数据,走的同一个流程
75 1、你的流程是什么?
76 2、你有多少组数据
77 # 案例: test_ddt.py
78 from py_37.Py_Api接口自动化.class_api04.my_requests import MyRequests
79 import pytest
80
81
82 datas = [
83 {"method": "post" ,
84 "url": "http://api.lemonban.com/futureloan/member/register",
85 "req_data": {"mobile_phone": "18610100022","pwd": "123456789","reg_name": "py37小简"}},
86 {"method": "post",
87 "url": "http://api.lemonban.com/futureloan/member/login",
88 "req_data":{"mobile_phone": "18610100022","pwd": "123456789"}},
89 {"method": "post",
90 "url": "http://api.lemonban.com/futureloan/member/recharge",
91 "req_data": {"member_id": None,"amount": 1000}}
92 ]
93
94
95 mr = MyRequests()
96
97 # 一组就是一条用例
98 # 某一组即便运行失败了,下一组仍然会运行。
99 @pytest.mark.parametrize("item", datas)
100 def test_api1(item):
101 resp = mr.send_requests(item["method"], item["url"], item["req_data"])
102 print(resp.json())
103 assert True # 运行通过 False 运行失败
104
105
106 # def test_api1():
107 # for item in datas:
108 # resp = mr.send_requests(item["method"], item["url"], item["req_data"])
109 # print(resp.json())
110 # assert False
111
112
113
114 # def test_ap2():
115 # resp = mr.send_requests(datas[1]["method"], datas[1]["url"], datas[1]["req_data"])
116 # print(resp.json())
117 #
118 # def test_api3():
119 # resp = mr.send_requests(datas[2]["method"], datas[2]["url"], datas[2]["req_data"])
120
121 # 接口数据的存储
122 1、excle表格-配置json路径
123 2、json文件 -请求参数比较多,写在josn文件里面
124 3、yaml文件 -httprunner3.0
125 4、数据库 -创建表格
126 # 根据业务的核心走 -用户使用率最高的地方
127 2、用例的优先级 - 常用的功能场景/必填参数
128 3、参数的格式有效性 -后端没有做校验的情况
129 4、正常用例先设计,异常用例设计(全面覆盖)
130 正式设计用例的时候;节后postman/jmeter这样的接口测试工具调试接口
131 设计不同的测试数据,发起请求,查看响应结果与设计是否一致
132 需要手工测试验证通过 ---在一定稳定的基础上;在介入接口自动化测试(用于回归测试)
133 迭代的价值 --自动执行
134 用例设计上花的时间(某个接口)
135 首先是否了解接口的业务,系统的业务。接口时候有规范的文档,需要考虑
136 接口的熟悉程度有多少?接口是否复杂,接口涉及的业务是否复杂 -梳理逻辑/前置准备工作多吗?参数的组合多不多?
137 建议先看下自己项目的接口,去设计接口测试用例
138 接口也是一个孰能生巧的过程
139 自动化覆盖怎么样?怎么回答?
140 覆盖率:功能上/手工测试用例覆盖率 30-90%之间
141 1、项目上做了多久的接口自动化?
142 2、系统有多大,业务是否复杂 --结合项目业务来描述?
143 3、接口用例设计有多少条?怎么维护的?
144 #用例覆盖的的时候,遇到什么困难,以及解决方法?
145 举例说明你在业务上遇到的困难及时处理方法?
146 接口自动化的框架搭建过吗?是你自己搭建的吗?怎么搭建的呢?