Python一些提高效率的类库和装饰器用法

news/2024/9/19 3:42:29/文章来源:https://www.cnblogs.com/hanxiaobei/p/17968321

本文主要是慢慢积累Python中一些能提高效率的类库和装饰器,闲话少说,开始进入主题。

装饰器

装饰器是一种设计模式,用于修改或增强函数、方法或类的行为,而不需要改变其本身的代码。Python中的装饰器通常用@符号和函数来实现。

# 自己编写的装饰器
def my_decorator(func):def wrapper():print("Something before")func()print("Something after")return wrapper# 引用自己编写的装饰器
@my_decorator
def say_hello():print("Hello!")# 调用执行函数
say_hello()# 输出结果如下:
Something before
Hello!
Something after

一、重试

【问题引申:接口网络抖动不稳如何做?回答:请求接口捕获异常和接口请求重试】

1 from retrying import retry
2 # 等待1秒后重试,最大重试次数为3
3 @retry(stop_max_attempt_number=3, wait_fixed=1000)
4 def test_foo():
5     pass

二、接口返回值深度校验

【问题引申:接口返回值如何做校验?回答:用deepdiff可以做返回值类型及值不一致的校验】

 1 from deepdiff import DeepDiff
 2 def vaildate_json(expected, actual):
 3     #  比较两个JSON对象的差异
 4     diff = DeepDiff(expected, actual)
 5     #  输出差异
 6     if diff:
 7         print("实际结果与预期结果不一致:")
 8         print(diff)
 9         return False
10     else:
11         print("实际结果与预期结果一致")
12         return True
13 
14 # 需要比较的JSON对象
15 expected = {
16     "key1":33,
17     "key2":{
18         "nested_key":"value",
19         "nested_list":[2,3,4]
20     }
21 }
22 actual = {
23     "key1":"33",
24     "key2":{
25         "nested_key":"value",
26         "nested_list":[2,3,4]
27     }
28 }
29 #  调用函数进行比较
30 vaildate_json(expected,actual)

 三、接口返回值取值:jsonpath

【问题引申:如何快速方便的获取json中的某一个值?回答:用jsonpath】

 1 import jsonpath
 2 actual = {
 3     "key1":"33",
 4     "key2":{
 5         "nested_key":"value",
 6         "key1":"hankai",
 7         "nested_list":[2,3,4]
 8    }
 9  }
10 list1 = jsonpath.jsonpath(actual,'$..key1')
11 print(list1)  # ['33', 'hankai']

 四、读取Excel并转换成列表:xToolkit

【问题引申:如何遍历Excel做接口自动化?回答:xToolkit库】

 1 from xToolkit import xfile
 2 
 3 # 读取Excel数据转换成列表
 4 testdata = xfile.read("接口测试用例.xls").excel_to_dict(sheet=1)
 5 print(testdata)
 6 """
 7 [
 8     {'描述': '用户登录', '用例编号': 'shop_api_001', '接口URL': 'http://shoo.hu.com/index.php?s=api/user/login', '请求方式': 'post', 'URL参数': '{"application":"app","application_client_type": "weixin",}', '表单参数': '', 'JSON参数': ' {"accounts":"ce_hk","pwd": 123456,"type":"username"}', '预期状态码': 200, '预期返回内容': '', '备注': '', '提取参数': 'token', '需要参数': ''},
 9     {'描述': '加入购物车', '用例编号': 'shop_api_002', '接口URL': 'http://shoo.hu.com/index.php?s=api/cart/save', '请求方式': 'post', 'URL参数': '{"application":"app","application_client_type": "weixin",}', '表单参数': '', 'JSON参数': '{"goods_id": "2","spec": [{"type": "套餐","value": "套餐二"},{"type": "颜色","value": "银色"},{"type": "容量","value": "64G"}],"stock": 1}', '预期状态码': 200, '预期返回内容': '', '备注': '', '提取参数': '', '需要参数': 'token'}
10  ]
11 """

 五、json

 1 import json
 2 
 3 # 定义一个字典
 4 data = {
 5     "name": "张三",
 6     "age": 20,
 7     "city": "北京"
 8 }
 9 json.dumps(data)  # 字典编码成JSON字符串
