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

四种自动化测试模型实例及优缺点详解

一、线性测试

1.概念:

通过录制或编写对应应用程序的操作步骤产生的线性脚本。单纯的来模拟用户完整的操作场景。

(操作,重复操作,数据)都混合在一起。

2.优点:

每个脚本相对独立,且不产生其他依赖和调用。

3.缺点:

开发成本高,用例之间存在重复的操作。比如重复的用户登录和退出。

维护成本高,由于重复的操作,当重复的操作发生改变时,则需要逐一进行脚本的修改。

4.线性测试实例

用户登录

以下的用户名密码到时候自己去申请,就不将笔者的用户密码贴出来了。

  1. # coding=utf-8

  2. '''

  3. Created on 2016-7-20

  4. @author: Jennifer

  5. Project:简单元素操作登录126邮箱,元素的clear(),send_keys(),click()操作

  6. 在定位的时候发现有些元素定位不到,最后发现有iframe,frame中实际上是嵌入了另一个页面。

  7. 如果iframe有name或id的话,直接使用switch_to_frame("name值")或switch_to_frame("id值"),

  8. 这是最理想的方法,也是最简单好用的方法。

  9. '''

  10. from selenium import webdriver

  11. import time

  12. driver=webdriver.Firefox()

  13. driver.get(r'http://www.126.com/') #字符串加r,防止转义。

  14. time.sleep(3)

  15. print '开始登录邮箱'

  16. try:

  17. assert '126' in driver.title #title是变量,不能title()

  18. except AssertionError:

  19. print "error:网址输入不正确"

  20. else:

  21. print "记录日志:网址输入正确"

  22. # driver.switch_to_frame('x-URS-iframe') #跳转到iframe框架

  23. driver.switch_to.frame('x-URS-iframe') #同上面语句一样,跳转到iframe框架

  24. username=driver.find_element_by_name('email')

  25. username.clear()

  26. username.send_keys('Jennifer···')

  27. time.sleep(0.1)

  28. userpasswd=driver.find_element_by_name('password')

  29. userpasswd.clear()

  30. userpasswd.send_keys('·····')

  31. time.sleep(0.1)

  32. loginbt=driver.find_element_by_id('dologin')

  33. loginbt.click()

  34. time.sleep(3)

  35. try:

  36. assert '网易邮箱' in driver.title

  37. except AssertionError:

  38. print '邮箱登录失败'

  39. else:

  40. print '邮箱登录成功'

  41. finally:

  42. #操作:收信,写信等操作,暂不写例子了

  43. driver.quit()

  44. print '测试结束'

二、模块化驱动测试

1.概念:

将重复的操作独立成功共模块,当用例执行过程中需要用到这一模块操作时则被调用。

操作+(重复操作,数据)混合在一起。

2.优点:

由于最大限度消除了重复,从而提高了开发效率和提高测试用例的可维护性。

3.缺点:

虽然模块化的步骤相同,但是测试数据不同。比如说重复的登录模块,如果登录用户不同,依旧要重复编写登录脚本。

4.实例

公共模块:对登陆和退出进行模块化封装

以下的用户名密码到时候自己去申请,就不将笔者的用户密码贴出来了

  1. # coding=utf-8

  2. '''

  3. Created on 2016-7-27

  4. @author: Jennifer

  5. Project:模块化驱动测试实例,将重复的登录脚本放在单独的脚本中供其他用例调用

  6. '''

  7. import time

  8. class Login():

  9. def user_login(self,driver):

  10. username=driver.find_element_by_name('email')

  11. username.clear()

  12. username.send_keys('username')

  13. time.sleep(0.1)

  14. userpasswd=driver.find_element_by_name('password')

  15. userpasswd.clear()

  16. userpasswd.send_keys('password')

  17. time.sleep(0.1)

  18. loginbt=driver.find_element_by_id('dologin')

  19. loginbt.click()

  20. time.sleep(3)

  21. def user_logout(self,driver):

  22. driver.find_element_by_link_text(u'退出').click()

  23. driver.quit()

'

运行

运行

