进阶高级测试专项,Pytest自动化测试框架总结(二)

2023-11-02


前言

1、pyets种有四种级别的setup和teardown

setup_module和teardown_module,在整个测试用例所在的文件中所在的文件中所有的方法运行前和运行后运行,只运行一次—模块的

setup_class和teardown_class,在整个测试文件中的一个class中所有的用例的签后运行 ----class类

setup_method和teardown_method,在class内的每个方法运行前后运行 ---------方法的

setup_function和teardown_function,在非class下属的每个测试方法的前后运行 ----函数的
分层分级(不同级别有不同方法)

2、pytest里面的数据初始化装饰器fixture参数说明

fixture_function: Optional[_FixtureFunction] = None,
*,
scope: "Union[_Scope, Callable[[str, Config], _Scope]]" = "function",  --scope参数:级别
params: Optional[Iterable[object]] = None,------------------------------- params:参数
autouse: bool = False,---------------------------------------------------- autouse:是否自动化执行
ids: Optional[
	Union[
		Iterable[Union[None, str, float, int, bool]],
		Callable[[Any], Optional[object]],
	]
] = None,
name: Optional[str] = None
@pytest.fixture(scope=xxx,params=xxx,autouse=xxx) 

fiixture装饰器可以传单三个参数:
scope参数:初始化清除定义级别
params:参数
autouse:是否自动化执行

3、fixture 函数级别的初始化,环境初始化

import pytest
 
                #函数级别的@pytest.fixture()初始化操作
@pytest.fixture()       #标记函数是个初始化操作,标记后需要传给每个函数statr_func这个函数名才会执行初始化操作(函数级别的)
def statr1_func():
                #这不是测试函数,一个普通函数,pytest执行用例只能识别test开头的方法和函数,所以pytest.main不会执行(不参加pytest用例)
    print("------初始化操作1------")
 
@pytest.fixture()
def statr2_func():
    print("------初始化操作2------")
 
#fixture:有哪些操作(可以多个初始化可以一起调,需要两个初始化,需要连接,需要登录)
#这种写法很方便,函数需要statr_func1函数做一个初始化操作可以调用statr_func1这个函数,---def test_001(statr1_func):
# 需要其他初始化方法可以选择性调用其他初始化函数,传递函数名就行(灵活选择)----def test_002(statr2_func):
#函数初始化操作需要传递几个函数也可以多个函数名传递--def test_003(statr2_func,statr1_func):
#方便灵活
 
def test_001(statr1_func):
    print("-----test01------")
 
def test_002(statr2_func):
    print("-----test02 ------")
 
def test_003(statr2_func,statr1_func):
    print("-----test03 ------")
 
if __name__ == '__main__':
    pytest.main(["test_pytest.py","-s"])

4、类级别的初始化class,可以使用setup做初始化,也可以使用fixture做初始化

import pytest


@pytest.fixture(scope="class")           #类级别的初始化函数  scope="class" 就是把这个初始化定义成类级别的
def statr1_func():
	print("------初始化操作1------")

class Test_00:                  #需要执行 Test_00测试类,需要做初始化(可以setup_class)
	# def setup_class(self):
	#     print("类内部的初始化,")          #只对类有用,类级别的,类里只做一次(几个类的初始化操作一样这种不适合,需要重复写)
										   #fixture初始化类就是避免重复代码
	def test_001(self,statr1_func):
		print("-----test01------")

	def test_002(self,statr1_func):
		print("-----test02 ------")


if __name__ == '__main__':
	pytest.main(["test_pytest01.py","-s"])

类级别初始化fixture,虽然test_001和test_002都调用了statr1_func这个类级别的初始化函数,但是执行类测试用例的时候只执行statr1_func初始函数一次。

多个类都可以调用statr1_func这个类级别的初始化方法,调用的时候最好放在类里的第一个函数,后面的函数可以不传(因为对应的是类级别的初始化)

import pytest


@pytest.fixture(scope="class")         #类级别的初始化函数
def statr1_func():
	print("------初始化操作1------")
											#一个模块里面有函数用例也有类的用例怎么做:(class级别的初始化只对类有用,对函数没用)
def test_003(statr1_func):                  #测试函数,
	print("-----test03------")

class Test_00:                        #需要执行test00测试类,需要做初始化(可以setup_class)
	def test_001(self,statr1_func):
		print("-----test01------")

	def test_002(self,statr1_func):
		print("-----test02 ------")

