Pytest简介及jenkins集成
一、pytest介绍
pytest介绍 - unittest\nose
pytest:基于unittest之上的单元测试框架
自动发现测试模块和测试方法
断言使用assert+表达式即可
可以设置测试会话级、模块级、类级、函数级的fixtures 数据准备 + 清理工作
unittest:setUp、teardown、setUpClass、tearDownClass
共享前置后置 – conftest.py
有丰富的插件库,目前在900个以上 allure
二、安装命令
pip install pytest
安装html报告的插件
pip install pytest-html
pytest插件地址
http://plugincompat.herokuapp.com/
pytest之mark功能
pytest - 收集测试用例
pytest收集测试用例的规则
默认从当前目录中搜集测试用例,即在哪个目录下运行pytest命令,则从哪个目录当中搜索
三、搜索规则
符合命名规则 test_*.py 或者 *_test.py的文件
以test开头的函数名
以Test开头的测试类(没有__init__函数)当中,以test_开头的函数
对测试用例打标签。在运行测试用例的时候,可根据标签名来过滤要运行的用例
四、使用方法
注册标签名
在测试用例/测试前面加上:@pytest.mark.已注册的标记名
注册方式
创建pytest.ini文件,在文件中按如下形式添加标签名:
[pytest] markers= slow:marks tests as slow(deselect with ‘-m “not slow”’) serial
注:冒号之后是可选的描述信息
在conftest.py文件当中,通过hook注册
def pytest_configure(config): config.addinivalue_line(“markers”,“smoke1:标记只运行冒烟用例”) config.addinivalue_line(“markers”,“demo1:示例运行”)
给用例打标记
方式1
打标记范围:测试用例、测试类、模块文件
在测试用例/测试类前面加上:@pytest.mark.标记名
@pytest.mark.slow
可在一个用例上打多个标签,多次使用@pytest.mark.标记名即可
@pytest.mark.slow
@pytest.mark.serial
方式2
打标记范围:测试用例、测试类、模块文件
在测试类里,使用以下申明(测试类下,所有用例都被打上该标签)
class TestClass(object): pytestmark = pytest.mark.已注册标签名 pytestmark = [pytest.mark.标签1, pytest.mark.标签2] # 多标签模式
在模块文件里,同理(py文件下,所有测试函数和测试类里的测试函数,都有该标签)
import pytest pytestmark = pytest.mark.已注册标签名 pytestmark = [pytest.mark.标签1, pytest.mark.标签2] # 多标签模式
pytest之命令行运行用例
安装后,pytest.exe在python安装目录的Scripts目录下,因为配置了环境变量后,可以之间运行pytest
脚本里面是,效果通命令行
import pytest if name == ‘main’: pytest.main()
只运行某个标记
pytest -m slow
pytest -m slow -s -v # 详细输出
pytest之fixture功能
pytest之fixture参数化 - 多运行、pytest层级覆盖。测试用例与其同级或者在其子目录
共享前置后置 – conftest.py
文件名不可更改,不需要引入就可以使用其中的fixture
一个函数:前置+后置
yield分隔前置后置
设置作用域:中间的夹的是什么,默认"function"
@pytest.fixture def init_driver(): # 前置 pass # 分隔线 yield 返回值写在这 # 后置 pass
调用fixture的三种方式
在测试用例中直接调用它
将fixture的函数名作为测试用例的参数
如果fixture有返回值,那么测试用例中的fixture函数名字就接收返回值
eg
def test_xxx(self,myfixture): myfixture.find_element_by_xpath(“xxx”) # 函数名代表了fixture的返回值,即driver
用fixture装饰器调用fixture
在测试用例/测试类前面加上@pytest.mark.usefixtures(“fixture函数名字”)
ps:定义conftest.py文件,在此文件中可定义多个fixture,pytest会自动搜索此文件
@pytest.mark.usefixtures(“init_driver”) class TestLogin: @pytest.mark.slow def test_login_success(self, init_driver): init_driver[1]. #返回值直接用,这里返回元组
用autos调用fixture
在定义fixture时,有一个参数是autouse,默认设置为False
当默认为False,就可以选择用上面两种方式来试用fixture
当设置为True时,在一个session内的所有test都会自动调用这个fixture(权限大,责任也大,所以用该功能时也要谨慎小心)
五、pytest之参数化
在测试用例的前面加上
@pytest.mark.parametrize(“参数名”,列表数据)
参数名:用来接收每一项数据,并作为测试用例的参数
列表数据:一组测试数据
@pytest.mark.parametrize(“参数1,参数2”,[(数据1,数据2),(数据1,数据2)])
示例
@pytest.mark.parametrize(“aa,b,c”, [(1, 3, 4), (10, 35, 45), (22.22, 22.22, 44.44)]) def test_add(self, a, b, c): res = a + b assert res == c
组合参数化:多组参数,依次组合
使用多个@pytest.mark.parametrize
示例
@pytest.mark.parametrize(“x”,[1,2]) @pytest.mark.parametrize(“y”,[2,3]) def test_foo(x,y): pass
用例有四个1,2/1,3/2,2/2,3 笛卡尔积
pytest之重运行
pytest提供了失败重试机制
插件名称rerunfailures
安装方法
pip install pytest-rerunfailures
使用方式
命令行参数形式
命令:pytest --reruns 重试次数
比如:pytest --reruns 2 表示:运行失败的用例可以重新运行2次
命令:pytest --reruns 重试次数 --reruns-delay 次数之间的延时设置(单位:秒)
pytest --reruns 2 --reruns-delay5
表示失败的用例可以重新运行2次,第一次和第二次的间隔时间为5秒钟
pytest之html测试报告
需要安装pytest-html插件
pytest可以生成多种样式的结果
生成JunitXML格式的测试报告,命令
–junitxml=path
生成result log格式的测试报告,命令
–resultlog=report\log.txt
生成html格式的测试报告,命令
–html=report\test_one_func.html(相对路径)
import pytest if name == ‘main’: pytest.main([“–reruns”, “3”, “–reruns-delay”, “5”, “-m”, “fail”, “–html=Reports\report.html”, “–junitxml=Reports\report.xml”])
pytest之allure测试报告
安装allure
下载allure.zip
下载地址
alure-github:GitHub - allure-framework/allure2: Allure Report is a flexible, lightweight multi-language test reporting tool. It provides clear graphical reports and allows everyone involved in the development process to extract the maximum of information from the everyday testing process
解压到本地目录,配置allure.bat的环境变量ALLURE_HOME
在命令行中运行allure,确认环境变量配置成功
pytest插件安装
pip install allure-pytest
pytest生成allure测试报告的命令参数
–alluredir=/XXX/my_allure_results
查看allure的测试报告命令
allure serve allure报告目录 相对/绝对
eg:allure serve D:\reports\allure
pytest之jenkins集成
安装插件Allure Jenkins Plugin
配置工具路径D:\allure-2.13.5
配置时构建后操作生成allure报告,选择allure report并配置路径(相对)
六、分布式
master/slave模式
分担jenkins服务器的压力,任务分配到其它执行机来执行
master:jenkins服务器
slave:执行机(奴隶机),执行master分配的任务,并返回任务的进度和结果
master
管理节点
分配任务
slave
反馈状态
反馈任务进度
反馈任务结果
master/slave
slave向master注册
slave的状态,空闲/忙碌
slave的能力,可并行执行任务
七、配置
节点管理新建节点
全局设置–代理–选择”随机选取“
节点管理新建节点
名字 - 可以唯一指定
执行器数量 - 可以同时执行的任务数
远程工作目录 - 执行机的目录,会自动在该目录下创建workspace,并建相应的job目录
标签 - 可以指定一组中随机一个执行
用法 - 指定
启动方式 - Launch agent by connecting it to the master(利用java web连接)
可用性 - 尽可能使用
节点属性
可以设置执行机的环境变量和工具
连接
连接处下载slave-agent.jnlp直接在执行机运行
可以安装为系统服务,这样的化可以静默执行
连接后就可以运行了
或者在命令行中启动节点
可以执行了
【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】
一、Python编程入门到精通
二、接口自动化项目实战
三、Web自动化项目实战

