Python中pytest之参数化数据驱动一

237 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

数据驱动测试(DDT)是指,将不同数据带入标准自动化测试流程中进行验证的一种方式,数据中要包含期望结果,一般一条数据相当于一条测试用例。 数据驱动测试适用于同一个测试流程,需要不同的测试数据,产生不同的测试结果的场景,使用数据驱动一般都是同一个功能,比如,不同关键字进行搜索的搜索功能,只是关键字不同,结果不同,但是步骤一样。

数据驱动测试,可以使我们不重复写相同的代码,只需要编写一个统一的参数化的用例模板,修改其中的测试数据和期望结果。 编写数据驱动测试用例时,要求过程要统一,即所有的数据,要采用统一的测试步骤和断言步骤来执行。

在Pytest中实现数据驱动有3种方式

1、使用自定义的fixture函数的params参数进行参数化

2、用例上使用@pytest.mark.paramitrize装饰器进行参数化

3、conftest.py文件中使用pytest_generate_tests钩子方法实现参数化

一、使用fixture函数中的params参数进行参数化

测试不同用户的下单流程,登录作为一个准备步骤,我们可以使用params来指定多组用户数据,在使用fixture功能对测试用例中的每个数据进行执行。

import pytest
USERS = [ {'username': '张三', 'password': '123456'},
          {'username': '李四', 'password': '000000'},
          {'username': '王五', 'password': '111111'}, ]
@pytest.fixture(params=USERS)
def login(request): # request 是一个固定的参数,代表调用方 
    # request.param 即 USERS 中的每一条数据 
    username= request.param.get('username') 
    password= request.param.get('password') 
    print(f'[登录] 用户名:{username} 密码:***') 
def test_shopping(login): 
    pass

在test_shopping用例中引用了一个参数化的Fixture函数,该用例会被执行很多次。Fixture函数中的request参数,是Pytest一个内置的Fixture对象,通过request对象可以拿到很多信息,如:

request.fspath:执行测试起始路径

request.session:当前测试会话的session

request.config:当前测试配置对象

request.function:当前测试用例函/方法

request对象中还有很多的属性和方法都可以在Fixture函数中,可以使用print(dir(request))来查看含有那些属性和方法。