You need to enable JavaScript to run this app. Python校验CSV与Oracle数据时跨文件调用异常、退出码0问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Python校验CSV与Oracle数据时跨文件调用异常、退出码0问题求助

代码错误排查结果

核心根本原因(为什么程序跑完退出码0但没执行测试)

  • 测试运行器test_runner_lps中从未主动调用定义好的测试执行函数:
    代码里虽然写了test_tc_verify_filecount_tablecount_validation_1这个测试逻辑函数,但整个文件执行流程是:导入模块 → 实例化TestCases对象 → 空的main函数直接走完 → 程序退出。没有任何一行代码触发那个测试函数执行,自然不会有实际的测试逻辑跑起来。
  • 测试运行器的main函数是空实现,没有把测试函数纳入执行流程。

其他代码细节错误

  • test_cases_lps中DataFrame属性拼写错误:
    代码写的是print(df_dept.dttypes),pandas DataFrame的列类型属性是dtypes,少写了字母y,执行到这行就会抛错,而且这个错被方法内部的try-except捕获,只会打印异常信息,不会中断测试流程上报。
  • pd.read_sql的Oracle连接参数写法不符合规范:
    原代码直接把元组('scott/tiger@localhost')传给con参数是无效的,需要先通过cx_Oracle建立独立的连接对象,再传入pandas,否则连接环节直接报错。
  • 测试用例方法内部的try-except吞掉了所有异常:
    原方法把CSV读取、SQL查询、断言的所有异常都捕获后仅打印,不向上层抛出,就算后续测试函数被调用,只要不抛出异常,runner层永远会判定测试执行成功,根本感知不到用例内部的逻辑错误。
  • test_runner_lps中@classmethod装饰器误用:
    给普通函数加@classmethod装饰器,但函数既没有定义类属性传递的cls参数,也没有实际调用类方法的逻辑,装饰器无实际作用,反而容易引发隐式错误。
  • 包导入路径依赖隐式项目结构:
    直接写import lps.testcase.test_cases_lps要求对应目录必须是符合Python包规范的结构(每个层级要有__init__.py,且运行时工作目录在项目根路径),否则导入会直接失败。

修正后的可正常执行的代码

修正版 test_cases_lps

import cx_Oracle
import pandas as pd

class TestCases:
    def tc_verify_filecount_tablecount_validation_1(self):
        # 修正属性拼写错误
        df_dept = pd.read_csv('E:/Python/practice/lps/data/deptv.csv')
        print(df_dept)
        print(df_dept.columns)
        print(df_dept.dtypes)

        sql = '''select * from deptv'''
        print(sql)
        # 修正Oracle连接写法,先建立独立连接对象
        conn = cx_Oracle.connect(user='scott', password='tiger', dsn='localhost:1521/orcl')
        df_table = pd.read_sql(sql, con=conn)
        print(df_table)
        conn.close()

        # 移除吞异常的逻辑,断言失败时直接抛出错误供上层捕获
        assert len(df_dept.index) == len(df_table.index), f"行数不匹配:CSV为{len(df_dept)}行,Oracle表为{len(df_table)}行"


def main():
    pass


if __name__ == '__main__':
    main()

修正版 test_runner_lps

import sys
from lps.testcase.test_cases_lps import TestCases


# 移除误用的@classmethod装饰器,定义普通测试执行函数
def test_tc_verify_filecount_tablecount_validation_1():
    tc = TestCases()
    try:
        tc.tc_verify_filecount_tablecount_validation_1()
        print("pass")
        print("abc", '1', '1', True)
    except Exception as err:
        print('Test case failed', err)


def main():
    # 核心修正:在主流程中主动调用测试函数
    test_tc_verify_filecount_tablecount_validation_1()


if __name__ == '__main__':
    main()

内容的提问来源于stack exchange,提问作者user6922142

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.30 19:24:06