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

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. jquery全选,全不选,反选,获取选择框的值

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 【谷粒商城】(二)SpringCloudAlibaba分布式组件

    微服务 分布式组件 注册中心:每一个微服务上线都应该注册到注册中心.这样做的好处在于方便微服务之间的相互调用,比如订单服务想要调用商品服务,就可以通过注册中心查看有哪几台主机的商品服务进行了注册,然后 ...

  3. ☆常用的Sql语句汇总(DDL/DML)

    常用的sql语句汇总 1.获取所有表名.表信息 里面有表注释 数据库种类 sql 备注 mysql -- 获取所有表名.视图名show tables-- 获取 dev_test_data数据库 所有表 ...

  4. Linux下七种文件类型、文件属性及其查看方法

    1.七种文件类型 普通文件类型 Linux中最多的一种文件类型, 包括 纯文本文件(ASCII):二进制文件(binary):数据格式的文件(data);各种压缩文件.第一个属性为 [-] 目录文件 ...

  5. Grafana 系列-统一展示-3-Prometheus 仪表板

    系列文章 Grafana 系列文章 知识储备 Prometheus Template Variables 你可以使用变量来代替硬编码的细节,如 server.app 和 pod_name 在 metr ...

  6. Vulhub activewq_漏洞复现——源码分析

    Vulhub activewq_漏洞复现--源码分析 漏洞简介 Apache ActiveMQ是由美国阿帕奇(Apache)软件基金会开发的开源消息中间件,支持Java消息服务.集群.Spring框架 ...

  7. 2021-05-04:给定一个非负整数c,你要判断是否存在两个整数a和b,使得a*a+b*b=c。【举例】c=5时,返回true。c=4时,返回true。c=3时,返回false。

    2021-05-04:给定一个非负整数c,你要判断是否存在两个整数a和b,使得aa+bb=c.[举例]c=5时,返回true.c=4时,返回true.c=3时,返回false. 福大大 答案2021- ...

  8. docker安装kibana,报错Kibana server is not ready yet,未解决

    1.命令 docker run -d -e ELASTICSEARCH_URL=http://192.168.101.158:9200 -p 5601:5601 --name kibana kiban ...

  9. 在开发过程中使用git rebase还是git merge,优缺点分别是什么?

    前言 在开发过程中,git rebase 和 git merge 都是常见的代码版本管理工具.它们都能够将分支合并到主分支,并且都有各自的优缺点. git merge git merge 是一种将两个 ...

  10. 禁用input自动补全,模拟type=password输入字符显示为星号

    最近遇到一个想禁用浏览器的密码自动补全的功能,翻遍了整个技术论坛大多使用用auto-complete="new-password"但是本人测试不怎么管用,所有又找到了如下几种方法, ...