精华内容
下载资源
问答
  • pytest 参数化

    2019-11-05 17:01:41
    pytest参数化 pytest的参数化相当于unittest中的ddt 实现数据驱动,pytest.parametrize,数据驱动 pytest使用以下功能不能和unittest兼容: 1.当使用pytest的参数化paramatrize,不能做到和unittest兼容 2.当使用夹具...

    pytest参数化

    pytest的参数化相当于unittest中的ddt
    实现数据驱动,pytest.parametrize,数据驱动
    pytest使用以下功能不能和unittest兼容:
    1.当使用pytest的参数化paramatrize,不能做到和unittest兼容
    2.当使用夹具fixture,(autouse=True可以),也不能和unittest兼容
    3.钩子Custom_hooks

    ddt模块不能和fixtrue共用,所以要换用pytest的参数化来实现ddt
    参数化会和unittest冲突,因为setUp这些东西都不会去运行了,要改成pytest,不要继承unittest.TestCase
    用法如下:
    @pytest.mark.parametrize(“data”,Data…)

    例如:
    在这里插入图片描述
    在这里插入图片描述
    和ddt 的区别:
    1.不需要用*
    2.字符串作为第一个参数接收数据

    展开全文
  • pytest参数化

    千次阅读 2018-11-01 16:30:23
    pytest参数化方式 pytest.fixture()方式进行参数化,fixture装饰的函数可以作为参数传入其他函数 pytest.mark.parametrize()方式进行参数化 conftest.py 文件中存放参数化函数,可作用于模块内的所有...

    pytest有三种传参方式,我主要用到前两种

    pytest的参数化方式

    • pytest.fixture()方式进行参数化,fixture装饰的函数可以作为参数传入其他函数

    • pytest.mark.parametrize()方式进行参数化

    • conftest.py 文件中存放参数化函数,可作用于模块内的所有测试用例

    本章主要讲第二种方式:@pytest.mark.parametrize('参数名',list) 进行参数化

    1. 传一个参数 @pytest.mark.parametrize('参数名',list) 进行参数化

    2. 传两个参数@pytest.mark.parametrize('参数名1,参数名2',[(参数1_data[0], 参数2_data[0]),(参数1_data[1], 参数2_data[1])]) 进行参数化, 传三个或更多参数也是这样传。list的每个元素都是一个元组,元组里的每个元素和按参数顺序一一对应

    从网上找了个例子,讲的很清楚,在这里借用下:

    pytest.mark.parametrize()方式进行参数化

    • 采用标记函数参数化,传入单个参数,pytest.mark.parametrize("参数名",lists)

      mark.png

    • 采用标记函数传入多个参数,如pytest.mark.parametrize("para1, para2", [(p1_data_0, p2_data_0), (p1_data_1, p2_data_1),...]

    • 测试用例中传入2个参数,year和期望结果,使输入数据与预期结果对应,构造了2组会失败的数据,在执行结果中,可以看到失败原因:

    image.png

    
    
    

     

    展开全文
  • 主要介绍了Pytest参数化parametrize使用代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 文章目录1、Pytest参数化说明2、Pytest参数化方式3、parametrize装饰器参数说明4、Pytest参数化(单个参数)5、Pytest参数化(多个参数)6、ids参数说明 1、Pytest参数化说明 软件测试中,输入相应值,检查期望值,...

    1、Pytest参数化说明

    软件测试中,输入相应值,检查期望值,是常见测试方法。

    在自动化测试中,一个测试用例对应一个测试点,通常一组测试数据是无法完全覆盖测试范围的,所以需要参数化来传递多组数据。

    Unittest单元测试框架使用DDT进行数据驱动测试,Pytest是使用@pytest.mark.parametrize装饰器来实现数据驱动测试的。

    2、Pytest参数化方式

    pytest有三种传参方式,主要用到前两种

    • @pytest.mark.parametrize()装饰器方式进行参数化。(常用)
    • pytest.fixture()方式进行参数化,fixture装饰的函数可以作为参数传入其他函数。
    • conftest.py文件中存放参数化函数,可作用于模块内的所有测试用例。

    这里只说明第一种参数化方式。

    3、parametrize装饰器参数说明

    parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)
    

    说明:

    • argnames:参数名,使用逗号分隔的字符串,或列表或元祖,表示一个或多个参数名。(常用参数)

    • argvalues:参数值,类型可以是列表,元祖,字典列表,字典元祖,有多个值用例就会执行多少次。(常用参数)

    • indirect:当indirect=True时,若传入的argnames(参数)是Fixture函数名,此时Fixture函数名将是一个可执行的函数,Fixture装饰器返回的数据作为argnames的参数,最终结果会存入request.param中。

      indirect=False时,Fixture函数只作为一个参数名,给测试收集阶段调用。

      说明:结合Fixture装饰器的内容一起看,就会明白上面说的是什么意思。(这个参数不常用,默认即可)

    • ids:字符串列表,可以理解成给前面的argvalues参数起别名,别名个数和数据的值相同。

    • scope:如果指定,则表示参数的使用范围。

      作用域用于按参数实例对测试进行分组。(待理解)

      它还将覆盖任何Fixture函数定义的范围。

      允许使用测试上下文或配置设置动态范围。(待理解)

      (这个参数不常用,默认即可)

    4、Pytest参数化(单个参数)

    示例:

    """
    1.学习目标
        掌握pytest中参数化方法
    2.操作步骤
        parametrize(argnames,argvalues)
            argnames 参数名称
            argvalues 参数值
        @pytest.mark.parametrize()
    3.单个参数使用
        argnames 一定和测试用例中的参数名保持一致
        argvalues 是一个列表格式
    
    """
    import pytest
    
    # 有几个数据,用例就执行几次。
    data = ["13800138000", "13800138001", "13800138002"]
    
    @pytest.mark.parametrize("phonenum", data)
    def test_login(phonenum):
        # test_login函数的参数phonenum,要和parametrize定义的参数phonenum一致。
        print(f"输入电话号码{phonenum}")
    
    if __name__ == '__main__':
        pytest.main()
    
    """
    执行结果:
    
    test_01.py::test_login[13800138000] 输入电话号码13800138000
    PASSED
    test_01.py::test_login[13800138001] 输入电话号码13800138001
    PASSED
    test_01.py::test_login[13800138002] 输入电话号码13800138002
    PASSED
    
    我们可以看到用例执行了3次。
    """
    

    5、Pytest参数化(多个参数)

    示例:

    """
    1.学习目标
        掌握pytest中参数化方法
    2.操作步骤
        parametrize(argnames,argvalues)
            argnames 参数名称
            argvalues 参数值
        @pytest.mark.parametrize()
    3.多个参数使用
        argnames:字符串格式,各个参数之间逗号隔开
        argvalues: [(),(),()],列表嵌套元组,元组中元素的个数和参数个数一致
    
    """
    import pytest
    
    # 有几个数据,用例就执行几次。
    data = [("13800138000", 1234), ("13800138001", 2345), ("13800138002", 3456)]
    
    # "phonenum,code"参数名个数,要和列表中对象的参数个数一致。
    @pytest.mark.parametrize("phonenum,code", data)
    def test_login(phonenum, code):
        print(f"输入电话号码{phonenum}")
        print(f"输入验证码{code}")
        assert phonenum == "13800138000"
    
    
    if __name__ == '__main__':
        pytest.main()
    
    """
    执行结果:
    
    test_01.py::test_login[13800138000-1234] 输入电话号码13800138000
    输入验证码1234
    PASSED
    test_01.py::test_login[13800138001-2345] 输入电话号码13800138001
    输入验证码2345
    FAILED
    test_01.py::test_login[13800138002-3456] 输入电话号码13800138002
    输入验证码3456
    FAILED
    """
    
    

    6、ids参数说明

    示例:

    """
    import pytest
    
    # 有几个数据,用例就执行几次。
    data = [("13800138000", 1234), ("13800138001", 2345), ("13800138002", 3456)]
    
    
    # "phonenum,code"参数名个数,要和列表中对象的参数个数一致。
    @pytest.mark.parametrize("phonenum,code", data, ids=['333', '666', '999'])
    def test_login(phonenum, code):
        print(f"输入电话号码{phonenum}")
        print(f"输入验证码{code}")
    
    
    
    if __name__ == '__main__':
        pytest.main()
    
    """
    执行结果:
    
    test_01.py::test_login[333] 输入电话号码13800138000
    输入验证码1234
    PASSED
    test_01.py::test_login[666] 输入电话号码13800138001
    输入验证码2345
    PASSED
    test_01.py::test_login[999] 输入电话号码13800138002
    输入验证码3456
    PASSED
    
    请和上面的例子对比[]号中的信息,就是在ids参数中定义的信息。
    
    """
    
    展开全文
  • 关于pytest参数化

    2020-05-26 20:03:09
    在pytest中,当我们输入的参数不同,但输出结果一样时,就可以用pytest参数化。 1、首先将测试Py 文件与测试数据分离,即在py中写代码,测试数据写在yaml文件中 2、yaml文件 (1)首先要安装:pip install pyyaml ...

    在pytest中,当我们输入的参数不同,但输出结果一样时,就可以用pytest参数化。
    1、首先将测试Py 文件与测试数据分离,即在py中写代码,测试数据写在yaml文件中
    2、yaml文件
    (1)首先要安装:pip install pyyaml
    (2)然后建立一个yaml文件来存储数据
    在这里插入图片描述
    yaml的语法可自己学习,相当于字典的键值对。
    (3)接下来要考虑怎么将PY文件与yaml文件关联起来
    3、写一个读取yaml文件的函数

    
    ```python
    
    import yaml
    import os
    def readyml(yamlPath):
        '''读取yaml文件内容
        参数path: 相对路径,起始路径:项目的根目录
        realPath: 文件的真实路径,绝对路径地址 '''
        if not os.path.isfile(yamlPath):
            raise FileNotFoundError("文件路径不存在,请检查路径是否正确:%s" % yamlPath)
        # open方法打开直接读出来
    
        f = open(yamlPath, 'r', encoding='utf-8')
        cfg = f.read()
        d = yaml.load(cfg)
        # 用load方法转字典
        print("读取的测试文件数据:%s"%d)
        return d
    
    if __name__ == '__main__':
        readyml("test_data.yml")
    
    
    
    4、在py模块中导入这个方法,读取yaml文件,作为测试数据源传入
    
    
    
    import pytest
    from demo.read_yml import readyml
    import os
    a = os.path.join(os.path.dirname(os.path.realpath(__file__)), "test_data.yml")
    print(a)
    test_data = readyml(a)
    print(test_data['test_data'])
    
    @pytest.mark.parametrize("test_input, expect", test_data['test_data'])
    def test_updata_info_32(login_fix, test_input, expect):
    		
    

    关于多个变量的参数化,在data列表以字典组或以元祖的方式存储变量,list的每个元素都是一个元组,元组里的每个元素和按参数顺序一一对应。
    在这里插入图片描述

    展开全文
  • 8、pytest参数化

    2020-10-26 21:49:11
    pytest参数化 @pytest.mark.parametrize(argnames,argvalues) argnames:要参数化的变量,string(逗号分隔),list, tuple argvalues:参数化的值,list,list[tuple] # 使用string 形式 @pytest.mark.parametrize...
  • Pytest「Conftest、Pytest 参数化、重运行、出测试报告」
  • pycharm运行pytest参数化运行缓存问题 最近在学习pytest,遇到一个令人费解的问题,多次运行参数化的pytest之后,teardown的执行效果发生错误,让我们来看看是如何发生的吧。 参数化运行pytest class TestC(): def ...
  • pytest参数化处理 pytest Fixtrue pytest allure生成测试报告 使用pytest重构项目 pytest参数化处理 在pytest中,可以使用参数化测试,即每组参数都独立执行一次测试。这种方式使用的工具是: pytest.mark...
  • Pytest参数化方式

    2021-02-04 12:48:12
    pytest参数化 首先需要导入pytest包 import pytest @pytest.mark.parametrize(‘a,b,c’,[列表or元组]) 通过元组与列表传入数据,示例如下: 注意:parametrize可以用来声明变量,函数在使用变量时传参的值要和...
  • 在之前的文章中主要分享了 pytest 的实用特性,接下来讲 Pytest 参数化用例的构建。 如果待测试的输入与输出是一组数据,可以把测试数据组织起来用不同的测试数据调用相同的测试方法。参数化顾名思义就是把不同的...
  • 1.pytest参数化 2.pytest标记用例(用于区分什么情况下执行什么用例) 3.pytest生成html报告 4.关于pytest.main 如果里面要带多个参数执行,比如又要区分用例标记,又要生成html测试报告,那么需要用...
  • 在之前的文章中主要分享了 pytest 的实用特性,接下来讲 Pytest 参数化用例的构建。如果待测试的输入与输出是一组数据,可以把测试数据组织起来用不同的测试数据调用相同的测试方法。参数化顾名思义就是把不同的参数...
  • pytest中,也可以使用参数化测试,每组参数可以独立执行一次测试。 pytest 可以通过 @pytest.mark.parametrize(argnames, argvalues) 来实现 例1: 一个参数,数据是一个列表 从测试结果中,可以看出test_...
  • pytest 参数化,小技巧

    2021-04-30 16:48:32
    本文总结pytest的测试用例参数化。 软件测试中,输入相应值,检查期望值,是常见测试方法。 在自动化测试中,一个测试用例对应一个测试点,通常一组测试数据无法完全覆盖测试范围,所以,需要参数化来传递多组数据。...
  • @pytest.mark.parametrize(‘参数名’,list) 进行参数化 传一个参数 @pytest.mark.parametrize(‘参数名’,list) 进行参数化 传两个参数@pytest.mark.parametrize(‘参数名1,参数名2’,[(参数1_data[0], ...
  • pytest 参数化问题

    2021-04-07 17:53:39
    小白,第一次使用pytest参数化,为什么输入值都输入到账号框里面去了,密码不会填写在密码框.原地开裂 # 初始化日志 init_logging() # 账号元素 account = (By.XPATH, '//*[@id="u"]') # 密码元素 password = (By....
  • 原标题:Python自动化测试(三):pytest参数化测试用例构建 本文节选自霍格沃玆测试学院内部教材!在之前的文章中主要分享了 pytest 的实用特性,接下来讲 Pytest 参数化用例的构建。如果待测试的输入与输出是一组数据...
  • 5.pytest参数化使用

    2020-11-04 22:54:39
    在软件测试中,经常遇到同一个用例需要输入多组不同的参数组合,进行功能覆盖测试,在自动化测试中,我们把这种叫做参数化,在pytest中使用装饰器就能完成参数化. @pytest.mark.parametrize(argnames, argvalues) # ...
  • 接口测试 Pytest参数化处理

    万次阅读 2018-04-11 20:50:07
    pytest参数化方式pytest.fixture()方式进行参数化,fixture装饰的函数可以作为参数传入其他函数conftest.py 文件中存放参数化函数,可作用于模块内的所有测试用例pytest.mark.parametrize()方式进行参数化本节测试...
  • 在之前的文章中主要分享了 pytest 的实用特性,接下来讲 Pytest 参数化用例的构建。如果待测试的输入与输出是一组数据,可以把测试数据组织起来用不同的测试数据调用相同的测试方法。参数化顾名思义就是把不同的参数...
  • 3.结合pytest参数化格式处理方式来实现DDT 首先创建个excel表格: 代码: import pytest import xlrd from openpyxl.workbook import Workbook def get_data(): filename = 'test_data.xlsx' wb = xlrd.open_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 980
精华内容 392
关键字:

pytest参数化