Airtest核心API汇总

news2024/12/29 10:51:39

 

2024.2.25更新:新增剪切板、Airtest1.3.3touch/swipe支持绝对坐标和相对坐标

2023.9.3更新:Airtest1.2.7新增14个断言、断开连接API;Airtest1.2.10.2新增录屏API;

以下基于airtest1.2.0(截止2021.7.12,最新版本)
https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html
修改自以上链接,并更新适配到airtest1.2.0版本,翻译了部分英文说明

想熟练使用Airtest,以下API必须熟记

1.init_device(platform='Android', uuid=None, **kwargs)
初始化设备,并设置为当前设备。

参数:
platform – Android, IOS or Windows
uuid     – 目标设备的uuid,例如Android的序列号,Windows的窗口句柄,或iOS的uuid
kwargs   – 可选的平台相关的参数,例如Android下的 cap_method=JAVACAP参数

返回:
device对象

示例:

 
  1. init_device(platform="Android",uuid="songzhenhua", cap_method="JAVACAP")

  2. init_device(platform="Windows",uuid="123456")


2.connect_device(uri)
用URI字符串来初始化设备,并且设置为当前设备。

参数:
uri – 一个用于初始化设备的URI字符串,例如:
android://adbhost:adbport/serialno?param=value&param2=value2

返回:
device对象

示例:

 
  1. # 本地安卓设备默认参数

  2. connect_device("Android:///")  

  3. # 本地安卓设备ID为:SJE5T17B17,且使用参数

  4. connect_device("Android:///SJE5T17B17?cap_method=javacap&touch_method=adb")

  5. # 远程安卓设备 Android://adbhost:adbport/serialno

  6. connect_device("Android://127.0.0.1:5037/10.254.60.1:5555")

  7. # connect to the desktop

  8. connect_device("Windows:///") 

  9. # Connect to the window with handle 123456 

  10. connect_device("Windows:///123456")  

  11. # iOS device

  12. connect_device("iOS:///127.0.0.1:8100")

  13. connect_device("iOS:///http://localhost:8100/?mjpeg_port=9100&&udid=00008020-001270842E88002E")  # iOS with mjpeg port and udid


3.device()
返回当前正在使用中的设备。

返回:
当前设备实例

示例:

 
  1. dev = device()

  2. dev.touch((100, 100))


4.set_current(idx)
设置当前设备。

参数:
idx – uuid或已初始化的设备列表中的编号,从0开始

引发:
IndexError – 当查找不到设备时

返回:
None

支持平台:
Android, iOS, Windows

示例:

 
  1. # 设置设备列表中的第1台设备为当前设备

  2. set_current(0)

  3. # 设置序列号为qasite的设备为当前设备

  4. set_current("qasite")


5.auto_setup(basedir=None, devices=None, logdir=None, project_root=None, compress=None)
自动配置运行环境,如果当前没有连接设备的话,就默认尝试连接Android设备。

参数:
basedir – 设置当前脚本的所在路径,也可以直接传 __file__ 变量进来
devices – 一个内容为 connect_device uri 字符串的列表
logdir  – 用于报告的日志目录,默认为None不输出日志, 设置为True时日志目录为/log
project_root – 用于设置PROJECT_ROOT变量,方便 using 接口的调用
compress – 屏幕截图的压缩比率,在[1, 99]范围内的整数,默认是10

示例:

 
  1. auto_setup(__file__)

  2. auto_setup(__file__, devices=["Android://127.0.0.1:5037/SJE5T17B17"],

  3.            logdir=True, project_root=r"D:\test\logs", compress=90)


6.shell(cmd)
在目标设备上运行远程shell指令

参数:
cmd – 需要在设备上运行的指令,例如 ls /data/local/tmp

返回:
shell指令的输出内容

支持平台:
Android

示例:

 
  1. # 在当前默认手机执行adb shell ls

  2. print(shell("ls"))

  3. # 在指定手机执行adb shell ls

  4. dev = connect_device("Android:///device1")

  5. dev.shell("ls")

  6. # 设置手机列表中的第1台手机为当前手机,并执行adb shell ls

  7. set_current(0)

  8. shell("ls")


7.start_app(package, activity=None)
在设备上启动目标应用

