1、ddt的语法:
@pytest.mark.parametrize("case", case_all) 是个装饰器,里面两个数据:
case 和cases_all意思就是: 将cases_all里每个成员依次传递给case这个变
量;
cace注意要加引号,虽然是个变量 但是要加引号
后面的用例方法里的参数case都是必须要要跟这个装饰器
里的case名字一致。
运行结果:
几条用例数据就运行几条测试用例
就算前面的断言失败了,也依然会执行后续的用例。
python
"""
1、ddt数据驱动的语法:
- @pytest.mark.parametrize("case", case_all) 是个装饰器,里面两个数据: case 和cases_all意思就是: 将cases_all里每个成员依次传递给case这个变量;
- cace注意要加引号,虽然是个变量 但是要加引号
- 后面的用例方法/函数里的参数case都是必须要要跟这个装饰器里的case名字一致。
运行结果:
几条用例数据就运行几条测试用例
就算前面的断言失败了,也依然会执行后续的用例。
2、ddt的2种实现形式:
第一种写法:函数形式用例 的数据驱动:
- 写在函数上面,针对当前函数实现数据驱动。
第二种: 类形式测试用例的数据驱动:
-写在方法上面,只针对当前方法实现数据驱动。
-写在类上面也可以,会给类下面每个方法都进行数据驱动。
"""
# 登录的流程函数-开发代码
import pytest
def 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_result
print(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_result
print(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}条用例")