今天来讲下参数化,具体是什么意思呢,举个例子
 
比如我们要测试登录功能,第一步会填写账号,第二步会填写密码,这是一条完整的操作,但是其中会有很多条用例比如账号错误、密码错误、账号为空、密码为空的各种情况,但是在输入账号、密码的操作都是一样的
 
我们不能一条用例复制很多次,然后再输入不同的情况,所以就用到了我们的参数化,只需要写一个用例操作,然后把全部需要的参数传入用例操作中,只需要不同数据就可以实现不同的情况,所以我们也经常叫这种为数据驱动
 
 

1、参数化怎么用

那Pytest使用参数化功能使用的是什么呢?
答:是一个装饰器
 
@pytest.mark.parametrize(self,argnams,argvalues,indirect=False,ids=None)
 
分析下参数
  • argnams 参数名,是一个字符串,若有多个参数中间用逗号分隔
  • argvalue 参数值,是一个列表,列表中有几个元素,便会生成几个用例
  • indirect 默认为False,若为True则表示参数名是一个函数
  • ids 可以将用例重命名
大概意思就是第一个参数填一个字符串,第二个参数填一个列表,列表里放参数
 
好,我们还是直接实战。
 

2、传一个参数

import pytest
"""
参数化的使用
"""
@pytest.mark.parametrize('num', [1, 2, 3, 4, 5])
def test_01(num):
print(f"传入的参数是:{num}")
我们定义函数,这里得主要有参数,所以必须在函数里先传入这个参数,之后才能使用,列表里放我们的参数[1,2,3,4,5],所以结果应该也是分别传入这几个数
运行结果:
 

2、传多个参数

@pytest.mark.parametrize('a,b,c', [(1, 2, 3), (4, 5, 6)])
def test_01(a, b, c):
print(f"传入的参数分别是:{a},{b},{c}")
这里我们传入了多个参数,用了列表包着元祖的形式传入参数
运行结果:
那有人会问,列表包着元祖可以,那列表包着字典不能使用吗?我们试一下就知道了
@pytest.mark.parametrize('a,b,c', [{1, 2, 3}, {4, 5, 6}])
def test_01(a, b, c):
print(f"传入的参数分别是:{a},{b},{c}")
看结果:
 
可以看到,是没有问题的,我们之后做数据驱动经常会用到此种数据
 

3、数据驱动

多个参数也没问题了,那很多很多数据呢,我们在接着放到参数里就会太长了,代码很不优雅,所以我们选用单独文件存储数据,这个文件形式呢?有yaml格式、json格式、excel格式,这些我们都可以用,然后我们选用读取文件数据的方式,然后再放在参数里就可以了
 
这样代码还更简洁了,如果要更换数据,直接在对应的数据文件里更换数据就可以了
 
下边直接看例子:
 
数据放到了JSON文件里
 
这时候就需要我们读取用例了,这里可以单独写一个函数
 
json_file = '具体的json文件路径'   # 这里我们填写json的绝对路径

def get_data():
"""
封装处理json数据的
"""
test_data = [] # 先定义一个数据存储器,读取的数据要往这里填 # 打开文件加载
with open(json_file, encoding="utf-8") as f: # 打开json文件夹
case = json.load(f) # 将JSON字符串转换为字典存放到case中 for case_data in case.values(): # 将数据循环拆开,变成元祖格式在放到我们之前的容器中
test_data.append(tuple(case_data.values())) return test_data
这是我们的数据处理,调用这个函数就返回数据了,我们可以先看结果,数据对不对
 
执行结果:
 
好了,我们可以在函数中使用了
import pytest
# 导入了处理数据的文件,方便之后调用函数
from tools.get_data import get_data @pytest.mark.parametrize("name,age", get_data())
def test01(name, age):
print(f"传入的参数分别是:{name},{age}")
我们直接在第二个参数中放我们的处理数据函数
执行结果:
 
没有问题,参数化我们基本已经掌握了

