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

deepseek+vscode自动化测试脚本生成

近几日Deepseek大火,我这里也尝试了一下,确实很强。而目前vscode的AI toolkit插件也已经集成了deepseek R1,这里就介绍下在vscode中利用deepseek帮助我们完成自动化测试脚本的实践分享

安装AI ToolKit并启用Deepseek

微软官方提供了一个针对AI辅助的插件,也就是 AI Toolkit for Visual Studio Code, 这个插件可以利用各种开源或商用的大模型,目前也已经集成了Deepseek R1模型,可以让我们在VS code中方便地利用Deepseek来帮助我们的代码开发

首先在插件中心中找到AI Toolkit并完成安装

请添加图片描述

安装完成插件以后,在插件页面,选择catalog中的models模型页面,并通过筛选条件 hosted by Github, 以及 publisher Deepseek 使用Deepseek-R1模型

请添加图片描述

AI帮助生成脚本

有了deepseek模型后,我们就可以新建一个playgroud让deepseek帮助我们生成自动化脚本了,以下是我让Deepseek生成的针对saucedemo的测试脚本

请添加图片描述

思考过程

嗯,我现在需要帮忙设计一个基于pytest和Playwright的自动化测试项目,针对saucedemo.com的登录和checkout流程,使用POM模式,用户数据放在user.yml里,还要包含异常场景。好的,我得一步一步来。

首先,应该确定项目的结构。POM模式的话,通常会有page对象、测试用例、配置文件、数据文件等。可能需要这样的目录结构:

  • tests/
    • pages/
      • login_page.py
      • inventory_page.py
      • cart_page.py
      • checkout_page.py
    • test_login.py
    • test_checkout.py
  • conftest.py
  • user.yml
  • pytest.ini

然后,用户数据存在user.yml里,里面应该有不同的用户类型,比如标准用户,锁定用户,错误密码,没有用户等。然后测试用例要读取这些数据。

接下来是Page Object Model的实现。每个页面比如登录页、商品页,购物车页、结算页都有自己的类,封装元素和操作。比如LoginPage有用户名、密码输入框,登录按钮,错误提示的方法。

测试用例应该使用pytest的参数化来覆盖不同的用户场景。比如正常登录成功,无效密码,锁定用户等。同时,checkout流程需要正常流程的测试,可能还有填写信息不完整的情况。

然后考虑conftest.py里面设置Playwright的fixture,比如browser,page,以及各个page对象的fixture。比如,每次测试前都转到登录页,登录后到库存页,这样可以处理前置条件。

异常场景的话,例如登录时的各种错误信息,结账时的表单验证,比如必须填first name等。需要编写这些测试用例,并验证错误提示是否正确。

用户的数据如何加载呢?可能用pyYAML库来读取user.yml文件,里面分不同用户的数据。测试时用@pytest.mark.parametrize参数化输入不同的用户数据。

比如,用户数据分成valid_users,invalid_password,locked_user等键。在测试登录的时候,参数化这些情况,触发不同的测试用例。

在测试checkout流程时,可能需要先登录,然后添加商品到购物车,进入购物车,进入结算页,填写信息,完成checkout。这时候,正常的测试用例需要用有效的数据,而异常情况比如不填写某些字段需要验证错误提示。

还需要处理元素的选择器,Playwright的定位方法,比如使用CSS选择器或文本定位。例如,登录页可能通过id定位用户名和密码输入框。

此外,测试完成后需要清理状态吗?比如,购物车中的商品或者是否需要登出,或者每个测试用例之间保持独立,可能使用 fixtures 来确保各自的状态。

也可能需要处理异步操作,不过Playwright是自动处理等待的,所以在页面导航或元素点击时不需要额外处理。

现在,具体的步骤:

  1. 创建项目结构,安装依赖:pytest, playwright, pyyaml。
  2. 编写user.yml,包含不同类型的用户数据。
  3. 实现各个页面的Page类,包含元素定位和操作方法。
  4. 在conftest.py中定义fixture,例如初始化page,创建各page对象的实例。
  5. 编写测试用例,参数化用户数据,覆盖正常和异常流程。
  6. 处理测试中的等待和断言,确保元素的存在或文本正确。

需要检查测试用例是否覆盖以下场景:

登录:

  • 正确用户密码登录成功。
  • 错误密码提示错误信息。
  • 锁定用户无法登录。
  • 空用户名或密码提示错误。

