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性能测试  

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/61531.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Maven可选依赖和排除依赖简单使用

可选依赖 可选依赖指对外隐藏当前所依赖的资源 在maven_04_dao的pom.xml,在引入maven_03_pojo的时候&#xff0c;添加optional <dependency><groupId>com.rqz</groupId><artifactId>maven_03_pojo</artifactId><version>1.0-SNAPSHOT&…

Spring Boot + Vue3前后端分离实战wiki知识库系统十一--文档管理功能开发三

文档内容的显示&#xff1a; 在上一次https://www.cnblogs.com/webor2006/p/17510360.html文档管理模块还差文档的显示木有完成&#xff0c;所以接下来先将这块模块给收尾了。 增加单独获取内容的接口&#xff1a; 概述&#xff1a; 在前端页面文档查询时&#xff0c;只查询了文…

WMS仓库管理系统研发规划说明

01 产品背景 1.1 背景概述 aboss WMS东南亚仓库管理系统是一个基于BigSeller系统的使用基础上&#xff0c;加上多仓库的解决思路&#xff0c;解决入库业务、出库业务、仓库调拨、库存调拨和虚仓管理等功能&#xff0c;对批次管理、物料对应、库存盘点、质检管理、虚仓管理和即…

Python爬虫的学习day02 requests 模块post 函数, lmxl 模块的 etree 模块

1. requests 模块post 函数 1.1 post 函数的参数 &#xff08;简单版&#xff09; 参数1&#xff1a; url 网络地址 参数2&#xff1a; data 请求数据 &#xff08;一般数据是 账号&#xff0c;密码&#xff09; 参数3&#xff1a; headers 头请求 &#xff08…

【分布式流控组件 Sentinel 快速入门】——图文详解操作流程

&#x1f4a7; 分布式流控组件 S e n t i n e l 快速入门 \color{#FF1493}{分布式流控组件 Sentinel 快速入门} 分布式流控组件Sentinel快速入门&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#…

springboot第34集:ES 搜索,nginx

#用search after解决深分页性能问题 #第一页 GET /bank/_search {"size": 10,"sort": [{"account_number": {"order": "asc"}}] }#第二页 GET /bank/_search {"size": 10,"sort": [{"account_numb…

《cuda c编程权威指南》05 - cuda矩阵求和

目录 1. 使用一个二维网格和二维块的矩阵加法 1.1 关键代码 1.2 完整代码 1.3 运行时间 2. 使用一维网格和一维块的矩阵加法 2.1 关键代码 2.2 完整代码 2.3 运行时间 3. 使用二维网格和一维块的矩阵矩阵加法 3.1 关键代码 3.2 完整代码 3.3 运行时间 1. 使用一个二…

Java ~ Collection/Executor ~ PriorityBlockingQueue【总结】

前言 相关系列 《Java ~ Collection【目录】》&#xff08;持续更新&#xff09;《Java ~ Executor【目录】》&#xff08;持续更新&#xff09;《Java ~ Collection/Executor ~ PriorityBlockingQueue【源码】》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;…

echarts 饼图的label放置于labelLine引导线上方

一般的饼图基础配置后长这样。 想要实现将文本放置在引导线上方&#xff0c;效果长这样 const options {// ...series: [{label: {padding: [0, -40],},labelLine: {length: 10,length2: 50,},labelLayout: {verticalAlign: "bottom",dy: -10,},},], };label.padd…

中国区域250米归一化植被指数数据集(2000-2022)介绍

一、归一化植被指数是什么&#xff1f; 归一化植被指数 (Normalized Difference Vegetation Index, NDVI) 是一种衡量地表植被绿度&#xff08;生物量&#xff09;的重要指标&#xff0c;它反映了植被对太阳辐射的吸收情况和光合作用的强度。该指数是通过对地面反射的近红外和可…

IDEA SpringBoot Maven profiles 配置