if __name__ == '__main__':
	pytest.main(["test_pytest01.py","-s"])

初始化方法statr1_func定义成class类级别的,函数级别的测试测试用例test__003调用初始化函数会执行一次。

class类级别的测试用例Test_00调用初始化函数会执行一次(一共执行两次)  看级别的,整个模块的级别的化最好用module,否则有问题,fixture可以做return,会有返回值的,对应级别来做。

执行结果:

 test_pytest01.py 	    
------初始化操作1------	    
-----test03------	    
.------初始化操作1------	    
-----test01------	    
.-----test02 ------

5、类级别初始化实际代码:初始化操作是登录操作

#课程模块的测试类
import pytest
from lib.api_lib.lesson import Lesson
from lib.api_lib.lesson import Login
from tools.execlMethod import get_excelData
import json
import os

@pytest.fixture(scope="class")           #类级别的初始化函数
def start_func():
	global sessionid
	sessionid = Login().login('{"username":"auto","password":"sdfsdfsdf"}')

class Test_lesson:
	#1:课程新增接口,前置条件登录(封装完一个方法后想办法做数据驱动),课程增加需要通过excel表用例来做
	@pytest.mark.parametrize("inData,repsData", get_excelData('2-课程模块', 2, 26))
	def test_lesson_add(self,start_func,inData,repsData):
		reps=Lesson(sessionid).lesson_add(inData)
		print(reps)
		assert reps["retcode"]==json.loads(repsData)["retcode"]

if __name__ == '__main__':
	pytest.main(["test_lesson01.py", "-s", "--alluredir", "../report/tmp"])
	os.system("allure serve ../report/tmp")

6、模块级别的初始化mudule,不管是类还是方法@pytest.fixture(scope=“module”)

模块(module)级别的初始化,(整个模块所有的类所有的东西要做一步操作,可以使用module这个模式)

只在模块运行前面只做一次,后面不做了,哪怕多调用也没用,一个模块里面有test_003函数测试用例,

也有classTest_00类级别的测试用例,定义一个模块级别的初始化函数statr1_func

函数里面调用初始化方法def test_003(statr1_func):和类里面的方法调用初始化方法test_001(self,statr1_func):,test_001(self,statr1_func):

整个模块执行的时候初始化函数都只执行一次(不管你这个模块里面调用多少次)

import pytest


@pytest.fixture(scope="module")         #模块级别的初始化函数
def statr1_func():
	print("------初始化操作1------")

						  #一个模块里面有函数用例也有类的用例怎么做:(class级别的初始化只对类有用,对函数没用)
def test_003(statr1_func):            #测试函数,
	print("-----test03------")

class Test_00:                          #需要执行test00测试类,需要做初始化(可以setup_class)
	# def setup_class(self):
	#     print("类内部的初始化,")      #只对类有用,类级别的,类里只做一次(几个类的初始化操作一样这种不适合,需要重复写)
	#                                   #fixture初始化类就是避免重复代码
	def test_001(self,statr1_func):
		print("-----test01------")

	def test_001(self,statr1_func):
		print("-----test02 ------")

if __name__ == '__main__':
	pytest.main(["test_pytest01.py","-s"])
执行结果:test_pytest01.py 
------初始化操作1------
-----test03------	
.-----test01------
.-----test02 ------

7、session的级别的初始化,跨模块的,package级别的

在这个模块下面所有的都会调用(包级别的,包里面运行前做个环境清除)

需要在testcase文件夹里面创建一个conftest.py模块,这个固定名称,pytest自动识别这个名称

testcase里面:新增课程前面需要登录,增加课程前面需要清除数据,需要2个级别的初始化,登录,整个环境的清除

test_case(测试用例文件夹)创建一个:conftest.py文件  里面写包级别的初始化

conftest.py文件里也能写类级别和模块级别的初始化,而且不需要调用,这个conftest.py模块是pytest自动识别导入的

test_case              #文件夹
conftest.p


import pytest
#包级别的初始化,在运行整个包之前做个初始化,包里面不同作用域,每个包里面都可以放一个,每个包里面的操作都可以不一样
@pytest.fixture(scope="session",autouse=True)           #session级别的处于时候autouse=True默认自动执行
def start_demo(request):                                     #包的开始
	print("我是整个包的初始化")
	def fin():                             #尾部这是包级别的,整个包做完后做个环境数据的清除    包的结束
		print('---测试完成,包的数据清除---')

	request.addfinalizer(fin)                   #回调,当我整个包运行完了后回调fin这个方法