参数:
package  – 想要启动的应用包名package name,例如 com.netease.my
activity – 需要启动的activity,默认为None,意为main activity

返回:
None

支持平台:
Android, iOS

示例:

 
  1. start_app("com.netease.cloudmusic")

  2. start_app("com.apple.mobilesafari")  # on iOS


8.stop_app(package)
终止目标应用在设备上的运行

参数:
package – 需要终止运行的应用包名 package name,例如 com.netease.my

返回:
None

支持平台:
Android, iOS

示例:

 
  1. stop_app("com.netease.cloudmusic")


9.clear_app(package)
清理设备上的目标应用数据

参数:
package – 包名 package name,例如 com.netease.my

返回:
None

支持平台:
Android

示例:

 
  1. clear_app("com.netease.cloudmusic")


10.install(filepath, **kwargs)
安装应用到设备上

参数:
filepath – 需要被安装的应用路径(PC上的路径)
kwargs   – 平台相关的参数 kwargs,请参考对应的平台接口文档

返回:
None

支持平台:
Android, iOS

示例:

 
  1. install(r"D:\demo\qasite.apk")

  2. # adb install -r -t D:\demo\test.apk

  3. install(r"D:\demo\qasite.apk", install_options=["-r", "-t"])

  1. # iOS支持ipa包安装

  2. install(r"D:\demo\qasite.ipa") 

  3. # iOS也支持通过下载链接安装APP

  4. install("http://www.example.com/test.ipa") 


11.uninstall(package)
卸载设备上的应用

参数:
package – 需要被卸载的包名

返回:
None

支持平台:
Android, iOS

示例:

 
  1. uninstall("com.netease.cloudmusic")


12.snapshot(filename=None, msg="", quality=None, max_size=None)
对目标设备进行一次截图,并且保存到文件中。

参数:
filename – 保存截图的文件名,默认保存路径为 ST.LOG_DIR
msg      – 截图文件的简短描述,将会被显示在报告页面中
quality  – 图片的质量,[1,99]的整数,默认是10
max_size – 图片的最大尺寸,例如 1200

返回:
截图文件的绝对路径

支持平台:
Android, iOS, Windows

示例:

 
  1. snapshot(msg="index")

  2. # 设置保存文件名

  3. snapshot(filename="测试工程师小站.png", msg="test")

  4. #可以设置截图的画质和大小

  5. ST.SNAPSHOT_QUALITY = 30  # 设置截图质量为30

  6. ST.IMAGE_MAXSIZE = 600  # 设置最大尺寸不超过600*600

  7. # 此截图质量30,最大不超过600*600

  8. snapshot()  

  9. # 设置了全局参数,又额外设置单语句参数时,单语句优先,此截图质量90

  10. snapshot(filename="测试工程师小站.png", msg="test", quality=90)

  11. # 设置了全局参数,又额外设置单语句参数时,单语句优先,此截图最大不超1200*1200

  12. snapshot(filename="qasite.png", msg="test", quality=90, max_size=1200)


13.wake()
唤醒并解锁目标设备,在部分品牌手机上可能无法生效

返回:
None

支持平台:
Android

示例:

wake()

14.home()
返回HOME界面。

返回:
None

支持平台:
Android, iOS

示例:

home()

15.touch(v, times=1, **kwargs)
在当前设备画面上进行一次点击

参数:
v      – 点击位置,可以是一个 Template 图片实例,或是一个坐标(x,y)(相对坐标、绝对坐标均可)
times  – 点击次数
kwargs – 平台相关的参数 kwargs,请参考对应的平台接口文档

返回:
实际点击位置坐标 (x, y)

支持平台:
Android, Windows, iOS

示例:

 
  1. # 点击绝对坐标:

  2. touch((100, 100))

  1. # 点击相对坐标:

  2. touch((0.1, 0.1))

  1. # 点击图片的中心位置:

  2. touch(Template(r"测试工程师小站.png", target_pos=5))

  3. # 点击两次:

  4. touch((100, 100), times=2)

  5. # 在Android和Windows下,可以设置点击持续时间:

  6. touch((100, 100), duration=2)

  7. # 右键点击(Windows):

  8. touch((100, 100), right_click=True)


