1、参数化的本质:相同的步骤,但测试数据不同,比如登录的场景

import math
import pytest

# 方式一:分离出List
def list_Test():
list = [
[2, 2, 4],
[2, 3, 8],
[1, 9, 1],
[0, 9, 0],
]
return list
@pytest.mark.parametrize('a,b,expect',list_Test())
def test_add_one(a,b,expect):
# 断言 -- 某数的平方=expect对象
assert math.pow(a,b) == expect

# 方式二:分离出tuple
def tuple_Test():
tuple = [
(2, 2, 4),
(2, 3, 8),
(1, 9, 1),
(0, 9, 0),
]
return tuple
@pytest.mark.parametrize('a1,b1,expect1',tuple_Test())
def test_add_two(a1,b1,expect1):
# 断言 -- 某数的平方=expect对象
assert math.pow(a1,b1) == expect1

# 方式三:分离出dict
def dict_Test():
dict = [
{'a': 2, 'b': 2, 'expect': 4},
{'a': 2, 'b': 3, 'expect': 8},
{'a': 2, 'b': 4, 'expect': 16},
{'a': 1, 'b': 9, 'expect': 1},
]
return dict
@pytest.mark.parametrize('datas',dict_Test())
def test_add_three(datas):
# 断言 -- 某数的平方=expect对象
assert math.pow(datas['a'],datas['b']) == datas['expect']

# 方式四: 使用pytest.param方法进行分离
def param_Test():
param = [
pytest.param(1, 1, 1,id='one'),
pytest.param(2, 2, 4,id='two'),
pytest.param(3, 3, 27,id='three')
]
return param
# ids参数默认为None,用于定义测试用例的名称
@pytest.mark.parametrize('a,b,expect',param_Test())
def test_add_four(a,b,expect):
# 断言 -- 某数的平方=expect对象
assert math.pow(a,b) == expect

if __name__ == '__main__':
pytest.main(['-v','-s','test_mark.param.py'])

运行代码结果如下:

2、固件request

在Pytest的测试框架中,参数化也会使⽤到pytest内置的固件request,通过request.param来获取参数,对上面的案例代码进行修改,fixture参数列表中request也是内建fixture
import pytest
import math

def datas():
dict_param = [
{'a': 2, 'b': 2, 'expect': 4},
{'a': 2, 'b': 3, 'expect': 8},
{'a': 2, 'b': 4, 'expect': 16},
]
return dict_param

@pytest.fixture(params=datas())
def getParams(request):
return request.param

def test_math_pow(getParams):
# 断言 -- 某数的平方=expect对象
assert math.pow(getParams['a'],getParams['b']) == getParams['expect']

if __name__ == '__main__':
pytest.main(['-v','-s','test_mark.param.py'])

代码运行结果如下:

