pytest--python的一种测试框架--fixture/YAML/parametrize

news2024/11/26 4:54:48

一、pytest的fixture详解

fixture概念fixture是pytest用于将测试前后进行预备、清理工作的代码处理机制。

fixture相对于setup和steardown来说有以下几个优势:

1.fixure命名更加灵活,局限性比较小。
2.conftest.py配置里面可以实现数据共享,不需要import就能自动找到一些配置。

fixture是在setup/teardown基础上进行一些优化,我们之前去做一些方法级模块级,比如一个方法中可能定义了好几个测试用例而此时调用setup/steardown,这些测试用例都会执行前置和后置,这时候我们有个需求就是一部分测试用例我不想用前置和后置另外一部分不想这个时候该怎么办这个时候不好去实现,因此fixture就出现了。
fixture需要定义一个方法@pytest.fixture。

老样子,四个级别:

(scop=“function”)每一个函数或方法都会调用;
(scop=“class”)每个类调用一次;
(scop=“module”)每个.py文件调用一次;
(scop=“session”)多个文件调用一次,.py文件就是module.
fixture的作用范围:session>module>class>fuction

(scop=“function”):

函数后面括号里有func的都会执行fixture,这里可以看到它是比较灵活的,你想用就放进去不想用就不放就行。@pytest.fixture(autouse=True)如果括号里面值是True证明是默认的下面每条函数都会执行预备清理工作。

import requests
import pytest

@pytest.fixture()#等价@pytest.fixture(scope="function")
def func():
    print("我是前置步骤~~~")

def test_mobile1(func):
    expect=1
    actual=1
    assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
def test_mobile2(func):
    expect=1
    actual=1
    assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
def test_mobile3(func):
    expect=1
    actual=1
    assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
def test_mobile4():
    expect=1
    actual=1
    assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等

if __name__=='__main__':
    pytest.main()

在这里插入图片描述

import requests
import pytest

@pytest.fixture(autouse=True)#等价@pytest.fixture(scope="function",autouse=True)
def func():
    print("我是前置步骤~~~")

def test_mobile1():
    expect=1
    actual=1
    assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
def test_mobile2():
    expect=1
    actual=1
    assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
def test_mobile3():
    expect=1
    actual=1
    assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
def test_mobile4():
    expect=1
    actual=1
    assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等

if __name__=='__main__':
    pytest.main()

在这里插入图片描述

二、YAML语法格式

YAML格式是做数据的,YAML写法:对象:

key:
    child-key1:value
    child-key2:value2

