pytest使用
主要技术内容
1.pytest设计 接口测试 框架设想
common—公共的东西封装
1.request请求
2.Session
3.断言
4.Log
5.全局变量
6.shell命令
❖ config---配置文件及读取
❖ Log—
❖ payload—请求参数—*.yaml及读取
❖ testcases—conftest.py; testcase1.py…….可以有包,最好按模块就近划分
❖ result/report— 运行数据和报告
❖ 测试 策略—组织 运行all_test.py; p0_test.py; ……
2.框架执行简化流程
1.初始化配置
2.查找测试 用例套件
3.运行套件
4.初始化测试 数据pytest.fixture()
5.执行测试用例
6.读取yaml等测试数据
7.request运行
8.assert验证
9.allure记录报告
10.可与ienkins集成发邮件
3.测试 套件设计 模块化思想
4.测试 用例和套件落地思路
搜索功能—五个接口请求—返回股票stock信息;返回讨 论信息,组合,用户,群组;综合
❖ 搜索是个套件,五个接口分别是测试 用例,鉴于pytest 套件的灵活性,可以设计为 一个文件一个类下-【搜索】 下5个不同测试 方法【接口】(或可一个文件一个方法一 个接口设计 也行,灵活性强。这需要根据实际权 衡,如 果需要灵活多选择 后者,如果相对稳 定建议前者)
❖ 如果是通用的功能,可以放在共享的文件中-conftest.py
5.pytest的相关回顾
1. pytest是一个非常成熟的全功能的Python测试 框架
2. 简单 灵活,容易上手;支持参数化;
3. 能够支持简单 的单元测试 和复杂的功能测试 ,还可以用来做 selenium/appnium等自动化测试 、接口自动化测试 (pytest+requests);
4. pytest具有很多第三方插件,并且可以自定义扩 展, 比较好用的如pytest -selenium(多浏览 器执行)、 pytest-html(完美html测试报 告生成)、 pytest-rerunfailures(失败case重复执行)、 pytest-xdist(多CPU分发 )等;pytest-assume(允许每次测试 多次失败),
5. 测试 用例的skip和xfail处理;
6. 可以很好的和jenkins集成;
7. https://docs.pytest.org/en/latest/contents.html#toc
pytest安装,导入相关依赖库
Pip install –U pytest U表示升级 ➢ Pip intall –U pytest-html ➢ pip install -U pytest-rerunfailures ➢ Pip install pytest-assume ➢ Pip install pytest-allure ➢ Pip install pytest-xdist ➢ Pip list查看 ➢ Pytest –h 帮助 兹测试学
Pytest框架结构
Import pytest
类似的setup,teardown同样更灵活,
模块级 (setup_module/teardown_module)模块始末,全局的
函数级(setup_function/teardown_function)不在类中的函数有用
类级 (setup_class/teardown_class)只在类中前后运行一次
方法级(setup_method/teardown_methond)运行在类中方法始末
session()
#这是一个模块model
import pytest@pytest.fixture(scope="module", autouse=True)
def setup_model():print("setup_model")yieldprint("teardown_model")#类class在模块中定义,它们可以包含多个方法和数据成员。
class TestClassA:def setup_class(self):print('\nsetup class')def teardown_class(self):print('\nteardown_class')#方法method是与类关联的函数def setup_method(self):print("\nsetup_method")def teardown_method(self):print("\nteardown_method")def test_method_1(self):print("TestClassA: test_method_1")def test_method_2(self):print("TestClassA: test_method_2")class TestClassB:def test_method_1(self):print("TestClassB: test_method_1")def test_method_2(self):print("TestClassB: test_method_2")#全局函数function,class内的函数function是方法methoddef setup_function():print("setup_function")def teardown_function():print("teardown_function")def test_function_1():print("test_function_1")def test_function_2():print("test_function_2")if __name__ == "__main__":pytest.main()
module
import pytest# 功能函数
def multiply(a, b):return a * b# ====== fixture ======
def setup_module():print("setup_module():在整个模块之前执行")def teardown_module():print("teardown_module():在整个模块之后执行")def setup_function(function):print("setup_function():在每个方法之前执行")def teardown_function(function):print("teardown_function():在每个方法之后执行")def test_multiply_1():print("正在执行test1")assert multiply(3, 4) == 12def test_multiply_2():print("正在执行test2")assert multiply(3, 'a') == 'aaa'
class
def multiply(a, b):"""Return the product of two numbers."""return a * b# Test fixture for the multiply function
class TestMultiply:def setup_class(cls):print("setup_class(): Executed before any method in this class")def teardown_class(cls):print("teardown_class(): Executed after all methods in this class")def setup_method(self):print("setup_method(): Executed before each test method")def teardown_method(self):print("teardown_method(): Executed after each test method")def test_multiply_3(self):"""Test multiply with two integers."""print("Executing test3")assert multiply(3, 4) == 12def test_multiply_4(self):"""Test multiply with an integer and a string (should fail)."""print("Executing test4")# Note: This test will raise a TypeError due to incompatible types.assert multiply(3, 'a') == 'aaa'
Pytest框架assert断言使用 断言:支持显示最常见的子表达式的值,包括调用,属性,比较以及二元和一元运算符。 包含,相等,不等,大于 小于运算,assertnot 假
assert “h” in “hello”(判断h在hello中)
assert 3==4(判断3=4)
assert 3!=4(判断3!=4)
assert f() ==4 (判断f()方法返回值是否=4)
assert 5>6 (判断5>6为真)
assert not xx (判断xx不为真)
assert {'0', '1', '3', '8'} == {'0', '3', '5', '8'} 断言列表或者字典
import pytestdef intest():assert 'h' in "hello"assert 3==4# (判断3=4)assert 3!=4# (判断3!=4)assert f() ==4# (判断f()方法返回值是否=4)assert 5>6# (判断5>6为真)assert not xx# (判断xx不为真)assert {'0', '1', '3', '8'} == {'0', '3', '5', '8'}# 断言列表或者字典def add(a, b):return a+b
# 测试相等def test_add1():assert add(3, 4) == 7# 测试不相等
def test_add_2():assert add(17, 22) != 50# 测试大于或等于
def test_add_3():assert add(17, 22) <= 50# 测试小于或等于
def test_add_4():assert add(17, 22) >= 38# 功能:用于判断素数
def is_prime(n):if n <= 1:return Falsefor i in range(2, n):if n % i == 0:return Falsereturn True# 判断是否为True
def test_true_1():assert is_prime(13)# 判断是否为True
def test_true_2():assert is_prime(7) is True
# 判断是否不为True
def test_true_3():assert not is_prime(4)
# 判断是否不为True
def test_true_4():assert is_prime(6) is not True
# 判断是否为False
def test_false_1():assert is_prime(8) is False# 测试包含
def test_in():a = "hello"b = "he"assert b in a# 测试不包含
def test_not_in():a = "hello"b = "hi"assert b not in aif __name__ == "__main__":pytest.main()
pytest-fixture的灵活
Fixture优势 :
1、对于setup,teardown,可以不起这两个名字,所以命名方式 灵活。(可独立命名,声明后激活)前置后置
import pytest@pytest.fixture()
def login():print('这是个登陆模块!')def test_soso(login):print('case1:登际后执行搜索')def test_cakan():print('case2:不登陆就看')def test_cart(login):print('case3:登陆,加购物车')
2、数据共享。在conftest.py配置里写方法可以实现 数据共享 ,不需要import导入。可以跨文件共享
创建conftest文件
import pytest@pytest.fixture()
def login():print('From_conftest - 这是个登陆模块!')
import pytestdef test_soso(login):print('case1:登际后执行搜索')def test_cakan():print('case2:不登陆就看')def test_cart(login):print('case3:登陆,加购物车')
3、 神奇的yield,提供返回值,不是return;;相当于setup 和 teardown
import pytest@pytest.fixture(scope="module", autouse=True)
def setup_model():print("setup_model")yieldprint("teardown_model")def test_soso(setup_model):print('case1:登际后执行搜索')def test_cakan():print('case2:不登陆就看')def test_cart(setup_model):print('case3:登陆,加购物车')if __name__ == "__main__":pytest.main()
pytest-fixture
pytest-fixture-CSDN博客
1.Fixture(scope=“function”,params=None, autouse=False, ids=None, name=None):
2.可以使用此装饰器定义fixture
1. scope:=module,session,class,function;
function:每个test都运行,默认是function的scope ,
class:每个 class的所有test只运行一次;
module:每个module的所有test只运行一次;
session:每个session只运行一次
#这是一个模块model
import pytest@pytest.fixture(scope="class", autouse=True)
def setup_model():print("setup_model_class")yieldprint("teardown_model_class")#类class在模块中定义,它们可以包含多个方法和数据成员。
class TestClassA:def setup_class(self):print('\nsetup class')def teardown_class(self):print('\nteardown_class')#方法method是与类关联的函数def setup_method(self):print("\nsetup_method")def teardown_method(self):print("\nteardown_method")def test_method_1(self):print("TestClassA: test_method_1")def test_method_2(self):print("TestClassA: test_method_2")class TestClassB:def test_method_1(self):print("TestClassB: test_method_1")def test_method_2(self):print("TestClassB: test_method_2")#全局函数function,class内的函数function是方法methoddef setup_function():print("setup_function")def teardown_function():print("teardown_function")def test_function_1():print("test_function_1")def test_function_2():print("test_function_2")if __name__ == "__main__":pytest.main()
2. params:可选多个参数调用fixture
3. Autouse:如果是True,则为 所有测试 激活fixture,如果是False,则需要显式参考来激活。
#这是一个模块model
import pytest@pytest.fixture(scope="class")
def setup_model():print("setup_model_class")yieldprint("teardown_model_class")#类class在模块中定义,它们可以包含多个方法和数据成员。
class TestClassA:def setup_class(self):print('\nsetup class')def teardown_class(self):print('\nteardown_class')#方法method是与类关联的函数def setup_method(self):print("\nsetup_method")def teardown_method(self):print("\nteardown_method")def test_method_1(self,setup_model):print("TestClassA: test_method_1")def test_method_2(self):print("TestClassA: test_method_2")class TestClassB:def test_method_1(self):print("TestClassB: test_method_1")def test_method_2(self):print("TestClassB: test_method_2")#全局函数function,class内的函数function是方法methoddef setup_function():print("setup_function")def teardown_function():print("teardown_function")def test_function_1():print("test_function_1")def test_function_2():print("test_function_2")if __name__ == "__main__":pytest.main()
4. ids:每个字符串ID的列表,每个字符串对应 于param,这是测试 ID的一部分。
import pytest@pytest.fixture(params=['www.baidu.com','www.bingying.com'],ids=['case1','case2'])
def urls(request):return request.paramdef test_url(urls):url = urlsprint("url:",url)
5. Name:fixture的名称。
3.fixture带参数传递 -通过固定参数request传递 ;传二个以上参数(通过字典,其实算一个),可 以传多个组合测试 。
import pytest@pytest.fixture(params=['www.baidu.com','www.bingying.com'],ids=['case1','case2'])
def urls(request):return request.paramdef test_url(urls):url = urlsprint("url:",url)
传一个字典
import pytest@pytest.fixture(params=[{'name':'baidu','url':'www.baidu.com'},{'name':'biying','url':'www.biying'}])
def urls_name(request):url = request.param['url']name = request.param['name']return url,namedef test_name_url(urls_name):url,name = urls_nameprint(name,url)
4.参数化:@pytest.mark.parametrize(“login_r”, test_user_data, indirect=True) indeirect=True 是把 login_r当作函数去执行
fixture传二个参数与数据驱动结合
@pytest.mark.parametrize
装饰器接受两个主要参数:
- 第一个参数是一个字符串,表示测试函数中需要参数化的参数名称,多个参数之间用逗号分隔。
- 第二个参数是一个列表或元组,其中每个元素都是一个参数组合,每个组合也是一个元组或列表,其元素顺序必须与第一个参数中列出的参数顺序相匹配。
直接在测试函数上使用
import pytest# 假设我们有一个函数,它接受两个参数并返回它们的和
def add(a, b):return a + b# 使用 parametrize 装饰器,指定测试函数的参数和对应的值
@pytest.mark.parametrize("a, b, expected", [(1, 2, 3), # 第一组参数(2, 3, 5), # 第二组参数(-1, 1, 0), # 第三组参数(0, 0, 0), # 第四组参数
])
def test_add(a, b, expected):assert add(a, b) == expected
类级别使用它,对整个类的所有测试方法进行参数化
两组数据组合
两组数据参数化,从下往上执行
pytest-fixture
1.Fixture 显示调用
2.Fixture 应用usefixtures
3.autouse=True自动激活
4.可以使用多个fixture
5.可以嵌套fixture
55:00
fixture结合parametrize+yaml进行搜索接口 测试
读取url
读取yaml文件,请求access_token,在test里create_tag
import pytest
import requests
import os
import yamldef _base_data(file_name):cur_path = os.path.dirname(os.path.realpath(__file__))yaml1 = os.path.join(cur_path, file_name)f1 = open(yaml1) # 打开yaml文件data = yaml.load(f1, Loader=yaml.FullLoader) # 使用load方法加载return data@pytest.fixture(autouse=True)
def get_base_data():base_data = _base_data('tag.yml')for v in base_data.values(): #读值print(v)return vtest_user_data2 = [{"tag": {"name": 'mou1moumou'}},{"tag": {"name": 'maimai2'}},{"tag": {"name": 'sl2ience'}}]@pytest.fixture(autouse=True)
def query_param(request):return request.param@pytest.mark.parametrize("query_param", test_user_data2, indirect=True)
def test_tag(get_base_data, query_param):method = get_base_data.get('method')url = get_base_data.get('url')params = get_base_data.get('param')res = requests.request(method=method, url=url, params=params)data = res.json()access_token = data['access_token']tag_params = query_paramresponse = requests.post('https://api.weixin.qq.com/cgi-bin/tags/create?access_token='+access_token, json=tag_params)assert 'tag' in response.json()
读取测试数据
读取多个测试数据,待解决!
import yaml
import os
import pytestdef _base_data(file_name):cur_path = os.path.dirname(os.path.realpath(__file__))yaml1 = os.path.join(cur_path, file_name)f1 = open(yaml1) # 打开yaml文件data = yaml.load(f1, Loader=yaml.FullLoader) # 使用load方法加载return data@pytest.fixture(scope="module")
def get_test_data():test_data = _base_data('tag_data.yml')test_user_data2 = test_data.get('test_user_data2')return test_user_data2@pytest.mark.parametrize("tag_data", get_test_data(), indirect=True)
def test_functionality(tag_data):# test_case 是一个字典,包含 'name', 'input', 'expected_output' 等键response= requests.get(url='https://api.weixin.qq.com/cgi-bin/token', param={'grant_type': 'client_credential','appid': 'wx2e193b26f5edc5cf','secret': '99fe9aa25e42f30fa81c5d83816e4fc7'})access_token = response['access_token']response_tag = requests.post('https://api.weixin.qq.com/cgi-bin/tags/create?access_token=' + access_token, json= tag_data)print(response_tag)
附:fixture工厂模式
私有方法
html测试报告
安装
pip install pytest-html
执行
pytest --html=report.html -vs test_yml_func.py
在当前目录生成report.html
Allure 见其他文章
相关文章:
![](https://i-blog.csdnimg.cn/direct/57e6d5682cd3407eac9fc221fbc4c86d.png)
pytest使用
主要技术内容 1.pytest设计 接口测试 框架设想 common—公共的东西封装 1.request请求 2.Session 3.断言 4.Log 5.全局变量 6.shell命令 ❖ config---配置文件及读取 ❖ Log— ❖ payload—请求参数—*.yaml及读取 ❖ testcases—conftest.py; testcase1.py…….可…...
![](https://www.ngui.cc/images/no-images.jpg)
单表查询总结与多表查询概述
1. 单表查询总结 执行顺序: 从一张表,过滤数据,进行分组,对分组后的数据再过滤,查询出来所需数据,排序之后输出; from > where > group by > having > select > order by 2. …...
![](https://i-blog.csdnimg.cn/direct/06b91b7d3dda42be9d4af2e05f4a7d9f.png)
redis的使用场景和持久化方式
redis的使用场景 热点数据的缓存。热点:频繁读取的数据。限时任务的操作:短信验证码。完成session共享的问题完成分布式锁。 redis的持久化方式 什么是持久化:把内存中的数据存储到磁盘的过程,同时也可以把磁盘中的数据加载到内存…...
![](https://i-blog.csdnimg.cn/direct/cf2c72e9075b408bbbc1ed2cfc3b326f.png)
嵌入式Linux学习: 设备树实验
设备树(DeviceTree)是一种硬件描述机制,用于在嵌入式系统和操作系统中描述硬件设备的特性、连接关系和配置信息。它提供了一种与平台无关的方式来描述硬件,使得内核与硬件之间的耦合度降低,提高了系统的可移植性和可维…...
![](https://i-blog.csdnimg.cn/direct/ae7f98bc071b4cfc99db56c1e6a63ac5.png)
eqmx上读取数据处理以后添加到数据库中
目录 定义一些静态变量 定时器事件的处理器 订阅数据的执行器 处理json格式数据和将处理好的数据添加到数据库中 要求和最终效果 总结一下 定义一些静态变量 // 在这里都定义成全局的 一般都定义成静态的private static MqttClient mqttClient; // mqtt客户端 private s…...
![](https://i-blog.csdnimg.cn/direct/10fcca012a6a4786a2d5b190454b4b69.png)
【中项】系统集成项目管理工程师-第5章 软件工程-5.3软件设计
前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…...
![](https://www.ngui.cc/images/no-images.jpg)
C++学习笔记-内联函数使用和含义
引言 内联函数是C为了优化在函数的调用带来的性能开销而设计的,特别是当函数体很小且频繁调用时,内联函数可以让编译器在调用点直接展开函数体,从而避免了函数调用的开销。 一、内联函数的定义与含义 1.1 定义 内联函数是通过在函数声明或…...
![](https://i-blog.csdnimg.cn/direct/d37bbca50e3b43a2afea05d90ef71aa1.png)
数据库(MySQL)-视图、存储过程、触发器
一、视图 视图的定义、作用 视图是从一个或者几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。但是视图只能用来查看表,不能做增删改查。 视图的作用:①简化查询 ②重写格式化数据 ③频繁访问数据库 ④过…...
![](https://www.ngui.cc/images/no-images.jpg)
js 优雅的实现模板方法设计模式
在JavaScript中,优雅地实现模板方法设计模式通常意味着我们要遵循一些最佳实践,如清晰地定义算法的骨架(模板方法),并确保子类能够灵活地扩展或修改这些算法中的特定步骤。由于JavaScript是一种动态语言,我…...
![](https://www.ngui.cc/images/no-images.jpg)
C语言——输入输出
C语言——输入输出 输入输出函数的类型getcharputcharprintf占位符的分类 scanf 什么是输入输出呢? 所谓输入输出是以计算机为主机而言的,往内存中输入数据为输入,反之从内存中输出数据为输出。 输入输出的功能 C语言本身是不提供输入输出功能…...
![](https://i-blog.csdnimg.cn/direct/2447ef28de5f4444b7191e8c2cb8b11b.gif#pic_center)
【微软蓝屏】微软Windows蓝屏问题汇总与应对解决策略
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
![](https://i-blog.csdnimg.cn/direct/6e2c09dbc3874577bcc47c85af620702.png#pic_center)
OpenCV图像滤波(2)均值平滑处理函数blur()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在OpenCV中,blur()函数用于对图像应用简单的均值模糊(mean blur)。这种模糊效果可以通过将图像中的每个像素替…...
![](https://i-blog.csdnimg.cn/direct/42b1b35c9f494735a09bd4bd7ce2032a.png)
Android lmkd机制详解
目录 一、lmkd介绍 二、lmkd实现原理 2.1 工作原理图 2.2 初始化 2.3 oom_adj获取 2.4 监听psi事件及处理 2.5 进程选取与查杀 2.5.1 进程选取 2.5.2 进程查杀 三、关键系统属性 四、核心数据结构 五、代码时序 一、lmkd介绍 Android lmkd采用epoll方式监听linux内…...
![](https://www.ngui.cc/images/no-images.jpg)
linux shell(中)
结构化命令 if语句 if-then 最基本的结构化命令是 if-then 语句。if-then 语句的格式如下: if command thencommands ifif command; then # 通过把分号(;)放在待求值的命令尾部,可以将 then 语句写在同一行commands ifbash sh…...
![](https://i-blog.csdnimg.cn/direct/c6a71de960d84954bd9d5f1993e98b97.png)
VMware三种网络模式---巨细
文章目录 目录 ‘一.网络模式概述 二.桥接模式 二.NAT模式 三.仅主机模式 四.案例演示 防火墙配置: 虚拟电脑配置 前言 本文主要介绍VMware的三种网络模式 ‘一.网络模式概述 VMware中分为三种网络模式: 桥接模式:默认与宿主机VMnet0绑…...
![](https://i-blog.csdnimg.cn/direct/e47bd7173dc14f9ebb7015e2b9267c3f.png)
力扣高频SQL 50 题(基础版)第一题
文章目录 力扣高频SQL 50 题(基础版)第一题1757.可回收且低脂的产品题目说明思路分析实现过程准备数据:实现方式:结果截图: 力扣高频SQL 50 题(基础版)第一题 1757.可回收且低脂的产品 题目说…...
![](https://i-blog.csdnimg.cn/direct/65de060b9aa34454a770771d5c1d28cd.png#pic_center)
2.1.卷积层
卷积 用MLP处理图片的问题:假设一张图片有12M像素,那么RGB图片就有36M元素,使用大小为100的单隐藏层,模型有3.6B元素,这个数量非常大。 识别模式的两个原则: 平移不变性(translation inva…...
![](https://img-blog.csdnimg.cn/img_convert/db310765805092370625ac197c1c57be.png)
网易《永劫无间》手游上线,掀起游戏界狂潮
原标题:网易《永劫无间》手游上线,网友:发烧严重 易采游戏网7月26日消息:自网易宣布《永劫无间》手游即将上线以来,广大游戏玩家的期待值就不断攀升。作为一款拥有丰富内容和极高自由度的游戏,《永劫无间》…...
![](https://i-blog.csdnimg.cn/direct/6a745223e3364e848a57fc6ad90c324c.png)
RNN(一)——循环神经网络的实现
文章目录 一、循环神经网络RNN1.RNN是什么2.RNN的语言模型3.RNN的结构形式 二、完整代码三、代码解读1.参数return_sequences2.调参过程 一、循环神经网络RNN 1.RNN是什么 循环神经网络RNN主要体现在上下文对理解的重要性,他比传统的神经网络(传统的神…...
![](https://www.ngui.cc/images/no-images.jpg)
php 根据位置的经纬度计算距离
在开发中,我们要经常和位置打交道,要计算附近的位置、距离什么的。如下: 一.sql语句 SELECT houseID,title,location,chamber,room,toward,area,rent,is_verify,look_type,look_time, traffic,block_name,images,tag,create_time,update_time, location->&g…...
![](https://i-blog.csdnimg.cn/direct/f1395822eb854aaa930d0928729374a3.png)
17 Python常用内置函数——基本输入输出
input() 和 print() 是 Python 的基本输入输出函数,前者用来接收用户的键盘输入,后者用来把数据以指定的格式输出到标准控制台或指定的文件对象。无论用户输入什么内容,input() 一律作为字符串对待,必要时可以使用内置函数 int()、…...
![](https://i-blog.csdnimg.cn/direct/200b86f8e5c248a697b679c86077a45f.png)
【Web】LitCTF 2024 题解(全)
目录 浏览器也能套娃? 一个....池子? 高亮主题(划掉)背景查看器 百万美元的诱惑 SAS - Serializing Authentication exx 浏览器也能套娃? 随便试一试,一眼ssrf file:///flag直接读本地文件 一个....池子? {…...
![](https://img-blog.csdnimg.cn/06d1f6e6a5f54a4191dd14caaccc0eea.jpg)
家政项目小程序的设计
管理员账户功能包括:系统首页,个人中心,用户管理,家政人员管理,家政服务管理,咨询信息管理,咨询服务管理,家政预约管理,留言板管理,系统管理 微信端账号功能…...
![](https://i-blog.csdnimg.cn/direct/92dae9bdef44460baaac4adbaf75dabb.png)
electron TodoList网页应用打包成linux deb、AppImage应用
这里用的是windows的wsl的ubuntu环境 electron应用打包linux应用需要linux下打包,这里用windows的wsl的ubuntu环境进行操作 1)linux ubuntu安装nodejs、electron 安装nodejs: sudo apt update sudo apt upgrade ##快捷安装 curl -fsSL http…...
![](https://i-blog.csdnimg.cn/direct/e026b280bc1943eba35a9ee61bdc72cc.png)
【C语言】 使用fgets和fputs完成两个文件的拷贝
目录 1、使用fgets和fputs完成两个文件的拷贝 2、使用fgets统计给定文件的行号 fgets和fputs的使用方法函数原型:int fputs(const char *s,FILE *stream); char *fgets(char *s,int size,FILE *stream);fupts…...
![](https://img-blog.csdnimg.cn/e53507633ab14664a6271c43e97fe635.png#pic_center)
使用PyTorch导出JIT模型:C++ API与libtorch实战
PyTorch导出JIT模型并用C API libtorch调用 本文将介绍如何将一个 PyTorch 模型导出为 JIT 模型并用 PyTorch 的 CAPI libtorch运行这个模型。 Step1:导出模型 首先我们进行第一步,用 Python API 来导出模型,由于本文的重点是在后面的部署…...
![](https://i-blog.csdnimg.cn/direct/f2cbaeccdac74ddaaba83bc25e369245.png)
Python——异常捕获,传递及其抛出操作
01. 异常的概念 1. 程序在运行时,如果 python解释器遇到一个错误,会停止程序的执行,并且提示一些错误信息,这就是异常。 2. 程序停止执行并且提示错误信息这个动作,我们通常称之为:抛出(raise…...
![](https://www.ngui.cc/images/no-images.jpg)
【Maven】 的继承机制
Maven是一个强大的项目管理工具,主要用于Java项目的构建和管理。它以其项目对象模型(POM)为基础,允许开发者定义项目的依赖、构建过程和插件。Maven的继承机制是其核心特性之一,它允许子项目继承和复用父项目的配置&am…...
![](https://www.ngui.cc/images/no-images.jpg)
微信小程序结合后端php发送模版消息
前端: <view class"container"><button bindtap"requestSubscribeMessage">订阅消息</button> </view> // index.js Page({data: {tmplIds: [UTgCUfsjHVESf5FjOzls0I9i_FVS1N620G2VQCg1LZ0] // 使用你的模板ID},requ…...
![](https://www.ngui.cc/images/no-images.jpg)
sqlalchemy报错sqlalchemy.orm.exc.DetachedInstanceError
解决方案: 在初始化数据库的代码中,将 maker sessionmaker(bindeng)修改为 maker sessionmaker(bindeng, expire_on_commitFalse)为什么要添加 expire_on_commitFalse 参数? expire_on_commit 可以用来更改 SQLAlchemy 的对象刷新机制&…...
![](https://img-blog.csdnimg.cn/img_convert/d6a8f79d1b0bb5d2d50f274c43246a62.png)
华为网络模拟器eNSP安装部署教程
eNSP是图形化网络仿真平台,该平台通过对真实网络设备的仿真模拟,帮助广大ICT从业者和客户快速熟悉华为数通系列产品,了解并掌握相关产品的操作和配置、提升对企业ICT网络的规划、建设、运维能力,从而帮助企业构建更高效࿰…...
![](https://img-blog.csdnimg.cn/direct/ee9077c56a1c476d803af8a178e0eb98.gif#pic_center)
【React】详解样式控制:从基础到进阶应用的全面指南
文章目录 一、内联样式1. 什么是内联样式?2. 内联样式的定义3. 基本示例4. 动态内联样式 二、CSS模块1. 什么是CSS模块?2. CSS模块的定义3. 基本示例4. 动态应用样式 三、CSS-in-JS1. 什么是CSS-in-JS?2. styled-components的定义3. 基本示例…...
![](https://img-blog.csdnimg.cn/img_convert/3eefee19a01157368b2800470e218716.png)
【ROS2】高级:安全-理解安全密钥库
目标:探索位于 ROS 2 安全密钥库中的文件。 教程级别:高级 时间:15 分钟 内容 背景安全工件位置 公钥材料 私钥材料域治理政策 安全飞地 参加测验! 背景 在继续之前,请确保您已完成设置安全教程。 sros2 包可以用来创…...
![](https://i-blog.csdnimg.cn/direct/57f38d6a0f004782a05e05240512b26c.png)
C语言 ——— 数组指针的定义 数组指针的使用
目录 前言 数组指针的定义 数组指针的使用 前言 之前有编写过关于 指针数组 的相关知识 C语言 ——— 指针数组 & 指针数组模拟二维整型数组-CSDN博客 指针数组 顾名思义就是 存放指针的数组 那什么是数组指针呢? 数组指针的定义 何为数组指针…...
![](https://i-blog.csdnimg.cn/direct/df0e89de0dd54b42acc3bec74a39752c.png)
opencascade AIS_ManipulatorOwner AIS_MediaPlayer源码学习
前言 AIS_ManipulatorOwner是OpenCascade中的一个类,主要用于操纵对象的交互控制。AIS_ManipulatorOwner结合AIS_Manipulator类,允许用户通过可视化工具(如旋转、平移、缩放等)来操纵几何对象。 以下是AIS_ManipulatorOwner的基…...
![](https://www.ngui.cc/images/no-images.jpg)
如何防止用户通过打印功能复制页面文字
简单防白嫖,要让打印出来的页面是空白,通常的做法是在打印时隐藏页面上的所有内容。这可以通过CSS的媒体查询(Media Queries)来实现,特别是针对media print的查询。 在JavaScript中,你通常不会直接控制打印…...
![](https://i-blog.csdnimg.cn/direct/393a76daee2b4afaa506b91a7462e57f.png)
Python3网络爬虫开发实战(3)网页数据的解析提取
文章目录 一、XPath1. 选取节点2. 查找某个特定的节点或者包含某个指定的值的节点3. XPath 运算符4. 节点轴5. 利用 lxml 使用 XPath 二、CSS三、Beautiful Soup1. 信息提取2. 嵌套选择3. 关联选择4. 方法选择器5. css 选择器 四、PyQuery1. 初始化2. css 选择器3. 信息提取4. …...
![](https://i-blog.csdnimg.cn/blog_migrate/2ec2950ee0d2fb09bbaba07889dcf38a.png)
基于 HTML+ECharts 实现监控平台数据可视化大屏(含源码)
构建监控平台数据可视化大屏:基于 HTML 和 ECharts 的实现 监控平台的数据可视化对于实时掌握系统状态、快速响应问题至关重要。通过直观的数据展示,运维团队可以迅速发现异常,优化资源配置。本文将详细介绍如何利用 HTML 和 ECharts 实现一个…...
![](https://i-blog.csdnimg.cn/direct/3e04ba8d334c41e0beddeeb6e5d280f7.png#pic_center)
立创梁山派--移植开源的SFUD和FATFS实现SPI-FLASH文件系统
本文主要是在sfud的基础上进行fatfs文件系统的移植,并不对sfud的移植再进行过多的讲解了哦,所以如果想了解sfud的移植过程,请参考我的另外一篇文章:传送门 正文开始咯 首先我们需要先准备资料准备好,这里对于fatfs的…...
![](https://www.ngui.cc/images/no-images.jpg)
MySQL之视图和索引实战
1.新建数据库 mysql> create database myudb5_indexstu; Query OK, 1 row affected (0.01 sec) mysql> use myudb5_indexstu; Database changed 2.新建表 1.学生表student,定义主键,姓名不能重名,性别只能输入男或女,所在…...
![](https://img-blog.csdnimg.cn/img_convert/546fdb6abc94773e00c3a4a384ef5b7d.png)
快速参考:用C# Selenium实现浏览器窗口缩放的步骤
背景介绍 在现代网络环境中,浏览器自动化已成为数据抓取和测试的重要工具。Selenium作为一个强大的浏览器自动化工具,能够与多种编程语言结合使用,其中C#是非常受欢迎的选择之一。在实际应用中,我们常常需要调整浏览器窗口的缩放…...
![](https://www.ngui.cc/images/no-images.jpg)
MyBatis 插件机制、分页插件如何实现的
MyBatis 插件机制允许开发者在 SQL 执行的各个阶段(如预处理、执行、结果处理等)中插入自定义逻辑,从而实现对 MyBatis 行为的扩展和增强。以下是 MyBatis 插件运行原理的详细介绍: 插件接口 MyBatis 插件通过实现 org.apache.i…...
![](https://i-blog.csdnimg.cn/direct/fc23aef012fa4349af2bdd190d50f4ea.png)
CentOS6.0安装telnet-server启用telnet服务
CentOS6.0安装telnet-server启用telnet服务 一步到位 fp"/etc/yum.repos.d" ; cp -a ${fp} ${fp}.$(date %0y%0m%0d%0H%0M%0S).bkup echo [base] nameCentOS-$releasever - Base baseurlhttp://mirrors.163.com/centos-vault/6.0/os/$basearch/http://mirrors.a…...
![](https://img-blog.csdnimg.cn/a3509e58320e472ca12a3ba2787080da.jpg)
H5+CSS+JS工作性价比计算器
工作性价比=平均日新x综合环境系数/35 x(工作时长+通勤时长—0.5 x摸鱼时长) x学历系数 如果代码中的公式不对,请指正 效果图 源代码 <!DOCTYPE html> <html> <head> <style> .calculator { width: 300px; padd…...
![](https://i-blog.csdnimg.cn/direct/e381446f4f8142adb1a7a3d64930ea57.png)
Linux:基础命令学习
目录 一、ls命令 实例:-l以长格式显示文件和目录信息 实例:-F根据文件类型在列出的文件名称后加一符号 实例: -R 递归显示目录中的所有文件和子目录。 实例: 组合使用 Home目录和工作目录 二、目录修改和查看命令 三、mkd…...
![](https://img-blog.csdnimg.cn/direct/15f11b9000784d40a96da05717b0d9b0.jpeg)
遇到Websocket就不会测了?别慌,学会这个Jmeter插件轻松解决....
websocket 是一种双向通信协议,在建立连接后,websocket服务端和客户端都能主动向对方发送或者接收数据,而在http协议中,一个request只能有一个response,而且这个response也是被动的,不能主动发起。 websoc…...
![](https://img-blog.csdnimg.cn/img_convert/e16b92698e81a7b38d48c242e9644c60.png)
高性能 Java 本地缓存 Caffeine 框架介绍及在 SpringBoot 中的使用
在现代应用程序中,缓存是一种重要的性能优化技术,它可以显著减少数据访问延迟,降低服务器负载,提高系统的响应速度。特别是在高并发的场景下,合理地使用缓存能够有效提升系统的稳定性和效率。 Caffeine 是一个高性能的…...
![](https://img-blog.csdnimg.cn/img_convert/6f391b7b9050f989db459c0d349ac6f1.png)
Http 和 Https 的区别(图文详解)
在现代网络通信中,保护数据的安全性和用户的隐私是至关重要的。HTTP(Hypertext Transfer Protocol)和 HTTPS(Hypertext Transfer Protocol Secure)是两种常见的网络通信协议,但它们在数据保护方面的能力存在…...
![](https://www.ngui.cc/images/no-images.jpg)
DP学习——外观模式
学而时习之,温故而知新。 外观模式 角色 2个角色,外观类,子系统类。 个人理解 感觉就是对外接口封装,这个是封装一个功能的对外接口,越简单越好,提供给第三方用。 应用场景 封装为对外库时ÿ…...
![](https://img-blog.csdnimg.cn/img_convert/3382fbe3704145e96b3a66bc80e72d62.png)
Vue3 + Vite 打包引入图片错误
1. 具体报错 报错信息 报错代码 2. 解决方法 改为import引入,注意src最好引用为符引入,不然docker部署的时候可能也会显示不了 <template><img :src"loginBg" alt""> </template><script langts setup> …...