四、App自动化项目实战
五、一线大厂简历

六、测试开发DevOps体系
七、常用自动化测试工具
八、JMeter性能测试
九、总结(尾部小惊喜)
生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!
生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!
只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!
相关文章:

Pytest简介及jenkins集成
一、pytest介绍 pytest介绍 - unittest\nose pytest:基于unittest之上的单元测试框架 自动发现测试模块和测试方法 断言使用assert表达式即可 可以设置测试会话级、模块级、类级、函数级的fixtures 数据准备 清理工作 unittest:setUp、teardown、…...

【LeetCode】105. 从前序与中序遍历序列构造二叉树 106. 从中序与后序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树 这道题也是经典的数据结构题了,有时候面试题也会遇到,已知前序与中序的遍历序列,由前序遍历我们可以知道第一个元素就是根节点,而中序遍历的特点就是根节点的左边全部为左子树,右…...

堆内存和一些检测工具
17 堆定义 通过new关键字创建,创建对象都会使用堆内存。 是线程共享的,需要考虑线程安全问题。 有垃圾回收机制。18 堆-内存溢出 当默认情况下,发现执行到26,出现内存溢出。 当我们将堆内存调为8m,继续执行ÿ…...
【JavaScript】元素获取指南
简介 在 JavaScript 中,我们经常需要通过获取元素来进行 DOM 操作和交互。本教程将介绍多种获取元素的方式,包括根据 ID、标签名、类名、选择器、属性和名称等。 通过ID获取元素 使用getElementById方法根据元素的ID属性获取单个元素。 var element = document.getElementB…...

