函数编程07--函数模型

conn_db()

    功能:连接数据库
    返回值:数据库连接对象
    说明:调用db_info()函数,获得连接数据库的参数字典

project_h1目录中test.py运用conn_db()函数连接数据库

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()

init_db(sqlfiles)

    功能:执行初始化sql语句
    参数:sql文件名列表
    用于指定执行哪些初始化sql文件中的命令
    返回值:无
    说明:调用read_sqls(sqlfiles)函数,获得要执行的sql语句列表
        在代码中查看受影响行数

project_h1目录中test.py运用init_db(sqlfiles)函数执行初始化sql语句

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()

read_cases(casefile,columns)#casefile 指定文件,columns指定列

    功能:读取Excel案例数据到列表
    参数:excel文件名、excel列名列表(参数可选,省略读所有列)
    返回值:数据列表

project_h1目录中test.py

创建login.xlsx存放登录测试用例
目的:运用read_cases(casefile,columns)函数读取Excel案例数据到列表
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')

login.xlsx

case_name data expect
测试登陆成功 登录成功
测试用户名为空 用户名或密码为空
测试密码为空 用户名或密码为空
测试用户名和密码为空 用户名或密码为空
测试用户名错误 用户名或密码错误
测试密码错误 用户名或密码错误
测试用户密码都错误 用户名或密码错误

check_db(case_name, expectsql, dbexpect)

    功能:验证增、删、改数据库的结果是否正确
    参数:用例名称、预期sql语句、数据库预期结果
        实际测试时,来源于Excel用例
    返回值:无
    说明:连接数据库、执行sql语句获得实际结果、关闭连接、数据比对

project_h1目录中test.py创建check_db()函数

目的:运用check_db(case_name, expectsql, dbexpect)函数验证增、删、改数据库的结果是否正确
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)

准备login.sql

--登陆接口:test01
delete from user where username = 'test01';

insert into user(id,username,password) values(2,'test01','123456')

测试登录接口函数test_login()

    功能:初始化数据库、读用例文件、获得被测接口地址、发送请求、判断结果正确性

project_h1目录中test.py创建test_login()函数

目的:运用test_login()函数测试登录接口
import requests
def test_login():  # 测试登录接口的函数
    # 数据库初始化
    init_db(['login.txt'])
    # 读测试用例数据
    cases = read_cases('login.xlsx')  # 用例:用例名0、参数数据1、预期结果2
    # 读接口服务器地址
    host = server_info()
    address = host + '/exam/login/'
    try:
        # 发送请求
        for case in cases:  # case代表一行用例
            case_name = case[0]  # 第0列,是用例名称
            argument = eval(case[1])  # 要发送的参数
            expect = case[2]  # 预期接口的返回结果
            res = requests.post(url = address, data=argument)
            actual = res.text
            # 结果比对
            if expect in actual:
                print('比对接口返回==' + case_name + '==通过')
            else:
                print('比对接口返回==' + case_name + '==失败==预期结果:' + expect + ',实际结果:' + actual)
    except Exception as e:
        print('登录接口测试出错'+e)
# 调试
test_login()

测试注册接口函数

    test_signup()
    功能:初始化数据库、读用例文件、获得被测接口地址、发送请求、判断响应结果正确性、落库检查

准备signup.sql文件

-- 注册接口:test02、test03
delete from user where username = 'test02'

delete from user where username = 'test03'

insert into user(id,username,password) values(3,'test03','123456')
def test_signup():
    # 数据库初始化
    init_db(['signup.txt'])
    # 读测试用例
    cases = read_cases('signup.xlsx')
    # 接口地址
    host = server_info()
    address = host + '/exam/signup/'
    try:
        # 发送请求
        for case in cases:
            case_name = case[0]  # 用例名称
            argument = eval(case[1])  # 参数
            expect = eval(case[2])  # 预期接口返回结果
            sql = case[3]  # 预期sql
            dbexpect = case[4]  # 预期数据库行数
            # 发送请求
            res = requests.post(url=address, data=argument)
            actual = res.json()  # 实际结果(字典)
            # 比对接口返回结果
            if expect == actual:
                print("比对接口返回==" + case_name + '==通过')
            else:
                print('比对接口返回==' + case_name + '==失败==预期结果:' + str(expect) + ',实际结果:' + str(actual))
            # 落库检查
            conn = conn_db()
            cursor = conn.cursor()
            cursor.execute(sql)
            dbactual = cursor.fetchone()[0]
            if dbexpect == dbactual:
                print('落库检查==' + case_name + '==通过')
            else:
                print('落库检查==' + case_name + '==失败==预期行数:' + str(dbexpect) + "实际行数:" + str(dbactual))
            conn.close()
    except Exception as e:
        print('注册接口测试出错'+e)
# 调试
test_signup()

signup.xlsx

case_name data expect expect_sql expect_db_rows
软件注册成功 select count(*) from user where username='test02' 1
测试用户名被占用 select count(*) from user where username='test03' 1
测试两个密码不一致 select count(*) from user where username='test04' 0
测试用户名为空 select count(*) from user where username='' 0
测试密码为空 select count(*) from user where username='test05' 0
测试确认密码为空 select count(*) from user where username='test06' 0
测试用户名密码确认密码均为空 select count(*) from user where username='' 0
posted @ 2021-11-07 11:33  暄总-tester  阅读(93)  评论(0)    收藏  举报