pytest十一:函数传参和 firture 传参数 request
为了提高代码的复用性,我们在写用例的时候,会用到函数,然后不同的用例去调用这个函数。比如登录操作,大部分的用例都会先登录,那就需要把登录单独抽出来写个函数,其它用例全部的调用这个登录函数就行。
但是登录的账号不能写死,有时候我想用账号 1 去登录,执行用例 1,用账号 2 去登录执行用例 2,所以需要对函数传参。 登录函数传参
把登录单独成立,写一个函数,传 2 个参数 user 和 psw,写用例的时候调用登录函数,输入几组 user,psw 参数化登录用例
测试用例传参需要用装饰器@pytest.mark.parametrize,里面写两个参数
第一个参数是字符串,多个参数中间用逗号隔开
第二个参数是 list,多组数据用元祖类型


从结果可以看出,有 2 个用例,一个测试通过,一个测试失败了,互不影响
import pytest
test_login_data = [('admin', '111111'), ('admin', '')] # 测试登录数据
def login(user, psw):
'''普通登录函数'''
print(f'\n登录账号:{user}')
print(f'登录密码:{psw}')
if psw:
return True
else:
return False
@pytest.mark.parametrize('user, psw', test_login_data)
def test_login(user, psw):
'''登录用例'''
result = login(user, psw)
assert result == True, '失败原因,密码为空'
if __name__=='__main__':
pytest.main()
request 参数
如果想把登录操作放到前置操作里,也就是用到@pytest.fixture装饰器,传参就用默认的 request 参数
user = request.param 这一步是接收传入的参数,本案例是传一个参数情况


添加 indirect=True 参数是为了把 login 当成一个函数去执行,而不是一个参数
import pytest test_user_data = ["admin1", "admin2"]
@pytest.fixture(scope='module')
def login(request):
user = request.param
print(f'\n登录账户:{user}')
return user @pytest.mark.parametrize('login', test_user_data, indirect=True)
def test_lodin(login):
'''登录用例'''
a = login
print(f'测试用例中login的返回值:{login}')
return a !='' if __name__=='__main__':
pytest.main()
request 传 2 个参数
如果用到@pytest.fixture,里面用 2 个参数情况,可以把多个参数用一个字典去存储,这样最终还是只传一个参数
不同的参数再从字典里面取对应 key 值就行,如: user = request.param[“user”]


如果要用到login里面的返回值,def test_login(login)时,传入login参数,函数返回值就是 login 了
import pytest
test_user_data = [{'user': 'admin', 'psw': '111111'},
{'user': 'admin', 'psw': ''}]
@pytest.fixture(scope='module')
def login(request):
user = request.param['user']
psw = request.param['psw']
print(f'\n登录账户:{user}')
print(f'登录密码:{psw}')
if psw:
return True
else:
return False
@pytest.mark.parametrize('login', test_user_data, indirect=True)
def test_login(login):
'''登录用例'''
a = login
print(f'测试用例中login的返回值:{a}')
assert a, f'失败原因:密码为空'
if __name__=='__main__':
pytest.main()
多个 fixtrue
用例上面是可以同时放多个 fixture 的,也就是多个前置操作,可以支持装饰器叠加,使用 parametrize 装饰器叠加时,用例组合是 2个参数个数相乘


