Pytest之参数化
在unittest测试中,有参数化的概念,那么在pytest中也有。
如何理解参数化:
当对一个测试函数进行测试时,通常会给函数传递多组参数。比如测试账号登陆,我们需要模拟各种千奇百怪的账号密码。可以把这些参数写在测试函数内部进行遍历。不过虽然参数众多,但仍然是一个测试,当某组参数导致断言失败。我们想要的是一个的失败不影响其他的失败。通过参数化的方式来管理组织。那么我们看下pytest如何实现参数化的。
pytest.mark.parametrize(argnames, argvalues)
假设要测试密码的长度必须大于8位且小于16位。设计了几个密码
['123','12345678','1234567890123456','12345678901234561']
我们看下如何使用
import pytest
@pytest.mark.parametrize('passwd',
['123','12345678','1234567890123456','12345678901234561'])
def test_passwd_length(passwd):
assert len(passwd) >= 8
assert len(passwd)<=16
正常应该执行四个测试用例

失败用例:


符合我们预期,可以看到用参数化的思路可以减少代码编写。
如果我们要验证用户名和密码呢,两个参数如何实现呢。
import pytest
@pytest.mark.parametrize('user,passwd', [
('lowen', '123'), ('lowen', '12345678'),
('lowen', '1234567890123456'),
('lowenlowen', '12345678901234561')
])
def test_passwd_length(user, passwd):
assert len(passwd) >= 8
assert len(passwd) <= 16
assert user == 'lowen'


当然还可以给每组参数增加id
import pytest
@pytest.mark.parametrize('user,passwd',
[pytest.param('lowen', '123', id='User:lowen'),
pytest.param('lowen', '12345678', id='User:lowen'),
pytest.param('ll', '1234567890123456', id='User:ll'),
pytest.param('lowenlowen', '12345678901234561', id='User:lowenzishuoceshikwaifa')])
def test_passwd_length(user, passwd):
assert len(passwd) >= 8
assert len(passwd) <= 16
assert user == 'lowen'
执行结果为:

上面的都是写固定的,但是,实际的工作中呢,很多时候的参数都是实时读取的。这些参数数据都是动态读取来的,那么看下如何给参数动态传递呢,这里获取数据,写了一个demo。
import pytest def getparame() -> list:
return [('lowen', '123'), ('lowen', '12345678'), ('ll', '1234567890123456'),
('lowenzishuoceshikaifa', '12345678901234561')] @pytest.mark.parametrize('user,passwd',getparame())
def test_passwd_length(user, passwd):
assert len(passwd) >= 8
assert len(passwd) <= 16
assert user == 'lowen'
执行结果为:

Pytest之参数化的更多相关文章
- pytest 8 参数化parametrize
pytest.mark.parametrize装饰器可以实现用例参数化 1.以下是一个实现检查一定的输入和期望输出测试功能的典型例子 import pytest @pytest.mark.parame ...
- pytest.5.参数化的Fixture
From: http://www.testclass.net/pytest/parametrize_fixture/ 背景 继续上一节的测试需求,在上一节里,任何1条测试数据导致断言不通过后测试用例就 ...
- pytest的参数化
参数化有两种方式: 1. @pytest.mark.parametrize 2.利用conftest.py里的 pytest_generate_tests 1中的例子如下: @pytest.mark. ...
- pytest(8)-参数化
前言 什么是参数化,通俗点理解就是,定义一个测试类或测试函数,可以传入不同测试用例对应的参数,从而执行多个测试用例. 例如对登录接口进行测试,假设有3条用例:正确账号正确密码登录.正确账号错误密码登录 ...
- pytest的参数化测试
感觉在单元测试当中可能有用, 但在django这种框架中,用途另一说. import pytest import tasks from tasks import Task def test_add_1 ...
- pytest封神之路第五步 参数化进阶
用过unittest的朋友,肯定知道可以借助DDT实现参数化.用过JMeter的朋友,肯定知道JMeter自带了4种参数化方式(见参考资料).pytest同样支持参数化,而且很简单很实用. 语法 在& ...
- pytest和unittest中参数化如何做
参数化应用场景,一个场景的用例会用到多条数据来进行验证,比如登录功能会用到正确的用户名.密码登录,错误的用户名.正确的密码,正确的用户名.错误的密码等等来进行测试,这时就可以用到框架中的参数化,来便捷 ...
- 『德不孤』Pytest框架 — 15、Pytest参数化
目录 1.Pytest参数化说明 2.Pytest参数化方式 3.parametrize装饰器参数说明 4.Pytest参数化(单个参数) 5.Pytest参数化(多个参数) 6.ids参数说明 1. ...
- pytest学习笔记(三)
接着上一篇的内容,这里主要讲下参数化,pytest很好的支持了测试函数中变量的参数化 一.pytest的参数化 1.通过命令行来实现参数化 文档中给了一个简单的例子, test_compute.py ...
- 【Python】【自动化测试】【pytest】
https://docs.pytest.org/en/latest/getting-started.html#create-your-first-test http://www.testclass.n ...
随机推荐
- 比Everything更强的文件搜索工具,支持文件名、文件内容和文件图片上的文字搜索,文件内容搜索工具,文件图片内容搜索工具,OCR图片文本识别搜索,文件快速搜索工具,文字识别文件搜索工具
Windows自带的文件搜索功能想必不需要过多吐槽,搜索速度简直是在龟爬,所以小编很早之前就在用Everything进行文件搜索了, 不过,今天的主角不是它,而是比它更更更更更强的一款软件! 这款软件 ...
- Linux-curl下载报错解决方法
报错提示: curl: (92) HTTP/2 stream 1 was not closed cleanly before end of the underlying stream ==> E ...
- NextCloud 17.0.1 升级到NextCloud 23.0.0
NextCloud 版本过低使用时间过长,想升级一下. 问题记录及参考文档 本次采用离线升级(在线不能下载) 官网下载https://nextcloud.com/install/# 23.0.0最新 ...
- shell语法4-printf命令、test命令和判断符号[]、逻辑运算符&&和||
一.printf命令 printf命令用于格式化输出,类似于C/C++中的printf函数. 默认不会在字符串末尾添加换行符!!! 例如: printf "%10d.\n" 123 ...
- flutter SliverPersistentHeader子组件透明度渐变【滑动悬停appbar添加自定义组件的透明度】
在开发flutter悬停头部中,发现一个问题. 我们通常使用SliverAppBar(),去实现悬停的功能,在使用appbar的时候满足不了我们的需求,就需要自定义, 如下:在title中写了一个搜索 ...
- 【根文件系统 】开发板通过nfs挂载ubuntu上的根文件系统
在此基础上制作可用的根文件系统:https://www.cnblogs.com/hengqiu/p/15908597.html 1.ubuntu搭建nfs服务器 sudo apt-get instal ...
- 基于MIPI的高性能成像系统
硬件组件Digilent Genesys ZU × 1 (FPGA平台) Digilent PCAM5 × 1 (MIPI摄像头) 软件组件AMD-Xilinx Vivado 设计套件 介绍从简单的嵌 ...
- python 操作 ES 二、mappings
环境 python:3.8 es:7.8.0 环境安装 pip install elasticsearch==7.8.0 from elasticsearch import Elasticsearch ...
- SCI、SSCI、EI、北大中文核心期刊、CSCD、CSSC、SCD、CSSCI 扩展版、计算机软件著作权
https://zhidao.baidu.com/question/308484724.html SCI(科学引文索引).EI(工程索引).ISTP(科技会议录索引)是世界著名的三大科技文献检索系统, ...
- Delphi as 和 is 的使用
as就是把某个类型对象转换为某个指定类型,这样方便使用指定类型中的一些成员. is就是判断某个对象是不是某个类型,可以筛选出我们需要的对象. 下面是一个as is 的实例代码,该代码同时也实现了两种方 ...