霍格沃兹测试开发
class Calculator:
def add(self, a, b):
if a > 99 or a < -99 or b > 99 or b < -99:
print("请输入范围为【-99, 99】的整数或浮点数")
return "参数大小超出范围"
return a + b
def div(self, a, b):
if a > 99 or a < -99 or b > 99 or b < -99:
print("请输入范围为【-99, 99】的整数或浮点数")
return "参数大小超出范围"
return a / b
# test_add.py
class TestAdd:
def setup_class(self):
self.calc = Calculator()
def setup(self):
logger.info("开始计算")
def teardown(self):
logger.info("结束计算")
def teardown_class(self):
logger.info("====>>>结束测试")
@pytest.mark.parametrize(
"a,b,expect",
[
[1, 1, 2],
[-0.01, 0.02, 0.01],
[10, 0.02, 10.02]
]
)
def test_add(self, a, b, expect):
# 日志信息
logger.info(f"a={a}, b= {b}, expect={expect}")
# 测试步骤
result = self.calc.add(a, b)
# 日志信息
logger.info(f"实际结果为:{result}")
# 断言
assert result == expect
add:
P0:
datas:
- [1, 1, 2]
- [-0.01, 0.02, 0.01]
- [10, 0.02, 10.02]
ids:
- 2个整数
- 2个浮点数
- 整数+浮点数
P1_1:
datas:
- [98.99, 99, 197.99]
- [99, 98.99, 197.99]
- [-98.99, -99, -197.99]
- [-99, -98.99, -197.99]
- [99.01, 0, "参数大小超出范围"]
- [-99.01, -1, "参数大小超出范围"]
- [2, 99.01, "参数大小超出范围"]
- [1, -99.01, "参数大小超出范围"]
ids:
- 有效边界值相加【98.99,99】
- 有效边界值相加【99,98.99】
- 有效边界值相加【-98.99,-99】
- 有效边界值相加【-99,-98.99】
- 无效边界值相加【99.01,0】
- 无效边界值相加【-99.01,-1】
- 无效边界值相加【2,99.01】
- 无效边界值相加【1,-99.01】
P1_2:
datas:
- [文, 9.3, "TypeError"]
- [4, 字, "TypeError"]
- [nu, 0.2, "TypeError"]
- [30, t, "TypeError"]
- ["*&", 0.2, "TypeError"]
- [21.45, "@", "TypeError"]
ids:
- 第一个值是汉字
- 第二个值是汉字
- 第一个值是英文字母
- 第二个值是英文字母
- 第一个值是特殊字符*&
- 第二个值是特殊字符@
P2:
datas:
- [None, 20.93, "TypeError"]
- [-3, None, "TypeError"]
- [" ", 3.14, "TypeError"]
- [-90, " ", "TypeError"]
ids:
- 第一个值None
- 第二个值None
- 第一个值空格
- 第二个值空格
# conftest.py
@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_makereport(item, call):
# 获取钩子方法的调用结果
out = yield
# 从钩子方法的调用结果中获取测试报告
report = out.get_result()
fail_case_info = []
# 如果用例执行不通过
if report.outcome != "passed":
case_info = {
"nodeid": report.nodeid,
"result": report.outcome
}
fail_case_info.append(case_info)
# 用例信息写入 yaml 文件
with open('./fail_cases_info.yaml', 'a', encoding='utf-8') as f:
yaml.dump(fail_case_info, f)