学习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.rhkb.cn/news/33965.html

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

相关文章

Springboot+mybatis实现增删改查操作

继续写一下删除操作,删除有些不一样,首先在controller里面,我们需要改一下路由,我们后面要写/{id}传入路径参数,用PathVariable注解绑定id,剩下的都一样,传入id,然后写service和mapp…

Visual Studio里的调试(debugging)功能介绍

参考 1- Introduction to Debugging | Basic Visual Studio Debugging(这是一位印度博主视频,我下面做到笔记也主要参考她的视频,但不得不说口音太重了,一股咖喱味) 目录 个人对调试浅显的认识和对调试的介绍逐行调…

Java多线程与高并发专题——原子类和 volatile、synchronized 有什么异同?

原子类和 volatile异同 首先,通过我们对原子类和的了解,原子类和volatile 都能保证多线程环境下的数据可见性。在多线程程序中,每个线程都有自己的工作内存,当多个线程访问共享变量时,可能会出现一个线程修改了共享变…

c语言笔记 作用域

目录 作用域的基本概念 1.函数声明的作用域 2.局部变量的作用域 3.全局作用域 4.static修饰后的作用域 作用域的基本概念 在c语言中,我们的标志符是具有一定的可见范围的,我们称这个可见范围为作用域 在软件开发中,我们要确定好标识符的作…

MySQL数据库知识总结

MySQL数据库知识总结 一、基本概念及其介绍二、数据库中的数据类型(一)数值类型(二)字符串类型(三)日期类型 三、数据库基础语法(一)数据库的常用操作(二)数据…

SpaceSync智能排班:重构未来办公空间的神经中枢

文心智能体平台可免费使用DeepSeek 满血版啦,使用DeepSeek模型创建并提交智能体,即有机会瓜分万元奖金!有这等好事还不快冲! 文心智能体官网:文心智能体平台AgentBuilder | 想象即现实 本片文章为作者参加文心智能体平…

Blender-MCP服务源码3-插件开发

Blender-MCP服务源码3-插件开发 Blender-MCP服务源码解读-如何进行Blender插件开发 1-核心知识点 1)使用Blender开发框架学习如何进行Blender调试2)学习目标1-移除所有的Blender业务-了解如何MCP到底做了什么?3)学习目标2-模拟MC…

每日一题---dd爱框框(Java中输入数据过多)

dd爱框框 实例: 输入: 10 20 1 1 6 10 9 3 3 5 3 7 输出: 3 5 这道题要解决Java中输入的数过多时,时间不足的的问题。 应用这个输入模板即可解决: Java中输入大量数据 import java.util.*; import java.io.*;pu…

Qlik Sense New Install with Restore

Background In case you meet the upgrade issue like us , you can follow the below step to recover the existing data to new installed Qlik Sense . Powered by Moshow郑锴-CSDN博客 please follow below steps: pgsql dump backupbackup table into sql by DBeaverst…

大数据-spark3.5安装部署之standalone模式

真实工作中还是要将应用提交到集群中去执行,Standalone模式就是使用Spark自身节点运行的集群模式,体现了经典的master-slave模式。集群共三台机器,具体如下 u22server4spark: master worker u22server4spark2: worke…

Uniapp 开发 App 端上架用户隐私协议实现指南

文章目录 引言一、为什么需要用户隐私协议?二、Uniapp 中实现用户隐私协议的步骤2.1 编写隐私协议内容2.2 在 Uniapp 中集成隐私协议2.3 DCloud数据采集说明2.4 配置方式3.1 Apple App Store3.2 Google Play Store 四、常见问题与解决方案4.1 隐私协议内容不完整4.2…

【C++】 —— 笔试刷题day_5

刷题day_5 一、游游的you 题目链接:游游的you 题目解析 题目要求: 输入a,b,c表示y、o、u三个字母的个数; 将这些字母连成字符串,并且这里you三个字母相邻获得2分,两个o字母相邻获得1分。 让我…

78. Harmonyos NEXT 懒加载数据源实现解析:BasicDataSource与CommonLazyDataSourceModel详解

温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! Harmonyos NEXT 懒加载数据源实现解析:BasicDataSource与CommonLazyDataSourceModel详解 文章目录 Harmonyos NEXT 懒加载数据源实现解…

如何打包数据库mysql数据,并上传到虚拟机上进行部署?

1.连接数据库,使得我们能看到数据库信息,才能进行打包上传 2. 3. 导出结果如下,是xml文件 4.可以查询每个xml文件的属性,确保有大小,这样才是真实导出 5跟着黑马,新建文件夹,并且把对应的东西放…

Springboot+mabatis增删改查,设置不可重复字段

今天又学会了一个操作,我们数据库中,可能要求一个字段名字不可以重复,我们就进行这样的操作!设计表,然后点击索引,选择字段,加入索引类型和索引方法,然后ctrlS保存!即可 如果一旦还…

C# NX二次开发:矩形阵列和线性阵列等多种方法讲解

大家好,今天讲一些关于阵列相关的UFUN函数。 UF_MODL_create_linear_iset (view source):这个函数为创建矩形阵列。 intmethodInputMethod: 0 General 1 Simple 2 Identicalchar *number_in_xInputNumber in XC direction.char *distance_xInputSpac…

嵌入式硬件: GPIO与二极管基础知识详解

1. 前言 在嵌入式系统和硬件开发中,GPIO(通用输入输出)是至关重要的控制方式,而二极管作为基础电子元件,广泛应用于信号整流、保护电路等。本文将从基础原理出发,深入解析GPIO的输入输出模式,包…

CTF--Web安全--SQL注入之报错注入

CTF–Web安全–SQL注入之报错注入 一、报错注入的概念 用户使用数据库查询语句,向数据库发送错误指令,数据库返回报错信息,报错信息中参杂着我们想要获取的隐私数据。通常在我们在页面显示中找不到回显位的时候,使用报错注入。 二…

matlab 模糊pid实现温度控制

1、内容简介 matlab162-模糊pid实现温度控制 可以交流、咨询、答疑 2、内容说明 略基于PID电加热炉温度控制系统设计 摘要 电加热炉随着科学技术的发展和工业生产水平的提高,已经在冶金、化工、 机械等各类工业控制中得到了广泛应用,并且在国民经济中占…

RabbitMq C++客户端的使用

1.RabbitMq介绍 RabbitMQ 是一款开源的消息队列中间件,基于 AMQP(高级消息队列协议)实现,支持多种编程语言和平台。以下是其核心特点和介绍: 核心特点 多语言支持 提供 Java、Python、C#、Go、JavaScript 等语言的客…