10 json.loads(data)  # JSON字符串解码为字典
11 
12 json.dump(data, open("data.json", "w"))  # 字典编码成JSON字符串并写入文件
13 json.load(open("data.json", "r"))  # 从文件中读取JSON字符串并解码为字典

 六、time

import time
print(time.asctime()) # Wed Apr 24 17:33:12 2024
print(time.time()) # 1713951192.7047122
print(time.localtime()) # time.struct_time(tm_year=2018, tm_mon=8, tm_mday=8, tm_hour=12, tm_min=12, tm_sec=12, tm_wday=2, tm_yday=220, tm_isdst=0)
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) # 2024-04-24 17:33:12
import datetime# 获取当前时间
now = datetime.datetime.now()
# 计算时间
start_time = now + datetime.timedelta(days=1)
end_time = now + datetime.timedelta(days=30)
# 格式化输出年月日时分秒
start_time = start_time.strftime("%Y-%m-%d %H:%M:%S")
end_time = end_time.strftime("%Y-%m-%d %H:%M:%S")
print("开始时间是:", start_time)    开始时间是: 2024-07-18 08:19:33
print("结束时间是:", end_time)      结束时间是: 2024-08-16 08:19:33
# 获取当前时间周一和周日
import datetime
def get_current_week():monday, sunday = datetime.date.today(), datetime.date.today()one_day = datetime.timedelta(days=1)while monday.weekday() != 0:monday -= one_daywhile sunday.weekday() != 6:sunday += one_day# return monday, sunday# 返回时间字符串return datetime.datetime.strftime(monday, "%Y-%m-%d"), datetime.datetime.strftime(sunday, "%Y-%m-%d")print("周一是:",get_current_week()[0])  //周一是: 2024-07-22
print("周日是:",get_current_week()[1])  //周日是: 2024-07-28# 今天年月日
now = datetime.datetime.now().strftime("%Y-%m-%d")
print(now) //打印今天的年月日# 日期获取周几
from datetime import datetime, timedelta
def get_weekday(start_date, end_date, today_date):# 将日期字符串转换为日期对象start_date = datetime.strptime(start_date, "%Y-%m-%d")end_date = datetime.strptime(end_date, "%Y-%m-%d")today_date = datetime.strptime(today_date, "%Y-%m-%d")# 计算周一到周日的天数days_between = (end_date - start_date).days# 计算今天和周一之间的天数差days_from_monday = (today_date - start_date).days# 计算今天是周几,0代表周一,1代表周二,以此类推weekday = days_from_monday % 7# 返回周几的名称weekdays = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]return weekdays[weekday]# 示例
start_date = "2024-07-22"  # 周一的日期
end_date = "2024-07-28"    # 周日的日期
today_date = "2024-07-24"  # 今天的日期print("今天是:", get_weekday(start_date, end_date, today_date)) //今天是: 周三
from datetime import datetime, timedelta
def get_week_info():# 获取当前日期today = datetime.now()today_str = today.strftime("%Y-%m-%d")# 计算周一的日期monday = today - timedelta(days=today.weekday())monday_str = monday.strftime("%Y-%m-%d")# 计算周日的日期sunday = monday + timedelta(days=6)sunday_str = sunday.strftime("%Y-%m-%d")# 获取今天是周几,0代表周一,6代表周日weekday = today.weekday()weekday_name = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"][weekday]# 输出结果print(f"今天是:{weekday_name}")print(f"周一日期:{monday_str}")print(f"周日日期:{sunday_str}")# 返回所有信息return today_str, monday_str, sunday_str, weekday_nameget_week_info()打印结果如下:
今天是:周四
周一日期:2024-07-22
周日日期:2024-07-28

七、随机数生成

import random
# 生成10位随机数
print (''.join(str(random.choice(range(10))) for _ in range(10)))

 

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

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

相关文章

使用 `dd` 备份Ubuntu系统盘

1. 方案概述 dd 是一个低级别的数据复制工具,能够直接将磁盘或分区的内容逐位复制到另一个设备或文件中。使用 dd 备份系统盘可以获得整个系统的精确副本,包括操作系统、配置文件、已安装的软件、以及所有用户数据。 2. 前提条件源设备:包含系统的磁盘(如 /dev/sda) 目标设…

