• 【python】学习笔记10-ddt数据驱动


    DDT的使用

    DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据),file_data(可以从json或者yaml中获取测试数据)

    只有yaml和yml结尾的文件以yaml形式上传,其他情况下默认为json

    通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据

    @data(a,b)

    那么a和b各运行一次用例

    @data([a,d],[c,d])

    如果没有unpack,那么[a,b]当成一个参数传入用例运行

    如果有unpack,那么[a,b]被分解开,按照用例中的两个参数传递

    @file_data(filename)

    对于json的文件,每一个json元素按照一个用例运行,可以依照python分解元组,列表或者字典的方式分解传入

    import ddt,requests
    import unittest,BeautifulReport
    
    
    #参数化,一次执行多条用例,传入不同的值
    @ddt.ddt
    class MyCase(unittest.TestCase):
        # @ddt.data(1,2,3)# 1、函数参数是一个,同时执行3条用例
        # def testa(self,num):
        #     self.assertTrue(num>2)
    
        @ddt.data([8,2],[1,3],[5,4],[6,4])# 2、函数参数是多个,同时执行3条用例
        @ddt.unpack #多个参数,有unpack,[8,2]作为两个参数传递
        def testb(self,num,num2):
            self.assertTrue(num > num2)
        # def testc(self,num): #不加unpack时,[8,2]不分解,作为一个参数传递
        #     print(num)
        #     print('w')
    
    
        # @ddt.file_data('login.yml')
        # @ddt.unpack
        # def test_run(self,**kwargs):#返回 file_data对应文档中的值,以list的形式,lisg每个元素的值是字典
        #     print('这个是kwargs。。。。',kwargs)
        #     '''
        #     {'method': 'post', 'data': {'passwd': 'aA123456', 'username': ''}, 'check': ['sign', 'userId'],
        #      'url': '', 'header': {'content_type': 'application/json'}}
        #      '''
        #     method = kwargs.get('method')
        #     url = kwargs.get('url')
        #     data = kwargs.get('data',{})
        #     header = kwargs.get('header',{})#如果没有的话,默认{}
        #     is_json = kwargs.get('is_json',0)#如果没有的话,默认0
        #     cookie = kwargs.get('cookie',{})#如果没有的话,默认{}
        #     check = kwargs.get('check',{})#如果没有的话,默认{}
        #     if method == 'post':
        #         if is_json:
        #             r = requests.post(url,json= data,headers =header,cookies= cookie)
        #         else:
        #             r = requests.post(url,data= data,headers =header,cookies= cookie)
        #             print(r.text)
        #     else:
        #         requests.get(url,params=data,headers=header,cookies= cookie)#params把url拼到请求里面
        #     self.assertEqual(check.get('error_code'),r.json().get('error_code')) #只判断error_code
        #     # for c in check:#第二种判断结果的方法,核对结果中是否有参数值
        #     #     print(c)
        #     #     self.assertIn(c,r.text)
        #
        #     # for c in check:#第三种判断方式,判断请求结果中每个key的值是否等于check中每个key的值
        #     #     for k, v in c.items():
        #     #         self.assertEqual(r.json().get(k), v)
    
    
    if __name__ == '__main__':
        unittest.main()
        # suite = unittest.TestSuite()
        # suite.addTests(unittest.makeSuite(MyCase))
        # result_html = BeautifulReport.BeautifulReport(suite)
        # result_html.report(filename='测试报告', description='描述', log_path='.')
  • 相关阅读:
    进程、线程
    timer控件、三级联动
    用户控件、动态创建添加
    打印控件
    窗体移动和阴影,对话框控件
    winform listview控件
    winform打开唯一窗体、构造函数传值
    菜单和工具栏
    winform公共控件
    hibernate中各种包的添加
  • 原文地址:https://www.cnblogs.com/amengmeng/p/8618864.html
Copyright © 2020-2023  润新知