Python模块—Pytest模块

文章目录

    • PyTest
      • 1. args参数
      • 2. pytest-ordering
      • 3. fixture(前置函数)
      • 4. parametrize(参数化)
      • 5. fixture 与 parametrize 结合
      • 6. pyyaml(数据源)
      • 7. pytest-xdist(分布式测试)
      • 8. allure(测试报告)


PyTest

1. args参数

参数作用
-v详细输出测试信息。
-q简要输出测试信息。
-s输出测试用例中的print语句。
-x遇到失败用例时立即停止测试。
-k根据条件指定用例去测试,如:‘-k’ ,‘TestCase and not test_case_1’(可指定类名&函数名)
-m根据修饰器指定用例去测试,如:‘-m’ , ‘skip’(可指定测试种类)
# args参数运用
if __name__ == '__main__':pytest.main(args=['-q', '-s','pytest_fixture.py'(测试文件名)]) 

2. pytest-ordering

  • 修饰器:@pytest.mark.run(order=1)
  • 说明:order的值越小,测试用例越先被执行!
  • 作用:控制用例的执行顺序
  • 依赖:pytest-ordering 模块
@pytest.mark.run(order=4)
def test_case_1(login):print('Test case 1')assert True

3. fixture(前置函数)

  • 修饰器:@pytest.fixture()
  • 说明:将被@pytest.fixture()修饰的方法传入测试用例参数
  • 作用:完成测试之前的初始化,也可以返回数据给测试函数。
  • 参数一scope作用域参数

作用域:

function 函数或者方法级别都会被调用.

class 类级别调用一次.

module 模块级别调用一次.

session 是多个文件调用一次(可以跨.py文件调用,每个.py文件就是module).

@pytest.fixture(scope='作用域')
def login():print('Login Operation!')@pytest.mark.run(order=4)
def test_case_1(login):print('Test case 1')assert True
  • 参数二params传递数据参数

测试过程中需要大量的测试数据,如果每条测试数据都编写一条测试用例,用例数量将是非常宠大的。

一般我们在测试过程中会将测试用到的数据以参数的形式传入到测试用例中,并为每条测试数据生成一个测试结果数据.

@pytest.fixture(params=[1, 2, 3,])
def past_data(request):print(f"get data : {request.param}")return request.paramdef test_case_9(past_data):print(f"past_data : {past_data}")
  • 参数三autouse自动执行参数

如果每条测试用例都需要添加 fixture 功能,则需要在每一要用例方法里面传入这个fixture的名字.

这里就可以在装饰器里面添加一个参数 autouse=‘true’,它会自动应用到所有的测试方法中,只是这里没有办法返回值给测试用例.

@pytest.fixture 里设置 autouse 参数值为 true(默认 false),每个测试函数都会自动调用这个前置函数

@pytest.fixture(autouse=True)
def login():print('Login Operation!')

4. parametrize(参数化)

  • 修饰器:@pytest.mark.paramtrize(‘data’, param)

  • **Parametrize()**方法主要参数说明:

    argsnames :参数名,是个字符串,如中间用逗号分隔则表示为多个参数名.

    argsvalues :参数值,参数组成的列表,列表中有几个元素,就会生成几条用例.

  • 作用:实现测试数据的传参。

  • 方式一单次使用 parametrize

@pytest.mark.parametrize('x', [1, 2, 3])
def test_case_10(x):print(f"Parameters : {x}")assert True
  • 方式二多次使用 parametrize
# 参数按照 (笛卡尔积方式)组合
@pytest.mark.parametrize('x', [1, 2, 3])
@pytest.mark.parametrize('y', [4, 5, 6])
def test_case_10(x, y):print(f"Parameters : {x} and {y}")assert True

5. fixture 与 parametrize 结合

  • 适用场景:测试数据需要在 fixture 方法中使用,同时也需要在测试用例中使用。可以在使用 parametrize 的时候添加一个参数 indirect=Truepytest 可以实现将参数传入到 fixture 方法中,也可以在当前的测试用例中使用.
  • 结合方法indirect 参数设置为 Truepytest 会把 argnames 当作函数去执行,将 argvalues 作为参数传入到 argnames 这个函数里.
@pytest.fixture()
def login_app(request):print("Login browser...")print(f"value is {request.param}")return request.param@pytest.mark.parametrize('login_app', ['zhangsan', 'lisi', 'wangwu'], indirect=True)
def test_case_11(login_app):print("Test_case_11!")print(f"value is {login_app}")assert True# 运行结果:
# Login browser...
# value is zhangsan(方法输出)
# Test_case_11!
# value is zhangsan(用例输出)

6. pyyaml(数据源)

  • 适用场景:在实际的测试工作中,通常需要对多组不同的输入数据,进行同样的测试操作步骤,以验证我们的软件质量。这种测试,在功能测试中非常耗费人力物力,但是在自动化中,却比较好实现,只要实现了测试操作步骤,然后将多组测试数据以数据驱动的形式注入,就可以实现了.当数据量非常大的时候,我们可以将数据存放到外部文件中,使用的时候将文件中的

  • 依赖:PyYaml 模块

