Python ddt实现数据驱动问题汇总(持续更新)

1、引言

        在写接口自动化框架时,有时候我们执行的脚本相同,就是传入的参数不同而已,这种情况下没必要挨个挨个写用例脚本,使用ddt数据驱动就能完美解决这个问题,所以我在接口自动化框架中就引用了ddt,不过在使用的过程中也遇到一些坑,写这个博文的目的有两点,一是记录自己踩过的坑,以免在工作中再次遇到忘记怎么解决,二是总结出来提供给大家查阅。

2、问题总结

2.1、ddt中data问题:

我的ddt代码如下:

import unittest
from Common.ExcelTools.ExcelddtTools import ExcelDDTTools
from Common.CommonTools.LogTools import LogTools
from Common.CommonTools.DataBaseTools import DataBaseTools
from ddt import ddt,data,unpack

'''用户注册类api接口异常测试'''

@ddt
class API_ZC_ABNL(unittest.TestCase):
    #通过需要执行的用例sheet获取ddt数据
    ddt_tools=ExcelDDTTools()
    data_list=ddt_tools.get_ddt_datalist('ZC')

    '''用户注册类api接口异常测试'''
    @classmethod
    def setUpClass(self):
        self.ddttools=ExcelDDTTools()
        self.db=DataBaseTools()
        self.log=LogTools()
        self.log.info('>>>>>>>>>>>>>>>>>>>>>[ZC_api_abnl_start]<<<<<<<<<<<<<<<<<<<<')

    @classmethod
    def tearDownClass(self):
        self.db.cur_close()  # 关闭游标
        self.log.info('>>>>>>>>>>>>>>>>>>>>>[ZC_api_abnl_end]<<<<<<<<<<<<<<<<<<<<<<')

    @data(*data_list)
    def test_zc_abnl(self,data):
        '''用户注册类api接口异常用例'''
        self.ddttools.send_request(data)

if __name__=="__main__":
    unittest.main()

        在这里我遇到的问题是我的data_list的格式为list中嵌套了多个字典,类似于[{....},{....},{....},{....}],当我把data_list直接放入ddt的data中时,执行用例,data其实获取到的是全部字典作为参数,类似于{....},{....},{....},{....},这样与自己当时所想要的结果不一致,我的想法是将列表中的每个字典作为参数进行用例执行,那该怎么办呢?

        正如上面代码你们看到的,在data_list前面加上*就解决了,原理是*data_list是将data_list里面的每个值都作为一个参数传入到data中,这样就能实现了多个参数在同一条代码中执行了!

        用法介绍:

def add(a,b):
    return(a+b)

numlist=[4,3]
#numlist中的4,3作为参数传入
print(add(*numlist))    #equals to print add(4, 3)

numdict={'a':4,'b':3}
#numdict中的4,3作为参数传入
print(add(**numdict))   #equals to print add(4, 3)

tips:ddt后续问题会持续更新,欢迎查阅

猜你喜欢

转载自blog.csdn.net/BearStarX/article/details/81664930
今日推荐