Pytest单元测试框架之parametrize参数化的更多相关文章

  1. Pytest单元测试框架-测试用例运行规则

    1.Pytest测试用例运行规则 在pytest单元测试框架下面执行用例,需要满足以下几个特点: 1. 文件名以test_*.py开头或者*_test.py 2. 测试类.测试函数以test开头 3. ...

  2. Pytest单元测试框架-Pytest环境安装

    unittest是python自带的单元测试框架,它封装好了一些校验返回的结果方法和一些用例执行前的初始化操作,使得单元测试易于开展,因为它的易用性,很多同学也拿它来做功能测试和接口测试,只需简单开发 ...

  3. Pytest单元测试框架:插件-allure-pytest环境搭建并在本地生成一个测试报告

    之前写了allure-pytest的官方文档啃的内容,有些交流的朋友,实践起来没什么头绪,所以就有了这篇文章,也给自己填个坑 第一步:搭建Allure.JDK环境 1. 搭建JDK环境 不装jdk你会 ...

  4. Pytest单元测试框架之简单操作示例

    前言: Pytest是第三方单元格测试框架,更加简单,灵活,而且提供了更多丰富的扩展: Pytest与UnitTest框架的区别 UnitTest测试用例执行顺序是依照ascii码执行,而Pytest ...

  5. Pytest单元测试框架-学习

    pytest: Python的一个单元测试框架,基于UnitTest二次开发,语法上更加简洁,可以用来做Python开发项目的单元测试,UI自动化.接口自动化测试等,有很多的插件访问Pytest插件汇 ...

  6. Pytest单元测试框架之FixTure基本使用

    前言: 在单元测试框架中,主要分为:测试固件,测试用例,测试套件,测试执行及测试报告: 测试固件不难理解,也就是我们在执行测试用例前需要做的动作和测试执行后的需要做的事情: 比如在UI自动化测试中,我 ...

  7. Pytest 单元测试框架

    1.pytest 是 python 的第三方单元测试框架,比自带 unittest 更简洁和高效 2.安装 pytest pip install pytest 3.验证 pytest 是否安装成功 p ...

  8. Pytest单元测试框架——Pytest+Allure+Jenkins的应用

    一.简介 pytest+allure+jenkins进行接口测试.生成测试报告.结合jenkins进行集成. pytest是python的一种单元测试框架,与python自带的unittest测试框架 ...

  9. pytest单元测试框架

    一.安装方式 1.安装命令:pip install pytest 2.html安装插件:pip install pytest -html 二.pytest执行指定测试用例 1.思想:通过对测试用例进行 ...

随机推荐

  1. IaaS、PaaS 和 SaaS:云服务模型概述

    IaaS.PaaS 和 SaaS:云服务模型概述 为您的组织选择合适的云服务模型,可以帮助您充分利用预算和 IT 资源. 基础设施即服务 (IaaS).平台即服务 (PaaS) 以及软件即服务 (Sa ...

  2. https://www.jianshu.com/writer#/notebooks/164311/notes/88906048/preview

    什么是 webassembly 在 2019 年 12 月之前,如果你要编写一个web页面,那一定离不开 html.css.js 这三个好兄弟.在 2019 年 12 月之后 W3C 宣布 webas ...

  3. Spring如何使用三级缓存解决循环依赖

    Spring如何使用三级缓存解决循环依赖 首先来了解一下什么是循环依赖 @Component public class A { @Autowired B b; } @Component public ...

  4. JUC 并发编程--12, 使用AtomicInteger 实现一把锁(排队自旋锁), 代码演示

    前面 使用自旋锁实现了一把锁,(请看 第5篇) volatile 三大特性: 可见性, 不保证原子性, 禁止指令重排 为了解决 volatile不保证原子性的问题, 引入了原子类, AtomicInt ...

  5. UF_UI 界面相关

    Open C   uc1600uc1601uc1603  uc1605uc1607uc1608uc1609uc1613  获取用户输入的字符串uc1615uc1616uc1617uc1618uc163 ...

  6. [Linux]经典面试题 - 系统管理 - 备份策略

    [Linux]经典面试题 - 系统管理 - 备份策略 目录 [Linux]经典面试题 - 系统管理 - 备份策略 一.备份目录 1.1 系统目录 1.2 服务目录 二.备份策略 2.1 完整备份 2. ...

  7. js中有对象的key怎么获取对应的值

    一般人的思路是这样的 var obj = {"name1":"张三","name2":"李四"}; var key = ...

  8. excel vba的inputBox函数

    Sub test1()    Dim h    Dim j As Integer    j = 0    Dim n1 As Integer '分行单元格在第几列    Dim m1 As Integ ...

  9. 30、LNAP(php和nginx相关优化)

    30.1.php-fpm.conf参数优化: [global] pid = run/php-fpm.pid #php后台运行pid路径 error_log = log/php-fpm.log #php ...

  10. 39、升级linux的内核

    39.1.什么是linux系统内核: 操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件.一个计算机 系统是一个硬件和软件的共生体,它们互相依赖,不可分割.计算机的硬件,含有外 ...