# 数据源
---
-- 张三- 李四- 王五
-
---
  • Python 代码
import yaml
file_name=os.path.abspath(os.path.join(os.path.dirname(os.path.dirname(__file__)),'data/data.yaml'))
@pytest.mark.parametrize('x, y, z', yaml.safe_load(open(file_name, encoding='utf-8')))
def test_case_12(x, y, z):print("Testing case 12!")print(f"Value is {x} and {y} and {z}")assert True# 运行结果:
# Testing case 12!
# Value is 张三 and 李四 and 王五

7. pytest-xdist(分布式测试)

  • 介绍:pytest-xdist 是 pytest 分布式执行插件,可以多个 CPU 或主机执行,这款插件允许用户将测试并发执行(进程级并发), 插件是动态决定测试用例执行顺序的。
  • 依赖:pytest-xdist 模块
# 参数 -n atuo(可以指定内核数)
if __name__ == "__main__":pytest.main(args=['-s', '-v', '-n', 'auto'])

8. allure(测试报告)

  • 依赖:allure-pytest 模块
  • 用法
# 导包
import pytest,osallure_result_path = os.path.abspath(os.path.join(os.path.dirname(os.path.dirname(__file__)), 'report/json'))
allure_report_path = os.path.abspath(os.path.join(os.path.dirname(os.path.dirname(__file__)), 'report/html'))if __name__ == "__main__":pytest.main(args=['-s', '-v', '--alluredir', allure_result_path])cmd = 'allure generate %s -o %s -c' % (allure_result_path, allure_report_path)os.system(cmd)
# 注意:
# 这里可能会有报错现象,解决方法:将pycharm软件设置成以管理员模式运行
# 使用步骤:
1. 将pytest配置文件中的命令行参数加上如下代码
--alluredir report
2. 编写好测试脚本后,在命令行行中运行pytest
[pytest]
addopts = -s --alluredir report
testpaths = ./scripts
python_files = test*.py
python_classes = Test*
python_functions = test*
3. 程序运行结束后,会在项目的report目录中生成一些json文件
# 增加allure特性,丰富测试报告内容:
@allure.epic() epic描述 敏捷里面的概念,定义史诗,往下是feature
@allure.feature() 模块名称 功能点的描述,往下是story
@allure.story() 用户故事 用户故事,往下是title
@allure.title(用例的标题) 用例的标题 重命名html报告名称
@allure.testcase() 测试用例的链接地址 对应功能测试用例系统里面的case
@allure.issue() 缺陷 对应缺陷管理系统里面的链接
@allure.description() 用例描述 测试用例的描述
@allure.step() 操作步骤 测试用例的步骤
@allure.severity() 用例等级 blocker,critical,normal,minor,trivial
@allure.link() 链接 定义一个链接,在测试报告展现
@allure.attachment() 附件 报告添加附件

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

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

相关文章

LA@行列式性质

文章目录 行列式性质🎈转置不变性质交换性质多重交换移动(抽出插入)👺 因子提取性质拆和性质倍加性质 手算行列式的主要方法原理:任何行列式都可以化为三角行列式 行列式性质🎈 设行列式 ∣ A ∣ d e t ( a i j ) |A|\mathrm{det}(a_{ij}) …

vue 关于axios的使用方法

axios定义: axios 前端 ajax请求工具 1. 在浏览器与nodejs可以使用 2. 可以拦截请求与相应 3. 扩展与封装自定义方法 4. 不依赖dom节点 安装 npm i axios -S 先在vue全局中挂载 import axios from ‘axios’ Vue.prototype.$h…

Docker 安装 Tomcat

目录 一、查看 tomcat 版本 二、拉取 Tomcat Docker 镜像 三、创建 Tomcat 容器 四、访问 Tomcat 五、停止和启动容器 一、查看 tomcat 版本 访问 tomcat 镜像库地址:https://hub.docker.com/_/tomcat,可以通过 Tags 查看其他版本的 tomcat; 二、拉…

Elasticsearch8.8.0 SpringBoot实战操作各种案例(索引操作、聚合、复杂查询、嵌套等)

Elasticsearch8.8.0 全网最新版教程 从入门到精通 通俗易懂 配置项目 引入依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency><dependency>&l…

Android Studio 的Gradle版本修改

使用Android Studio构建项目时&#xff0c;需要配置Gradle&#xff0c;与Gradle插件。 Gradle是一个构建工具&#xff0c;用于管理和自动化Android项目的构建过程。它使用Groovy或Kotlin作为脚本语言&#xff0c;并提供了强大的配置能力来定义项目的依赖关系、编译选项、打包方…

Jtti:linux如何配置dns域名解析服务器

要配置Linux上的DNS域名解析服务器&#xff0c;您可以按照以下步骤进行操作&#xff1a; 1. 安装BIND软件包&#xff1a;BIND是Linux上最常用的DNS服务器软件&#xff0c;您可以使用以下命令安装它&#xff1a; sudo apt-get install bind9 2. 配置BIND&#xff1a;BIND的配置…

