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

Posted 萌_CALY

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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=‘.‘)

 

以上是关于python学习笔记10-ddt数据驱动的主要内容,如果未能解决你的问题,请参考以下文章

python爬虫学习笔记-M3U8流视频数据爬虫

<Test-Driven Development with Python;学习笔记 第一部分 测试驱动开发基础

<Test-Driven Development with Python;学习笔记 第一部分 测试驱动开发基础

python学习笔记012——pdb调试

Python 3学习笔记

python 3.6 + robotFramework自动化框架 环境搭建学习笔记