首页 > 其他分享 >Selenium53-第三版参数化

Selenium53-第三版参数化

时间:2022-12-30 17:57:15浏览次数:54  
标签:username parametrize 第三版 mark Selenium53 pytest 参数 password data

第二版问题和改进方案

  • 第二版问题:第二版代码中各个测试方法里有很多重复的操作步骤,没有复用,不方便代码的维护
  • 改进方案:第三版本引入参数化方式管理所有测试用例的测试数据。

pytest参数化

  • unittest单元测试框架:数据驱动测试ddt模块
    • ddt 是第三方模块,需单独安装, pip install ddt
  • Pytest使用@pytest.mark.parametrize装饰器来实现数据驱动测试的,也就是常说的参数化。

@pytest.mark.parametrize装饰器

  • @pytest.mark.parametrize装饰器语法
parametrize(self,argnames, argvalues, indirect=False, ids=None, scope=None)
  • 参数说明
    • argnames:参数名。
    • argvalues:参数对应值,类型必须为list。如果只有一个参数,里面则是值的列表。
    • indirect:如果设置成True,则把传进来的参数当函数执行,而不是一个参数。
    • ids:用例的ID,传一个字符串列表,用来标识每一个测试用例,自定义测试数据结果,增加可读性。

单个数据示例用法

  • 示例用法:
    • @pytest.mark.parametrize("username", ["yy", "yy2", "yy3"])。
  • 如果有多个参数,则需要用元组来存放值,一个元组对应一组参数的值,如:
    • @pytest.mark.parametrize("name,pwd", [("yy1", "123"), ("yy2", "123"), ("yy3", "123")])
    import pytest
    data = ["小红", "小明"]
    @pytest.mark.parametrize("name",data)
    def test_demo(name):
    print("测试数据为{}".format(name))
    

列表嵌套字典

import pytest
data_1 = [
    {"username": "admin1", "password": "123456"},
    {"username": "admin2", "password": "12345678"},
]
@pytest.mark.parametrize("data", data_1)
def test_login(data):
    print("账号:{},密码:{}".format(data["username"],data["password"]))

列表嵌套列表

import pytest
data_1 = [
    ["admin1", "123456"],
    ["admin2", "12345678"],
]
@pytest.mark.parametrize("username,password", data_1)
def test_login(username,password):
    print("账号:{},密码:{}".format(username, password))

列表嵌套元组

import pytest
data_1 = [
    ("admin1", "123456"),
    ("admin2", "12345678"),
]
@pytest.mark.parametrize("username,password", data_1)
def test_login(username,password):
    print("账号:{},密码:{}".format(username, password))

@pytest.mark.parametrize装饰函数

import pytest
@pytest.mark.parametrize("username,password",[("admin01","123456"),("admin02","12345678")])
def test_demo(username,password):
    print("用户名:{},密码:{}".format(username,password))

@pytest.mark.parametrize装饰类

import pytest
@pytest.mark.parametrize("username,password",[("admin01","123456"),("admin02","12345678")])
class TestDemo:
    def test_demo(self,username,password):
        print("用户名:{},密码:{}".format(username,password))

标签:username,parametrize,第三版,mark,Selenium53,pytest,参数,password,data
From: https://www.cnblogs.com/sean-test/p/17015490.html

相关文章