Pytest的fixture的应用

2024-02-27 05:08
文章标签 应用 pytest fixture

本文主要是介绍Pytest的fixture的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

fixture在ui自动化中的应用:

fixture在api自动化中的应用:

conftest.py

 Conftest.py使用范围


fixture是在测试函数运行前后

import  pytest@pytest.fixture()
def login(username='wuya',password='admin'):if username=='wuya' and password=='admin':return 'sdrtyuds344dfgsdfgh345'else:raise  '用户名或密码错误'def test_profile(login):assert  login=='sdrtyuds344dfgsdfgh345'

初始化与清理:装饰器函数@pytest.fixture(),它是在声明一个函数是fixture,如果测试函数参数列表中含有fixture名,那么pytest执行的时候就会检测到,并在测试函数运行之前执行该fixture,fixture可以完成任务也可以返回数据给测试函数 

import  pytestfrom selenium import  webdriver'''打开浏览器放在的fixture函数中,测试函数运行之前执行该函数''' 
@pytest.fixture()
def driver():return  webdriver.Chrome()def test_baidu_title(driver):driver.maximize_window()driver.get('http://www.baidu.com')assert  driver.title=='百度一下,你就知道'

fixture在ui自动化中的应用:

import pytest@pytest.fixture()
def init(selenium):selenium.maximize_window()selenium.get('https://www.baidu.com/')selenium.implicitly_wait(30)yieldselenium.quit()def test_baidu_title(init, selenium):assert selenium.title == '百度一下,你就知道'def test_baidu_url(init, selenium):assert selenium.current_url == 'https://www.baidu.com/''''pytest-selenium的应用,执行命令:pytest -v -s fixture的应用.py --driver Firefox'''

fixture在api自动化中的应用:

需求:测试获取所有书籍和查找添加的书籍

结合Pytest的Fixture函数,结合requests的库,编写测试固件的应用
#!/usr/bin/env python
# !coding:utf-8
import jsonimport pytest, requests# 登录成功,获取到token
@pytest.fixture()
def login():r = requests.post(url='http://localhost:5000/auth',json=json.load(open("pwd.json")))return r.json()["access_token"]# 获取headers
@pytest.fixture()
def header(login):return {'Authorization': 'jwt {0}'.format(login)}@pytest.fixture()
def init(header):addBook(header)yielddelBook(header)# 添加书籍
def addBook(header):r = requests.post(url='http://localhost:5000/v1/api/books',headers=header,json={"name": "python大法1", "author": "xia", "done": True})print("添加书籍:", r.json())writeBook(str(r.json()[0]['datas']['id']))def writeBook(content):with open("bookID", "w") as f:f.write(content)def bookId():with open("bookID") as f:return f.read()# 删除书籍
def delBook(header):r = requests.delete(url='http://localhost:5000/v1/api/book/{0}'.format(bookId()),headers=header)print(r.json())# 获取到所有的书籍
def test_all_book(login, header, init):r = requests.get(url='http://localhost:5000/v1/api/books',headers=header)print(r.json())# 测试添加的书籍
def test_query_book(login, header, init):r = requests.get(url='http://localhost:5000/v1/api/book/{0}'.format(bookId()),headers=header)print(r.json())assert r.json()['datas'][0]['id'] == int(bookId())

conftest.py

conftest.py可以共享fixture,如果希望多个测试文件共同使用一个fixture,可以在该目录下创建conftest.py文件,然后把需要的fixture加入到里边就可以使用了,也就是把fixture和测试用例分离

conftest文件

import pytest
from selenium import webdriver@pytest.fixture()
def driver():return webdriver.Firefox()@pytest.fixture()
def init(driver):driver.maximize_window()driver.get(url='http://www.baidu.com')driver.implicitly_wait(10)yielddriver.quit()@pytest.fixture()
def login(username='xia', password='123'):if username == 'xia' and password == '123':return 'qweretreteqwqw'else:return False

测试用例

'''driver就是conftest文件里的driver函数'''
def test_baidu_url(driver, init):assert driver.current_url == 'https://www.baidu.com/'def test_baidu_title(driver, init):assert driver.title == "百度一下,你就知道"'''login就是conftest文件里的login函数'''
def test_login_profile(login):if login == 'qweretreteqwqw':print("欢迎登录成功")

 Conftest.py使用范围

 function级别:

'''function级别的conftest文件'''import  pytest
from selenium import  webdriver@pytest.fixture()
def driver():return webdriver.Chrome()@pytest.fixture(scope='function')
def init(driver):driver.maximize_window()driver.get('http://www.baidu.com')driver.implicitly_wait(30)yielddriver.quit()
'''测试用例文件'''def test_baidu_url(driver,init):assert  driver.title=='百度一下,你就知道'

class级别:类级别,主要应用于类

'''class级别的conftest.py'''import  pytest
from selenium import  webdriver@pytest.fixture(scope='class')
def driver():return webdriver.Chrome()@pytest.fixture(scope='class')
def init(driver):driver.maximize_window()driver.get('http://www.baidu.com')driver.implicitly_wait(30)yielddriver.quit()

测试模块的代码

'''class级别'''def test_baidu_url(driver,init):assert  driver.current_url=='https://www.baidu.com/'class TestUi(object):def test_baidu_title(self,driver,init):assert  driver.title=='百度一下,你就知道'

module级别:主要应用于模块,多个测试用例文件共用同一个conftest.py

session级别:在一个工程下,pytest执行的就是一个session级别的,泛指所有的函数、类、模块

 

这篇关于Pytest的fixture的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/751315

相关文章

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

Java Stream 的 Collectors.toMap高级应用与最佳实践

《JavaStream的Collectors.toMap高级应用与最佳实践》文章讲解JavaStreamAPI中Collectors.toMap的使用,涵盖基础语法、键冲突处理、自定义Map... 目录一、基础用法回顾二、处理键冲突三、自定义 Map 实现类型四、处理 null 值五、复杂值类型转换六、处理

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.