当前位置: 首页 > news >正文

pytest+parametrize+yaml实例

# 一、yaml格式
#
# yaml是一种数据类型,可以和json之间灵活的切换,支持注释、换行、字符串等。可以用于配置文件或编写测试用例。
#
# 数据结构:一般是键值对的方式出现。注意编写时值前面必须有空格,键:(空格)值。
#
# 如果是数组,以-(空格) 开头来表示
# 二、定义读取yaml测试用例的方法

# Configuration.yaml_util.py

# yaml文件的读、写、删除

import os.path
import yaml# 读取yaml文件
# def read_yml(ymlPath):
#     if not os.path.isfile(ymlPath):
#         raise FileNotFoundError("文件路径不存在,请输入正确的路径")
#     f = open(ymlPath, 'r', encoding="utf-8")
#     cfg = f.read()
#     d = yaml.safe_load(cfg)
#     return ddef read_yaml(path):"""读取yaml文件:param path: 要读取的yaml文件路径:return: 返回yaml内容"""with open(path, encoding="utf-8") as f:value = yaml.load(stream=f, Loader=yaml.FullLoader)# return value[key]return valuedef write_yaml(path, data):"""写入yaml文件:param path::param data::return:"""with open(path, encoding="utf-8", mode='a') as f:yaml.dump(data, stream=f, allow_unicode=True)def clear_yaml(path):"""清空yaml文件,一般在整个项目执行之前,清空:return:"""with open(path, encoding="utf-8", mode="w") as f:f.truncate()

# Configuration.config.yaml

# 用于存储环境地址

# 三、把测试的服务器地址作为配置文件
#
# 测试的服务器,正常来讲都是比较固定的,但测试环境和正式环境是不同的,因此我们将服务器地址抽出来作为配置文件,方便切换不同的测试环境。这里将配置文件放在config.yaml文件中。
Host:# 有些系统会有生产环境、小版本环境、测试环境等等,所以这里统一管理这些环境地址,后面使用的时候来这里调用就行了baseurl: "http://192.168.0.103/"

#datas.user.yaml

# 用来存储用例

# 不同用例之间用-分隔
-batteryBrandName: 12,batteryRatedCapacity: 12,batteryRatedVoltage: 12,batterySpceC: 12,batterySpceG: 12,batterySpceK: 12,batteryType: 12,batteryTypeName: 12,batteryWeight: 12,cellCount: 12
-batteryBrandName: 13,batteryRatedCapacity: 13,batteryRatedVoltage: 13,batterySpceC: 13,batterySpceG: 13,batterySpceK: 13,batteryType: 13,batteryTypeName: 13,batteryWeight: 13,cellCount: 13

#Module.AddBatterTypeInfo.py

# 四、执行测试的用例文件
# 这里结合@pytest.mark.parametrize方法实现用例数据驱动。
import pytest
import requests
from Configuration.Logins import login
from Configuration.Logins import host
# from Configuration.yaml_util import read_yaml
from Configuration.yaml_util import *@pytest.mark.parametrize("batteryBrandName, batteryRatedCapacity, batteryRatedVoltage, batterySpceC,batterySpceG, batterySpceK, batteryType, batteryTypeName, batteryWeight, cellCount",read_yaml('../datas/user.yaml'))
def test_add_batter_type_info(batteryBrandName, batteryRatedCapacity, batteryRatedVoltage, batterySpceC,batterySpceG, batterySpceK, batteryType, batteryTypeName, batteryWeight, cellCount):API_url = "be/cloud/bsm/batterytypeinfo"baseurl = read_yaml('../Configuration/config.yaml')['Host']['baseurl']FULL_URL = baseurl + API_url# FULL_URL = host() + API_urlheader = {'Authorization': login()}body = {"batteryBrandName": batteryBrandName,"batteryRatedCapacity": batteryRatedCapacity,"batteryRatedVoltage": batteryRatedVoltage,"batterySpceC": batterySpceC,"batterySpceG": batterySpceG,"batterySpceK": batterySpceK,"batteryType": batteryType,"batteryTypeName": batteryTypeName,"batteryWeight": batteryWeight,"cellCount": cellCount}r = requests.post(FULL_URL, headers=header, json=body)res = r.json()# 上面的两句也可以合成一句: res = requests.post(FULL_URL, headers=header, json=body).json()print(res)return res# 用于仅执行该文件if __name__ == '__main__':# test_add_batter_type_info()pytest.main(["-s"])