#fixture的参数autouse: bool = False,---自动执行参数    #session的级别,包里面有很多模块,很多模块需要对整个包进行初始化在conftest.py里面做模块的数据初始化和清除(conftest.py只对当前包有用)

8、两种调用初始化和清除函数的方式+初始化清除函数的返回值的使用

方式一:

import pytest
@pytest.fixture()
def befor_func():
    print('xxxxxxxxxxxxx测试用例的初始化xxxxxxxxxxxxxxxx')
    yield 10
    print('zzzzzzzzzzzzzzzzzz测试用例的清除zzzzzzzzzzzzzz')

def test_001(befor_func):                #调用初始化和清除方式一:直接在测试用例里传递初始化清除函数的函数名来调用
    print("测试用例001")
    res=befor_func                    #如果初始化清除函数有返回值,可以直接这样接收参数来使用
    print(res)

@pytest.mark.usefixtures('befor_func')        #调用初始化和清除方

方式二:使用usefixtures放在测试用例前面直接调用初始化清除函数

def test_002():
    print("测试用例002")

if __name__ == '__main__':
    pytest.main(["test1.py",'-s'])
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

梦想是航向未来的指南针,坚持努力是拨开迷雾的利剑。勇敢追逐,脚踏实地,用心与汗水创造无限可能。磨砺意志,超越自我,让奋斗的火焰燃亮人生的每一个角落,绽放绚烂的辉煌!

心怀梦想,追逐自由,奋斗是破茧成蝶的力量。坚持不懈,超越极限,用汗水谱写人生的华章。相信奇迹,勇往直前,让每一天都成为决定命运的关键时刻,绽放自己独特的光芒!

不畏风雨,追逐梦想,奋斗是燃烧内心的力量。放眼未来,脚踏实地,用努力铺就通往成功的道路。每一次努力都是成长的催化剂,相信自己,勇往直前,创造属于自己的辉煌人生!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

