6.Pytest参数化:parametrize简单应用

一、前言

参数化的目的是为了使测试用例代码与测试数据进行分离,这样,测试人员只需要维护测试数据,而不用更改代码。pytest模块给我们提供了专门用来参数化的装饰器:@pytest.mark.parametrize()

二、学习目标

1.parametrize的简单应用

2.parametrize传多组数据

三、知识点

1.【parametrize的简单应用】

  • 语法:

    @pytest.mark.parametrize(argnames, argvalues, indirect=False, ids=None, scope=None))
    
  • 参数说明:

    argnames:必传,参数名, 以逗号分隔的字符串,表示一个或多个参数名称(key),或参数字符串的列表/元组

    argvalues:必传,参数值,若argnames有一个刚单值列表传入,若argnames有多个,以套用元组的列表展示,无组内与参数名一一对应

    indirect:为true时,那argnames一定是一个fixture函数名称,argvalues值将传入对应的fixture内,相当于@pytest.fixture(params=)的用法,默认False

    ids:标记子用例执行名称,与argvalues数量一致,未指定自动生成,默认None

    scope:如果指定,则表示参数的范围。范围用于按参数实例对测试进行分组。它还将覆盖任何fixture函数定义的范围,允许使用测试上下文或配置设置动态范围

  • 代码示例:

    import pytest
    
    
    class TestCase():
    
        test_data = [{"username":"用户1","psw":"密码1"}] #必须是列表
    
        @pytest.mark.parametrize("test_data", test_data)
        def test_demo1(self,test_data):
            print('请输入用户:{}'.format(test_data['username']))
            print('请输入密码:{}'.format(test_data['psw']))
            assert "1" == "1"
    
  • 运行结果:

    test_pytest_demo5.py::TestCase::test_demo1[test_data0] PASSED            [100%]
    请输入用户:用户1
    请输入密码:密码1
    ============================== 1 passed in 0.01s ==============================
    

2.【parametrize传多组数据】

代码示例:

import pytest


class TestCase():

    test_data = [{"username":"用户1","psw":"密码1"},{"username":"用户2","psw":"密码2"}] #列表中为两组数据

    @pytest.mark.parametrize("test_data", test_data)
    def test_demo1(self,test_data):
        print('请输入用户:{}'.format(test_data['username']))
        print('请输入密码:{}'.format(test_data['psw']))
        assert "1" == "1"

运行结果:

test_pytest_demo5.py::TestCase::test_demo1[test_data0] PASSED            [ 50%]请输入用户:用户1
请输入密码:密码1

test_pytest_demo5.py::TestCase::test_demo1[test_data1] PASSED            [100%]请输入用户:用户2
请输入密码:密码2
============================== 2 passed in 0.02s ============================== #测试用例执行了两次
posted @ 2023-01-17 10:26  测开星辰  阅读(261)  评论(0编辑  收藏  举报