学习15天:pytest

1、.pytest强大的插件


pytest-html(生成html格式的自动化测试报告)

pytest-xdist测试用例分布式执行。多CPU分发。

pytest-ordering 用于改变测试用例的执行顺序

pytest-rerunfailures用例失败后重跑

allure-pytest 用于生成美观的测试报告。
 

2、规则:

模块名必须以test_开头或者_test结尾

测试类必须Test开头

测试方法必须以test开头

3、运行

文件目录:

(1)主函数运行

  •         运行所有的用例
if __name__ == '__main__':pytest.main()
  • 指定模块运行
import pytest
if __name__ == '__main__':pytest.main(['-vs','test_login.py'])  #列表方式,注意大括号

  • 指定文件夹执行
     

    import pytest
    if __name__ == '__main__':pytest.main(['-vs','./interface_testcases'])

  • 通过nodeid指定用例运行,nodeid由模块名、类名、函数名组成

import pytest
if __name__ == '__main__':#文件里面的函数pytest.main(['-vs','./interface_testcases/test_interface.py::test_04_func'])#类下面的方法#pytest.main(['-vs', './interface_testcases/test_interface.py::TestInterface::test_Interface_01'])

(2)命令行模式

  • 运行所有:pytest
  • 指定模块
  • 指定目录

pytest -vs ./interface_testcases

  • 指定到方法
pytes-vs ./interface_testcases/test_interface.py::TestInterface::test_Interface_01

参数详情:

-s:表示输出调试的信息,包括print打印信息

-v:打印详细信息,模块名.类名.类方法

pytest.main(['-s'])       

两个参数可以合并使用

pytest.main(['-vs'])       #test_login.py::TestLogin::test_login_01 这是我打印的print内容

-n :支持多线程或分布式运行测试用例,使用分布式需要先导入

 pytest -vs ./testcases/test_login.py -n 2  #在命令行输入,2是代表线程数  
pytest.main(['-vs','./testcases','-n=2'])        #在pycharm输入格式,要安装pytest-xdist

-k: 根据测试用例的部分字符指定测试用例

pytest.main(['-v','-k test_1 or test_2','test_case3.py'])   #在pycharm输入格式

pytest -vs .testcase -k "ao" #在命令行输入

4、改变测试用例的运行方式

安装pytest-ordering,在方法上面添加上装饰器

#按照order顺序执行case
@pytest.mark.run(order =3)
def test_login_01(self):print("我说这是第二个文件")

5、通过读取pytest.ini配置文件yunx

pytest.ini这个文件是pytest测试框架的核心配置文件,必须以这个命名

位置:一般放在根目录下

编码:必须是ANSI,可以使用notpad++修改编码格式,书写格式如下,举例说明

[pytest]
#命令行执行参数,用空格分开
addopts = -vs#测试文件夹,可自己配置
testpaths = ./testcases

运行规则:不管是命令模式还是主函数模式运行,都会先去执行这个文件

5、初始化清除

模块、类、方法

def setup_module():print('\n *** 初始化-模块 ***')def teardown_module():print('\n ***   清除-模块 ***')class Test_错误密码:@classmethoddef setup_class(cls):print('\n === 初始化-类 ===')@classmethoddef teardown_class(cls):print('\n === 清除 - 类 ===')def setup_method(self):print('\n --- 初始化-方法  ---')def teardown_method(self):print('\n --- 清除  -方法 ---')def test_C001001(self):print('\n用例C001001')assert 1 == 1def test_C001002(self):print('\n用例C001002')assert 2 == 2def test_C001003(self):print('\n用例C001003')assert 3 == 2class Test_错误密码2:def test_C001021(self):print('\n用例C001021')assert 1 == 1def test_C001022(self):print('\n用例C001022')assert 2 == 2

目录级别

目标级别的 初始化清除,就是针对整个目录执行的初始化、清除。

我们在需要初始化的目录下面创建 一个名为 conftest.py 的文件,里面内容如下所示

import pytest @pytest.fixture(scope='package',autouse=True)
def st_emptyEnv():print(f'\n#### 初始化-目录甲')yieldprint(f'\n#### 清除-目录甲')

6、使用fixture装饰器实现部分用例的前后置

一个方法使用

方法范围使用,等同等同setup_method,teardown_method,设置autouse是所有自动使用

修改这个参数,就是对类范围生效,等同setup_class,teardown_class

固定写法,注意:params和param,函数中使用这个方法,会调用执行3次,并且可以使用这个参数

7、通过conftest.py和@python.fixture()结合使用实现“全局”的前置

1.conftest.py文件是单独存放的一个夹具配置文件,名称是不能更改

2.用处可以在不同的py文件中使用同一个fixture函数。

