api4excel - 接口自动化测试excel篇
Posted peter200-ok
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了api4excel - 接口自动化测试excel篇相关的知识,希望对你有一定的参考价值。
api4excel - 接口自动化测试excel篇
工作原理: 测试用例在excel上编辑,使用第三方库xlrd,读取表格sheet和内容,sheetName对应模块名,Jenkins集成服务发现服务moduleName查找对应表单,运用第三方库requests请求接口,根据结果和期望值进行断言,根据输出报告判断接口测试是否通过。
1. 数据准备
- 数据插入(容易实现的测试场景下所需外部数据)
- 准备sql (接口需要重复使用,参数一定得是变量)
2.集成部署(运维相关了解即可)
- 平滑升级验证脚本加入自动化
3.自动化框架实现
- 调用mysql
- excel遍历测试用例
- requests实现接口调用
- 根据接口返回的code值和Excel对比
- 报告反馈
- 暴露服务
写一个简单登录的接口自动化测试
代码的分层如下图:
一、写一个封装的获取excel表格的模块
代码实现如下:
# !/usr/bin/python
# -*- coding: UTF-8 -*-
# author: 赫本z
# 基础包: excel的封装
import xlrd
workbook = None
def open_excel(path):
"""
打开excel
:param path: 打开excel文件的位置
"""
global workbook
if (workbook == None):
workbook = xlrd.open_workbook(path, on_demand=True)
def get_sheet(sheetName):
"""
获取页名
:param sheetName: 页名
:return: workbook
"""
global workbook
return workbook.sheet_by_name(sheetName)
def get_rows(sheet):
"""
获取行号
:param sheet: sheet
:return: 行数
"""
return sheet.nrows
def get_content(sheet, row, col):
"""
获取表格中内容
:param sheet: sheet
:param row: 行
:param col: 列
:return:
"""
return sheet.cell(row, col).value
def release(path):
"""释放excel减少内存"""
global workbook
workbook.release_resources()
del workbook
# todo:没有验证是否可用
代码封装后当成模块引用,这还是最开始呢。
二、引用log模块获取日志
准备工作: 需要一个日志的捕获,包括框架和源码抛出的expection。 代码如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# author: 赫本z
# 基础包: 日志服务
import logging
def get_logger():
global logPath
try:
logPath
except NameError:
logPath = ""
FORMAT = ‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘
logging.basicConfig(level=logging.INFO, format=FORMAT)
return logging
三、引用requests模块接口测试
准备工作: 需要的请求类型和执行测试的方法。 代码如下:
#!/usr/bin/python
#-*- coding: UTF-8 -*-
# 基础包:接口测试的封装
import requests
import core.log as log
import json
logging = log.get_logger()
def change_type(value):
"""
对dict类型进行中文识别
:param value: 传的数据值
:return: 转码后的值
"""
try:
if isinstance(eval(value), str):
return value
if isinstance(eval(value), dict):
result = eval(json.dumps(value))
return result
except Exception, e:
logging.error("类型问题 %s", e)
def api(method, url, data ,headers):
"""
自定义一个接口测试的方法
:param method: 请求类型
:param url: 地址
:param data: 数据
:param headers: 请求头
:return: code码
"""
global results
try:
if method == ("post" or "POST"):
results = requests.post(url, data, headers=headers)
if method == ("get" or "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 content(method, url, data, headers):
"""
请求response自己可以自定义检查结果
:param method: 请求类型
:param url: 请求地址
:param data: 请求参数
:param headers: 请求headers
:return: message信息
"""
global results
try:
if method == ("post" or "POST"):
results = requests.post(url, data, headers=headers)
if method == ("get" or "GET"):
results = requests.get(url, data, headers=headers)
if method == ("put" or