接口自动化框架项目实战

本文档详述了一个接口自动化框架的实战项目,包括common模块下用于断言、数据库操作、请求处理和YAML解析的工具类,以及testcases目录中的测试用例设置和执行。利用pytest框架,结合conftest.py配置,实现测试脚本(test_login.py)和测试数据(test_login.yaml)的组织,通过pytest.ini配置项目参数,并依赖requirements.txt中列出的库,最后通过run.py启动测试执行。
摘要由CSDN通过智能技术生成

目录

common

assert_util.py

database_util.py

request_util.py

yaml_util.py

testcases

conftest.py

test_login.py

test_login.yaml

pytest.ini

requirements.txt

run.py


common

assert_util.py

import jsonpath
from common import database_util
import pymysql
import logging

logger = logging.getLogger(__name__)


def assert_result(expect_result, actual_result):
    for k, v in expect_result.items():
        # 状态断言
        if k == 'code':
            assert_code(v, actual_result.status_code)
        # 相等断言
        elif k == "equal":
            assert_equal(v, actual_result.json())
        # 包含断言
        elif k == "contain":
            assert_contain(v, actual_result.text)
        # 数据库断言
        elif k == "database":
            assert_database(v["expect_query_result"], v["sql"])
        else:
            print("不支持的断言方式")


def assert_code(expect, actual):
    if actual != expect:
        raise_assert_error("状态断言异常:预期{},实际{}".format(expect, actual))


def assert_equal(expect, actual):
    for k, v in expect.items():
        list_result = jsonpath.jsonpath(actual, f"$..{k}")
        if list_result:
            if v not in list_result:
                raise_assert_error("相等断言异常:{}预期{},实际{}".format(k, v, *list_result))
        else:
            raise_assert_error("相等断言异常:{}预期{},实际{}".format(k, v, "未找到该字段"))


def assert_contain(expect, actual):
    if str(expect) not in actual:
        raise_assert_error(f"包含断言异常:预期包含{expect},实际未包含")


def assert_database(expect_query_result, sql):
    try:
        select_result = database_util.link_database(sql=sql)
    except pymysql.err.ProgrammingError:
        raise_assert_error("sql语法有误!")
    else:
        if select_result:
            if expect_query_result not in select_result[0]:
                raise_assert_error("数据库断言异常:sql预期{},实际{}".format(expect_query_result, select_result))
        else:
            raise_assert_error("数据库断言异常:sql结果查询为空")


def raise_assert_error(msg):
    logger.error(msg)
    logger.info("----------测试用例请求结束-----------\n")
    raise AssertionError(msg)

database_util.py

import pymysql


def link_database(user="root",
                  password="123",
                  host="127.0.0.1",
                  port=3306,
                  sql=""):
    conn = pymysql.connect(
        user=user,
        password=password,
        host=host,
        port=port,
        autocommit=True
    )
    cursor = conn.cursor()
    cursor.execute(sql)
    result = cursor.fetchall()
    cursor.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值