Checkout:

  • 正常填写所有信息,完成订单。
  • 必填字段缺失(如first name为空)提示错误。
  • 取消订单流程。

现在,user.yml的结构应该是什么样的?

可能如下:

users: valid_user: username: standard_user password: secret_sauce invalid_password_user: username: standard_user password: wrongpass locked_user: username: locked_out_user password: secret_sauce missing_username: username: “” password: secret_sauce missing_password: username: standard_user password: “”

在测试登录的时候,参数化这些情况。比如,对于valid_user,应该登录成功,跳转到/inventory.html。对于invalid_password,显示Epic sadface: Username and password do not match。锁定的用户提示Epic sadface: Sorry, this user has been locked out。缺少用户名或密码提示相应的错误信息。

对于checkout流程,可行的步骤是:

登录后,添加一个商品到购物车,点击购物车图标,进入购物车页,点击checkout按钮,填写信息,继续,完成。

所以测试用例需要参数化填写的信息是否正确。例如:

正常情况下的信息:

first_name: John last_name: Doe zip: 12345

异常情况,比如不填first name,是否提示错误。

在编写这些测试时,需要使用页面对象的方法来完成每个步骤,比如添加商品,进入购物车,填写信息,继续按钮等。

可能的问题点:

元素的定位是否正确,特别是动态生成的内容或者异步加载的部分是否需要等待。不过Playwright有自动等待机制,所以选择元素时只要正确选择应该没问题。

需要断言的地方包括:登录后的页面URL是否正确,订单完成后的确认信息是否存在,错误提示是否显示正确的文本。

比如,登录成功后应该跳转到/inventory.html;checkout完成后应该显示“Thank you for your order”。

另外,可能需要清理购物车,但因为每个测试可能独立运行,或者每个测试都重新开始会话,所以在fixture中可以处理,如在每次测试前登录并重置状态?

或者使用类似于beforeEach的fixture,让每个测试用例开始时处于某个状态。比如,登录后的页面。

此外,测试购物流程需要添加商品到购物车,所以库存页面的类需要有添加商品的方法。

Page类示例:

InventoryPage可以有添加某个商品的方法,比如点击“Add to cart”按钮。比如,根据商品名称定位对应的按钮。不过这可能比较复杂,也许在页面上使用通用的方法。

或者,在InventoryPage中有方法add_item_to_cart(item_name),用于点击对应商品的添加按钮。这时需要使用Playwright的定位方法,例如:

def add_item_to_cart(self, item_name): self.page.locator(f"text={item_name}").locator(“xpath=…”).locator(“button”).click()

不过这可能需要根据实际的DOM结构来确定。可能需要inspector查看元素结构。

例如,每个商品项的结构可能类似:

Sauce Labs Backpack
Add to cart

所以,找到对应的名称元素,然后找到其父级元素中的按钮。

或者,更简单的办法是每个商品的“Add to cart”按钮有不同的id,比如 add-to-cart-sauce-labs-backpack,或其他属性。需要看实际网站的结构。

登录后的页面可能有多个商品,每个商品对应的添加按钮可能需要通过其文本来定位对应的按钮。或者通过其他属性。

现在,需要实际查看saucedemo.com的结构。可能使用Playwright的代码生成功能来获取正确的选择器。

假设,例如,每个商品的“Add to cart”按钮的id是动态生成的或者类似,例如对于“Sauce Labs Backpack”,对应的按钮的id可能是add-to-cart-sauce-labs-backpack,那么可以直接通过这个id去定位。

这样的话,InventoryPage中可以有一个方法:

def add_product_to_cart(self, product_name): product_id = product_name.lower().replace(’ ', ‘-’) self.page.click(f"#add-to-cart-{product_id}")

当然,这需要查看实际的网站结构是否正确。

假设正确的商品example在这里是Sauce Labs Backpack,其id可能确实是这样的,这样方法可行。

另外,购物车图标上的数量是否正确,当商品添加后,购物车的图标显示数量为1。当进入购物车页,是否有对应的商品。

需要注意,每个操作之后的页面变化是否需要新的Page对象实例,比如在InventoryPage点击购物车后跳转到CartPage,所以该操作应该返回CartPage的实例,从而能够继续操作。

这样方法的返回值处理可能成为问题。比如:

在InventoryPage中的方法:

def go_to_cart(self): self.page.click(“.shopping_cart_link”) return CartPage(self.page)

类似这样,每个导航动作返回新的Page对象。

这会需要在各个页面的方法中处理返回相应的页面对象。

然后是测试流程的组装:

在测试checkout的时候,可能步骤很多,需要写一个大的测试用例,分步骤进行:

例如:

def test_checkout_process(login_page, inventory_page, checkout_data): # 登录 login_page.login(“standard_user”, “secret_sauce”) # 添加商品 inventory_page.add_product_to_cart(“Sauce Labs Backpack”) inventory_page.go_to_cart() # 进入购物车页面,点击checkout cart_page.click_checkout() # 填写checkout信息 checkout_page.fill_shipping_info(checkout_data) checkout_page.continue_to_overview() # 确认订单 checkout_page.finish_checkout() # 断言是否成功 assert checkout_page.get_order_confirmation() == “Thank you for your order!”

当然,这可能涉及到许多页面的跳转,每个页面之间需要用对应的方法来连接。

异常场景的话,比如在填写信息的时候不输入first name,点击continue时,出现错误提示。

此时,测试用例可能参数化不同的数据,比如:

@pytest.mark.parametrize(“first_name, last_name, zip_code, error_message”, [ (“”, “Doe”, “12345”, “Error: First Name is required”), (“John”, “”, “12345”, “Error: Last Name is required”), (“John”, “Doe”, “”, “Error: Postal Code is required”), ]) def test_checkout_missing_fields(…, first_name, last_name, zip_code, error_message): # 填信息时,漏掉对应字段 checkout_page.fill_shipping_info(first_name, last_name, zip_code) checkout_page.continue_to_overview() assert checkout_page.get_error_message() == error_message

可能还需要考虑,错误信息提示元素的定位是否正确,以及当出现错误时是否阻止进入下一步。

现在,问题可能是如何组织这些数据和页面方法。

另外,关于用户数据的读取,测试用例需要从YAML文件中加载。可能的做法是在conftest.py里面写个fixture读取YAML的数据,然后参数化测试用例。

但pytest的参数化可能需要特定的方式处理,可能将YAML数据转换成测试参数。或者使用外部数据源来参数化测试。

例如,在conftest.py中读取user.yml的所有用户数据,并为登录测试创建一个参数化的fixture。

或者,可以在测试用例中直接读取YAML文件中的数据,并将其参数化。

比如:

import yaml

def load_users(): with open(‘user.yml’) as f: data = yaml.safe_load(f) return data[‘users’]

然后在测试用例中用:

@pytest.mark.parametrize(“user”, [ (“valid_user”), (“invalid_password_user”), (“locked_user”), # … 其他情况 ], indirect=True) def test_login(login_page, user): login_page.login(user[‘username’], user[‘password’]) # 断言等操作

不过,如何将数据转换为参数可能需要更细致的处理,比如将各个用户数据提取成各个测试实例的参数。

可能更好的方法是将不同的用户情况分别写成不同的测试数据项。例如,把不同用户类型数据的键列出来,然后根据这些键从数据中加载相应的参数。

或者,在所有参数化时,导入所有用户数据作为参数。

比如:

import yaml import pytest

with open(‘user.yml’) as f: user_data = yaml.safe_load(f)[‘users’]

login_test_data = [ (user_data[‘valid_user’], True, None), # 正常用户,登录成功,没有错误 (user_data[‘invalid_password_user’], False, ‘Epic sadface: Username and password do not match’), (user_data[‘locked_user’], False, ‘Epic sadface: Sorry, this user has been locked out.’), # … 其他情况 ]

@pytest.mark.parametrize(“user, success, error_msg”, login_test_data) def test_login_user(login_page, user, success, error_msg): login_page.navigate() login_page.login(user[‘username’], user[‘password’]) if success: assert login_page.current_url == ‘https://www.saucedemo.com/inventory.html’ else: assert login_page.get_error_message() == error_msg

这时候,需要在user.yml里的每个用户数据中有一个error键,或者在参数化的准备阶段处理错误信息的映射。

不过这样的参数方式可能更灵活,能够同时指定预期结果。

对于YAML的结构,可能需要更详细的数据项,每个用户数据包含预期的错误消息。

例如,user.yml部分内容:

valid_user: username: standard_user password: secret_sauce expected: success: true error: null

invalid_password_user: username: standard_user password: wrong expected: success: false error: “Epic sadface: Username and password do not match”

locked_user: username: locked_out_user password: secret_sauce expected: success: false error: “Epic sadface: Sorry, this user has been locked out.”

这样参数化时可以更具结构化。但在编写YAML时需要考虑每个用例的期望结果。

这样&#x

相关文章:

deepseek+vscode自动化测试脚本生成

近几日Deepseek大火,我这里也尝试了一下,确实很强。而目前vscode的AI toolkit插件也已经集成了deepseek R1,这里就介绍下在vscode中利用deepseek帮助我们完成自动化测试脚本的实践分享 安装AI ToolKit并启用Deepseek 微软官方提供了一个针对AI辅助的插件,也就是 AI Toolk…...

k8s支持自定义field-selector spec.hostNetwork过滤

好久没写博客啦,年前写一个博客就算混过去啦😂 写一个小功能,对于 Pod,在没有 label 的情况下,支持 --field-selector spec.hostNetwork 查询 Pod 是否为 hostNetwork 类型,只为了熟悉 APIServer 是如何构…...

图像噪声处理技术:让图像更清晰的艺术

在这个数字化时代,图像作为信息传递的重要载体,其质量直接影响着我们的视觉体验和信息解读。然而,在图像采集、传输或处理过程中,难免会遇到各种噪声干扰,如高斯噪声、椒盐噪声等,这些噪声会降低图像的清晰…...

w186格障碍诊断系统spring boot设计与实现

🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…...

【自学笔记】Java的重点知识点-持续更新

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Java知识点概览一、Java简介二、Java基本语法三、面向对象编程(OOP)四、异常处理五、常用类库六、多线程编程七、网络编程 注意事项 总结 Ja…...

031.关于后续更新和指纹浏览器成品

关于后续更新 后续决定不再更新了,我低估了各种检测站的更新速度,我开源的一些源码修改方法,已经被个别检测网站加入了针对性检测。只要开源了,一段时间后就会有针对性反检测。这种东西根本就不能开源,开源了大家就一…...

013-51单片机红外遥控器模拟控制空调,自动制冷制热定时开关

主要功能是通过红外遥控器模拟控制空调,可以实现根据环境温度制冷和制热,能够通过遥控器设定温度,可以定时开关空调。 1.硬件介绍 硬件是我自己设计的一个通用的51单片机开发平台,可以根据需要自行焊接模块,这是用立创…...

UE5 蓝图学习计划 - Day 10:UI 系统(HUD 与 Widget)

在游戏开发中,UI(用户界面) 是玩家获取游戏信息、与游戏进行交互的重要部分。Unreal Engine 5 提供了 HUD(Head-Up Display) 和 Widget Blueprint(小部件蓝图) 来帮助开发者创建 血量条、得分系…...

QT简单实现验证码(字符)

0) 运行结果 1) 生成随机字符串 Qt主要通过QRandomGenerator类来生成随机数。在此之前的版本中,qrand()函数也常被使用,但从Qt 5.10起,推荐使用更现代化的QRandomGenerator类。 在头文件添加void generateRandomNumb…...

代码随想录刷题笔记

数组 二分查找 ● 704.二分查找 tips:两种方法,左闭右开和左闭右闭,要注意区间不变性,在判断mid的值时要看mid当前是否使用过 ● 35.搜索插入位置 ● 34.在排序数组中查找元素的第一个和最后一个位置 tips:寻找左右边…...

VSCode 中的 Git Graph扩展使用详解

VSCode 中的 Git Graph 详解 1. 什么是 Git Graph? Git Graph 是 VSCode 中的一款 Git 可视化扩展,它提供了一种 图形化方式 来查看 Git 提交历史、分支、合并记录等信息,使得 Git 版本管理更加直观和高效。 通过 Git Graph,你…...

Day07:缓存-数据淘汰策略

Redis的数据淘汰策略有哪些 ? (key过期导致的) 在redis中提供了两种数据过期删除策略 第一种是惰性删除,在设置该key过期时间后,我们不去管它,当需要该key时,我们再检查其是否过期,如果过期&…...

【自学嵌入式(8)天气时钟:天气模块开发、主函数编写】

天气时钟:天气模块开发、主函数编写 I2C协议和SPI协议I2C(Inter-Integrated Circuit)SPI(Serial Peripheral Interface) 天气模块心知天气预报使用HTTPClient类介绍主要功能常用函数注意事项 JSON介绍deserializeJson函…...

简单的SQL语句的快速复习

语法的执行顺序 select 4 字段列表 from 1 表名列表 where 2 条件列表 group by 3 分组前过滤 having 分组后过滤 order by 5 排序字段列表 limit 6 分页参数 聚合函数 count 统计数量 max 最大值 min 最小值 avg 平均 sum 总和 分组查询使…...

跟李沐学AI:视频生成类论文精读(Movie Gen、HunyuanVideo)

Movie Gen:A Cast of Media Foundation Models 简介 Movie Gen是Meta公司提出的一系列内容生成模型,包含了 3.2.1 预训练数据 Movie Gen采用大约 100M 的视频-文本对和 1B 的图片-文本对进行预训练。 图片-文本对的预训练流程与Meta提出的 Emu: Enh…...

Rust 所有权特性详解

Rust 所有权特性详解 Rust 的所有权系统是其内存安全的核心机制之一。通过所有权规则,Rust 在编译时避免了常见的内存错误(如空指针、数据竞争等)。本文将从堆内存与栈内存、所有权规则、变量作用域、String 类型、内存分配、所有权移动、Cl…...

基于人脸识别的课堂考勤系统

该项目是一个基于人脸识别的课堂考勤系统,使用Python开发,结合了多种技术实现考勤功能。要开发类似的基于人脸识别的考勤系统,可参考以下步骤: 环境搭建:利用Anaconda创建虚拟环境,指定Python版本为3.8&am…...

Deepseek R1 本地化部署指南:跨平台实战

引言 Deepseek R1 作为一款强大的本地化人工智能工具,支持在多种操作系统上部署,满足开发者和企业私有化运行的需求。本文将手把手教你如何在 Windows、Linux 和 macOS 系统上完成 Deepseek R1 的本地化部署,并附赠常见问题解决技巧! © ivwdcwso (ID: u012172506) 1…...

Nginx 运维开发高频面试题详解

一、基础核心问题 原文链接:https://blog.csdn.net/weixin_51146329/article/details/142963853 1、什么是Nginx? Nginx 是一个高性能的 HTTP 和反向代理服务器,它以轻量级和高并发处理能力而闻名。Nginx 的反向代理功能允许它作为前端服务…...

JVM运行时数据区域-附面试题

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域 有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是 依赖用户线程的启动和结束而建立和销毁。 1. 程序计…...

DeepSeek本地部署详细指南

DeepSeek本地部署详细指南 随着人工智能技术的飞速发展,本地部署大模型的需求也日益增加。DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私。以下是…...

Debian 10 中 Linux 4.19 内核在 x86_64 架构上对中断嵌套的支持情况

一、中断嵌套的定义与原理 中断嵌套是指在一个中断处理程序(ISR)正在执行的过程中,另一个更高优先级的中断请求到来,系统暂停当前中断处理程序,转而处理新的高优先级中断。处理完高优先级中断后,系统返回到原来的中断处理程序继续执行。这种机制允许系统更高效地响应紧急…...

C语言:深入了解指针1

内存和地址 1. 酒店房间类比内存和地址 场景描述 把计算机的内存想象成一家酒店,每个房间就是一个内存单元,每个房间都有一个唯一的房间号,这个房间号就相当于内存地址。房间里可以存放客人的行李等物品,这些物品就好比存储在内…...

【AI】探索自然语言处理(NLP):从基础到前沿技术及代码实践

Hi ! 云边有个稻草人-CSDN博客 必须有为成功付出代价的决心,然后想办法付出这个代价。 目录 引言 1. 什么是自然语言处理(NLP)? 2. NLP的基础技术 2.1 词袋模型(Bag-of-Words,BoW&#xff…...

游戏引擎 Unity - Unity 下载与安装

Unity Unity 首次发布于 2005 年,属于 Unity Technologies Unity 使用的开发技术有:C# Unity 的适用平台:PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域:开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…...

文本复制兼容方案最佳实现落地。

文章目录 一、navigator.clipboard.writeText二、方案落地总结 一、navigator.clipboard.writeText navigator.clipboard.writeText 是一个Web API,它允许网页脚本将文本数据写入用户的系统剪贴板。这个API是异步的,并且设计用于提高安全性和用户体验&a…...

LabVIEW如何高频采集温度数据?

在LabVIEW中进行高频温度数据采集时,选择合适的传感器(如热电偶或热电阻)和采集硬件是关键。下面是一些建议,帮助实现高效的温度数据采集: 1. 传感器选择: 热电偶(Thermocouple)&am…...

AI智慧社区--人脸识别

前端 人脸的采集按钮&#xff1a; 首先对于选中未认证的居民记录&#xff0c;进行人脸采集 前端的按钮 <el-form-item><el-button v-has"sys:person:info" type"info" icon"el-icon-camera" :disabled"ids.length < 0" …...

C++11—右值引用

目录 简介 左值和右值 左值 右值 右值引用 生命周期 引用折叠 实际应用 移动语义 移动构造函数 移动赋值运算符 完美转发 简介 之前我们曾学习过引用叫左值引用&#xff0c;但那是C98的&#xff0c;在C11中新增了一种引用叫右值引用。右值引用主要用于支持移动语…...

Workbench 中的热源仿真

探索使用自定义工具对移动热源进行建模及其在不同行业中的应用。 了解热源动力学 对移动热源进行建模为各种工业过程和应用提供了有价值的见解。激光加热和材料加工使用许多激光束来加热、焊接或切割材料。尽管在某些情况下&#xff0c;热源 &#xff08;q&#xff09; 不是通…...

Windows11 不依赖docker搭建 deepseek-R1 1.5B版本(附 Open WebUi搭建方式)

零、前言 过年这几天发现 DeepSeek 非常火&#xff0c;试用了一下发现确实不错。与豆包、kimi、perplexity 这些相比完全不是一个次元的存在&#xff0c;特别是用ta写文章的时候体验非常好。所以试着自己搭一个环境。 一、安装 Ollama和DeepSeek-R1 我的安装方式很简单&#xf…...

Error: Expected a mutable image

你的函数用了不支持的图片格式比如我的人脸检测&#xff0c;本来要RGB565我却用JPEG所以报错...

【4Day创客实践入门教程】Day2 探秘微控制器——单片机与MicroPython初步

Day2 探秘微控制器——单片机与MicroPython初步 目录 Day2 探秘微控制器——单片机与MicroPython初步MicroPython语言基础开始基础语法注释与输出变量模块与函数 单片机基础后记 Day0 创想启程——课程与项目预览Day1 工具箱构建——开发环境的构建Day2 探秘微控制器——单片机…...

代码随想录算法训练营Day51 | 101.孤岛的总面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿

文章目录 101.孤岛的总面积思路与重点 102.沉没孤岛思路与重点 103.水流问题思路与重点 104.建造最大岛屿思路与重点 101.孤岛的总面积 题目链接&#xff1a;101.孤岛的总面积讲解链接&#xff1a;代码随想录状态&#xff1a;直接看题解了。 思路与重点 nextx或者nexty越界了…...

网络基础

协议 协议就是约定 网络协议是协议中的一种 协议分层 协议本身也是软件&#xff0c;在设计上为了更好的模块化&#xff0c;解耦合&#xff0c;也是设计成为层状结构的 两个视角&#xff1a; 小白&#xff1a;同层协议&#xff0c;直接通信 工程师&#xff1a;同层协议&…...

利用Spring Batch简化企业级批处理应用开发

1. 引言 1.1 批处理的重要性 在现代企业系统中,批处理任务用于处理大量数据,如报表生成、数据迁移、日终结算等。这些任务通常不需要实时响应,但需要高效、可靠地完成。批处理可以显著提高系统性能,减少实时系统的负载,并确保数据的完整性和一致性。 1.2 Spring Batch简…...

Python - pyautogui库 模拟鼠标和键盘执行GUI任务

安装库&#xff1a; pip install pyautogui 导入库&#xff1a;import pyautogui 获取屏幕尺寸&#xff1a; s_width, s_height pyautogui.size() 获取鼠标当前位置&#xff1a; x, y pyautogui.position() 移动鼠标到指定位置&#xff08;可以先使用用上一个函数调试获取当…...

UE求职Demo开发日志#19 给物品找图标,实现装备增加属性,背包栏UI显示装备

1 将用到的图标找好&#xff0c;放一起 DataTable里对应好图标 测试一下能正确获取&#xff1a; 2 装备增强属性思路 给FMyItemInfo添加一个枚举变量记录类型&#xff08;物品&#xff0c;道具&#xff0c;装备&#xff0c;饰品&#xff0c;武器&#xff09;--> 扩展DataT…...

【PyQt】lambda函数,实现动态传递参数

为什么需要 lambda&#xff1f; 在 PyQt5 中&#xff0c;clicked 信号默认会传递一个布尔值&#xff08;表示按钮是否被选中&#xff09;。如果我们希望将按钮的文本内容传递给槽函数&#xff0c;需要通过 lambda 函数显式传递参数。 这样可以实现将按钮内容传递给槽函数&…...

Unity 2D实战小游戏开发跳跳鸟 - 跳跳鸟碰撞障碍物逻辑

在有了之前创建的可移动障碍物之后,就可以开始进行跳跳鸟碰撞到障碍物后死亡的逻辑,死亡后会产生一个对应的效果。 跳跳鸟碰撞逻辑 创建Obstacle Tag 首先跳跳鸟在碰撞到障碍物时,我们需要判定碰撞到的是障碍物,可以给障碍物的Prefab预制体添加一个Tag为Obstacle,添加步…...

LeetCode:121.买卖股票的最佳时机1

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;121.买卖股票的最佳时机1 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票…...

DeepSeek-R1 论文. Reinforcement Learning 通过强化学习激励大型语言模型的推理能力

论文链接&#xff1a; [2501.12948] DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 实在太长&#xff0c;自行扔到 Model 里&#xff0c;去翻译去提问吧。 工作原理&#xff1a; 主要技术&#xff0c;就是训练出一些专有用途小模型&…...

SQL索引优化_提高系统响应速度的秘诀

1. 引言 1.1 索引的重要性 在数据库管理系统中,索引是提升查询性能的关键工具。合理的索引设计可以显著减少查询时间,提高系统的响应速度,从而改善用户体验。然而,不恰当的索引使用可能会适得其反,增加写操作的开销并导致性能下降。 1.2 文章目标与结构 本文旨在介绍如…...

MoonBit 编译器(留档学习)

MoonBit 编译器 MoonBit 是一个用户友好&#xff0c;构建快&#xff0c;产出质量高的编程语言。 MoonBit | Documentation | Tour | Core This is the source code repository for MoonBit, a programming language that is user-friendly, builds fast, and produces high q…...

基于微信小程序的酒店管理系统设计与实现(源码+数据库+文档)

酒店管理小程序目录 目录 基于微信小程序的酒店管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 (1) 用户信息管理 (2) 酒店管理员管理 (3) 房间信息管理 2、小程序序会员模块的实现 &#xff08;1&#xff09;系统首页 &#xff…...

重生之我在异世界学编程之C语言:深入指针篇(上)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文&#xff08;1&#xff09;内置数…...

Unity Shader Graph 2D - 跳动的火焰

在游戏中&#xff0c;火焰是一种常见的特效。通常来讲火焰特效通过粒子系统的方式实现的相对较多&#xff0c;本文将通过Shader Graph的方式来实现一种不同的火焰效果。 那么怎么实现呢 首先创建一个名为Fire的Shader Graph文件&#xff0c;然后创建一个名为M_Fire的材质球。 …...

CoRAG 来自微软与人大的创新RAG框架技术

微软与人大合作开发的CoRAG(Chain-of-Retrieval Augmented Generation)是一种创新的检索增强生成(RAG)框架,旨在通过模拟人类思考方式来提升大语言模型(LLM)在复杂问题上的推理和回答能力。以下是对CoRAG的深度介绍: 1. CoRAG的核心理念 CoRAG的核心思想是通过动态调…...

MySQL的GROUP BY与COUNT()函数的使用问题

在MySQL中&#xff0c;GROUP BY和 COUNT()函数是数据聚合查询中非常重要的工具。正确使用它们可以有效地统计和分析数据。然而&#xff0c;不当的使用可能会导致查询结果不准确或性能低下。本文将详细讨论 GROUP BY和 COUNT()函数的使用方法及常见问题&#xff0c;并提供相应的…...

DS常识问答:人民币升值贬值是什么回事

好的&#xff01;我用一个简单的比喻来解释&#xff0c;就像用苹果换橘子一样&#xff1a; 1. **汇率是什么&#xff1f;** 假设你有人民币&#xff0c;别人有美元。汇率就是你们交换的“价格”。比如今天1美元能换7块人民币&#xff0c;明天可能变成7.5块或者6.5块&…...