#Module.BatterTpyeInfo_Search.py

import pytest
import requests
from Configuration.Logins import login
from Configuration.Logins import host# 方法必须是test_开头,因为装饰器parametrize是属于pytest框架的
# 在方法中传入这几个参数名信息
# 格式:@pytest.mark.parametrize("参数1,参数2,参数3,参数4",[(用例1)(用例2)(用例3)])    每个用例中有四个参数
@pytest.mark.parametrize("batteryBrandName,batteryTypeName,batteryType,delFlag",[("乐圆技术", "LY6050", "", ""), (1, 3, 3, "在用")])
def test_battery_type_info_search(batteryBrandName, batteryTypeName, batteryType, delFlag):API_URL = "be/cloud/bsm/batterytypeinfo/list"# 拼接URLFULL_URL = host() + API_URL# print("实际URL的值为:",FULL_URL)header = {'Authorization': login()}# print("实际URL的值为",header)# 执行用例,不要每条用例写一遍了,直接引用参数名即可par = {"batteryBrandName": batteryBrandName,"batteryTypeName": batteryTypeName,"batteryType": batteryType,"delFlag": delFlag}# get请求下,参数需要使用【params】来设置# post请求中,是使用data或者json来传递的r = requests.get(FULL_URL, headers=header, params=par).json()print("\n", r)return rif __name__ == '__main__':test_battery_type_info_search()

# run.run_case.py

# 调用执行所以模块的所有测试用例

import pytest
from Module.AddBatterTypeInfo import test_add_batter_type_info
from Module.BatteryTypeInfo_Search import test_battery_type_info_search
from Module.battery_type_info_exportSelect import battery_type_info_export# def add_batter_type_info():
#     res1 = test_add_batter_type_info()
#
#
# def battery_type_info_search():
#     res2 = test_battery_type_info_search()#
# def battery_type_info_export():
#     res3 = battery_type_info_export()if __name__ == '__main__':pytest.main(["run_case.py", "-s"])

相关文章:

pytest+parametrize+yaml实例

# 一、yaml格式 # # yaml是一种数据类型,可以和json之间灵活的切换,支持注释、换行、字符串等。可以用于配置文件或编写测试用例。 # # 数据结构:一般是键值对的方式出现。注意编写时值前面必须有空格,键:(…...

【HarmonyOS】鸿蒙应用模块化实现

【HarmonyOS】鸿蒙应用模块化实现 一、Module的概念 Module是HarmonyOS应用的基本功能单元,包含了源代码、资源文件、第三方库及应用清单文件,每一个Module都可以独立进行编译和运行。一个HarmonyOS应用通常会包含一个或多个Module,因此&am…...

深入Node.js:实现网易云音乐数据自动化抓取

随着互联网技术的飞速发展,数据已成为企业和个人获取信息、洞察市场趋势的重要资源。音频数据,尤其是来自流行音乐平台如网易云音乐的数据,因其丰富的用户交互和内容多样性,成为研究用户行为和市场动态的宝贵资料。本文将深入探讨…...

【Docker实战】jenkins卡在编译Dockerfile的问题

我们的项目是标准的CI/CD流程,也即是GitlabJenkinsHarborDocker的容器自动化部署。 经历了上上周的docker灾难,上周的服务器磁盘空间灾难,这次又发生了jenkins卡住的灾难。 当然,这些灾难有一定的连锁反应,是先发生的d…...

rust 多线程分发数据