写信用例:以下代码用了各种定位方法,值得学习,后续再重新对这部分进行总结

直接调用模块的登录和退出方法。

  1. # coding=utf-8

  2. '''

  3. Created on 2016-7-27

  4. @author: Jennifer

  5. Project:发送邮件

  6. '''

  7. from selenium import webdriver

  8. import time

  9. from test_5_2_public import Login #由于公共模块文件命名为test_5_2_public

  10. driver=webdriver.Firefox()

  11. driver.implicitly_wait(30)

  12. driver.get(r'http://www.126.com/') #字符串加r,防止转义。

  13. time.sleep(3)

  14. driver.switch_to.frame('x-URS-iframe')

  15. #调用登录模块

  16. Login().user_login(driver)

  17. time.sleep(10)

  18. #发送邮件

  19. #点击发件箱

  20. #_mail_component_61_61是动态id,所以不能用于定位

  21. #driver.find_element_by_css_selector('#_mail_component_61_61>span.oz0').click()

  22. #不能加u"//span[contains(text(),u'写 信')]",否则定位不到。

  23. #以下定位是查找span标签有个文本(text)包含(contains)'写 信' 的元素,该定位方法重要

  24. driver.find_element_by_xpath("//span[contains(text(),'写 信')]").click()

  25. #填写收件人

  26. driver.find_element_by_class_name('nui-editableAddr-ipt').send_keys(r'xxx@163.com')

  27. #填写主题

  28. #通过and连接更多的属性来唯一地标志一个元素

  29. driver.find_element_by_xpath("//input[@class='nui-ipt-input' and @maxlength='256']").send_keys(u'自动化测试')

  30. #填写正文

  31. #通过switch_to_frame()将当前定位切换到frame/iframe表单的内嵌页面中

  32. driver.switch_to_frame(driver.find_element_by_class_name('APP-editor-iframe'))

  33. #在内嵌页面中定位邮件内容位置

  34. emailcontext=driver.find_element_by_class_name('nui-scroll')

  35. #填写邮件内容

  36. emailcontext.send_keys(u'这是第一封自动化测试邮件')

  37. #通过switch_to().default_content()跳回最外层的页面

  38. #注:不要写成switch_to().default_content(),否则报AttributeError: SwitchTo instance has no __call__ method

  39. driver.switch_to.default_content()

  40. #driver.switch_to.parent_frame()

  41. #点击发送

  42. time.sleep(3)

  43. #有可能存在元素不可见(查看元素是灰色的),会报ElementNotVisibleException错误

  44. #包含发送二字的元素很多,所以还得再加上其他限制

  45. #sendemails=driver.find_element_by_xpath("//span[contains(text(),'发送')]")

  46. sendemails=driver.find_element_by_xpath("//span[contains(text(),'发送') and @class='nui-btn-text']")

  47. time.sleep(3)

  48. #校验邮件是否发送成功

  49. try:

  50. assert '发送成功' in driver.page_source

  51. except AssertionError:

  52. print '邮件发送成功'

  53. else:

  54. print '邮件发送失败'

  55. #调用退出模块

  56. Login().user_logout(driver)

收信用例:

