【答疑】如何将字符串'ZeroDivsionError'转换为<class 'ZeroDivsionError'>

【问题描述】
计算器测试-除数异常测试,除零异常ZeroDivsionError从yml文件中读取,参数类型为字符串类型,参数如下,测试用例执行失败


参数值直接传入ZeroDivsionError,参数类型为<class ‘ZeroDivsionError’>,测试用例执行通过

这种情况要怎么处理,把字符串’ZeroDivsionError’转换为<class ‘ZeroDivsionError’>,使用例测试通过;

成功测试用例脚本:

@pytest.mark.parametrize("a,b,error", [[1, 0, ZeroDivisionError]], ids=["除数为0"])
    def test_div2(self, get_calc, a, b, error):
        logging.info(f"测试除数为0功能:参数:{a, b, error}")
        try:
            result = get_calc.div(a, b)
        except(error):
            logging.error("除数为0")
            pass

失败测试用例脚本:

@pytest.mark.parametrize("a,b,error", [[1, 0, 'ZeroDivisionError']], ids=["除数为0"])
    def test_div2(self, get_calc, a, b, error):
        logging.info(f"测试除数为0功能:参数:{a, b, error}")
        try:
            result = get_calc.div(a, b)
        except(error):
            logging.error("除数为0")
            pass

使用eval() 方法,将字符串转成表达式即可,
例如:

@pytest.mark.parametrize("a,b,error", [[1, 0, 'ZeroDivisionError']], ids=["除数为0"])
    def test_div2(self, get_calc, a, b, error):
        logging.info(f"测试除数为0功能:参数:{a, b, error}")
        try:
            result = get_calc.div(a, b)
        except(eval(error)):
            logging.error("除数为0")
            pass

谢谢~~

关闭