3.原则上contest.py需要和运行的用例放到统一层。并且不需要做任何的imprt导入的操作。

总结:


setup/teardown,setup_class/teardown class 它是作用于所有用例或者所有的类

@pytest.fixtrue()它的作用是既可以部分也可以全部前后置。

conftest.py和@pytest.fixtrue()结合使用,作用于全局的前后置,

8、数据驱动@pytest.mark.parametrize

功能类似于unittest的ddt数据驱动

class Test_错误登录:@pytest.mark.parametrize('username, password, expectedalert', [(None, '88888888', '请输入用户名'),('byhy', None, '请输入密码'),('byh', '88888888', '登录失败 : 用户名或者密码错误'),('byhy', '8888888', '登录失败 : 用户名或者密码错误'),('byhy', '888888888', '登录失败 : 用户名或者密码错误'),])def test_UI_0001_0005(self, username, password, expectedalert):alertText = loginAndCheck(username, password)assert alertText == expectedalert

9.YAML文件详情


1.用于全局的配置文件 ini或yaml
2.用于写测试用例(接口测试用例)
yaml简介:
yaml是一种数据格式,支持注释,换行,多行字符串,裸字符串(整形,字符串)
语法规则:
1.区分大小写
2.使用缩进表示层级,不能使用tab键缩进,只能用空格(和python一样)3.缩进没有数量的,只要前面是对其的就行。
4.注释是#
数据组成
1.Map对象,键值对键:(空格)值

多行形式:
[msxy]
 name: 小名
 age:18


一行的写法:
msxy:{name: 小名,age:18}

2、数组(list)

msxy:

 -name:xiaoming

 -age:18

一行的写法:
msxy: [{name:百里},{age:18}]

10.Allure测试报告

第一步:先要下载,下载后放到D盘,然后解压
第二步:配置Allure的环境变量,path增加
D:\allure-2.21.0\bin


验证环境:allure --version

第三步:生成临时的json报告,配置添加第一句,在temp文件下,生成临时报告

[pytest]
#配置常用运行参数
addopts = -vs --alluredir=./temps --clean-alluredir
#配置测试用例的位置
testpaths = ./testcases
#配置模块名的规则
python_files = test_*.py
#配置类的规则
python_classes = Test*
#配置测试用例(方法)的规则
python_functions = test_*

第四步:直接根据临时json报告生成Allure报告到reports文件下

if __name__ == '__main__':pytest.main()time.sleep(1)os.system("allure generate ./temps -o ./reports --clean")

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

股票交易所官方api接口有哪些?获取和使用需要满足什么条件

炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…

2.7 滑动窗口专题:串联所有单词的子串

LeetCode 30. 串联所有单词的子串算法对比分析 1. 题目链接 LeetCode 30. 串联所有单词的子串 2. 题目描述 给定一个字符串 s 和一个字符串数组 words,words 中所有单词长度相同。要求找到 s 中所有起始索引,使得从该位置开始的连续子串包含 words 中所…

【区块链】区块链密码学基础

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 区块链密码学基础引言一、哈希函数1.1 基本概念1.2 数学表达 二、非对称加密2.1…

Spring Boot配置类原理、Spring Boot核心机制理解,以及实现自动装置的底层原理

目的:从底层源码角度分析 Spring Boot 配置类以及自动装载的底层原理 文章目录 1. Spring Boot 配置类实现自动装载1.1 @Configuration注解1.2 @Configuration 注解完成 bean 注入流程图1.3 @ConfigurationProperties注解赋值2. Spring Boot的核心机制:自动装配2.1 @SpringBo…

docker桌面版启动redis,解决无法连接

docker run -d --name redis -p 6379:6379 -v E:\2\redis\redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf 在本地创建一个目录,里面有个redis.conf文件,内容如下,启动时绑定这个配置文件目…

[网络][tcp协议]:tcp报头

tcp(传输控制协议)是一种面向字节流的传输层协议,相较于udp协议,tcp能保证传输数据的可靠性与准确性,tcp也是目前最常见的传输层协议 本文主要介绍tcp报头各个字段的含义与用途 注:保留6位和6位标记位是目前最普遍的写法,在我查资料时,发现有一些拓展情况,会在后文细说 最简单的…

【虚幻C++笔记】引擎源码下载及编译步骤

目录 1.在GitHub上访问虚幻引擎源代码2.安装Visual Studio 20223.解压完成以后,打开源码的根目录,选择Setup.bat运行4.选择GenerateProjectFiles.bat运行,生成uE5.sln文件,点击这个文件打开项目5.设置编译的选项,选择DevelopmentE…

【数学建模】层次分析法(AHP)详解及其应用