直接调用模块的登录和退出方法。

  1. # coding=utf-8

  2. '''

  3. Created on 2016-7-27

  4. @author: Jennifer

  5. Project:接收邮件

  6. '''

  7. from selenium import webdriver

  8. import time

  9. from test_5_2_public import Login

  10. driver=webdriver.Firefox()

  11. driver.implicitly_wait(30)

  12. driver.get(r'http://www.126.com/') #字符串加r,防止转义。

  13. time.sleep(3)

  14. driver.switch_to.frame('x-URS-iframe')

  15. #调用登录模块

  16. Login().user_login(driver)

  17. time.sleep(10)

  18. #接收邮件

  19. #点击收信

  20. #以下定位是查找span标签有个文本(text)包含(contains)'收 信' 的元素,该定位方法重要

  21. driver.find_element_by_xpath("//span[contains(text(),'收 信')]").click()

  22. #校验是否进入收件箱,没报错即进入

  23. try:

  24. #点击其中一封邮件

  25. driver.find_element_by_xpath("//div[@sign='letter']").click()

  26. except Exception as e:

  27. print e

  28. else:

  29. print '成功收信'

  30. #调用退出模块

  31. Login().user_logout(driver

三、数据驱动测试

1.概念

它将测试中的测试数据和操作分离,数据存放在另外一个文件中单独维护。

通过数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。

操作+重复操作+数据分开。

2.优点

通过这种方式,将数据和重复操作分开,可以快速增加相似测试,完成不同数据情况下的测试。

3.缺点

暂无

4.实例

从excel表格读取用户名密码,登录邮箱。

以下的用户名密码到时候自己去申请,就不将笔者的用户密码贴出来了。

 
  1. # coding=utf-8

  2. '''

  3. Created on 2016-7-28

  4. @author: Jennifer

  5. Project:数据驱动测试,数据保存在excel中,需要导入xlrd模块

  6. '''

  7. from selenium import webdriver

  8. import time

  9. import xlrd

  10. #将用户密码表格转换为用户密码列表

  11. def exceltolist(excelfile,colnameindex=0,by_index=0):

  12. excelfile=xlrd.open_workbook(excelfile) #打开excel表格

  13. # table = excelfile.sheets()[by_index] #默认获取sheet0页

  14. table = excelfile.sheet_by_index(by_index)#默认获取sheet0页

  15. nrows=table.nrows #获取excel的sheet0页的行数

  16. colnames=table.row_values(colnameindex) #默认获取第0行的列表数据:name和password两个值

  17. list =[] #建一个空列表,用来存放用户密码字典

  18. for rownum in range(1,nrows): #初始行为0,从第1行开始

  19. row = table.row_values(rownum) #获取某一行的列表数据

  20. if row:

  21. app = {} #建立一个空字典,存放某一组用户密码数据

  22. for i in range(len(colnames)): #目前是2

  23. app[colnames[i]] = row[i] #字典新增数据:循环两次,字典新增两对key-value

  24. list.append(app) #将新增的字典数据,添加到列表数据中

  25. return list

  26. def Login():

  27. file=r'D:\pythontest\rightpassword\userpassword.xls'

  28. userlist=exceltolist(file)

  29. for i in range(len(userlist)):

  30. driver=webdriver.Firefox()

  31. driver.get(r'http://www.126.com/') #字符串加r,防止转义。

  32. time.sleep(3)

  33. driver.switch_to.frame('x-URS-iframe') #同上面语句一样,跳转到iframe框架

  34. username=driver.find_element_by_name('email')

  35. username.clear()

  36. username.send_keys(userlist[i]['name'])

  37. time.sleep(0.1)

  38. userpasswd=driver.find_element_by_name('password')

  39. userpasswd.clear()

  40. userpasswd.send_keys(userlist[i]['password'])

  41. time.sleep(0.1)

  42. loginbt=driver.find_element_by_id('dologin')

  43. loginbt.click()

  44. time.sleep(3)

  45. try:

  46. assert '网易邮箱' in driver.title

  47. except AssertionError:

  48. print '用户%s邮箱登录失败'%(userlist[i]['name'])

  49. else:

  50. print '用户%s邮箱登录成功'%(userlist[i]['name'])

  51. finally:

  52. driver.quit()

  53. if __name__=='__main__':

  54. Login()

四、关键字驱动测试

关键字驱动的来源非常自然,从面向对象的思路出发,同样的业务逻辑会自然的编写成一个类或者函数作为关键字来被不同的测试脚本所调用。当测试框架发展到所有 的测试过程都已经可以被写好的函数和类所组合完成时,就进化到了关键字驱动的一个高级阶段,这个时候测试用例的开发就变成了测试数据和关键字的组合,并把 这种组合工作简化为所有人都很熟悉的表格填写任务,从而最终达到一个由数据和关键字驱动整个测试的效果。

在关键字驱动框架里,你可以创建一些关键字以及相关联的一些方法和函数。然后你创建一个函数库,它里面包含一个读取关键字的逻辑,然后调用相关的动作。

关键字驱动的自动化测试(也称为表驱动测试自动化),是数据驱动自动化测试的变种,可支持由不同序列或多个不同路径组成的测试。它是一种独立于应 用程序的自动化框架,在处理自动化测试的同时也要适合手工测试。关键字驱动的自动化测试框架建立在数据驱动手段之上,表中包含指令(关键词),而不只是数 据。这些测试被开发成使用关键字的数据表,它们独立于执行测试的自动化工具。关键字驱动的自动化测试是对数据驱动的自动化测试的有效改进和补充。

这种自动化测试的模型主要由核心数据驱动引擎、组件函数、支持库和应用映射表组成。自动化测试首先由初始脚本开始执行,这个脚本把高层测试表传递给高层驱 动器,高层驱动器在处理这些表的过程中,遇到中层测试表后就调用中层驱动器,中层驱动器处理中层表时也作类似的处理。当低层驱动器处理低层表时,它尝试着 使应用与测试保持同步。当低层驱动器遇到对某一个组件的低层关键字组件时,它判断这个组件的类型并调用相应的组件函数模块来处理这个指令操作。所有这些元 素都要依靠映射表中的信息,它是自动化测试模型和被测应用程序的桥梁。支持库主要完成一些文件处理,日志记录和邮件发送等等的功能。

相关文章:

四种自动化测试模型实例及优缺点详解

一、线性测试 1.概念: 通过录制或编写对应应用程序的操作步骤产生的线性脚本。单纯的来模拟用户完整的操作场景。 (操作,重复操作,数据)都混合在一起。 2.优点: 每个脚本相对独立,且不产生…...

数字后端培训项目Floorplan常见问题系列专题续集1

今天继续给大家分享下数字IC后端设计实现floorplan阶段常见问题系列专题。这些问题都是来自于咱们社区IC后端训练营学员提问的问题库。目前这部分问题库已经积累了4年了,后面会陆续分享这方面的问题。 希望对大家的数字后端学习和工作有所帮助。 数字后端项目Floor…...

NVIDIA GPU 内部架构介绍

NVIDIA GPU 架构 NVIDIA GPU 的 SM(Streaming Multiprocessor) 和 GPC(Graphics Processing Cluster) 是 GPU 架构中的关键组成部分。它们决定了 GPU 的计算能力和性能,以下是对这两个参数的详细介绍: 1. …...

[spring]实例化对象(静动态工厂)

在前面文章的例子当中,我们都创建了Bean对象。spring里常用的获取类的实例化对象有几种方式:构造函数获取Bean对象、静态和动态工厂获取Bean对象、实现FactoryBean规范。 因为一些步骤没有什么别的不同,所以我不会重复去讲,届时会…...

【转】arm64架构的银河麒麟系统Kylin的qt安装教程

转自:arm64架构的银河麒麟系统Kylin的qt安装教程_银河麒麟安装qt-CSDN博客 文章目录 前言 一、准备环境 安装C编译器和调试器 二、安装qt、qtcreator 检查是否已经安装过Qt组件 安装Qt组件和Qt creator 检查组件是否安装成功: 三、测试程序运行 报错 Qt…...

C# Main方法 和顶级语句详解

总目录 前言 Main方法 和顶级语句 介绍。 一、Main方法 1. 基本信息 Main 方法是 C# 应用程序的入口点。 Main 方法是应用程序启动后调用的第一个方法。C# 程序中只能有一个入口点。如果多个类包含 Main 方法,必须使用 StartupObject 编译器选项来编译程序&#…...

传输层协议分析头歌

第1关:TCP 包基础 本机使用的IP地址和TCP端口号(用;隔开):192.168.1.102;1161 gaia.cs.umass.edu的IP地址和端口号(用;隔开):128.119.245.12;80 第2关:三次握手 第一次握手,TCP SYN区段的序列号是:232129012 gaia.cs.umass.edu…...

JAVA AOP简单实践(基于SpringBoot)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...

重温设计模式--迭代器模式

文章目录 迭代器模式(Iterator Pattern)概述迭代器模式的结构迭代器模式UML图C 代码示例应用场景 迭代器模式(Iterator Pattern)概述 定义: 迭代器模式是一种行为型设计模式,它提供了一种方法来顺序访问一个…...

Unity-Editor扩展GUI基本实现一个可拖拉放的格子列表

短短几百行代码,好吧,又是“参考”了国外的月亮 操作,还真地挺自然的。。。。。。国外的实现有点小牛 拖拉,增加+ 一个Element 鼠标左键长按,可以出提示 鼠标右键,清除Element, 有点小bug,不是很自然地完全清除, using System.Collections; using System.Collecti…...

Android 11添加电容笔电量监测需求

软件平台:Android11 硬件平台:QCS6125 需求:PAD接入电容笔,该笔通过驱动上报坐标及当前电量等数据,即走系统的input通道,需要系统层监测到该硬件数据,这里主要展示电量,对用户显示提…...

迈向AGI——大模型创新体验嘉年华邀请函

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! ‍ 深度对话,思想碰撞 大模型创新体验嘉年华诚邀您与我们共同见证 智见未来,只等你来 往期精彩文章推荐 关于AI TIME AI TIME源起于2019年,旨在发扬科学思辨精神&#xff0c…...

VSCode 性能优化指南:提高编码效率,减少资源占用

Visual Studio Code(简称VSCode)是一款广受欢迎的代码编辑器,以其强大的功能和丰富的插件生态系统著称。然而,随着项目规模的扩大和插件数量的增加,VSCode 的性能可能会受到影响。本文将介绍一系列优化措施&#xff0c…...

如何获取 ABAP 内表中的重复项

要识别 ABAP 内表中的重复项,可以结合使用排序和循环。下面的示例展示了如何查找内部表中的重复条目: DATA: BEGIN OF itab OCCURS 0,field1 TYPE i,field2 TYPE c LENGTH 10,END OF itab,wa LIKE LINE OF itab.* Add sample data to internal table it…...

android 登录界面编写

1、登录页面实现内容 1.实现使用两个EditText输入框输入用户名和密码。 2.使用CheckBox控件记住密码功能。 3.登录时候,验证用户名和密码是否为空。 4.当前CheckBox控件记住密码勾上时,使用SharedPreferences存储用户名和密码。 5.登录时候使用Prog…...

3D-resnet 50 医学3D图像二分类python代码

离上次发布3D-resnet代码时隔两年,最近让AI推荐3D-resnet的文章给我,AI推荐了三篇 其中两篇是我两年前发的,另一篇在这里Resnet3D预训练网络...... 于是决定更新之前代码,供诸位参考1. 可以用cpu或gpu(推荐8G以上&…...

android sqlite 数据库简单封装示例(java)

sqlite 数据库简单封装示例,使用记事本数据库表进行示例。 首先继承SQLiteOpenHelper 使用sql语句进行创建一张表。 public class noteDBHelper extends SQLiteOpenHelper {public noteDBHelper(Context context, String name, SQLiteDatabase.CursorFactory fact…...

项目练习:若依-前端项目的目录结构介绍

文章目录 一、目录截图二、目录讲解 一、目录截图 二、目录讲解 1、首先,我们可以看到,这个VUE项目,只有一个App.vue,所以,它是一个单页面系统。 这个App.vue是根组件,root组件。 2、public目录 在Vue 3.…...

Android 之 List 简述

一、简单创建方式 Android 开发中&#xff0c;列表有很多种类&#xff0c;如ArrayList、LinkedList、List、MutableList等&#xff0c;创建列表的方式如下所示&#xff1a; fun listDemo() {// 使用 listOf 创建不可变的空列表val list listOf<Int>()val list1 listOf…...

CV(6)-SIFT和Hash

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 SIFT:尺度不变特征变换&#xff1a; SIFT提取图像的局部特征&#xff0c;在尺度空间寻找极值点&#xff0c;并提取出其位置、尺度、方向信息。SIFT的应用范围包括物体辨别、机器人地图感知与导航、影像拼接、3D模型建立、手势…...

javax.net.ssl.SSLPeerUnverifiedException: Hostname 192.168.13.13 not verified:

javax.net.ssl.SSLPeerUnverifiedException: Hostname 192.168.13.13 not verified: 前言&#xff1a; 之前需求推送数据是采用http:192.168.13.13:8000 后面业务需求修改为 https:192.168.13.13:443 修改后推送数据到第三方报以下异常&#xff0c; https://192.168.13.13:443…...

用Unity做没有热更需求的单机游戏是否有必要使用AssetBundle?

在使用Unity开发没有热更需求的单机游戏时&#xff0c;是否使用AssetBundle&#xff08;AB包&#xff09;是一个值得探讨的问题。以下是对此问题的详细分析&#xff1a; 一、AssetBundle的概述 AssetBundle是Unity中用于存储和加载游戏资源的打包文件&#xff0c;可以包含各种…...

WebRTC Simulcast 大小流介绍与优化实践

Simulcast 是 WebRTC 中的一种标准化技术 &#xff0c;简称大小流。通过 Simulcast&#xff0c;客户端可以同时发送同一视频的多个版本。每个版本都以不同的分辨率和帧率独立编码&#xff0c;带宽较多的拉流端可以接收较高质量的视频流&#xff0c;带宽有限的拉流端则可以接收较…...

软件测试之测试用例

文章目录 测试用例测试用例的编写总结 测试用例 测试用例:描述测试点执行的文档(测试输入、执行条件、预期结果等) 作用 1.测试点能被精准执行 2.便于团队合作测试用例核心内容 用例编号、用例标题、所属模块、优先级、前置条件、测试步骤、测试数据、预期结果 测试用例的编写…...

Redis--通用命令学习

目录 一、引言 二、基础命令 1.set 2.get 3.keys 3.1 keys &#xff1f; 3.2 keys * 3.3 keys [abe] 3.4 keys [^] 3.5 keys [a-b] 4.exists 5.delete 6.expire 7.ttl 8.type 三、Redis中的过期策略&#xff08;面试题&#xff09; 1.惰性删除 2.定期删除 …...

自动控制系统综合与LabVIEW实现

自动控制系统综合是为了优化系统性能&#xff0c;确保其可靠性、稳定性和灵活性。常用方法包括动态性能优化、稳态误差分析、鲁棒性设计等。结合LabVIEW&#xff0c;可以通过图形化编程、高效数据采集与处理来实现系统综合。本文将阐述具体方法&#xff0c;并结合硬件选型提供实…...

一篇文章学会HTML

目录 页面结构 网页基本标签 图像标签 超链接标签 文本链接 图像链接 锚链接 功能链接 列表 有序列表 无序列表 自定义列表 表格 跨列/跨行 表头 媒体元素 视频 音频 网站的嵌套 表单 表单元素 文本框 单选框 多选框 按钮 下拉框 文本域和文件域 表…...

48页PPT|2024智慧仓储解决方案解读

本文概述了智慧物流仓储建设方案的行业洞察、业务蓝图及建设方案。首先&#xff0c;从政策层面分析了2012年至2020年间国家发布的促进仓储业、物流业转型升级的政策&#xff0c;这些政策强调了自动化、标准化、信息化水平的提升&#xff0c;以及智能化立体仓库的建设&#xff0…...

React Props 完整使用指南

React Props 完整使用指南 1. 类组件中的 Props 1.1 基本使用 // 父组件 class ParentComponent extends React.Component {render() {return (<ChildComponent name"John"age{25}isStudent{true}hobbies{[reading, swimming]}/>);} }// 子组件 class Child…...

金融数据可视化实现

一、设计题目 金融数据可视化 二、设计目的 使学生掌握用Pandas第三方库数据计算、数据分析的知识与能力。Pandas是专门用于数据分析的库&#xff0c;其提供的read_excel()方法可以方便的读取xlsx格式的文件中的数据到Pandas中的DataFrame中。 DataFrame.plot(kindline)&am…...

逆袭之路(6)——解析数据世界的灵动基石——变量

困厄铸剑心&#xff0c;逆袭展锋芒。 寒苦凝壮志&#xff0c;腾跃绘华章。 我要逆袭。 目录 一、引言 二、变量的定义 三、变量的性质 &#xff08;一&#xff09;可变性 &#xff08;二&#xff09;有界性 &#xff08;三&#xff09;关联性 四、变量的类型 &#xff…...

【云原生】kubeadm搭建的kubernetes1.28集群上自建ingress-nginx服务

1、查询兼容性 先确认下kubernetes版本与ingress-nginx版本兼容性 Ingress-NGINX 版本支持的 k8s 版本Alpine 版本Nginx 版本Helm Chart 版本v1.12.0-beta.01.31, 1.30, 1.29, 1.283.20.31.25.54.12.0-beta.0v1.11.31.30, 1.29, 1.28, 1.27, 1.263.20.31.25.54.11.3v1.11.21.3…...

分布式协同 - 分布式事务_TCC解决方案

文章目录 导图Pre流程图2PC VS 3PC VS TCC2PC&#xff08;Two-Phase Commit&#xff0c;二阶段提交&#xff09;3PC&#xff08;Three-Phase Commit&#xff0c;三阶段提交&#xff09;TCC&#xff08;Try-Confirm-Cancel&#xff09;2PC、3PC与TCC的区别2PC、3PC与TCC的联系 导…...

两分钟解决:vscode卡在设置SSH主机,VS Code-正在本地初始化VSCode服务器

问题原因 remote-ssh还是有一些bug的&#xff0c;在跟新之后可能会一直加载初始化SSH主机解决方案 1.打开终端2.登录链接vscode的账号&#xff0c;到家目录下3.找到 .vscode-server文件,删掉这个文件4.重启 vscode 就没问题了...

SpringBoot3整合FastJSON2如何配置configureMessageConverters

在 Spring Boot 3 中整合 FastJSON 2 主要涉及到以下几个步骤&#xff0c;包括添加依赖、配置 FastJSON 作为 JSON 处理器等。下面是详细的步骤&#xff1a; 1. 添加依赖 首先&#xff0c;你需要在你的 pom.xml 文件中添加 FastJSON 2 的依赖。以下是 Maven 依赖的示例&#…...

数据库安全-redisCouchdb

1.redis未授权访问 默认端口:6379 1.1 Redis沙盒逃逸漏洞RCE-CVE-2022-0543 介绍&#xff1a;Redis 是一套开源的使用 ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库&#xff0c;并提供多种语言的API。Redis 如果在没有开启认证的情况下&#xff0c;…...

java如何使用poi-tl在word模板里渲染多张图片

1、poi-tl官网地址 http://deepoove.com/poi-tl/ 2、引入poi-tl的依赖 <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version></dependency>3、定义word模板 释义&#xf…...

ASP.NET |日常开发中常见问题归纳讲解

ASP.NET &#xff5c;日常开发中常见问题归纳讲解 前言一、性能问题1.1 数据库访问性能1.2 视图状态&#xff08;在ASP.NET Web Forms 中&#xff09; 二、安全问题2.1 SQL 注入2.2 跨站脚本攻击&#xff08;XSS&#xff09; 三、状态管理问题3.1 会话状态&#xff08;Session …...

Jenkins安全部署规范及安全基线

Jenkins安全部署规范及安全基线 进入安全设置界面启用安全Disable remember me访问控制——安全域&#xff08;Security Realm&#xff09;servlet容器代理&#xff08;Delegate to servlet container&#xff09;Jenkins专有用户数据库&#xff08;Jenkins’ own user databas…...

stm32定时器输出比较----驱动步进电机

定时器输出比较理论 OC(Output Compare)输出比较输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形每个高级定时器和通用定时器都拥有4个输出比较通道高级定时器的前3个通道额外拥有死区生成和互补输出…...

文本文件和二进制文件

1.为什么使用文件 使用文件我们可以将数据直接存放在电脑的硬盘上&#xff0c;做到了数据的持久化。 2. 什么是文件 磁盘上的文件是文件。 但是在程序设计中&#xff0c;我们一般谈的文件有两种&#xff1a;程序文件、数据文件&#xff08;从文件功能的角度来分类的&#xff09…...

Linux 常见用例汇总

注&#xff1a;本文为 Linux 常见用例文章合辑。 部分内容已过时&#xff0c;未更新整理。 检查 Linux 上的 glibc 版本 译者&#xff1a;joeren | 2014-11-27 21:33 问&#xff1a;检查 Linux 系统上的 GNU C 库&#xff08;glibc&#xff09;的版本&#xff1f; GNU C 库&…...

R9000P键盘失灵解决办法

问题描述 突然&#xff0c;就是很突然&#xff0c;我买的R9000P 2024不到三个月&#xff0c;键盘突然都不能用了&#xff0c;是所有键盘按键都无效的那种。&#xff08;可以使用外接键盘&#xff09; 解决办法 我本科室友说的好哈&#xff0c;全坏全没坏。 &#xff08;该解…...

Windows、CentOS环境下搭建自己的版本管理资料库:GitBlit

可以搭建属于公司内部或者个人的Git服务器&#xff0c;方便程序代码及文档版本管理。 官网&#xff1a;http://www.gitblit.com/ Windows环境下安装 提前已经安装好了JDK。 官网下载Windows版的GitBlit。 将zip包解压到自己想要放置的文件夹下。 建立版本库路径&#xff0c…...

《Web 应用项目开发:从构思到上线的全过程》

目录 一、引言 二、项目启动与需求分析 三、设计阶段 四、技术选型 五、开发阶段 六、测试阶段 七、部署与上线 八、维护与更新 九、总结 一、引言 在数字化浪潮席卷全球的当下&#xff0c;Web 应用如繁星般在互联网的苍穹中闪烁&#xff0c;它们形态各异&#xff0c…...

ctf相关总结

CTF比赛定义&#xff1a; CTF&#xff08;Capture The Flag&#xff09;是一种信息安全竞赛形式&#xff0c;参赛队伍通过破解题目获取flag来得分。 比赛流程&#xff1a; 参赛队伍在题目平台上登录&#xff0c;选择题目进行解答&#xff0c;提交flag后由系统自动评分。 三…...

v3s点RGB屏 40pin 800x480,不一样的点屏,不通过chosen。

一、背景、目的、简介。 一般来说&#xff0c;通过uboot将屏幕参数传给kernel&#xff0c;是通过修改设备树。 uboot和kernel都需要屏幕点亮。uboot侧重于显示一张图片。而kernel则多是动画。 在这里&#xff0c;我先是找到了一个裸机点屏的代码。将其编译成静态库后&#x…...

学习笔记(prism--视频【WPF-prism核心教程】)--待更新

《一》框架介绍 prism是一个用于WPF…和winUI中构建的松散耦合&#xff0c;可维护和可测试的应用程序框架。帮助WPF开发人员以简化编写&#xff0c;维护和扩展来设计应用程序。 优点&#xff1a;遵循特定的约定&#xff0c;可自动将view/ViewModel建立DataContext的关系&#…...

从AI换脸到篡改图像,合合信息如何提升视觉内容安全?

本文目录 引言一、AI“真假之战”下的发展现状与考验挑战1.1 视觉内容安全现状与技术分类1.2视觉内容安全企业1.3视觉内容安全领域挑战 二、开山之石&#xff1a;引领视觉内容安全的创新之路2.1合合内容安全系统2.2发起编制相关技术规范2.3参与篡改检测挑战赛 三、视觉内容安全…...

12.12【java exp4】react table全局搜索tailwindcss 布局 (Layout) css美化 3. (rowId: number

react table 创建一个下拉菜单&#xff0c;允许用户选择要搜索的列。创建一个输入框&#xff0c;用于输入搜索关键词。根据用户的选择&#xff0c;动态地应用过滤器到指定的列 全局搜索 import React from react; import { useTable, useFilters, useGlobalFilter, useSortBy…...