16.click(*args, **kwargs)
touch()的别名,一样


17.double_click(v)
双击

参数:
v – 点击位置,可以是一个 Template 图片实例,或是一个绝对坐标 (x, y)

返回:
实际点击位置坐标 (x, y)

示例:

 
  1. double_click((100, 100))

  2. double_click(Template(r"测试工程师小站.png"))


18.swipe(v1, v2=None, vector=None, **kwargs)
在当前设备画面上进行一次滑动操作。
有两种传入参数的方式

 
  1. swipe(v1, v2=Template(...)) # 从 v1 滑动到 v2

  2. swipe(v1, vector=(x, y)) # 从 v1 开始滑动,沿着vector方向。

参数:
v1 – 滑动的起点,可以是一个Template图片实例,或是坐标 (x, y)(相对坐标、绝对坐标均可)

v2 – 滑动的终点,可以是一个Template图片实例,或是坐标 (x, y)(相对坐标、绝对坐标均可)

vector – 滑动动作的矢量坐标,可以是绝对坐标 (x,y) 或是屏幕百分比,例如 (0.5, 0.5)
**kwargs – 平台相关的参数 kwargs,请参考对应的平台接口文档

引发:
Exception – 当没有足够的参数来执行滑动时引发异常

返回:
原点位置和目标位置

支持平台:
Android, Windows, iOS

示例:

 
  1. swipe(Template(r"测试工程师小站.png"), vector=[-0.0316, -0.3311])

  2. swipe((100, 100), (200, 200))

  3. #自定义滑动持续时间1s和经过6步到达终点:

  4. swipe((100, 100), (200, 200), duration=1, steps=6)


19.pinch(in_or_out='in', center=None, percent=0.5)
在设备屏幕上执行一个双指pinch捏合操作

参数:
in_or_out – 向内捏合或向外扩大,在[“in”, “out”] 中枚举一个值
center – pinch动作的中心位置,默认值为None则为屏幕中心点
percent – pinch动作的屏幕百分比,默认值为0.5

返回:
None

支持平台:
Android

示例:

 
  1. # 两指向屏幕中心点捏合:

  2. pinch()

  3. # 将(100, 100)作为中心点,向外扩张两指:

  4. pinch('out', center=(100, 100))


20.keyevent(keyname, **kwargs)
在设备上执行keyevent按键事件

参数:
keyname  – 平台相关的按键名称
**kwargs – 平台相关的参数 kwargs,请参考对应的平台接口文档

返回:
None

支持平台:
Android, Windows, iOS

示例:

 
  1. # 在Android上相当于执行了 adb shell input keyevent KEYNAME

  2. # 内部调用的android.adb.keyevent()

  3. # Android Keyevent详细文档:

  4. # https://developer.android.com/reference/android/view/KeyEvent#constants_1

  5. keyevent("HOME")

  6. keyevent("3")  # same as keyevent("HOME")

  7. keyevent("BACK")

  8. keyevent("KEYCODE_DEL")

  9. # 在Windows上内部调用的pywinauto.keyboard 进行按键点击

  10. # Windows Keyevent详细文档:

  11. # https://pywinauto.readthedocs.io/en/latest/code/pywinauto.keyboard.html

  12. keyevent("{DEL}")

  13. keyevent("%{F4}")  # close an active window with Alt+F4

  14. # iOS只支持 home/volumeUp/volumeDown:

  15. keyevent("HOME")

  16. keyevent("volumeUp")


21.text(text, enter=True, **kwargs)
在目标设备上输入文本,文本框需要处于激活状态。

参数:
text  – 要输入的文本
enter – 是否在输入完毕后,执行一次 Enter ,默认是True

返回:
None

支持平台:
Android, Windows, iOS

示例:

 
  1. text("公众号:测试工程师小站") # 输入完毕后点回车

  2. text("公众号:测试工程师小站", enter=False)

  3. # 在Android上,有时你需要在输入完毕后点击搜索按钮:

  4. text("公众号:测试工程师小站", search=True)

  5. # 如果希望输入其他按键,可以用这个接口, code详情:

  6. # https://developer.android.com/reference/android/view/inputmethod/EditorInfo.html#constants_1

  7. text("公众号:测试工程师小站")

  8. device().yosemite_ime.code("3")  # 3 = IME_ACTION_SEARCH


