python数据驱动读取用例_Python3-unittest测试框架之DDT数据驱动

unittest测试框架之DDT数据驱动

ddt的使用

DDT数据驱动

DDT:Data Driver Test(数据驱动测试)

数据驱动思想:数据和用例进行分离,通过外部数据去生成测试用例

安装

pip install ddt

修改ddt源码(是为了在生成的测试报告中显示每条用例所对应的标题title)

ddt文件中的ddt()方法

如果数据是用对象来保存的,就添加test_data_docstring = v.title

如果数据使用字典来保存的,就添加test_data_docstring = v["title"]

修改后生成的测试报告就能把title列显示到测试报告中

注意:title要是Excel表中的列名

def ddt(cls):

for name, func in list(cls.__dict__.items()):

if hasattr(func, DATA_ATTR):

for i, v in enumerate(getattr(func, DATA_ATTR)):

test_name = mk_test_name(name, getattr(v, "__name__", v), i)

# test_data_docstring = _get_test_data_docstring(func, v) # 原来的

# test_data_docstring = v.title # 数据使用对象来保存,改成这样

test_data_docstring = v["title"] # 数据使用字典来保存,改成这样

if hasattr(func, UNPACK_ATTR):...

else:

add_test(cls, test_name, test_data_docstring, func, v)

delattr(cls, name)

elif hasattr(func, FILE_ATTR):...

return cls

在测试类中使用ddt数据驱动获取数据(这时一个测试用例类只需要一个测试方法就可以)

先准备一个简单的登陆功能函数

def login(name=None, pwd=None):

if name and pwd:

if name == "desire" and pwd == "123456":

return {"code": 0, "msg": "登陆成功"}

else:

return {"code": 1, "msg": "账号密码错误"}

else:

return {"code": 1001, "msg": "不能有空值"}

准备excel测试用例表格

20191224151218652506.png

导入ddt模块

from ddt import ddt, data

读取excel表格ReadExcel

@ddt

class LoginTestCase(unittest.TestCase):

# DATA_DIR:测试用例存放的路径,用os模块进行拼接excel用例表格的路径

excel_path = os.path.join(DATA_DIR, 'cases.xlsx')

login = ReadExcel(excel_path, "login")

# 读取数据(字典形式)

login_datas = login.read_data_dict()

# 读取数据(类的形式)

# login_datas = login.read_data_obj()

@data()里面传的参数要进行拆包,把每次的数据传到方法里case参数

@data(*login_datas)

def test_login(self, case):

pass

第一步:准备用例数据

①:字典形式取值(使用时需要修改ddt源文件为字典形式)

# 1.参数

login_data = eval(case["data"])

# 2.预期结果

expected = eval(case["expected"])

# 3.用例序号

case_id = case["case_id"]

②:类形式取值(使用时需要修改ddt源文件为类形式)

# 1.参数

login_data = eval(case.data)

# 2.预期结果

expected = eval(case.expected)

# 3.用例序号

case_id = case.case_id

第二步:执行功能函数,获取实际结果

result = login(*login_data)

第三步:通过断言比对预期结果和实际结果

try:

self.assertEqual(expected, result)

except AssertionError as a:

# 把用例未通过结果写入excel中(调用[ReadExcel](https://www.cnblogs.com/desireyang/p/12059916.html)类中的写入方法)

self.login.write_data(row=case_id + 1, column=5, value="用例未通过")

raise a

else:

self.login.write_data(row=case_id + 1, column=5, value="用例通过")

直接可以运行测试用例类,会把自动化测试结果写入到excel中

20191224151219049982.png

原文:https://www.cnblogs.com/desireyang/p/12091154.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值