淘宝直播自动回复评论 - 浏览器插件

功能介绍 浏览器插件源码开放,可以随意二次开发,无时间限制,无账号限制,无电脑限制 实现原理,纯浏览器插件实现,监控浏览器界面元素变动,获取直播间或者直播中控后台的评论文本,匹配回复关键词或调用AI接口,再利用js模拟输入和点击等操作 支持以下中控台或直播间地址,…

QC_操作

场景1. MINUS2 如:百乐Step1,q28<>可擦中性笔 →q14使用中性笔 (7) 删除 排除样本(OMIT)

【日记】酸奶冻成冰块了 QvQ(457 字)

正文我不知道一楼的冷藏柜已经修好了,早知道我就把酸奶放一楼了。放在六楼,现在酸奶已经冻成冰块了……今天基本上一整天都在摸鱼看书,中午把经济师报名了,报名费 122 块。有点贵……昨天给全家上了一个 10 万的意外险,包含医疗责任,一共 200 多块钱。但是似乎没办法给兄…

Codeforces Round 903 (Div. 3) F. Minimum Maximum Distance

https://codeforces.com/contest/1881/problem/F不难发现一件事情,我们这里最后的答案所在的点是 1 和 3 号点。 我们有没有发现一个性质:就是这两个点都是红点间的路径上的,而且最后的答案就是最长的红点间的距离的长度除以二上取整。 那么,我们怎么找到最长的红点间的距离…

apifox进行https接口测试

SSL双向认证-SpringBoot项目_apifox 添加证书-CSDN博客 说是 SSL 证书验证 开启,可能验证不通过,根据实际情况来单向认证,客户端证书就不必上传了注: 这里我上传的是p12证书,所以选择下图所示上传另外,这里用的是rsa2048,SM2试了,貌似有问题,如果只是简单的get,可以考…

docker 构建java 部署包

去官网查找对应的镜像资源。 建议最好选择官方的镜像,避免出现一些奇奇怪怪的问题。由于JDK8现在开始收费,因此只能使用OpenJDK的镜像。.1.拉取Java镜像. docker pull java:openjdk-82.运行java容器。 a.先创建一个Java目录 :mkdir /app/zh_lawsuit_oracle/ b.在本地准备一…

Odoo17 门户链接访问令牌

为了方便共享文档,odoo在每个文档模型中都加入了共享链接的快捷分享功能,用户可以方便的在想要分享的文档上将文档的链接分享给客户/供应商。我们以销售订单为例,来看一下分享功能的使用方法. 生成共享链接 我们在想要分享的文档上点击动作-分享,会弹出一个对话框:在显示的…

USB硬件特性(速度、名称、供电)

USB传输速度 USB1.0版本,USB LS(Low Speed低速),速度1.5Mbps。 USB1.1版本,USB FS(Full Speed全速),速度12Mbps。 USB2.0版本,USB HS(High Speed高速),速度480Mbps。 USB3.0版本,USB SS(Super Speed超速),速度5Gbps。 USB3.1版本,USB SS(Super Speed超速),速度10Gbps…

wpf 如何写一个圆形的进度条

先看一下效果吧调用代码如下<local:CycleProgressBar Width="100" Height="100" Background="#FFF68986" Foreground="#FFFA1F09"Maximum="100" Minimum="0" Value="20" IsIndeterminate="Fals…

与LLMs进行在IDE中直接、无需提示的交互是工具构建者探索的一个有希望的未来方向

这个观点在卡内基梅隆大学与谷歌研究人员合作文章《Using an LLM to Help With Code Understanding》中提出。这个观点在卡内基梅隆大学与谷歌研究人员合作文章 《Using an LLM to Help With Code Understanding》 中提出。 论文地址:https://dl.acm.org/doi/abs/10.1145/3597…

dbeaver连oceanBase

1. OceanBase OceanBase是由蚂蚁集团完全自主研发的企业级分布式关系数据库,始创于2010年。OceanBase具有数据强一致、高可用、高性能、在线扩展、高度兼容SQL标准和主流关系数据库、低成本等特点。 2020年6月:OceanBase独立公司化运作。2021年6月1日,OceanBase正式对外开源…