Spring Cloud常见问题处理和代码分析

目录 1. 问题&#xff1a;如何在 Spring Cloud 中实现服务注册和发现&#xff1f;2. 问题&#xff1a;如何在 Spring Cloud 中实现分布式配置&#xff1f;3. 问题&#xff1a;如何在 Spring Cloud 中实现服务间的调用&#xff1f;4. 问题&#xff1a;如何在 Spring Cloud 中实现…

HCIA---OSI/RM--开放式系统互联参考模型

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.OSI--开放式系统互联参考模型简介 OSI开放式系统互联参考模型是一种用于计算机网络通信…

解密Redis:应对面试中的缓存相关问题2

面试官&#xff1a;Redis集群有哪些方案&#xff0c;知道嘛&#xff1f; 候选人&#xff1a;嗯~~&#xff0c;在Redis中提供的集群方案总共有三种&#xff1a;主从复制、哨兵模式、Redis分片集群。 面试官&#xff1a;那你来介绍一下主从同步。 候选人&#xff1a;嗯&#xff…

基于WebRTC升级的低延时直播

快直播-基于WebRTC升级的低延时直播-腾讯云开发者社区-腾讯云 标准WebRTC支持的音视频编码格式已经无法满足国内直播行业需求。标准WebRTC支持的视频编码格式是VP8/VP9和H.264&#xff0c;音频编码格式是Opus&#xff0c;而国内推流的音视频格式基本上是H.264/H.265AAC的形式。…

Flutter iOS 集成使用 fluter boost

在 Flutter项目中集成完 flutter boost&#xff0c;并且已经使用了 flutter boost进行了路由管理&#xff0c;这时如果需要和iOS混合开发&#xff0c;这时就要到 原生端进行集成。 注意&#xff1a;之前建的项目必须是 Flutter module项目&#xff0c;并且原生项目和flutter m…

离线数仓中,为什么用两个flume,一个kafka

实时数仓中&#xff0c;为什么没有零点漂移问题&#xff1f; 因为flink直接取的事件时间用kafka是为了速度快&#xff0c;并且数据不丢&#xff0c;那为什么既用了kafkachannel&#xff0c;也用了kafka&#xff0c;而不只用kafkachannel呢&#xff1f; 因为需要削峰填谷离线数仓…

Baumer工业相机堡盟工业相机如何通过BGAPISDK获取相机接口数据吞吐量(C++)

Baumer工业相机堡盟工业相机如何通过BGAPISDK里函数来获取相机当前数据吞吐量&#xff08;C&#xff09; Baumer工业相机Baumer工业相机的数据吞吐量的技术背景CameraExplorer如何查看相机吞吐量信息在BGAPI SDK里通过函数获取相机接口吞吐量 Baumer工业相机通过BGAPI SDK获取数…

【微信小程序】van-uploader实现文件上传

使用van-uploader和wx.uploadFile实现文件上传&#xff0c;后端使用ThinkPHP。 1、前端代码 json&#xff1a;引入van-uploader {"usingComponents": {"van-uploader": "vant/weapp/uploader/index"} }wxml&#xff1a;deletedFile是删除文件函…

十、用 ChatGPT 辅助写文章

目录 一、实验介绍 二、背景 三、ChatGPT 写作方式 3.1 传统写作方式 3.2 ChatGPT 写作方式

Xilinx FPGA电源设计与注意事项

1 引言 随着半导体和芯片技术的飞速发展&#xff0c;现在的FPGA集成了越来越多的可配置逻辑资源、各种各样的外部总线接口以及丰富的内部RAM资源&#xff0c;使其在国防、医疗、消费电子等领域得到了越来越广泛的应用。当采用FPGA进行设计电路时&#xff0c;大多数FPGA对上电的…

【计算机网络】12、frp 内网穿透

文章目录 一、服务端设置二、客户端设置 frp &#xff1a;A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet。是一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议&#xff0c;且…

VUE框架:vue2转vue3全面细节总结(5)过渡动效

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人_python人工智能视觉&#xff08;opencv&#xff09;从入门到实战,前端,微信小程序-CSDN博客 最新的uniapp毕业设计专栏也放在下方了&#xff1a; https://blog.csdn.net/lbcy…

ES6 数组的用法

1. forEach() 用来循环遍历的 for 数组名.forEach(function (item,index,arr) {})item:数组每一项 , index : 数组索引 , arr:原数组作用: 用来遍历数组 let arr [1, 2, 3, 4]; console.log(arr); let arr1 arr.forEach((item, index, arr) > {console.log(item, index…

HTTP——八、确认访问用户身份的认证

HTTP 一、何为认证二、BASIC认证BASIC认证的认证步骤 三、DIGEST认证DIGEST认证的认证步骤 四、SSL客户端认证1、SSL 客户端认证的认证步骤2、SSL 客户端认证采用双因素认证3、SSL 客户端认证必要的费用 五、基于表单认证1、认证多半为基于表单认证2、Session 管理及 Cookie 应…