层次分析法(AHP)详解及其应用 引言 在现实生活和工作中,我们经常面临复杂的决策问题,这些问题通常涉及多个评价准则,且各准则之间可能存在相互影响。如何在这些复杂因素中做出合理的决策?层次分析法(Analytic Hierarchy Process…

科普:为何要对特征进行分箱?

一、为何要对特征进行分箱? 分箱(Binning)是将连续型或离散型特征转化为区间型变量的过程,其核心目标是提升模型效果和解释性,具体原因如下: 1. 业务需求 可解释性:将特征转化为业务可理解的…

理解langgraph工作流的驱动逻辑,以适应langgraph工作流模式的编程。

langgraph的工作流模式虽然方便直观,但习惯了普通函数式编程的数据流处理。刚开始接触时,确实容易试图用函数式编程的思维去适配它,特别是langgraph数据传递由状态字典管理,而非函数返回值,导致代码不够自然&#xff0…

线性dp(数字三角形,LIS,LCS,LCIS)

文章目录 线性dp数字三角形题目思路 LIS(最长上升子序列)代码(n^2)二分优化(nlogn) LCS(最长公共子序列)代码 LCS——>>LIS思路代码 最长公共子串最长公共上升子序列(LCIS) 线…

Spring Validation参数校验

Spring Validation是Spring框架中用于数据校验的核心模块&#xff0c;通过注解简化数据校验逻辑。 1. 依赖引入&#xff08;SpringBoot项目&#xff09; Spring Boot项目&#xff1a;自动包含spring-boot-starter-validation <dependency><groupId>org.springfra…

《AI大模型趣味实战》No2 : 快速搭建一个漂亮的AI家庭网站-相册/时间线/日历/多用户/个性化配色(中)

快速搭建一个漂亮的AI家庭网站-相册/时间线/日历/多用户/个性化配色(中) 摘要 在上一篇文章中&#xff0c;我们介绍了如何搭建一个基础的家庭网站&#xff08;V1.0版本&#xff09;&#xff0c;包含了用户管理、相册管理、时间线和日历等功能。本文将继续深入&#xff0c;详细…

pythonSTL---sys

sys 是 Python 标准库中的一个内置模块&#xff0c;它提供了许多与 Python 解释器和系统环境进行交互的功能。 sys方法 1. 导入 sys 模块 在使用 sys 库的功能之前&#xff0c;需要先导入它&#xff1a; import sys2. 命令行参数 (sys.argv) sys.argv 是一个包含命令行参数…

软件需求分类、需求获取(高软46)

系列文章目录 软件需求分类&#xff0c;需求获取 文章目录 系列文章目录前言一、软件需求二、获取需求三、真题总结 前言 本节讲明软件需求分类、需求获取的相关知识。 一、软件需求 二、获取需求 三、真题 总结 就是高软笔记&#xff0c;大佬请略过&#xff01;

Zabbix7.0+DeepSeek大模型实现人工智能告警分析

一、方案概述 本方案基于Zabbix7.0监控系统,通过底层webhook脚本机制集成Deepseek做故障分析提供解决方案,构建智能化运维体系。 其核心架构包括: Zabbix监控平台:负责实时监控和告警触发 Webhook接口:实现告警信息的传递 Deepseek AI平台:提供故障智能分析能力 二、…

CPU相关:实时cpu信息接口

[rootxxx ~]# cat /proc/cpuinfo #通过实时cpu信息接口查看cpu信息

Certbot实现SSL免费证书自动续签(CentOS 7版 + Docker部署的nginx)

前置安装&#xff0c;可参考Certbot实现SSL免费证书自动续签&#xff08;CentOS 7 nginx/apache&#xff09; 如果是通过 Docker 运行 Nginx&#xff0c; certbot 无法直接检测到本地的 Nginx 配置。解决方案是 使用 standalone 模式 或 挂载 Webroot 方式获取 SSL 证书&…

A SURVEY ON POST-TRAINING OF LARGE LANGUAGE MODELS——大型语言模型的训练后优化综述——第2部分

3、微调&#xff08;上一部分内容&#xff09; 4、LLMs的对齐 大型语言模型&#xff08;LLMs&#xff09;中的对齐涉及引导模型输出以符合人类预期和偏好&#xff0c;特别是在安全关键或用户面对的应用程序中。本章讨论了实现对齐的三个主要范式&#xff1a; 带有反馈的人工…

热key探测技术架构设计与实践

参考&#xff1a; 得物热点探测技术架构设计与实践 Redis数据倾斜与JD开源hotkey源码分析揭秘 京东热点检测 HotKey 学习笔记 hotkey: 京东App后台中间件&#xff0c;毫秒级探测热点数据&#xff0c;毫秒级推送至服务器集群内存&#xff0c;大幅降低热key对数据层查询压力 …