数据分离是把请求URL,和参数等数据从脚本中分离出来 方便维护的方式 整体的思路: 1.先创建一个data.xls的Excel文件存放URL 、预期结果、实际结果 2.再创建一个json文件存放请求的参数 3.分别写一个操作Excel的方法和一个操作json文件的方法 4.然后把两个方法关联起来 5.最后调用关联方法发送请求
首先在data文件下创建一个data.xls文件和json文件
将请求URL和其他信息写入Excel文件中 将请求参数写入json文件中 (json文件中的key值要与Excel中data下的值一样才能找到json中的请求参数)
代码如下:
import os '''对文件进行操作 公共的方法''' def data_dir(data = 'data',fileName = None): ''' 返回文件的位置 :param data: 目录名 :param fileName: 文件名 :return: 返回pn1文件夹下所有目录文件 并使用join合并 ''' return os.path.join(os.path.dirname(os.path.dirname(__file__)),data,fileName)从Excel中读取数据要计算单元格的行和列 比较麻烦还容易弄错 所以把单元格的列起一个变量(别名) 调用的时候只需要知道是多少行就行了
创建一个项目(excel_dara.py:给列起别名、operationExcel操作Excel的方法、operatonjson操作json的方法 )
代码如下:
class ExcelVariable(): caseID = 0 URL = 2 request_data = 3 expect = 4 result = 5 def get_caseID(): return ExcelVariable.caseID def get_URL(): return ExcelVariable.URL def get_request_data(): return ExcelVariable.request_data def get_expect(): return ExcelVariable.expect def get_result(): return ExcelVariable.result def getHeadersValue(): headers = {"User-Agent": "Android/H60-L01/8.1.0/"} return headers然后再操作Excel的时候我们只需要知道哪一行就行了
代码如下:
import xlrd from xlutils.copy import copy from pn1.utils.public import * from pn1.utils.excel_dara import * class OperationExcel(): ''' 操作Excel文件的方法 ''' def getExcel(self): ''' :return: 调用public中的data_dir方法 读取data文件夹下的data.xls文件 ''' db = xlrd.open_workbook(data_dir("data","data.xls")) '''调用Excel第一个sheet 索引为0''' sheet = db.sheet_by_index(0) return sheet def get_rows(self): '''获取行数''' return self.getExcel().nrows def get_row_cel(self,row,cel): ''' :param row: 行数 :param cel: 列数 :return: 获取单元格的内容 ''' return self.getExcel().cell_value(row,cel) def get_URL(self,row): #调用获取URL的方法 return self.get_row_cel(row,get_URL()) def get_request_data(self,row): #调用获取参数的方法 return self.get_row_cel(row,get_request_data()) def get_expect(self,row): #获取期望的结果 return self.get_row_cel(row,get_expect())写操作读取json文件的方法(注意:Excel data列的值要与json的key相同才能读取)
新建一个文件夹 新建一个项目用来写基础方法
代码如下:
import requests from pn1.utils.operationExcel import OperationExcel from pn1.utils.operationjson import Operationjson from pn1.utils.excel_dara import * class Method: def __init__(self): '''将Excel和json进行实例化''' self.opjson=Operationjson() self.excel=OperationExcel() def post(self,row): ''' :param row: 行数 :return:读取exce文件中的url和json文件中的参数 并发送post请求 ''' try: r = requests.post( url=self.excel.get_URL(row=row), data = self.opjson.getRequestsData(row=row), headers=getHeadersValue() ) return r except Exception as e: raise RuntimeError('接口请求发生异常错误')最后一步 新建一个项目 向接口发送请求 代码如下:
import unittest from pn1.base.method import Method class ylmuy(unittest.TestCase): def setUp(self): '''实例化Method类''' self.obj = Method() def test_001(self): '''调用Method的post类方法''' r = self.obj.post(1) print(r.text) def test_002(self): r = self.obj.post1(2) print(r.text) def test_03(self): r=self.obj.post(3) print(r.text) if __name__ == '__main__': unittest.main(verbosity=2)