接口规范
接口测试流程
测试用例的思路和方法
pymysql操作数据库
#导入pymysql
import pymysql
#建立连接
conn = pymysql.connect(host='ip', port=3306,user='账号', password='密码',database='数据库名',arset='utf8')
#获取游标
cursor = conn.cursor()
#执行查询语句
cursor.execute('select version();') #返回受影响行数
#查看查询结果
resp = cursor.fetchall()
resp = cursor.fetchone()
resp = cursor.fetchmany(6)
#关闭游标和连接对象
cursor.close()
conn.close()
#执行dml语句
try:
n = cursor.execute('delete from table where id = '1';')
except Exception as e:
# 有异常,回滚事务
logging.info(e)
conn.rollback()
else:
# 没有异常,提交事务
conn.commit()
finally:
# 关闭游标和连接对象
cursor.close()
conn.close()
读取JSON方法
import json
import logging
def param_data(cls, path):
'''
用于参数化,解析json文件
:param path: json文件路径
:return:返回元组型列表[(),(),...]
'''
with open(path, 'r', encoding='utf-8') as f:
json_data = json.load(f)
json_list = []
for i in json_data:
json_list.append(tuple(i.values()))
return json_list
读取XLSX方法
import json
from openpyxl import load_workbook
def read_xlsx(cls, file_path, sheet_name):
'''
:param file_path: xlsx文件路径
:param sheet_name: xlsx底部的工作表名称
:return: [(),(),(),...]
'''
wb = load_workbook(file_path)
sheet = wb.get_sheet_by_name(sheet_name)
case_data = []
i = 2
while i <= sheet.max_row:
# C表格中【标题】的列名,K表格中【请求参数】的列名,L表格中【状态码】的列名,M表格中【预期结果】的列名
tuple_data = sheet[f'C{i}'].value, json.loads(sheet[f'K{i}'].value), sheet[f'L{i}'].value, json.loads(sheet[f'M{i}'].value)
case_data.append(tuple_data)
i += 1
return case_data
Requests使用
导库
import requests
发送请求
resp = requests.请求方式(url,params=查询参数,data=表单请求体,json=json请求体,headers=请求头,cookies=cookies的信息)
multiply表单的请求方式:
resp = requests.请求方式(url,data=表单请求体,files={'x': 'y'})
响应内容获取
状态码
resp.status_code
查看响应头部字符编码
resp.encoding
请求头信息
resp.headers
cookie信息
resp.cookies
请求url
resp.url
返回内容为网页
resp.text
返回内容为json
resp.json()
字节形式的响应内容
resp.content
resp.content.decode('utf-8')
token机制
token机制
获取token后带入请求头内
headers_data={
'Authorization': token值
}
requests.请求方式(url,json=json请求体,headers=请求头)
Session+cookes机制
方式一:
cookie带入请求内,发送请求后获取cookies
response.cookies
将cookies放入请求参数内
requests.请求方式(url,cookies=cookies信息)
方式二:Session对象发送请求
1.创建Session实例对象
session=requests.Session()
2.多个请求使用session发送
resp = session.post('xxx')
3.关闭session
session.close()
日志初始化配置
日志级别
只显示大于等于设置的级别信息
DEBUG
INFO
WARNING
ERROR
CRITICAL
内部实现原理
创建日志器对象
logger = logging.getLogger()
设置日志打印级别
logger.setLevel(logging.INFO)
创建处理器对象
输出到控制台
st = logging.StreamHandler()
输出到日志文件
fh = logging.handlers.TimedRotatingFileHandler('a.log',when='midnight',interval=1,
backupCount=7,encoding='utf-8')
创建格式化器
fmt = "%(asctime)s %(levelname)s [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s"
给处理器设置格式化器
st.setFormatter(formatter)
fh.setFormatter(formatter)
给日志器添加处理器
logger.addHandler(st)
logger.addHandler(fh)
日志调用
logging.debug('debug')
Dubbo接口测试
概念
RPC协议
Dubbo架构
Dubbo是什么
Dubbo是一款高性能、 轻量级、 基于Java的开源RPC框架
为什么使用Dubbo
开源,使用的人比较多
把核心业务抽离出来,通过内部接口通信,提高业务的灵活性
通过分布式提高并发
telnet调用Dubbo接口
连接服务
telnet IP 端口
查看服务列表
ls
显示指定服务中包含的方法
ls -l 服务名
调用服务接口
invoke 服务名.方法(参数)
Python调用Dubbo接口
创建telnet 实例对象
import telnetlib
telnet = telnetlib.Telnet(host, port)
调用接口
telnet.write('invoke 服务名.方法名(参数列表)'.encode())
读取响应数据
telnet.read_until("dubbo>".encode())
第三方接口测试
接口Mock
定义:
跟开发一样去编写一个接口(虚拟一个接口)
接口Mock测试
使用场景:当针对业务流程进行接口测试时,其中某一个接口无法被获取,为了确保流程能够执行完成,将无法实现的接口进行Mock
项目组常出现无法获取接口的原因:
1. 开发没有完成
2. 第三方接口(测试环境)
会针对Mock的接口,进行专门的单接口测试嘛?
不会
代码实现Mock服务
工具:flask
安装:pip install flas