函数编程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())
posted @ 2021-11-07 12:29  暄总-tester  阅读(78)  评论(0)    收藏  举报