pytest断言

#database_util.py


import pymysql

# 创建数据库连接
def database_connect():
    conn = pymysql.connect(
        user="root",
        password="root",
        host="localhost",
        database="world",
        port=3306
    )
    return conn

# 执行sql语句
def execute_sql(sql):
    # 创建游标
    conn = database_connect()
    cs = conn.cursor()
    # 执行sql
    cs.execute(sql)
    # 提取执行之后的值
    value = cs.fetchall()
    #关闭连接
    cs.close()
    conn.close()
    return value
#assert_util.py


import jsonpath

from commons.database_util import execute_sql


def assert_validate(validate,res):
    for key, value in validate.items():
        if key == "codes":
            assert_codes(value,res.status_code)
        elif key == "equals":
            assert_equals(value,res.json())
        elif key == "contains":
            assert_contains(value,res.text)
        elif key == "databases":
            db_contains(value,res.json())
        else:
            raise_assert_error("不支持的断言方式")

def raise_assert_error(msg):
    raise AssertionError(msg)

# 状态码断言
def assert_codes(expected_value, actual_value):
    if expected_value != actual_value:
        raise_assert_error("codes断言失败:预期结果为"+str(expected_value)+",实际结果为"+str(actual_value)+"")

# equals断言
def assert_equals(expected_value, actual_value):
    for key,value in expected_value.items():
        value_list = jsonpath.jsonpath(actual_value,"$..%s"%key)
        if value_list:
            if value not in value_list:
                raise_assert_error("equals断言失败:实际结果中"+str(key)+"不等于"+str(value)+"")
        else:
            raise_assert_error("equals断言失败:实际结果中不包含"+str(key)+"")


# contains断言
def assert_contains(expected_value, actual_value):
    if str(expected_value) not in actual_value:
        raise_assert_error("contains断言失败:实际结果不包含"+str(expected_value)+"")

# databases断言(不够完善,问题在于value_list和sql_result都是多个值的情况下无法进行断言,此处都假定查出来的为1个值)
def db_contains(expected_value, actual_value):
    for key,sql in expected_value.items():
        value_list = jsonpath.jsonpath(actual_value,"$..%s"%key)
        print(value_list)
        if value_list:
            try:
                sql_result = execute_sql(sql)
            except:
                raise_assert_error("databases断言失败:SQL查询异常,请检查SQL语句")
            else:
                if len(sql_result) == 0:
                    raise_assert_error("databases断言失败:SQL未查询到任何结果")
                else:
                    #print(value_list[0])
                    #print(sql_result)    # 数据库查询出来的是一个嵌套元组
                    if str(value_list[0]) not in str(sql_result[0][0]):
                        raise_assert_error("databases断言失败:预期结果"+str(sql_result[0][0])+",实际结果"+str(value_list[0])+"")
        else:
            raise_assert_error("databases断言失败:实际结果中不包含" + str(key) + "")

# yaml

-
  story: 登录接口
  title: 验证登录成功用例
  request:
    method: post
    url: "?s=user/login"
    params:
      application: app
      application_type: h5
    data:
      accounts: "xxxxx"
      pwd: "xxxxx"
      type: "xxxxxx"
  extract:
    token: '"token":"(.*?)"'
  validate:
    codes: 200
    equals: {msg: 登录成功}
    contains: data
    databases: {code: "select IndepYear from country where Name = 'America'"}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值