Python+Requests接口自动化测试框架
来源:互联网 发布:笔记本电脑降温软件 编辑:程序博客网 时间:2024/05/01 00:15
Python+Requests接口自动化测试框架
公司内部的一个接口自动化使用框架(之前的基础上改进)
1.数据准备
-数据插入(容易实现的测试场景下所需外部数据)
-准备sql (接口需要重复使用,参数一定得是变量)2.集成部署(运维相关了解即可)
-平滑升级验证脚本加入自动化
3.自动化框架实现
-调用mysql
-excel遍历测试用例
-requests实现接口调用
-根据接口返回的code值和Excel对比
-报告反馈
-暴露服务
写一个简单登录的接口自动化测试
代码的分层如下图:
一、写一个封装的获取excel表格的模块
代码实现如下:
#!/usr/bin/python#-*- coding: UTF-8 -*-# 基础包:excel的封装import xlrdworkbook = Nonedef openExcel(path): """打开excel""" global workbook if (workbook == None): workbook = xlrd.open_workbook(path, on_demand=True)def getSheet(sheetName): """获取行号""" global workbook return workbook.sheet_by_name(sheetName)def getRows(sheet): """获取行号""" return sheet.nrowsdef getContent(sheet, row, col): """获取表格中内容""" return sheet.cell(row, col).valuedef release(path): """释放excel减少内存""" global workbook workbook.release_resources() del workbook
代码封装后当成模块引用,这还是最开始呢。
二、引用log模块获取日志
准备工作:
需要一个日志的捕获,包括框架和源码抛出的expection。
代码如下:
#!/usr/bin/python# -*- coding: UTF-8 -*-# 基础包:日志服务import loggingimport timedef getLogger():global tezLogPathtry: tezLogPathexcept NameError: tezLogPath = "/data/log/apiTest/"FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'# file = tezLogPath + time.strftime("%Y-%m-%d", time.localtime()) + ".log"# logging.basicConfig(filename=file, level=logging.INFO, format=FORMAT)# 开发阶段为了方便调试,可不输出到文件logging.basicConfig(level=logging.INFO, format=FORMAT)return logging
三、引用requests模块接口测试
准备工作:
需要的请求类型和执行测试的方法。
代码如下:
#!/usr/bin/python##-*- coding: UTF-8 -*-# 基础包:接口测试的封装import requestsimport tezLog as loglogging = log.getLogger()def apiTest(method, url, data ,headers): """ 定义一个请求接口的方法和需要的参数 :Args: method - 企业名称 str url - 用户昵称 str data - 参数 str headers - 请求头信息 dict """ try: if method == "post": results = requests.post(url, data, headers=headers) if method == "get": results = requests.get(url, data, headers=headers) if method == "put": results = requests.put(url, data, headers=headers) if method == "delete": results = requests.delete(url, headers=headers) if method == "patch": results == requests.patch(url, data, headers=headers) if method == "options": results == requests.options(url, headers=headers) response = results.json() code = response.get("code") return code except Exception, e: logging.error("service is error", e)def runTest(sheet): """ 定义一个执行和断言的方法 :Args: sheet - 服务名称 str(excel页脚名称识别的) """ rows = excel.getRows(sheet) fail = 0 for i in range(2, rows): #这里为什么从第二行开始跑,因为会先执行SQL如之前Excel展示的空白位置 testData = excel.getContent(sheet, i, gl.CASE_DATA) testUrl = excel.getContent(sheet, i, gl.CASE_URL) testMethod = excel.getContent(sheet, i, gl.CASE_METHOD) testHeaders = eval(excel.getContent(sheet, i, gl.CASE_HEADERS)) testCode = excel.getContent(sheet, i, gl.CASE_CODE) actualCode = request.apiTest(testMethod, testUrl, testData, testHeaders) expectCode = str(int(testCode)) failResults = ' url: ' + testUrl + ' params: ' + testData + ' actualCode: ' + actualCode + ' expectCode: ' + expectCode if actualCode == expectCode: logging.info("pass") elif actualCode != expectCode: logging.info("fail %s", failResults) fail += 1 if fail > 0 : return False return True
四、关于参数中gl
准备工作:
所有的参数和常量我们会整理到这个文件中,因为设计业务和服务密码、数据库密码这里展示一部分。
代码如下:
#!/usr/bin/python# -*- coding: UTF-8 -*-# 脚本功能:全部变量import timeimport uuidCASE_NUMBER = 0 # 用例编号CASE_NAME = 1 # 用例名称CASE_DATA = 2 # 用例参数CASE_URL = 3 # 用例接口地址CASE_METHOD = 4 # 用例请求类型CASE_CODE = 5 # 用例codeCASE_HEADERS = 6 # 用例headersSQL_ROW = 0 # 预执行SQL的行号SQL_COL = 1 # 预执行SQL的列号
五、写一个run文件,只是用来执行的
代码如下:
#!/usr/bin/python# -*- coding: UTF-8 -*-# 验证包:接口测试脚本import sysimport core.tezLog as logimport function.common as commonlogging = log.getLogger()"""1.外部输入参数"""path = sys.path[0] # 当前路径module = sys.argv[1] # 服务模块名url = sys.argv[2] # 服务地址host = sys.argv[3] # 数据库地址user = sys.argv[4] # 数据库用户名password = sys.argv[5] # 数据库密码db = sys.argv[6] # 数据库名称"""2.根据module获取Sheet"""logging.info("-------------- Execute TestCases ---------------")sheet = common.getExcelSheet(path + "/" + common.filename, module)"""3.数据准备"""logging.info("-------------- Prepare data through MysqlDB --------------")sql = common.getPrepareSql(sheet)common.prepareData(host=host, user=user, password=password, db=db, sql=sql)"""4.执行测试用例"""res = common.runTest(sheet, url)logging.info("-------------- Get the result ------------ %s", res)#这里的res是我们平滑升级的时候需要返回结果为TRUE才会继续下面走。
六、查看测试报告(部署到jenkins会通过控制台查看)
阅读全文
0 0
- Python+Requests接口自动化测试框架
- 基于python+requests+unittest框架接口自动化测试设计开发
- python+requests接口自动化测试框架实例详解教程
- python+requests接口自动化测试框架实例详解教程
- 基于python+requests+unittest框架接口自动化测试设计开发
- Python + Requests + Unittest接口自动化测试
- Jenkins + python(requests)做接口自动化测试
- python+requests接口自动化测试框架实例详解教程(米兔888)
- 基于python+requests+unittest框架接口自动化测试设计开发(简易型)
- python+requests接口自动化测试框架实例详解教程(米兔888)
- python+requests 搭建api自动化测试框架(源码免费下载)
- Python + Requests 实现接口自动化
- Python接口自动化测试框架httpautotest
- python、Jmeter接口自动化框架、支付测试
- python实现接口自动化测试框架
- 接口自动化测试介绍之Requests
- python+requests+excel 接口测试
- python+requests实现接口测试
- iOS枚举值的应用
- HDU1532(最大流Dinic算法模板题)
- 登录界面设计
- 专利权利要求书七步法
- 网易之小易参与了一个记单词的小游戏。游戏开始系统提供了m个不同的单词,小易记忆一段时间之后需要在纸上写出他记住的单词。小易一共写出了n个他能记住的单词, 如果小易写出的单词是在系统提供的,将获得
- Python+Requests接口自动化测试框架
- 【C#】之使用泛型集合管理对象
- CountDownLatch 使用示例
- JavaScript 运行机制详解:再谈Event Loop
- win10+VS2013+caffe1安装、win10+vs2015+ caffe2安装
- 网络安全实验室-基础-4
- hibernate二级缓存的配置
- Codeforces 500B New Year Permutation Floyd算法+贪心
- C#学习笔记(三)—–C#高级特性:dynamic