Pytest自动化测试框架进阶使用教程_用conftest(1)

  • 场景:

测试用例执行时,有的用例需要登录才能执行,有些用例不需要登录。

setup和teardown无法满足这种情况,但是fixture可以。默认scope(范围):function

  • 步骤:
  1. 导入pytest
  2. 在登录的函数上添加@pytest.fixture()
  3. 在要使用的测试方法中传入(登录函数名称)
  4. 不传入的就不登录,直接执行测试方法。

fixture作用域

取值范围说明
function函数级每一个函数或方法都会调用
class类级别每个测试类只执行一次
module模块级每个.py文件调用一次
package包级每个python包只调用一次(暂不支持)
session会话每次会话只需要运行一次,会话内所有方法及类,模块都共享这个方法

session是在整个项目中只执行一次的代码

yield关键字

场景:

你已经可以将测试方法【前要执行的或依赖的】解决了,那测试方法后销毁清除数据要如何进行?

解决:

通过在fixture函数中加入yield关键字,yield是调用第一次返回结果,第二次执行它下面的语句返回。

步骤:

@pytest.fixture(scope=module)

在登录的方法中加yield,之后加销毁清除的步骤

import pytest

@pytest.fixture()
def login():

setup

token = ‘1235236fdg’
print(“登录功能”)
yield token# 相当于return 返回none

teardown

print(“退出登录操作”)

def test_search():
print(“搜索功能”)

def test_cart(login):
print(f"token:{login}")
print(“购物车”)

数据共享

场景:

你与其他工程师合作一起开发时,公共的模块要在不同文件中,要在大家都访问的到的地方

解决:

使用conftest.py这个文件进行数据共享,并且它可以放在不同位置起着不同的范围共享作用

  • 前提:
  1. conftest文件名不能换
  2. 放在项目下是全局的数据共享
  • 执行:
  1. 系统执行到参数login时先从本模块中查找是否有这个名字的变量之类的
  2. 之后在conftest.py中找是否含有
  • 步骤:

将登录模块带@pytest.fixture写在conftest.py

自动应用

  • 场景:

不想原测试方法有任何改动,或全部都自动实现自动应用,没特例,也都不需要返回值时可以选择自动应用的方法

  • 解决:

使用fixture中的参数autouse=True实现

  • 步骤:

在方法上面加@pytest.fixture(autouse=Ture)

参数化

  • 场景:

测试离不开数据,为了数据灵活,一般数据都是通过参数传的

  • 解决:

使用fixture中的固定参数request传递

  • 步骤:

在fixture中添加@pytest.fixture(params=[1,2,3,‘linda’])

在方法参数写request,方法体里面使用request.param接受参数

@pytest.fixture(params=[‘hogwarts’,‘joker’])
def demo_params(request):
print(f’用户名为:{request.param}')
return request.param

def test_demo(demo_params):
print(f"数据为:{demo_params}")

  • 注意:fixture的参数是params,而调用的时候是request.param,没有s

总结:

  1. 模拟setup,teardown(一个用例可以引用多个fixture)
  2. yield的用法
  3. 作用域(session,module,类级别,方法级别)
  4. 自动执行(autouse参数)
  5. conftest.py用法,一般会把fixture写在conftest.py文件中
  6. 实现参数化

pytest.ini文件

  1. pytest.ini是pytest的配置文件
  2. 可以修改pytest的默认行为
  3. 不能使用中文符号,包括汉字,空格 ,引号,冒号等

作用:

  1. 修改用例的命名规则
  2. 配置日志格式,比代码配置方便很多
  3. 添加标签,防止运行过程报警告错误
  4. 指定执行目录
  5. 排除搜索目录

改变pytest运行规则

[pytest]
;执行check_开头的所有文件
python_files = check_* test_*
;执行所有的以Test和Check开头的类
python_classes = Test* Check*
;执行所有以test_和check_开头的方法
python_functions = check_* test_*

  • 注意:win系统的pytest.ini文件不能写中文,注释也不行

pytest配置-添加默认参数

addopts = -v -s --alluredir=./results

指定/忽略执行目录

;设置执行得路径
;testpaths = bilibili baidu
;忽略某些文件夹/目录
norecursedirs = result logs datas test_demo*

插件开发

  • pytest插件分类
  1. 外部插件:pip install 安装的插件
  2. 本地插件:pytest自动模块发现机制(conftest.py存放的)
  3. 内置插件:代码内部的_pytest目录加载(hook函数)

官网:PyPI · The Python Package Index

常用插件

每一种测试框架收集测试用例的顺序是不一样的

pytest执行顺序控制

  • 场景:

对于集成测试,经常会有上下文依赖关系的测试用例。如十个步骤,拆分成十个case,这时候能知道到底执行到哪步报错。

用例默认执行顺序:自上而下执行

  • 解决:

可以通过setup,teardown和fixture来解决,也可以使用pytest-ordering插件来解决

  • 安装:pip install pytest-ordering
  • 用法:@pytest.mark.run(order=2)
  • 注意:多个插件装饰器(>2)的时候,有可能会发生冲突

并行与分布式并发执行(xdist)

场景1:

  • 测试用例1000条,一个用例执行1分钟,一个测试人员需要1000分钟,通常我们会用人力成本换取时间成本,加几个人一起执行,时间就会缩短。这就是一种分布式场景。

场景2:

  • 假设有个报名系统,对报名总数进行统计,数据同时进行修改操作的时候有可能出现问题,需要模拟这个场景,需要多用户并发请求数据

解决:

  • 使用分布式并发执行测试用例,分布式插件:pytest-xdist
  • 安装:pip install pytest-xdist
  • 注意:用例多的时候效果明显,多进程并发执行,同时支持allure

hook函数

1. 介绍

  • 是个函数,在系统消息触发时被系统调用
  • 自动触发机制
  • Hook函数的名称是确定的
  • pytest有非常多的hook函数
  • 使用时直接编写函数体
  • 执行是有先后顺序的
  • 可以在不同阶段实现不同的功能

pytest执行过程

执行顺序:

pytest编写插件1-修改默认编码

pytest_collection_modifyitems收集上来的测试用例实现定制化功能

解决问题:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数软件测试工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

g-G7p5Iv9p-1712907990399)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-sedwuXf2-1712907990399)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值