22.sleep(secs=1.0)
设置一个等待sleep时间,它将会被显示在报告中

参数:
secs – sleep的时长

返回:
None

支持平台:
Android, Windows, iOS

示例:

sleep(1)

23.wait(v, timeout=None, interval=0.5, intervalfunc=None)
等待当前画面上出现某个匹配的Template图片

参数:
v – 要等待出现的目标Template实例
timeout – 等待匹配的最大超时时长,默认为None即默认取 ST.FIND_TIMEOUT 的值
interval – 尝试查找匹配项的时间间隔(以秒为单位)
intervalfunc – 在首次尝试查找匹配失败后的回调函数

引发:
TargetNotFoundError – 在超时后仍未找到目标则触发

返回:
匹配目标的坐标

支持平台:
Android, Windows, iOS

示例:

 
  1. wait(Template(r"测试工程师小站.png"))  # timeout after ST.FIND_TIMEOUT

  2. # 每3秒查找一次, 120秒超时

  3. wait(Template(r"测试工程师小站.png"), timeout=120, interval=3)

  4. # 你可以在每次查找目标失败时,指定一个回调函数:

  5. def notfound():

  6.     print("No target found")

  7. wait(Template(r"测试工程师小站.png"), intervalfunc=notfound)


24.exists(v)
检查设备上是否存在给定目标

参数:
v – 要检查的目标

返回:
如果未找到目标,则返回False,否则返回目标的坐标

支持平台:
Android, Windows, iOS

示例:

 
  1. if exists(Template(r"测试工程师小站.png")):

  2.     touch(Template(r"测试工程师小站.png"))

  3. # 因为 exists() 会返回坐标,我们可以直接点击坐标来减少一次图像查找

  4. pos = exists(Template(r"测试工程师小站.png"))

  5. if pos:

  6.     touch(pos)


25.find_all(v)
在设备屏幕上查找所有出现的目标并返回其坐标列表

参数:
v – 寻找目标

返回:
结果列表

[{‘result’: (x, y), ‘rectangle’: ( (left_top, left_bottom, right_bottom, right_top) ), ‘confidence’: 0.9}, …]

支持平台:
Android, Windows, iOS

示例:

 
  1. find_all(Template(r"测试工程师小站.png"))

  2. [{'result': (218, 468), 'rectangle': ((149, 440), (149, 496), (288, 496), (288, 440)),'confidence': 0.9999996423721313}]


26.assert_exists(v, msg="")
设备屏幕上存在断言目标

参数:
v   – 要检查的目标
msg – 断言的简短描述,它将被记录在报告中

引发:
AssertionError – 如果断言失败

返回:
目标坐标

支持平台:
Android, Windows, iOS

示例:

assert_exists(Template(r"测试工程师小站.png"), "assert exists")

27.assert_not_exists(v, msg="")
设备屏幕上不存在断言目标

参数:
v   – 要检查的目标
msg – 断言的简短描述,它将被记录在报告中

引发:
AssertionError – 如果断言失败

返回:
None.

支持平台:
Android, Windows, iOS

示例:

assert_not_exists(Template(r"测试工程师小站.png"), "assert not exists")

28.assert_equal(first, second, msg="")
断言两个值相等

参数:
first  – 第一个值
second – 第二个值
msg    – 断言的简短描述,它将被记录在报告中

引发:
AssertionError – 如果断言失败

返回:
None

支持平台:
Android, Windows, iOS

示例:

assert_equal(1, 1, msg="assert 1==1")

29.assert_not_equal(first, second, msg="")
断言两个值不相等

参数:
first  – 第一个值
second – 第二个值
msg    – 断言的简短描述,它将被记录在报告中

引发:
AssertionError – 如果断言异常

返回:
None

支持平台:
Android, Windows, iOS

示例:

assert_not_equal(1, 2, msg="assert 1!=2")

30.Airtest1.2.7新增14个断言

都是基于assert衍生出来的,这里就不过多介绍了,详细可看

