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-Workspacepy37-接口自动化day5 estdatas测试用例.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 预期结果