等于:{“key":{“child-key”:“value”,“child-key2”:“value2”}}还有就是数组的形式

hero:
  #字典数据格式
  name: xixizi
  word: 芒果是我最喜欢的水果
  Hp: 445.5
#等同语句:hero:{name: xixizi, word: 芒果是我最喜欢的水果, Hp: 445.5}

heros_name:
  - #数组格式
  - xixi
  - 芒果
  - 草莓
heros:
  - #数组与字典组合格式
  - name: xixi
    word: 芒果
    Hp: 440
heros_name_list:
  - #组合数组嵌套格式
  - - xixi
      - 芒果
      - 草莓

接下来新建一个python代码执行的文件:utils

import yaml
f=open("../config/data.yaml",encoding="utf-8")#先用相对路径,../是去上一层目录的意思,./是当前目录
data=yaml.safe_load(f)#读取
print(data)
print(data['hero'])
print(data['heros_name'])
print(data['heros'])
print(data['heros_name_list'])

比json存储数据更灵活
在这里插入图片描述

三、参数化parametrize

参数化可以组装测试数据,在测试前定义好测试数据,并在测试用例中使用。通过参数化可以提高我们的测试效率,也能一定程度上反映出一个测试化人员的水平。

#单词循环
@pytest.mark.parametrize("a",["b"])
def test_parametrize(a):
    print(a)
#多次循环
@pytest.mark.parametrize("a,b",[("c","d"),("e","f")])
def test_parametrize(a,b):
    print(a,b)
def test_parametrize():
    print("测试parametrize")

在这里插入图片描述

单参数单次循环

import pytest

#单参数单次循环
@pytest.mark.parametrize("key",["value"])

def test_parametrize(key):#括号一定要跟@pytest.mark.parametrize("key",["value"])括号里第一项相等
    print("我是"+key)

在这里插入图片描述

单参数多次循环

import pytest

#单参数多次循环,运行时,将数组里的值分别复制给变量,每赋值一次,运行一次。
@pytest.mark.parametrize("name",["xixi","niannian","xiotaiyang"])
def test_parametrize(name):#括号一定要跟@pytest.mark.parametrize("key",["value"])括号里第一项相等
    print("我是"+name)

在这里插入图片描述
这里我们一般会加个判定:

assert name=="xixi"

在这里插入图片描述
在这里插入图片描述

多参数多循环

import pytest

@pytest.mark.parametrize("name,word",[["xixi","天气很好"],["niannian","太阳很暖"],["xiaotaiyang","风很温柔"]])
def test_parametrize_02(name,word):
    print(f'{name}说:{word}')
import pytest
#不管元组还是数组结果是一样的
@pytest.mark.parametrize("name,word",[("xixi","天气很好"),("niannian","太阳很暖"),("xiaotaiyang","风很温柔")])
def test_parametrize_02(name,word):
    print(f'{name}说:{word}')

在这里插入图片描述

四、注意,经常出错的地方

@pytest.mark.parametrize("name,word",["xixi","天气很好"])
def test_parametrize_02(name,word):
    print(f'{name}说:{word}')

这样看起来好像是正确的但是这个程序运行的时候会报错。也就是说你要是有两个值想给它都赋值,必须用数组包起来。

正确写法:

@pytest.mark.parametrize("name,word",[["xixi","天气很好"]])

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

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

相关文章

数据可视化-Python

师从黑马程序员 Json的应用 Json的概念 Json的作用 Json格式数据转化 Python数据和Json数据的相互转化 注:把字典列表变为字符串用dumps,把字符串还原回字典或列表用loads import json#准备列表,列表内每一个元素都是字典,将其转化为Json …

【Clang+LLVM+honggfuzz学习】(一)LLVM简介、安装和第一个Hello Pass

本文结构,PS:根据需要选择观看哦 1. 前言参考 2.简介传统编译器架构LLVM架构 3. LLVM安装版本准备官网源码下载git下载安装过程 4. 写一个LLVM Pass旧Hello Pass实现(legacy PM version)新Hello Pass实现(Using the New Pass Mana…

第六十三回 呼延灼月夜赚关胜 宋公明雪天擒索超-大模型BERT、ERNIE、GPT和GLM的前世今生

神行太保戴宗报信,关胜人马直奔梁上泊,请宋江早早收兵,解梁山之难。宋江派了花荣到飞虎峪左边埋伏,林冲到右边埋伏,再叫呼延灼带着凌振,在离城十里附近布置了火炮,然后才令大军撤退。 李成闻达…

典型周边生态系统

目录 一、概述 二、项目管理系统 2.1 项目管理系统基本工作流 2.2 常用项目管理系统介绍 2.2.1 禅道 2.2.1.1 禅道概述 2.2.1.2 禅道特点 2.2.1.2.1 部署方案 2.2.1.2.2 管理模型 2.2.1.2.3 DevOps解决方案 2.2.1.2.4 自动化测试 2.2.1.2.5 数据大屏 2.2.1.2.6 协同…

阿里云ECS u1实例性能测试,2核4G,5M固定带宽,80G ESSD Entry盘

阿里云服务器ECS u1实例,2核4G,5M固定带宽,80G ESSD Entry盘优惠价格199元一年,性能很不错,CPU采用Intel Xeon Platinum可扩展处理器,购买限制条件为企业客户专享,实名认证信息是企业用户即可&a…

MATLAB 点云随机渲染赋色(51)

MATLAB 点云随机渲染赋色(51) 一、算法介绍二、算法实现1.代码2.效果总结一、算法介绍 为点云中的每个点随机赋予一种颜色,步骤和效果如图: 1、读取点云 (ply格式) 2、随机为每个点的RGB颜色字段赋值 3、保存结果 (ply格式) 二、算法实现 1.代码 代码如下(示例):…

设计模式-结构型-享元模式Flyweight

享元模式的特点: 享元模式可以共享相同的对象,避免创建过多的对象实例,从而节省内存资源 使用场景: 常用于需要创建大量相似的对象的情况 享元接口类 public interface Flyweight { void operate(String extrinsicState); } 享…

编程新手必看!从零起步掌握Python的终极指南,Python简介(1)

1、Python语言的诞生 Python的作者,Guido von Rossum(吉多范罗苏姆,中国Python程序员都叫他 龟叔),荷兰人。1982年,龟叔从阿姆斯特丹大学获得了数学和计算机硕士学位。然而,尽管他算得上是一位…

JUC并发编程(七)

1、不可变对象 1.1、概念 不可变类是指一旦创建对象实例后,就不能修改该实例的状态。这意味着不可变类的对象是不可修改的,其内部状态在对象创建后不能被更改。不可变类通常具有以下特征: 实例状态不可改变:一旦不可变类的对象被…

Linux系统网络的实时性评估

目录 1.使用 cyclictest 测试系统实时性2.测试系统通信实时性2.1 PingPlotter2.2 使用 ping 测试通讯实时性 3. 使用 iperf 测试带宽4.网络性能测试 1.使用 cyclictest 测试系统实时性 安装cyclictest sudo apt-get update sudo apt-get install rt-testscyclictest -p 99 -i…

货币与利率

货币与利率 货币及其职能什么是货币货币的职能货币带来了什么? 货币形式的演变商品货币代用货币信用货币货币的特性 现代社会货币的表现形式流通中的现金支票存款信用卡储存存款 货币层次划分目的划分标准划分种类我国的货币层次 货币与物价的关系利率什么是利息什么…

【C++】力扣-415-字符串相加(双指针,图例详解!!!)

目录 一、前言 二、字符串相加 三、共勉 一、前言 最近春招已经开始,看周围的同学都在投递一些大厂的实习,某为的手撕代码 --- 字符串相乘,某讯的手撕代码 --- 字符串相减等。 于是专门去 Leetcode 上搜索了一下,发现这类题目是面…

Linux(CentOS7)安装软件方式(编译安装,yum,rpm)

目录 前言 安装方式 编译安装 下载 解压 安装 创建软链接 yum rpm 前言 在使用 CentOS 安装软件时,发现安装的方式有好几种,有官网下载 tar 包解压,然后自己编译安装的,也有直接通过 yum 命令一键安装的,还有…

如何制作伸缩侧边栏?

目录 一、html-body 二、CSS 三、JS 四、完整代码 五、效果展示 一、html-body 侧边栏的伸缩需要用户触发事件&#xff0c;这里使用button为例&#xff0c;用户点击按钮实现侧边栏的打开和关闭。 <body><!-- 按钮&#xff0c;可以用文字、图片等作为事件源&am…

STM32学习笔记(10_2)- I2C通信协议MPU6050简介

无人问津也好&#xff0c;技不如人也罢&#xff0c;都应静下心来&#xff0c;去做该做的事。 最近在学STM32&#xff0c;所以也开贴记录一下主要内容&#xff0c;省的过目即忘。视频教程为江科大&#xff08;改名江协科技&#xff09;&#xff0c;网站jiangxiekeji.com 本期开…

揭秘DeviceNET转CCLinkIE的高效通讯秘籍

在现代工业自动化领域&#xff0c;上位机通常扮演着系统控制和监视的角色&#xff0c;而DeviceNET与CC-Link IE则是两种常见的现场总线协议。当需要实现对水泵变频器的精确控制时&#xff0c;通过配置一个集成了DeviceNET转CC-Link IE网关的设备&#xff0c;可以实现上位机与变…

python 进程、线程、协程基本使用

1、进程、线程以及协程【1】进程概念【2】线程的概念线程的生命周期进程与线程的区别 【3】协程(Coroutines) 2、多线程实现【1】threading模块【2】互斥锁【3】线程池【4】线程应用 3、多进程实现4、协程实现【1】yield与协程【2】asyncio模块【3】3.8版本【4】aiohttp 1. 并发…

Linux --- 多路转接

目录 前言 五种IO模型 非阻塞IO IO多路转接 --- select 一个简单的select服务器 HandlerEvent socket就绪条件 select的特点 select缺点 IO多路转接 --- poll poll的优点 poll的缺点 IO多路转接 --- epoll epoll工作原理 epoll的优点 基于epoll封装的服务器 e…

Lambda表达式(语法+函数式接口+使用+变量捕获)

文章目录 Lambda表达式一、语法1.(parameters)2. ->3.方法体4.函数式接口 二、Lambda的使用三、变量捕获四、Lambda在集合中的应用 Lambda表达式 允许通过Lambda表达式来代替功能接口提供了一个正常的参数列表和使用这些参数的主体也叫闭包 一、语法 (parameters) -> …

Django框架之DRF(武沛齐全)

一、FBV和CBV FBV&#xff0c;function base views&#xff0c;其实就是编写函数来处理业务请求。 from django.contrib import admin from django.urls import path from app01 import views urlpatterns [path(users/, views.users), ] from django.http import JsonResp…