zoukankan      html  css  js  c++  java
  • DDT与pytest.mark.parametrize参数化区别

    参数化表达式:                                                                                          ddt表达式

    @pytest.mark.parametrize(“参数名”, 列表数据)                        @ddt.ddt

    def(参数名):                                                                            class xxx(unittest.TestCase):       #一定要继承unitest.TestCase

             执行体                                                                                     @ddt.data(*LD.wrong_datas)     #列表要解包

             列表[“”] ……                                                                            def  test_login_failed_by_wrongData(self, case):   #参数接收列表中的一条数据 参数名随意

                                                                                                                         执行体

                                                                                                                         列表[“”] ……  

    一、DDT解析参数

    ddt 是第三方模块,需安装, pip install ddt

    DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据)

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

    @data(a,b)

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

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

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

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

    1、测试参数如下:

    login_data=[{"para":{"mobilephone":"18777770000","pwd":"123456"},"method":"get","msg":"登录成功"},

    {"para": {"mobilephone":"18777770000","pwd":"000000"},"method":"get","msg":"用户名或密码错误"},

    {"para": {"mobilephone":"  ","pwd":"123456"},"method":"get","msg":"手机号不能为空"}]

    2、测试用例使用DDT解析参数:

    from ddt import ddt,data

    #装饰测试类

    @ddt

    class TestHttpRequest(unittest.TestCase):

    #装饰测试用例

    @data(*login_data)

    def test_login_1(self,data):

       res=HttpRequest(data['url'],data['param']).http_request(data['method'])

       print("测试结果:{0}".format(res.json()))

    执行3条用例

    标记函数参数化(测试用例方法前加测试数据):@pytest.mark.parametrize("a,b,expected", testdata)

    语法:

    ep1 传入单个参数

    @pytest.mark.parametrize('参数名',lists)

    ep2 传入两个参数

    ('参数1','参数2',[(参数1_data[0],参数2_data[0]),(参数1_data[1],参数2_data[1])]

    传三个或者更多也是这样传。list的每个元素都是一个元祖,元祖里的每个元素和按参数顺序一一对应。




    声明 欢迎转载,但请保留文章原始出处:) 博客园:https://www.cnblogs.com/chenxiaomeng/ 如出现转载未声明 将追究法律责任~谢谢合作
  • 相关阅读:
    Vue项目碰到"‘webpack-dev-server’不是内部或外部命令,也不是可运行的程序或批处理文件"报错
    PowerDesigner最基础的使用方法入门学习
    Centos7 上安装mysql遇上的问题:mysql无法正常启动
    微信小程序的Web API接口设计及常见接口实现
    模型数据作渲染优化时遇到的问题
    vertex compression所遇到的问题
    depth and distance
    Linear or non-linear shadow maps?
    实施vertex compression所遇到的各种问题和解决办法
    【转】編譯Ogre1.9 IOS Dependencies及Ogre Source步驟及相關注意事項…
  • 原文地址:https://www.cnblogs.com/chenxiaomeng/p/14841130.html
Copyright © 2011-2022 走看看