1、ddt的语法:
@pytest.mark.parametrize(“case”, case_all) 是个装饰器,里面两个数据:
case 和cases_all意思就是: 将cases_all里每个成员依次传递给case这个变
量;
cace注意要加引号,虽然是个变量 但是要加引号
后面的用例方法里的参数case都是必须要要跟这个装饰器
里的case名字一致。
运行结果:
几条用例数据就运行几条测试用例
就算前面的断言失败了,也依然会执行后续的用例。
"""
1、ddt数据驱动的语法:
- @pytest.mark.parametrize("case", case_all) 是个装饰器,里面两个数据: case 和cases_all意思就是: 将cases_all里每个成员依次传递给case这个变量;
- cace注意要加引号,虽然是个变量 但是要加引号
- 后面的用例方法/函数里的参数case都是必须要要跟这个装饰器里的case名字一致。运行结果:
几条用例数据就运行几条测试用例
就算前面的断言失败了,也依然会执行后续的用例。2、ddt的2种实现形式:
第一种写法:函数形式用例 的数据驱动:- 写在函数上面,针对当前函数实现数据驱动。第二种: 类形式测试用例的数据驱动:-写在方法上面,只针对当前方法实现数据驱动。-写在类上面也可以,会给类下面每个方法都进行数据驱动。
"""
# 登录的流程函数-开发代码
import pytestdef login(username, passwd):"""登录的函数"""if username != "xxxn":return "用户名错误"if passwd != "xxx":return "密码错误"return "登录成功"#功能模块的测试用例数据
case_all = [{"case_id": 1, "name": "lemon", "pwd": "1234567", "expect": "登录成功"},{"case_id": 2, "name": "lemon1", "pwd": "123456", "expect": "用户名错误"},{"case_id": 3, "name": "lemon", "pwd": "1234", "expect": "密码错误"}]def test_login0():for case in case_all:case_id = case["case_id"]username = case["name"]password = case["pwd"]expect_result = case["expect"]actual_result = login(username, password)assert actual_result == expect_resultprint(f"执行了第{case_id}条用例")
# # pytest数据驱动,执行多条用例,输出不同结果
# # 第一种写法:函数形式用例 的数据驱动: - 写在函数上面,针对当前函数实现数据驱动。
@pytest.mark.parametrize("case", case_all) # 将cases_all里每个成员依次传递给case这个变量;
def test_login(case): # 再把这个case变量值传递给pytest用例函数,名字跟"case"一致。case_id = case["case_id"]username = case["name"]password = case["pwd"]expect_result = case["expect"]actual_result = login(username, password)assert actual_result == expect_resultprint(f"执行了第{case_id}条用例")# 第二种: 类形式测试用例的数据驱动:
# @pytest.mark.parametrize("case", case_all)
# class TestLogin:
# @pytest.mark.parametrize("case", case_all)
# def test_login01(self, case):
# case_id = case["case_id"]
# username = case["name"]
# password = case["pwd"]
# expect_result = case["expect"]
# actual_result = login(username, password)
# assert actual_result == expect_result
# print(f"执行了第{case_id}条用例")
#
# @pytest.mark.parametrize("case", case_all)
# def test_login02(self, case):
# case_id = case["case_id"]
# username = case["name"]
# password = case["pwd"]
# expect_result = case["expect"]
# actual_result = login(username, password)
# assert actual_result == expect_result
# print(f"执行了第{case_id}条用例")