进阶高级测试专项,Pytest自动化测试框架总结(二) 的相关文章

  • 是否可以在 pytest_generate_tests() 中使用固定装置?

    我有一些固定装置conftest py在实际测试功能中运行良好 但是 我想使用参数化一些测试pytest generate tests 基于其中一些装置的数据 我想做的 简化 conftest py my fixture returns a
  • Jenkins 在 Docker 容器内构建并生成报告

    我对 Jenkins 和 Docker 很陌生 即使经过一些研究 我也没有找到做这些事情的方法 我想要 在 docker 容器内的项目上执行 pytest 和 python coverage 这应该生成测试和覆盖率报告 访问生成的报告并使用
  • 如何在“pytest”框架中的固定装置中的“拆卸”中使用测试结果

    我正在尝试使用测试结果或状态来拆卸夹具 但是如果不使用 pytest 框架中的关键字 yield 我将无法找到代码 import pytest import requests pytest fixture def update result
  • 如何使用 pytest 对 python datetime.datetime.now 进行猴子补丁?

    我需要测试使用的函数datetime datetime now 做到这一点最简单的方法是什么 您需要 Monkeypatch datetime now 函数 在下面的示例中 我正在创建可以稍后在其他测试中重复使用的夹具 import dat
  • pytest - 在 setup_module 中使用 funcargs

    我在 conftetst py 中包含了我自己的命令行选项 def pytest addoption parser parser addoption backend default test backend help run testx f
  • pytest 无法导入模块,而 python 可以

    我正在用 Python 开发一个包 我使用虚拟环境 我在 virtualenv 的 pth 路径中设置了模块根目录的路径 这样我就可以在开发代码时导入包的模块并进行测试 问题 1 这是一个好方法吗 这工作正常 这是一个例子 这是我想要的行为
  • 如何在pytest运行时获取测试名称和测试结果

    我想在运行时获取测试名称和测试结果 I have setup and tearDown我的脚本中的方法 在setup 我需要获取测试名称 然后在tearDown我需要获取测试结果和测试执行时间 我有办法做到这一点吗 你可以 使用钩子 我的测
  • 尝试使用 pytest 在 python 3.10 上执行测试时出错

    如果我尝试使用执行测试pytest使用 python 3 10 我收到以下错误 TypeError required field lineno missing from alias 谷歌说这是一个已知问题 但我找不到解决的方法 如果我用 3
  • 模拟导入失败

    我该如何制作import pkg失败moduleA py 我可以打补丁pkg如果从中导入某些内容则会失败 否则不会失败 test py import os import moduleA from unittest mock import p
  • 在参数化中传递 pytest 夹具

    通过在 pytest mark parametrize 中传递 conftest py 中定义的装置 我收到以下错误 pytest alist 0220 0221 test 1 py v s NameError name alist is
  • 如何在“python setup.py test”中运行 py.test 和 linter

    我有一个项目setup py文件 我用pytest作为测试框架 我还在我的代码上运行各种 linter pep8 pylint pydocstyle pyflakes ETC 我用tox在多个 Python 版本中运行它们 并使用以下命令构
  • 使用 Pytest 的参数化添加测试功能的描述

    当其中一个测试失败时 可以在测试正在测试的内容的参数化中添加描述 快速了解测试失败的原因 有时您不知道测试失败的原因 您必须查看代码 通过每个测试的描述 您就可以知道 例如 pytest mark parametrize num1 num2
  • 模拟pytest中的异常终止

    我的多线程应用程序遇到了一个错误 主线程的任何异常终止 例如 未捕获的异常或某些信号 都会导致其他线程之一死锁 并阻止进程干净退出 我解决了这个问题 但我想添加一个测试来防止回归 但是 我不知道如何在 pytest 中模拟异常终止 如果我只
  • Pytest报告摘要显示错误信息

    我对 pytest 挂钩和插件相对较新 我无法弄清楚如何让我的 pytest 代码为我提供测试执行摘要以及失败原因 考虑代码 class Foo def init self val self val val def test compare
  • pytest:同一接口的不同实现的可重用测试

    想象一下我已经实现了一个名为的实用程序 可能是一个类 Bar在一个模块中foo 并为其编写了以下测试 测试 foo py from foo import Bar as Implementation from pytest import ma
  • 为什么最简单的 requests_mock 示例在 pytest 中失败?

    我有一个特殊的问题requests mock 我想用它pytest测试我的 API 包装器库 我尝试过使用requests mock 文档中的第一个示例 http requests mock readthedocs io en latest
  • VSCode pytest 测试发现失败

    Pytest 测试发现失败 用户界面指出 Test discovery error please check the configuration settings for the tests 输出窗口显示 Test Discovery fa
  • 使用 Pytest 捕获 SystemExit 消息

    我正在使用 pytest 编写测试 我遇到了一些函数抛出异常的情况SystemExit如果输入错误 终端上会显示一些错误消息 我想为以下情况编写测试SystemExit抛出并验证输出错误消息中是否有特定字符串 这是代码 def test v
  • 在 PyCharm 中禁用 Pytest

    如果我有一个以 test 开头的文件 PyCharm 会尝试使用 PyTest 运行该文件 我想正常运行它 作为常规 Python 脚本 我怎样才能做到这一点 Edit请参阅下面 Milo 的回答 如果由于某种原因这对您不起作用 正如 A
  • pytest 在类中以正确的顺序运行场景

    所以我有以下结构 class Test object def test 1 self pass def test 2 self pass def test 3 self pass 它运行得很好 现在我正在添加 场景 正如推荐的那样 pyte

