1 # 接口的框架开始搭建:
2 1、首页对框架进行分层设计:
3 拓展知识点:可以用.py文件:或者写在yaml文件下:注释引导说明是怎么用的;干什么的
4 1.1、比如公用的 common层
5 2、测试用例的脚本:testcase
6 3、测试数据的存放:testdatas
7 引入main.py输出allure测试报告
8 1、对于excle里面的数据怎么读取出来的使用的什么方法?用的什么库?
9 安装 :pip install openpyxl
10 row 代表行
11 column 列
12 from openpyxl import load_workbook
13
14 # excel的文件路径
15 excel_path = r"D:\Pychram-Workspace\py37-接口自动化\day5\testdatas\测试用例.xlsx"
16
17 # 1、加载一个excel,得到工作薄 Workbook
18 wb = load_workbook(excel_path)
19
20 # 2、选择一个表单- 通过表单名 Sheet
21 sh = wb["注册接口"]
22
23 # 3、在选择的表单当中,读取某个单元格的数据、修改/写入数据到某个单元格 Cell
24 # 行号和列号都是从1开始
25 # 读取
26 cell_value = sh.cell(2, 3).value # 读取
27 print(cell_value)
28
29 # 得到当前sheet的总行号,总列号
30 row_nums = sh.max_row
31 col_nums = sh.max_column
32
33 # 只读取第一行(作为key)
34 # 行号是1 通过代码自动得到列号
35 # keys = []
36 # for col_index in range(1, sh.max_column + 1):
37 # keys.append(sh.cell(1, col_index).value)
38 # print(keys)
39
40 # # 遍历行号,取第一行
41 # for row_index in range(2, sh.max_row + 1):
42 # values = []
43 # # 在每一行里面,从第1列开始,获取所有列的值
44 # for col_index in range(1, sh.max_column + 1):
45 # values.append(sh.cell(row_index, col_index).value)
46 # # keys和values打包 - zip函数
47 # case = dict(zip(keys, values))
48 # print(case)
49
50 # 方式二 -
51 data = list(sh.values)
52 print(data)
53 keys = data[0] # 获取所有的列名
54 all_data = []
55 for row in data[1:]:
56 row_dict = dict(zip(keys,row))
57 all_data.append(row_dict)
58
59
60 # # 列表推导式 列表名 = [值 表达式]
61 # keys = [sh.cell(1, col_index).value for col_index in range(1, sh.max_column + 1)]
62
63
64 # # 读取所有行
65 # for row in sh.rows:
66 # # print(row)
67 # for item in row:
68 # print(item.value, end=" ")
69 # print()
70
71 # # 给某个单元格写入值
72 # sh.cell(2, 3).value = "get"
73 #
74 # # 一旦做了修改,就要保存
75 # # filename如果不是打开的excel文件,那就是另存为
76 # # 如果是打开的excel文件,保存到原文件中
77 # # 保存的时候,要保证没有其它程序在使用当前文件。否则会报Permission Error
78 # wb.save(excel_path)
79 2、zip函数的用法
80 a = ["class", "teacher", "student"]
81 b = ["py37", "xj", "many", "hello"]
82 c = [1, 2, 3]
83
84 res = dict(zip(a,b))
85 print(res)
86
87 res = list(zip(a,b,c))
88 print(res)
89 3、json格式与字典的区别?
90 import json
91 """
92 python: None
93 java/javascript: null(python不认识。如果响应结果当中有null, 需要转换成None)
94
95 字典:数据类型。
96 json: 数据格式。 json格式的字符串
97
98 内置库:json
99 json.loads() 把json串,转换成python字典
100 json.dumps() 把python字典,转换成json串
101
102 关于requests处理json参数的文章:
103 https://www.cnblogs.com/Simple-Small/p/9830270.html
104
105 """
106
107 req_data = '{"mobile_phone": "18610100022","pwd": "123456789","reg_name": "py37小简", "test": null}'
108 req_dict = json.loads(req_data)
109 print(type(req_dict))
110 print(req_dict)
111 # req_dict_eval = eval(req_data) # eval无法自动处理null
112 # my_excle.py
113 from openpyxl import load_workbook
114
115 class MyExcel:
116
117 def __init__(self, excel_path, sheet_name):
118 # 1、加载一个excel,得到工作薄 Workbook
119 wb = load_workbook(excel_path)
120 # 2、选择一个表单- 通过表单名 Sheet
121 self.sh = wb[sheet_name]
122
123 def read_data(self):
124 # 注意:接口的请求数据,读取出来是字符串。
125 # 存储表单下读取到的所有数据 - 每一个成员都是一个字典
126 all_data = []
127 data = list(self.sh.values)
128 keys = data[0] # 获取所有的列名
129 for row in data[1:]:
130 row_dict = dict(zip(keys, row))
131 all_data.append(row_dict)
132 return all_data
133
134 if __name__ == '__main__':
135 # excel的文件路径
136 excel_path = r"/Users/zhangping/PycharmProjects/py_37/Py_Api接口自动化/class_api05/testdatas/测试用例.xlsx"
137 me = MyExcel(excel_path, "注册接口")
138 cases = me.read_data()
139 for case in cases:
140 print(case)
141 # my_requests.py
142
143 # test_register
144 import pytest
145 import json
146
147 from py_37.Py_Api接口自动化.class_api05.common.my_requests import MyRequests
148 from py_37.Py_Api接口自动化.class_api05.common.my_excel import MyExcel
149
150
151 # 第一步:读取注册接口的测试数据 - 是个列表,列表中的每个成员,都是一个接口用例的数据。
152 excel_path = r"/Users/zhangping/PycharmProjects/py_37/Py_Api接口自动化/class_api05/testdatas/测试用例.xlsx"
153 me = MyExcel(excel_path, "注册接口")
154 cases = me.read_data()
155
156 # 第二步:遍历测试数据,每一组数据,发起一个http的接口
157 # 实例化请求对象
158 mq = MyRequests()
159
160 class TestRegister:
161
162 @pytest.mark.parametrize("case", cases)
163 def test_regiser(self,case):
164 # 把json格式的字符串,转换成一个字典
165 req_dict = json.loads(case["req_data"])
166 resp = mq.send_requests(case["method"], case["url"], req_dict)
167 print(resp.json())
168 testdatas
169 excle 测试用例
170 用例格式规范
171 id编号: title标题 :method 方法 url (请求地址) req_data(参数) expected 预期结果