uniapp 返回上一页并刷新
如要刷新的是mine页面 在/pages/mine/improveInfo页面修改信息,点击保存后跳转到个人中心(/pages/mine/index)页面并刷新更新数据 点击保存按钮时执行以下代码: wx.switchTab({url: /pages/mine/index }) // 页面重载 let pages …...

Java阶段五Day21
Java阶段五Day21 文章目录 Java阶段五Day21问题解析rocketmq清空数据 linux学习背景什么是linux系统虚拟机介绍启动 虚拟机linux虚拟机网络的问题 linux系统的基础命令命令提示符命令格式pwd指令ls指令cd指令mkdirtouch指令cp指令rm指令mv指令cat指令tail指令 文本编辑器vim操作…...

2023,谁在引领实时互动进入高清时代?
实践是检验真理的唯一标准,技术是行业进步的核心动能。在实时互动的新时代里,不断进化的声网已然完成自证。 作者|斗斗 出品|产业家 “一个医疗行业的客户,曾向我们提出一个需求,希望在120急救场景下,可以远程看清…...

STM32(HAL)串口中断接收
目录 1、简介 2 基础配置 2.1.1 SYS配置 2.1.2 RCC配置 2.2 串口外设配置 2.3 项目生成 3、KEIL端程序整合 1、简介 本文对HAL串口中断函数进行介绍。 2 基础配置 2.1.1 SYS配置 2.1.2 RCC配置 2.2 串口外设配置 2.3 项目生成 3、KEIL端程序整合 首先在main.c文件中进行…...

word转pdf怎么转?几种常用方法分享
word转pdf怎么转?在日常工作和学习中,将Word文档转换为PDF格式是一项必要的任务。不仅可以保证文档的格式不变,还可以防止文档被他人篡改。但是,Word文档并不是所有人都能够轻松打开和编辑的,而PDF文件则可以在各种设备…...

