函数编程08--发布会接口测试
测试发布会接口
复制project_h1生成project_h2
1)准备sign.txt存放sql语句
INSERT INTO sign_event(name,limit,address,start_time) VALUES('接口自动化测试发布会',5,'北京亚运村','2021-11-21 15:25:19');
2)更改entry入口指定发布会服务器
3)注意参数的编号
import configparser, os
def entry():
"""
读入口函数:entry()
:return: 返回值是一个元组(被测接口服务器名,数据库服务器名)
"""
try:
conf = configparser.ConfigParser() # 创建对象
conf.read('entry.ini', encoding='utf-8') # 读取文件
which_server = conf.get('entry', 'which_server') # 读取被测服务器名
which_db = conf.get('entry', 'which_db') # 读取数据库服务器名
print('本次测试的接口服务器是' + which_server + ',数据库服务器是' + which_db)
return which_server,which_db
except Exception as e:
print('读取入口配置文件entry.ini失败' + e)
# 调试
# entry()
def server_info(): #
"""
读接口服务器信息:包括IP,端口号,组装成http://ip:端口的形式
:return:返回接口地址
"""
try:
which_server = entry()[0] # 获得被测接口服务器名
# 读server.conf中的which_server节点,获得IP、Port
conf = configparser.ConfigParser()
# conf对象中read方法,读取server.conf文件,字符编码设置为utf-8
conf.read('server.conf', encoding='utf-8')
# 根据exam节点获取键名IP所对应的值,赋值给ip变量
ip = conf.get(which_server, 'IP')
port = conf.get(which_server, 'port')
host = 'http://' + ip + ':' + port
print('接口服务器的地址==' + host)
return host
except Exception as e: # Exception是一个关键字,表示所有的异常,e是别名
print('接口服务器地址[server.conf]获取失败' + e)
# 调试
# server_info()
def db_info(): # 读db.conf,获得数据库服务器的信息
try: # 异常处理
which_db = entry()[1] # 获得被测数据库服务器名
conf = configparser.ConfigParser()
conf.read('db.conf', encoding='utf-8')
host = conf.get(which_db, 'host')
port = conf.get(which_db, 'port')
user = conf.get(which_db, 'user')
password = conf.get(which_db, 'password')
db = conf.get(which_db, 'db')
dbinfo = {'host': host, 'port': int(port), "user": user, 'password': password, 'db': db}
print('数据库信息==' + str(dbinfo))
return dbinfo
except Exception as e:
print('数据库配置文件[db.conf]读取出错' + e)
# 调试
# db_info()
def read_sqls(sqlfiles=[]): # 读指定sql命令文件的函数,读取到的sql命令存入列表返回;如果没有给实参,则读所有txt中的sql命令
try:
if len(sqlfiles) == 0: # 表示没有给实参,则读取所有sql文件
sqlfiles = [file for file in os.listdir('.') if file.endswith('.txt')] # 所有txt文件名存入sqlfiles列表
sqls = [] # 存sql语句的列表
for file in sqlfiles:
sqlfile = open(file, 'r', encoding='utf-8') # 打开一个文件
for row in sqlfile: # row表示文件中每一行
# 如果这行字符长度大于0 并且 不是以--开头的
if len(row.strip()) > 0 and not row.startswith('--'):
sqls.append(row.strip()) # sql语句中的回车不存入列表
print('读取初始化sql语句成功==' + str(sqlfiles))
print(sqls)
return sqls
except Exception as e:
print('读取初始化sql语句出错' + e)
# 调试
# read_sqls()
import pymysql
def conn_db(): # 连接数据库的函数
try:
dbinfo = db_info() # 数据库信息,存入dbinfo字典
conn = pymysql.connect(**dbinfo) # 连接数据库
print('连接数据库成功')
return conn
except Exception as e:
print('数据库连接出错' + e)
# 调试
# conn_db()
def init_db(sqlfiles=[]): # 执行指定sql文件中的命令
try:
sqls = read_sqls(sqlfiles) # 读取所有需要执行的sql命令
conn = conn_db() # 连接数据库
cursor = conn.cursor() # 创建游标
for sql in sqls:
cursor.execute(sql) # 执行sql语句
conn.commit() # 提交数据到数据库
conn.close()
print('初始化数据库成功')
except Exception as e:
print('初始化数据库出错')
# 调试
# init_db()
import pandas
def read_cases(excel, columns=[]): # 读取excel用例中的指定列
try:
if len(columns) == 0:
file = pandas.read_excel(excel) # 读取所有列
else:
file = pandas.read_excel(excel, usecols=columns) # 读取指定列
data = file.values.tolist() # 文件数据转为列表
print('读取用例文件' + excel + '成功')
return data
except Exception as e:
print('读取测试用例文件出错')
# 调试
# read_cases('login.xlsx')
def check_db(case_name, expectsql, dbexpect): # 落库检查
# case_name 用例名称、expectsql sql预期语句、dbexpect 数据库预期结果
conn = conn_db() # 连接数据库
try:
cursor = conn.cursor() # 创建游标
cursor.execute(expectsql) # 执行sql语句
dbactual = cursor.fetchone()[0] # 取第一行第一列数据
if dbactual == dbexpect:
print(case_name + '==落库检查==通过')
else:
print(case_name + '==落库检查==失败==预期行数:' + str(dbexpect) + ',实际行数:' + str(dbactual))
except Exception as e:
print('落库检查出错' + e)
# 调试
# check_db('数据库行数', 'select count(*) from user', 3)
import requests
# 体验 : 测试一下查询发布会接口
# 初始化数据库
init_db(['sign.txt'])
# 接口服务器地址:entry文件进行修改 sign
host = server_info()
address = host + '/sign/get_event_list/'
# 读测试数据
argument = {'eid': 3}
res = requests.get(address, argument)
print(res.json())
本文来自博客园,作者:暄总-tester,转载请注明原文链接:https://www.cnblogs.com/sean-test/p/15519476.html

浙公网安备 33010602011771号