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"])

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

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

相关文章

python flask 前奏

如下场景的code, 代码见gitee地址 :pythonflask: pythonflask #1.使用类传参 & 使用字典传参 #2.带参数的url #3.参数带类型的 #4.获取第二页数据 /book/list?page2 #5.if&for 控制及循环 #6.过滤器 #7.自定义过滤器,过滤器命…

Java开发笔记Ⅲ (一些零碎记录)

一些报错处理 找不到注入的对象 可以在 dao 层 的接口上添加 Repository 注解 common 模块报错 Unable to find main class 由于common中只有一些常量与工具类,不需要主类,故出现该错误时只需删除pom文件中的build标签即可解决 网关模块报错 Failed…

如何自定义ArrayList:深入理解Java ArrayList的底层原理

ArrayList是Java集合框架中的一个重要类,它实现了一个可变大小的数组。尽管ArrayList的使用非常简单,但理解其底层实现对优化和调试代码有着重要意义。本文将通过编写一个自定义的ArrayList,帮助你深入理解ArrayList的底层原理。 什么是Arra…

正则表达式常用表示

视频教程:10分钟快速掌握正则表达式 正则表达式在线测试工具(亲测好用):测试工具 正则表达式常用表示 限定符 a*:a出现0次或多次a:a出现1次或多次a?:a出现0次或1次a{6}:a出现6次a…

网络安全:探索云安全的最佳实践

文章目录 网络安全:探索云安全的最佳实践引言云安全简介云安全面临的挑战云安全的最佳实践数据加密身份和访问管理定期安全审计 结语 网络安全:探索云安全的最佳实践 引言 在我们之前的文章中,我们讨论了网络安全的多个方面,包括…

2021数学建模A题目–“FAST”主动反射面的形状调节

A 题——“FAST”主动反射面的形状调节 思路:该题主要是通过利用伸缩杆调整FAST反射面,给出合适的调整方案 程序获取 第一题问题思路与结果: 当待观测天体S位于基准球面正上方,结合考虑反射面板调节因素,确定理想抛物…

颜色分类 - LeetCode 热题 98

大家好!我是曾续缘💘 今天是《LeetCode 热题 100》系列 发车第 98 天 技巧第 3 题 ❤️点赞 👍 收藏 ⭐再看,养成习惯 颜色分类 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序&#xff0…

等保2.0中,如何理解和实施安全管理中心的支持作用?

等保2.0,即《信息安全技术 网络安全等级保护基本要求》的第二版,是中国关于网络安全保护的一项重要标准。它强调了一个中心和三重防护的概念,其中的“一个中心”指的就是安全管理中心(Security Management Center,简称SMC&#xf…

标题:高考后的抉择:专业优先还是学校优先?

标题:高考后的抉择:专业优先还是学校优先? 随着2024年高考的落幕,考生们面临着一个重要的抉择:在分数限制的条件下,是选择一个心仪的专业,还是选择一个知名度更高的学校?这个问题没…

代理四川公司疑难商标办理商标异议复审办理

申请商标注册或者办理其他商标事宜,可以自行办理,也可以委托依法设立的商标代理机构办理。外国人或者外国企业在中国申请商标注册和办理其他商标事宜的,应当委托依法设立的商标代理机构办理,按照被代理人的委托办理商标注册申请或…

【串口通信-USART】

串口通信 前言一、串行通信和并行通信二、波特率三、USRAT如何实现USART 四、通信的时候共地五、奇偶校验位总结 前言 大三上时候的笔记⇨32入门-串口通信-发送和接收数据🌟更加偏向32部分的吧。 大三上左右的时候写过串口通信的笔记,那时候虽然青涩啥也…

广告~~~

大家还记不记得我在之前提到的姜乙,现在,我们的误会解除了,他也是很有实力的,我为他宣传一下,CSDN名:Cpp_King,就他Cpp_King-CSDN博客

物联网协议应用

目录 前言一、WIFI简介二、NTP协议2.1 NTP简介2.2 NTP实现 三、HTTP协议3.1 HTTP协议简介3.2 HTTP服务器 四、MQTT协议4.1 MQTT协议简介4.1.1 MQTT通信模型4.1.2 MQTT协议实现原理4.1.3 MQTT 控制报文 4.2 移植MQTT协议 前言 本文主要介绍一下物联网协议如NTP协议、HTTP协议和M…

Go Gin框架

一、Gin介绍 Gin是一个用Go编写的HTTPweb框架。它是一个类似于martini但拥有更好性能的API框架, 优于httprouter,速度提高了近 40 倍。点击此处访问Gin官方中文文档。 二、安装 1、安装Gin go get -u github.com/gin-gonic/gin 2、代码中引入 import "githu…

数字OT训练系统常见问题解析

随着科技的飞速发展,数字化技术已经深入到医疗康复领域,数字OT(Occupational Therapy,职业疗法)训练系统作为一种创新性的康复工具,为康复患者提供了更加精准、个性化的治疗方案。然而,在使用过…

整数转换00

题目链接 整数转换 题目描述 注意点 A,B范围在[-2147483648, 2147483647]之间 解答思路 比较A、B每一个数位是否相同,如果不同则res 1比较每一位的方法是:将数字右移i位,再将其与1进行’&操作,就可以得到数字…

《逆贫大叔》:一部穿越时光的温情史诗

《逆贫大叔》:一部穿越时光的温情史诗 在历史的长河中,有些故事能够穿越时光的尘埃,直击人心。《逆贫大叔》就是这样一部作品,它不仅是一部电视剧,更是一段历史的缩影,一次心灵的触动。 背景设定&#xff1…

HTML静态网页成品作业(HTML+CSS)——企业摄影网介绍网页(3个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有3个页面。 二、作品演示 三、代…

VOCO原理

A Simple-yet-Effective Volume Contrastive Learning Framework for 3D Medical Image Analysis 一个简单而有效的三维医学图像分析体积对比学习框架 是通过自监督学习搭建的学习框架 自监督学习是无监督学习下的一个分支; 它通过从未标注的数据中生成伪标签来进…

金融科技在资产管理领域的创新实践

一、引言 随着科技的飞速发展,金融科技(FinTech)逐渐渗透到金融行业的各个领域,资产管理作为金融行业的核心之一,也迎来了金融科技带来的深刻变革。金融科技不仅改变了资产管理的传统模式,也极大地提高了资…