自学(黑客)技术,入门到入狱!
1.网络安全是什么 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高; 二、则是发展相对成熟入…...
js 函数、闭包及函数对象
js的函数是对象,可以通过程序来操控。比如,可以把函数赋值给变量,然后再传递给其他函数,也可以在函数上设置属性,甚至调用函数的方法。 js函数可以嵌套定义在其他函数里,内嵌函数可以访问定义在函数作用域…...

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--搭建Vue 前端工程[二]
文章目录 SSM--搭建Vue 前端工程--项目基础界面实现功能02-创建项目基础界面需求分析效果图思路分析 代码实现项目前后端分离情况项目前后端分离情况如图 注意事项和细节 SSM–搭建Vue 前端工程–项目基础界面 实现功能02-创建项目基础界面 需求分析 效果图 思路分析 使用V…...

Android 之 AudioManager ( 音频管理器 )
本节引言: 在多媒体的第一节,我们用SoundPool写了个Duang的示例,小猪点击一个按钮后,突然发出"Duang"的 一声,而且当时的声音很大,吓死宝宝了 ,好在不是上班时间,上班时间…...
2023爱分析·超自动化厂商全景报告|爱分析报告
关键发现 当前的超自动化定义主要从技术组合角度阐述超自动化内涵,较难和业务价值建立链接。爱分析对超自动化作如下新定义:超自动化指利用RPA、iPaaS、AI、低代码、BPM、流程挖掘等自动化技术,实现组织端到端流程自动化以及新业务流程快速编…...
【C++进阶知识】04 - 函数默认实参、默认初始化、initializer_list
1. 函数默认实参 默认实参需要注意以下几点: (1)函数默认实参的赋值应从右往左,否则编译报错,因为参数入栈应该从右往左。 void f(int, int, int 1); void f(int, int 2, int); void f(int 3, int, int);&#x…...

C语言笔试训练【第三天】
大家好,我是纪宁。 今天是C语言笔试训练的第三天,大家加油! 第一题 1、已知函数的原型是: int fun(char b[10], int *a) ,设定义: char c[10];int d; ,正确的调用语句是( …...

Android SystemServer中Service的创建和启动方式(基于Android13)
Android SystemServer创建和启动方式(基于Android13) SystemServer 简介 Android System Server是Android框架的核心组件,运行在system_server进程中,拥有system权限。它在Android系统中扮演重要角色,提供服务管理和通信。 system …...

Meta开源AI音频和音乐生成模型
在过去的几年里,我们看到了AI在图像、视频和文本生成方面的巨大进步。然而,音频生成领域的进展却相对滞后。MetaAI这次再为开源贡献重磅产品:AudioCraft,一个支持多个音频生成模型的音频生成开发框架。 AudioCraft开源地址 开源地…...
rust怎么解析json数据?
关注我,学习Rust不迷路!! 在 Rust 中,你可以使用 serde 库来实现结构体与 JSON 之间的互相转换。 serde 是 Rust 社区最常用的序列化和反序列化库,它提供了方便的功能来处理结构体与 JSON 之间的转换。 首先ÿ…...

STM32 NOR_FLASH 学习
NOR FLASH FLASH是常用的,用于存储数据的半导体器件,它具有容量大,可重复擦写、按“扇区/块”擦除、掉电后数据可继续保存的特性。 NOR FLASH的单位是MB,EEPROM的单位是KB。 NM25Q128,是NOR FLASH的一种,…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
用递归算法解锁「子集」问题 —— LeetCode 78题解析
文章目录 一、题目介绍二、递归思路详解:从决策树开始理解三、解法一:二叉决策树 DFS四、解法二:组合式回溯写法(推荐)五、解法对比 递归算法是编程中一种非常强大且常见的思想,它能够优雅地解决很多复杂的…...