IDEA SpringBoot Maven profiles 配置 IDEA版本&#xff1a; IntelliJ IDEA 2022.2.3 注意&#xff1a;切换环境之后务必点击一下刷新&#xff0c;推荐点击耗时更短。 application.yaml spring:profiles:active: env多环境文件名&#xff1a; application-dev.yaml、 applicat…

【SpringCloud】Gateway服务网关

Spring Cloud Gateway 是 Spring Cloud 的一个全新项目&#xff0c;该项目是基于 Spring 5.0&#xff0c;Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关&#xff0c;它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。 1.为什么需要网关…

从0到1开发go-tcp框架【4实战片— — 开发MMO之玩家聊天篇】

从0到1开发go-tcp框架【实战片— — 开发MMO】 MMO&#xff08;MassiveMultiplayerOnlineGame&#xff09;&#xff1a;大型多人在线游戏&#xff08;多人在线网游&#xff09; 1 AOI兴趣点的算法 游戏中的坐标模型&#xff1a; 场景相关数值计算 ● 场景大小&#xff1a; 250…

【ASP.NET MVC】使用动软(五)(13)

一、问题 前文完成的用户登录后的首页如下&#xff1a; 后续账单管理、人员管理等功能页面都有相同的头部&#xff0c;左边和下边&#xff0c;唯一不同的右边内容部分&#xff0c;所以要解决重复设计的问题。 二、解决方法——使用布局页 在Views上右键添加新建项&#xff…

CentOS7---部署Tomcat和安装Jpress

总览需求 1. 简述静态网页和动态网页的区别。 2. 简述 Webl.0 和 Web2.0 的区别。 3. 安装tomcat8&#xff0c;配置服务启动脚本&#xff0c;部署jpress应用。1、简述静态网页和动态网页的区别 静态网页&#xff1a; 请求响应信息&#xff0c;发给客户端进行处理&#xff0c…

Mysql字符集问题整理

0.概述 MySQL的字符集支持(Character Set Support)包括两个方面&#xff1a; 字符集(Character set)和排序方式(Collation)。 对于字符集的支持细化到四个层次: 服务器(server)&#xff0c;数据库(database)&#xff0c;数据表(table)和连接(connection)。1.MySQL…

Python:Spider爬虫工程化入门到进阶(2)使用Spider Admin Pro管理scrapy爬虫项目

Python&#xff1a;Spider爬虫工程化入门到进阶系列: Python&#xff1a;Spider爬虫工程化入门到进阶&#xff08;1&#xff09;创建Scrapy爬虫项目Python&#xff1a;Spider爬虫工程化入门到进阶&#xff08;2&#xff09;使用Spider Admin Pro管理scrapy爬虫项目 目录 1、使…

【雕爷学编程】MicroPython动手做(33)——物联网之天气预报2

天气&#xff08;自然现象&#xff09; 是指某一个地区距离地表较近的大气层在短时间内的具体状态。而天气现象则是指发生在大气中的各种自然现象&#xff0c;即某瞬时内大气中各种气象要素&#xff08;如气温、气压、湿度、风、云、雾、雨、闪、雪、霜、雷、雹、霾等&#xff…

循环结构的学习

循环结构 文章目录 为什么要学习循环while循环dowhile循环偶数之和断点调试购物结算循环的选择类名和全类名摄氏华氏对照表for循环for执行次序五门功课成绩for的特殊写法break和continue录入客户信息_continue使代码优雅小数的比较不能用或! 为什么要学习循环 在编写代码时&a…

【Linux操作系统】Vim:提升你的编辑效率

Vim是一款功能强大的文本编辑器&#xff0c;它具有高度可定制性和灵活性&#xff0c;可以帮助程序员和文本编辑者提高编辑效率。本文将介绍Vim的基本使用方法、常用功能和一些实用技巧。 文章目录 1. Vim的基本使用方法&#xff1a;2. 常用功能&#xff1a;2.1 文件操作&#…