use std::sync::{Arc, Mutex}; use std::collections::VecDeque; use std::thread::{self, sleep}; use rand::Rng; use std::time::Duration;fn main() {let list: Arc<Mutex<VecDeque<String>>> Arc::new(Mutex::new(VecDeque::new()));// 创建修改线程le…...

CentOS 7x 使用Docker 安装oracle11g完整方法

1.安装docker-ce 安装依赖的软件包 yum install -y yum-utils device-mapper-persistent-data lvm2添加Docker的阿里云yum源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo更新软件包索引 yum makecache fast查看docker…...

DDP算法之线性化和二次近似(Linearization and Quadratic Approximation)

DDP算法线性化和二次近似 在DDP算法中,第三步是线性化系统动力学方程和二次近似代价函数。这一步是关键,它使得DDP能够递归地处理非线性最优控制问题。通过线性化和二次近似,我们将复杂的非线性问题转换为一系列简单的线性二次问题,逐步逼近最优解。通过这些线性化和二次近…...

Shellcode详解

Shellcode详解 一、Shellcode的特点二、Shellcode的类型三、Shellcode的工作原理四、防御措施五、常见的PHP Web Shell示例5.1 简单的命令执行5.2 更复杂的Web Shell5.3 防御措施5.4 实际案例 Shellcode是一种小巧、紧凑的机器代码&#xff0c;通常用于利用软件漏洞或注入攻击中…...

sherpa-onnx说话人识别+语音识别自动开启(VAD)+语音识别Python API

专栏总目录 获取该开源项目的渠道,是我在b站上,看到了由csukuangfj制作的一套语音识别视频。以下地址均为csukuangfj在视频中提供,感谢分享! 新一代 Kaldi: 说话人识别+VAD+语音识别之 Python API_哔哩哔哩_bilibili 开源项目地址:GitHub - k2-fsa/sherpa-onnx: Speech-t…...

提取人脸——OpenCV

提取人脸 导入所需的库创建窗口显示原始图片显示检测到的人脸创建全局变量定义字体对象定义一个函数select_image定义了extract_faces函数设置按钮运行GUI主循环运行显示 导入所需的库 tkinter&#xff1a;用于创建图形用户界面。 filedialog&#xff1a;用于打开文件对话框。 …...

python数据可视化:在图形中添加注释matplotlib.pyplot.annotate()

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 python数据可视化&#xff1a; 在图形中添加注释 matplotlib.pyplot.annotate() 请问关于以下代码表述正确的选项是&#xff1f; import matplotlib.pyplot as plt x [1, 2, 3, 4, 5] y […...

IDEA debug 调试Evaluate Expression应用

链接&#xff1a; https://blog.csdn.net/xfx_1994/article/details/104136849?utm_mediumdistribute.pc_aggpage_search_result.none-task-blog-2aggregatepagefirst_rank_v2~rank_aggregation-2-104136849.pc_agg_rank_aggregation&utm_termidea%E4%B8%ADevaluate&s…...

04-echarts-立体柱状图扩展

柱状图扩展 一、前言二、思路1、新增面①、在drawShape方法中&#xff0c;新增一个实际左侧面&#xff0c;②、 在drawShape方法中&#xff0c;新增一个实际右侧面&#xff0c;③ 绘制 2、新增series对象① 添加实际值的左侧面和右侧面 三、效果图 一、前言 事情是这样子的&am…...

HTML5 Web Workers: 异步编程的强大力量

在现代Web开发中&#xff0c;随着应用程序变得越来越复杂&#xff0c;用户界面的流畅性和响应性成为了决定用户体验好坏的关键因素之一。传统的JavaScript执行模型中&#xff0c;所有脚本都在同一个线程上运行&#xff0c;这意味着复杂的计算任务会阻塞UI更新&#xff0c;导致页…...

Flutter第十二弹 Flutter多平台运行

目标&#xff1a; 1.在多平台调试启动Flutter程序运行 一、安卓模拟器 1.1 检查当前Flutter适配的版本 flutter doctor提供了Flutter诊断。 $ flutter doctor --verbose /Users/zhouronghua/IDES/flutter/bin/flutter doctor --verbose [✓] Flutter (Channel master, 2.1…...

30天学会QT---------------大项目之在线考试系统

前段时间真的很忙很忙,忙完这段时间,总算是有空来写文章了,开始写的时候我就以为能够有时间准备和写这个,但是发现有时候忙着忙着就忘记了,没有办法来写项目,真的是非常尴尬。 现在有时间了,就有充分的时间来写了。 为了避免笔记断更,我决定先存稿来写。 1、如何规划项…...

搜维尔科技:力反馈主手—手术机器人应用〈腔镜手术机器人平台—进入手术室动物实验〉

力反馈主手—手术机器人应用〈腔镜手术机器人平台—进入手术室动物实验〉 搜维尔科技&#xff1a;力反馈主手—手术机器人应用〈腔镜手术机器人平台—进入手术室动物实验〉...

缓存技术实战[一文讲透!](Redis、Ecache等常用缓存原理介绍及实战)

目录 文章目录 目录缓存简介工作原理缓存分类1.按照技术层次分类2.按照应用场景分类3.按照缓存策略分类 应用场景1.硬件缓存2.软件缓存数据库缓存Web开发应用层缓存 3.分布式缓存4.微服务架构5.移动端应用6.大数据处理7.游戏开发 缓存优点缓存带来的问题 常见常用Java缓存技术1…...

初识es(elasticsearch)

初识elasticsearch 什么是elasticsearch&#xff1f;&#xff1a; 一个开源的分部署搜索引擎、可以用来实现搜索、日志统计、分析、系统监控等功能。 什么是文档和词条&#xff1f; 每一条数据就是一个文档对文档中的内容进行分词&#xff0c;得到的词语就是词条 什么是正向…...

AI在线免费视频工具2:视频配声音

1、视频配声音 https://deepmind.google/discover/blog/generating-audio-for-video/ https://www.videotosoundeffects.com/ &#xff08;免费在线使用&#xff09;...

Kafka 如何保证消息顺序及其实现示例

Kafka 如何保证消息顺序及其实现示例 Kafka 保证消息顺序的机制主要依赖于分区&#xff08;Partition&#xff09;的概念。在 Kafka 中&#xff0c;消息的顺序保证是以分区为单位的。下面是 Kafka 如何保证消息顺序的详细解释&#xff1a; ⭕分区内消息顺序 顺序写入&#…...

内存分配器性能优化

背景 在之前我们提到采用自定义的内存分配器来解决防止频繁 make 导致的 gc 问题。gc 问题本质上是 CPU 消耗&#xff0c;而内存分配器本身如果产生了大量的 CPU 消耗那就得不偿失。经过测试初代内存分配器实现过于简单&#xff0c;产生了很多 CPU 消耗&#xff0c;因此必须优…...

《OKR工作法》读书笔记

花了两个晚上的时间看完了《OKR工作法》这本书&#xff0c;谈不上有什么感想&#xff0c;因为工作后&#xff0c;其实就一直在用这种方法&#xff0c;所谓当局者迷嘛&#xff0c;习以为常也就谈不上多少新的启发。所以&#xff0c;这篇文章纯粹是一篇读书笔记&#xff0c;把我认…...

2025年计算机毕业设计题目参考-简单容易

2025年最新计算机毕业设计题目参考-第二批 以下可以参考 企业员工薪酬关系系统的设计 基于SpringBoot在线远程考试系统 SpringBootVue的乡政府管理系统 springboot青年公寓服务平台 springboot大学生就业需求分析系统 基于Spring Boot的疗养院管理系统 基于SpringBoot的房屋交…...

3.8. 马氏链-一般状态空间的马氏链(Harris链)

一般状态空间的马氏链-Harris链 1. Harris链及示例1.1. Harris链1.2. 示例2. 修改的Harris链( X ˉ n \bar{X}_{n} Xˉn​)2.1. 修改的Harris链( X ˉ n \bar{X}_{n} Xˉn​)2.2. 三个引理(可以从 X ˉ n \bar{X}_{n} Xˉn​的结论推出 X n X_{n} Xn​的结论)3. 推广相关…...

Python8 使用结巴(jieba)分词并展示词云

Python的结巴&#xff08;jieba&#xff09;库是一个中文分词工具&#xff0c;主要用于对中文文本进行分词处理。它可以将输入的中文文本切分成一个个独立的词语&#xff0c;为后续的文本处理、分析、挖掘等任务提供基础支持。结巴库具有以下功能和特点&#xff1a; 中文分词&a…...

python中scrapy

安装环境 pip install scrapy 发现Twisted版本不匹配 卸载pip uninstall Twisted 安装 pip install Twisted22.10.0 新建scrapy项目 scrapy startproject 项目名 注意&#xff1a;项目名称不允许使用数字开头&#xff0c;也不能包含中文 eg: scrapy startproject scrapy_baidu_…...

基础语法总结 —— Python篇

1、环境搭建 建议直接安装 PyCharm &#xff08;Community Edition&#xff09; Python3.x版本&#xff0c;前者是一个很好用的编译器&#xff0c;后者是Python的运行环境之类的&#xff0c;安装参考https://mp.csdn.net/mp_blog/creation/editor/139511640 2、标识符 第一个…...

数据库系统概述选择简答概念复习

目录 一、组成数据库的三要素 二、关系数据库特点 三、三级模式、二级映像 四、视图和审计提供的安全性 审计(Auditing) 视图(Views) 五、grant、revoke GRANT REVOKE 六、三种完整性 实体完整性 参照完整性 自定义完整性 七、事务的特性ACDI 原子性(Atomicity)…...

template标签

在HTML中&#xff0c;<template> 标签是一个用于封装可重用内容的非显式元素。它不直接显示在网页上&#xff0c;而是作为一个模板&#xff0c;用来定义一组HTML结构和样式&#xff0c;可以在JavaScript中实例化多次&#xff0c;动态地插入到文档的不同位置。这在创建复杂…...

买毕业设计的网站/宁波网络推广优化公司

Web开发中的分页常见的真分页假分页&#xff1a;此篇文章利用GridView控件实现假分页。 1. 页面设置&#xff1a; 拖拽一个GridView控件&#xff0c;设置属性允许分页&#xff0c;就会自动出现页码。如下图所示&#xff1a; 设置PageSize属性&#xff0c;指定每页现实的条数。 …...

300500启迪设计/给网站做seo的价格

一般来说&#xff0c;运用传统的界面控件元素&#xff0c;合理设计布局&#xff0c;能够设计出比较中规中矩的标准界面&#xff1b;利用一些换肤的控件或者部分界面组件&#xff0c;能够设计出相对好看一些的界面效果&#xff0c;如以前很盛行的ActiveSkin、IrisSkin和DotNetSk…...

wordpress首页显示特定分类文章/江苏疫情最新消息

近年来&#xff0c;随着城市建设的不断推进&#xff0c;应对重大突发公共安全事件的处置能力也成为了城市现代化程度的一个重要标志。而作为城市调度的“大脑”&#xff0c;指挥控制中心也得益于当下应急指挥联动的发展而得到迅速拓展。控制台作为人与指挥中心联动的重要载体&a…...

西安高风险地区/太原seo招聘

前言 为什么计算机语言中的变量名都不能以数字开头呢&#xff1f; 解答 如果以数字开头&#xff0c;这个变量就可能是纯数字了&#xff0c;这样语言的编译器(或解释器)就分不清当前的是数字还是变量名了。即使不是纯数字&#xff0c;如100000L在有些语言中表示长整型&#xff0…...

网站模版怎么做的/整站seo技术搜索引擎优化

Chrome浏览器各种崩溃、卡死解决方法参考文章&#xff1a; &#xff08;1&#xff09;Chrome浏览器各种崩溃、卡死解决方法 &#xff08;2&#xff09;https://www.cnblogs.com/Curio-N/p/9691222.html 备忘一下。...

可以做游戏的网站有哪些方面/重庆森林经典台词截图

数据结构之树&#xff08;Tree&#xff09; 笔者本来是准备看JDK HashMap源码的&#xff0c;结果深陷红黑树中不能自拔&#xff0c;特撰此篇以加深对树的理解 定义 首先来看树的定义&#xff1a; 树&#xff08;Tree&#xff09;是n&#xff08;n≥0&#xff09;个节点的有限集…...