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)
- 注意引入包的层级关系!
- 结果详情如下: