Pytest 参数化

在执行自动化测试用例时,自然少不了测试数据;同一条用例逻辑,如何使用不同数据驱动测试用例?这里列举以下两种参数化方式:

方式一:
Pytest中装饰器@pytest.mark.parametrize(‘参数名’, list) ,此参数化方法支持传入单个参数或多个参数。

使用py文件存放测试数据,封装一个函数返回数据。

login_data.py

def login_data_list():
    login_data_list = [
        {'username': '', 'password': 'xxxx', 'expect': '账号为空'},
        {'username': 'xxxx', 'password': '', 'expect': '密码为空'},
        {'username': 'xxxx', 'password': 'xxxxx', 'expect': '无效的用户名或密码。'},
    ]
    return login_data_list

test_login.py

import pytest
from page_objects.login import Login
from data.login_data import login_data_list
from page_locators.login_page import LoginPage

@pytest.mark.parametrize('test_data', login_data_list())
@pytest.mark.usefixtures('geturl')
def test_sing_in_failed(self, browser, test_data):
   username = login['username']
   password = login['password']
   expected = login['expect']

   try:
      LoginPage.user_login(browser, username, password)
      actual = LoginPage(browser).error_text()
      assert actual == expect

   except Exception as e:
      raise e

使用yaml存放测试数据,dict嵌套dict。(读取yaml文件的方法此处省略)

test_data.yaml

login_data1:
  username:
  password: xxxxx

login_data2:
  username: xxxxx
  password:
@pytest.mark.parametrize('test_data', YamlUtil(os.getcwd() + '/test_data.yaml').read_yaml().values())
@pytest.mark.usefixtures('geturl')
def test_sing_in_failed(self, browser, test_data):
    username = test_data['username']
    password = test_data['password']

    LoginPage.user_login(browser, username, password)

跟以上的方式类似,list嵌套dict。

test_data.yaml

- user: username1
  pwd: 'xxxxx'

- user: username2
  pwd: 'xxxxx'

- user: username3
  pwd: 'xxxxx'
@pytest.mark.parametrize('login', YamlUtil(os.getcwd() + '/test_data.yaml').read_yaml())
@pytest.mark.usefixtures('geturl')
def test_sign_in_failed(self, browser, login):
    usr = login['user']
    pwd = login['pwd']
    LoginPage.user_login(browser, usr, pwd)

方式二:

@pytest.fixture(),此参数化装饰的函数可以作为参数传入其他函数;参数化装饰函数放在conftest.py,这种方式较少使用,因为
conftest.py一般用于存放测试的前置、后置条件。

Original: https://blog.csdn.net/weixin_48321392/article/details/125677538
Author: blues_C
Title: Pytest 参数化

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/772100/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球