随机推荐

  • cufflinks 介绍&使用

    一 简介 Cufflinks下主要包含cufflinks cuffmerge cuffcompare和cuffdiff等几支主要的程序 主要用于基因表达量的计算和差异表达基因的寻找 Cufflinks程序主要根据Tophat的比对结果 依托
  • 2017年高教社杯全国大学生数学建模竞赛题目--C题 颜色与物质浓度辨识

    目录 问题 第一问 数据导入 1 pd read excel 2 读取报错ImportError Missing optional dependency xlrd Install xlrd gt 1 0 0 for Excel suppor
  • sort()函数与升序、降序 C++

    1 使用sort 函数要加头文件 include
  • 嵌入式 ADC使用手册完整版 (188977万字)(附源码详细篇)

    嵌入式 ADC使用手册完整版 188977万字 附源码详细篇 1 ADC简介 2 ADC主要特征 3 ADC引脚和内部信号 4 ADC 模块框图 5 ADC校准 CLB 6 ADC 时钟 7 ADCON 开关 8 ADC规则组和注入组 9
  • 华清远见-重庆中心-框架个人总结

    框架 一套规范 实际是他人实现的一系列接口和类的集合 通入导入对应框架的jar文件 maven项目导入对应的依赖 进行适当的配置 就能使用其中的所有内容 开发者可以省去很多模板代码 如dao中的CRUD MVC模式下层与层之间的关联 只需要
  • java设计模式之适配器设计模式

    什么是适配器模式 为什么要使用适配器模式 适配器模式 属于结构型设计模式 适配俩个字来说很明显需要做兼容 俩者毫无关系 从而联系到一起去使用 拓展 举个例子 我现在需要三根充电器线 我有安卓 苹果 和电脑充电器线 本身他们之间是没有任和关系
  • 【华为OD机试】路灯照明【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 一条长l的笔直的街道上有n个路灯 若这条街的起点为0 终点为l 第i个路灯坐标为a i 每盏灯可以覆盖到的最远距离为d 为了照明需求 所有灯的灯光必须覆盖整条街 但是
  • 使用nfs实现目录共享

    准备两台虚拟机 其中一台为主端 另一台为备用端 1 安装nfs及其依赖包 两台虚拟机都要安装 yum install y nfs utils rpcbind id nobody 查看nfsnobody用户是否存在 systemctl sta
  • LeetCode第178场周赛

    1365 有多少小于当前数字的数字 给你一个数组 nums 对于其中每个元素 nums i 请你统计数组中比它小的所有数字的数目 换而言之 对于每个 nums i 你必须计算出有效的 j 的数量 其中 j 满足 j i 且 nums j l
  • 02、单链表LinkList

    LinkList h pragma once typedef int DataType typedef struct Node DataType data struct Node next ListNode LinkList 定义方式 线性
  • Java > 牛客OJ在线编程常见输入输出练习场

    C 处理输入输出 牛客OJ在线编程常见输入输出练习场 A A B 1 B A B 2 C A B 3 D A B 4 E A B 5 F A B 6 G A B 7 H 字符串排序 1 I 字符串排序 2 J 字符串排序 3 牛客OJ在线编
  • 重磅!讯飞版ChatGPT来了!

    Datawhale发布 大模型 讯飞星火 发布 科大讯飞 倒计时1天 讯飞星火认知大模型来了 相约合肥滨湖国际会展中心 更有用户现场开放体验 注册体验 海报扫码直接申请体验 一起看发布会 讯飞星火发布会交流群 一起观看发布 星星之火 可以燎
  • AI画图midjourney和playgroundai

    AI画图 1 midjourney的介绍于注册使用 2 playgroundAI画图 3 算法学习 4 参考博文 1 midjourney的介绍于注册使用 midjourney归属于discord是一个聊天室网站 生成图片就像跟人聊天一样
  • 由instanceof引发的思考

    本来上课的时候对instanceof没怎么认真听 以为记住一个不要在equals之外的地方使用就够了 但听了几个大佬的复习讲座后 觉得对instanceof还是应该再深入了解一下 起初我只知道a instanceof b是判断a是否是b及其
  • HFSS15.0安装步骤

    安装步骤 安装前先关闭杀毒软件和360卫士 注意安装路径不能有中文 安装包路径也不要有中文 试装系统位win10 1 解压压缩包HFSS150Win64 ZIP 2 以管理员身份运行安装程序 3 选择INSTALL SOFTWARE 4 这
  • CTFHub 技能树-web文件上传

    目录 无过滤 前端过滤 htaccess MIME绕过 双写后缀 文件头检查 无过滤 直接传入一句话木马 然后用蚁剑连一下 得到flag 前端过滤 function checkfilesuffix var file document get
  • hdoj1024

    寡人又AC了 哦hoho include
  • Ubuntu虚拟机网络无法连接的几种解决方法

    虚拟机网络无法连接的几种解决方法 问题状况描述 可能的解决方案 问题状况描述 Ubuntu虚拟机没有网络 无法ping通互联网 左上角网络连接图标消失等情况 可能的解决方案 1 重启虚拟机网络编辑器 2 重启虚拟机网络适配器 3 重启虚拟机
  • 互联网数据分析岗实习感受

    互联网实习感受 本篇博客是我在互联网公司实习三个月的一个总结 包括实习前的准备 日常工作介绍 以及数据分析实习的收获 2020 8 29 2020 11 29 从实习到现在事有些多 才补上 1 实习前的准备 本人学校一般 非211985 应
  • 进阶高级测试专项,Pytest自动化测试框架总结(二)

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小