如果参数 user 有 2 个数据,参数 psw 有 2 个数据,那么组合起来的案例是两个相乘,也就是组合 2*2 = 4 个用例
import pytest test_user = ['admin1', 'admin2']
test_psw = ['11111', '222222']
@pytest.fixture(scope='module')
def input_user(request):
user = request.param
print(f'\n登录账户:{user}')
return user @pytest.fixture(scope='module')
def input_psw(request):
psw = request.param
print(f'登录密码:{psw}')
return psw @pytest.mark.parametrize('input_user', test_user, indirect=True)
@pytest.mark.parametrize('input_psw', test_psw, indirect=True)
def test_login(input_user, input_psw):
'''登录用例'''
a = input_user
b = input_psw
print(f'测试数据a->{a}, b->{b}')
assert b if __name__=='__main__':
pytest.main()
pytest十一:函数传参和 firture 传参数 request的更多相关文章
- pytest_函数传参和firture传参数request
前言为了提高代码的复用性,我们在写用例的时候,会用到函数,然后不同的用例去调用这个函数. 比如登录操作,大部分的用例都会先登录,那就需要把登录单独抽出来写个函数,其它用例全部的调用这个登陆函数就行. ...
- 函数传参和firture传参数request
前言 为了提高代码的复用性,我们在写用例的时候,会用到函数,然后不同的用例去调用这个函数.比如登录操作,大部分的用例都会先登录,那就需要把登录单独抽出来写个函数,其它用例全部的调用这个登陆函数就行.但 ...
- pytest 12 函数传参和fixture传参数request
前沿: 有的case,需要依赖于某些特定的case才可以执行,比如,登陆获取到的cookie,每次都需要带着他,为了确保是同一个用户,必须带着和登陆获取到的同一个cookies. 大部分的用例都会先登 ...
- pytest文档14-函数传参和firture传参数request
前言 为了提高代码的复用性,我们在写用例的时候,会用到函数,然后不同的用例去调用这个函数. 比如登录操作,大部分的用例都会先登录,那就需要把登录单独抽出来写个函数,其它用例全部的调用这个登陆函数就行. ...
- python中函数的参数:必传参数(位置参数)、默认值参数、参数组传参、关键字传参
1.必传参数也叫做位置参数,因为必填,也必须对应位置 2.默认值参数如上图的word 3.参数组参数:传进去的是0个.或多个value的形式,,,和位置参数有点像,只传value值,但是没有限制个数 ...
- [ 随手记6 ] C/C++ 形参、实参、按值传参、指针传参、引用传参
个人原创: 1. 形参:形式上的参数,一般多在函数声明.函数定义的参数上: 2. 实参:实体参数,有实际的值,在运算上被循环使用的值: 3. 按值传参:按值,就是把实际的值传给函数内部: 4. 指针传 ...
- C/C++函数调用时传参过程与可变参数实现原理
C/C++函数调用时传参过程与可变参数实现原理 C语言的经典swap问题 在学习C语言的时候,我们大都遇到过一些经典例题,这些经典例题背后所代表的是往往是C/C++背后的一些运行原理,比如下面这个示例 ...
- vue初始化、数据处理、组件传参、路由传参、全局定义CSS与JS、组件生命周期
目录 项目初始化 组件数据局部化处理 子组件 父组件 路由逻辑跳转 案例 组件传参 父传子 子组件 父组件 子传父 子组件 父组件 组件的生命周期钩子 路由传参 第一种 配置:router/index ...
- Apache ab测试工具使用方法(无参、get传参、post传参)
Ab测试工具是apache自带的测试工具,具有简单易上手的特性,下面我总结一下我的使用方法,首先去官方下载apache程序包,我下的最新版本apache2.4.23,下载地址http://httpd. ...
随机推荐
- ev的offsetX,pageX,clientX和screenX
event.offsetX.event.offsetY(相对事件发生的具体元素左上角的定位) 鼠标相对于事件源元素(srcElement)的X,Y坐标,只有IE事件有这2个属性,标准事件没有对应的属性 ...
- ansible-playbook && Roles && include
先看一个yml文件示例 --- - hosts: webservers #主机组 vars: ##变量设置 http_port: 80 max_clients: 200 remote_user: ro ...
- 面向对象【day07】:面向对象引子(一)
本节内容 概述 面向对象引子 面向过程介绍 一.概述 很对人都不理解编程中的面向对象的概念,那我们先来说说面向对象的引子,由这个引子带领我们更好的理解面向对象的概念. 二.面向对象引子 你现在是一家游 ...
- Java中Dom解析XML
DOM将整个XML文件加载到内存中,并构建出节点树:应用程序可以通过遍历节点树的方式来解析XML文件中的各个节点.属性等信息:这种方式便于对XML节点的添加修改等,而且解析也很方便,然后它比较耗费内存 ...
- Study 3 —— Python运算符
参考资料:http://www.runoob.com/python/python-operators.html#ysf2 定义变量: a = 10, b = 20 算术运算符: 运算符 描述 实例 ...
- ActiveMQ进阶配置
配置web管理页面的安全认证 配置web管理页面的绑定IP和端口 配置MQ连接的安全认证 禁用不使用的连接协议 绑定协议连接端口到指定IP 使用MySql作为持久化保存 配置基于JDBC的高可用环境 ...
- git回滚远程仓库代码/错提master分支的恢复
前言 今天周五了,刚接了个新微服务模块,下班前高高兴兴开发完,提交git代码,jenkins发布到测试环境.突然看到一个提示 我最近提的代码呢?!! 想到可能会提错仓库,转念一想,不对呀,我怎有这么高 ...
- springboot(八)自定义Filter、自定义Property
自定义Filter 我们常常在项目中会使用filters用于录调用日志.排除有XSS威胁的字符.执行权限验证等等. Spring Boot自动添加了OrderedCharacterEncodingFi ...
- u-boot移植(三)---修改前工作:代码流程分析2
一.vectors.S 1.1 代码地址 vectors.S (arch\arm\lib) 1.2 流程跳转 跳转符号 B 为 start.S 中的 reset 执行代码,暂且先不看,先看看 vect ...
- MySql 安装与使用图文教程
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司.MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内, ...