【Pytest】将用例运行结果存储到数据库,以sqllite为例

1. 运行结果存储数据库方法的封装

其中具体操作数据库方法,请查看文章:【sqlite】python操作sqlite3(含测试)

from datetime import datetime
from com.connect_sqllite import DBlite
"""
此方法封装,将用例运行结果进行数据库存储的调用,可以放到公共类,或者公共方法中
"""

# 将pytest运行结果存储到sqllite数据库
def result_insert_sqllite(terminalreporter, status):
    """
    :param terminalreporter:
    :param status: 用例运行结果,passed,failed,skipped
    """
    # 遍历所有测试结果
    for test in terminalreporter.stats.get(status, []):
        list_name = test.nodeid.split("::")
        # 先去查询一下,如果没有就插入.有更新
        sql_query = "select count(1) from pytest_result where def_name=?"
        arg = (list_name[2].split('[')[0],)
        query_result = DBlite().select(sql_query, arg)
        if status == "passed":
            test.longrepr == ''
        if query_result[0][0] == 0:
            sql = "insert into pytest_result(file_name, class_name, def_name, result, duration, message) values (?,?,?,?,?,?)"
            arg = (list_name[0], list_name[1], list_name[2].split('[')[0], status, test.duration, str(test.longrepr))
            DBlite().change(sql, arg)
        else:
            current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            sql = "UPDATE pytest_result SET result = ?, duration = ?, message = ?, result_time=? WHERE def_name = ?"
            arg = (status, test.duration, str(test.longrepr), current_time, list_name[2].split('[')[0])
            DBlite().change(sql, arg)

2. 在全局conftest.py中添加钩子函数

钩子函数去调用,公共类方法中的result_insert_sqllite就可以

from com.common import read_yml, request_post, result_insert_sqllite

@pytest.hookimpl(tryfirst=True)
def pytest_terminal_summary(terminalreporter):
    status_all = ["passed", "failed", "skipped"]
    for status in status_all:
        result_insert_sqllite(terminalreporter, status)
  • 注意引入包的层级关系!
  • 结果详情如下:在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值