PlayWright(十七)- 参数化的更多相关文章

  1. Jmeter(三十七)循环控制器+交替控制器+事务控制器 完美实现接口字段参数化校验

    我们在做接口自动化的时候,常常因为无法灵活的的校验接口字段而烦恼.不能自动校验接口字段的脚本,也就不能称之为接口自动化.因此,我设计了一套组合式的控制器,可以完美的解决这个问题 1:首先我们需要在本地 ...

  2. (C/C++学习笔记) 十七. 面向对象程序设计

    十七. 面向对象程序设计 ● 面向对象程序设计的基本概念 ※ 类实际上是一种复杂的数据类型,它不仅包含不同类型的数据,还包含对这些数据的一些必要的操作. 而对象则是这种复杂的数据类型的一个变量. 类是 ...

  3. LoadRunner 参数化之 连接数据库进行参数化

    LoadRunner 参数化之 连接数据库进行参数化 Loadrunner(简称“LR”)对性能测试的脚本进行参数化时,由于数据量偏大,大家往往都会把数据录入到数据库表里,然后关联到LR,本文将详细介 ...

  4. playwright自动化项目搭建

    这是关于playwright系列介绍的最后一篇.搭建基于 playwright 的自动化项目. GitHub地址: https://github.com/defnngj/playwright-pro ...

  5. 第十七个知识点:描述和比较DES和AES的轮结构

    第十七个知识点:描述和比较DES和AES的轮结构 这是密码学52件事中的第17篇.本周我们描述和比较DES和AES的结构. DES和AES都是迭代分组密码的例子.分组密码通过重复使用一个简单的轮函数来 ...

  6. playwright结合pytest使用案例

    playwright简介 不愧是宇宙最强,它也是目前为止对ui自动化领域里最好的一个库,在selenium之上,还有对应的异步机制,其他见百度不便在此详叙. 本篇经典案例是对我司的veer产品做ui自 ...

  7. 微软出品自动化神器【Playwright+Java】系列(十二)测试框架的设计与开发

    一.前言 大家好,我是六哥! 又有好长一段时间没更文了,不是我懒,而是确实在更文上,没有以前积极了,这里是该自我检讨的. 其实不是我不积极,而是相对更文学习来说,优先级不是最高. 对我而言,目前最重要 ...

  8. 我的MYSQL学习心得(十七) 复制

    我的MYSQL学习心得(十七) 复制 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  9. lr文件下载脚本(文件参数化重命名)

    http://wenku.baidu.com/link?url=6oiIadyF9eFS4VshKbfJDnxrBh2IX919ndi0JO8yoqTRNRNIpavFrZJ9LPVb-FBSfbRY ...

  10. SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...

随机推荐

  1. Linux grep命令详细教程

    [本文出自天外归云的博客园] 简介 Linux grep命令是一种非常常用的文本搜索工具,它可以在给定的文件中搜索匹配的字符串,并输出匹配的行.grep是全称"global search r ...

  2. [Pytorch框架] 2.1.4 数据的加载和预处理

    文章目录 PyTorch 基础 :数据的加载和预处理 Dataset Dataloader torchvision 包 torchvision.datasets torchvision.models ...

  3. OpenCV-Python 中文教程

    OpenCV-Python 中文教程 目录 I 走进 OpenCV 关于 OpenCV-Python 教程 在 Windows 上安装 OpenCV-Python 在 Fedora 上安装 OpenC ...

  4. 【OpenAI】私有框架代码生成实践

    作者:京东零售 牛晓光 根据现有调研和实践,由OpenAI提供的ChatGPT/GPT-4模型和CodeX模型能够很好的理解和生成业界大多数编程语言的逻辑和代码,其中尤其擅长Python.JavaSc ...

  5. 2022-12-23:portainer是docker的web可视化工具。如果根据docker部署去写yaml,默认local是k8s,而不是docker,这不符合需求,需要修改yaml。请问部署在

    2022-12-23:portainer是docker的web可视化工具.如果根据docker部署去写yaml,默认local是k8s,而不是docker,这不符合需求,需要修改yaml.请问部署在 ...

  6. 2020-10-18:java中LongAdder和AtomicLong有什么区别?

    福哥答案2020-10-18:#福大大架构师每日一题# 简单回答:AtomicLong是CAS操作.LongAdder是多个单元操作. 中级回答:AtomicLong 是基于 CAS 方式自旋更新的: ...

  7. 2022-06-14:数组的最大与和。 给你一个长度为 n 的整数数组 nums 和一个整数 numSlots ,满足2 * numSlots >= n 。总共有 numSlots 个篮子,编号为 1

    2022-06-14:数组的最大与和. 给你一个长度为 n 的整数数组 nums 和一个整数 numSlots ,满足2 * numSlots >= n .总共有 numSlots 个篮子,编号 ...

  8. 2022-01-18:将数组分成两个数组并最小化数组和的差。 给你一个长度为 2 * n 的整数数组。你需要将 nums 分成 两个 长度为 n 的数组,分别求出两个数组的和,并 最小化 两个数组和之

    2022-01-18:将数组分成两个数组并最小化数组和的差. 给你一个长度为 2 * n 的整数数组.你需要将 nums 分成 两个 长度为 n 的数组,分别求出两个数组的和,并 最小化 两个数组和之 ...

  9. 使用vite的创建vue项目

    首先也是打开项目文件目录 在标签处快速打上cmd即可打开cmd窗口 然后按照顶部图进行操作即可完成 安装完成的样子如下图 紧接着输入 npm run dev 将Local 的IP复制到浏览器打开,出现 ...

  10. hexrays sdk study

    There are 20 examples in /ida_path/plugins/hexrays_sdk/plugins, you can learn from that, you can als ...