Airtest1.2.7新增的14个断言API解析

 
  1. assert_true

  2. assert_false

  3. assert_is

  4. assert_is_not

  5. assert_is_none

  6. assert_is_not_none

  7. assert_in

  8. assert_not_in

  9. assert_is_instance

  10. assert_not_is_instance

  11. assert_greater

  12. assert_greater_equal

  13. assert_less

  14. assert_less_equal


31.start_recording()
开始录屏

参数

由于Android和iOS参数有细微差别,就不再列出,详细用法可看:

Airtest1.2.10.2版本Android录屏功能

Airtest新增iOS、Windows录屏功能,真香!

示例
 
  1. dev = device()

  2. save_path = dev.start_recording(output="test.mp4")

  3. sleep(30)

  4. dev.stop_recording()


32.stop_recording()
结束录屏


33.disconnect()
airtest1.2.7新增接口,主要是解决脚本长时间运行,反复切换横屏和竖屏应用时,会有概率 出现屏幕有一半内容变成黑屏 的问题。
使用方法为在脚本最后添加device().disconnect(),让设备创建出的所有adb连接都强制释放掉。
最好是用在try…except…finally,写在finally里面,这样即使失败也会清理


34.set_clipboard(content)
设置剪切板内容

参数:
content– 要设置的内容

支持平台:
Android, Windows, iOS


35.get_clipboard()
获取剪切板内容

返回:
剪切板内容

支持平台:
Android, Windows, iOS

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

  1. 文档获取方式:

  2. 加入我的软件测试交流群:680748947免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

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

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

相关文章

gif动画图片如何生成?分享制作gif的小妙招

Gif动画图片的制作过程是非常好玩的,通过自制gif表情包让你在社交媒体中与朋友互动更容易。可以通过这种gif表情包的方式来表达你的情感,传递信息,让朋友更容易理解你的想法。想要制作gif动画只需要使用gif动画制作(https://www.g…

非对称加密算法在区块链中的应用

随着数字技术的迅猛发展,区块链技术因其独特的去中心化、不可篡改、透明公开等特性,逐渐成为各行各业关注的焦点。在区块链技术的众多组成部分中,非对称加密算法无疑是其中最为基础和关键的一环。本文旨在探讨非对称加密算法在区块链中的应用…

C++|多态性与虚函数(1)功能绑定|向上转换类型|虚函数

目录 什么是多态性? 概念 分类 向上类型转换 功能的早绑定和晚绑定 绑定 绑定与多态的联系 编译时多态(功能的早绑定) 运行时多态(功能的晚绑定) 一般而言 实现功能晚绑定——虚函数 虚函数定义的说明 什么…

CSS表格特殊样式

列组样式 使用colgroup与col标签配合可以定义列祖样式&#xff1a;例 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>table,tr,th,td{border: 1px solid #000;}table{border-collapse: coll…

Meilisearch使用过程趟过的坑

Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重量级&#xff0c;适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求&#xff0c;极快&#xff0c;单文件&#xff0c;超轻量。 所以&#xff0c;对于中小型项目来说…

基于SVPWM控制策略的二极管钳位型NPC逆变器并网闭环simulink仿真

本人搭建了基于SVPWM控制策略的二极管钳位型NPC逆变器并网闭环的simulink仿真模型&#xff0c;该模型采用SVPWM闭环控制实现并网控制。效果优异&#xff0c;配备参考资料&#xff0c;适合新手学习使用。 DC&#xff1a;800V AC:380V 功率&#xff1a;100kw 拓扑&#xff1a;…

fastjson_1.2.24和Shiro(CVE-2016-4437)漏洞复现

文章目录 一、fastjson 1.2.24远程命令执行漏洞复现二、shiro反序列化漏洞(CVE-2016-4437)1、Shiro漏洞原理2、手工验证漏洞3、使用ShiroAttack2 一、fastjson 1.2.24远程命令执行漏洞复现 配置环境&#xff1a;本机java 8环境 kali操作系统&#xff08;java8&#xff09; c…

如果你想学习大数据,那么你应该看看这些高分佳作

大家好&#xff0c;我是王有志&#xff0c;一个分享硬核 Java 技术的金融摸鱼侠&#xff0c;欢迎大家加入 Java人自己的交流群“共同富裕的 Java 人”。 今天和大家分享的主题是&#xff1a;大数据入门书籍。公众号内回复关键字&#xff1a;20240515&#xff0c;即可获取。 &a…

【正版系统】海外短剧系统功能介绍,前端uniapp+开源。

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、海外短剧系统功能介绍 二、搭建要求 1.系统要求 总结 前言 短剧作为一种快速、紧凑的娱乐形式&#xff0c;正逐渐受到更多海外观众的喜爱。这种需求增长为…

基于RTL8710BN与天猫精灵的WIFI智能家居方案

0 项目简介 目的&#xff1a; 语音控制智能家居产品 基于阿里云的物联网产品 基于WiFi技术的嵌入式产品 主要技术&#xff1a; WiFi技术 常用的物联网协议 网络编程 云平台配置 MCU OPENSDK开发 阿里物联网操作系统 硬件&#xff1a; wifi开发板RTL8710BN 天猫精灵…

版本控制:软件开发的基石(一文读懂版本控制)

未经允许&#xff0c;禁止转载&#xff01; 在现代软件开发中&#xff0c;版本控制是不可或缺的工具。它帮助开发者跟踪和管理代码的变化&#xff0c;协作完成项目&#xff0c;并确保代码的完整性和安全性。本文将基于Git官网的视频“什么是版本控制”来深入探讨版本控制的基本…

Linux常用指令集合

ls显示目录文件 选项&#xff1a; -a 所有文件&#xff08;all所有&#xff09; -l 详细信息&#xff08;Information信息&#xff09;&#xff08;自动包含-1&#xff09; 所以常用 ll -1 一行只输出一个文件。 -R 列出所有子目录下的文件。…

优雅谈论大模型4:初识Token

Token 在继续前行之前&#xff0c;需要先停下来澄清下Token这个词&#xff0c;以及如何将原始的语料转化为Token&#xff0c;在细究背后的原理之后会更加优雅的理解大模型。任何的资讯都可以生成语料&#xff0c;而这些语料需要被机器理解以及供后续的模型训练&#xff0c;那么…

Nginx配置Referer防盗链

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 HTTP Referer是Hea…

mongodb备份还原指南

MongoDB 提供的命令行实用程序mongodump和mongorestore创建备份和恢复数据的过程。 一、数据备份 mongorestore和mongodump实用程序可处理BSON数据转储&#xff0c;对于创建小型部署的备份非常有用。要实现弹性且无中断的备份&#xff0c;请将文件系统快照或区块级磁盘快照与…

Ubuntu20.04调试功能包的一些报错解决办法【更新中2024.05.14】

一、Could not find a package configuration file provided by “catkin_virtualenv” 解决办法&#xff1a; sudo apt install ros-noetic-catkin-virtualenv二、 ERROR: Could not find a version that satisfies the requirement pip-tools5.1.2 (from versions: none) …

优选算法——双指针2

题目一——有效三角形的个数 思路 先审题 举个例子&#xff0c;下面一个序列可分成4个三元组 然后我们论证哪个可以组成三角形即可 判断三个数能不能组成三角形&#xff1a;任意两边之和大于第三边 注意第一个和第四个&#xff0c;有人说&#xff0c;这不是两个相同的吗&#…

数据结构与算法学习笔记十---链队列的表示和实现(C语言)

目录 前言 1.什么是链队 2.链队的表示和实现 1.定义 2.初始化 3.销毁 4.清空 5.空队列 6.队列长度 7.获取队头 8.入队 9.出队 10.遍历队列 11.完整代码 前言 本篇博客介绍链栈队列的表示和实现。 1.什么是链队 链队是采用链式存储结构实现的队列。通常链队使用单…

AcWing166. 数独-DFS剪枝与优化

题目 思路 思考问题&#xff1a;搜索顺序->考虑剪枝搜索顺序&#xff1a;先随意选择一个空格子&#xff0c;枚举该格子可填写的数字&#xff0c;当所有格子都填完的时候&#xff0c;说明可以退出了剪枝&#xff1a; 优化搜索顺序&#xff1a;随意选择一个空格子&#xff1a…

83.网络游戏逆向分析与漏洞攻防-移动系统分析-游戏瞬移漏洞的测试与分析

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…