Appium+python自动化(二十三)- Monkeyrunner与Monkey傻傻的分不清楚(超详解)

news2024/11/25 19:37:42

monkeyrunner简介

1.monkeyrunner工具使用Jython,这是一种使用Java编程语言的Python实现。Jython允许monkeyrunner API与Android框架轻松交互。使用Jython,您可以使用Python语法来访问API的常量,类和方法。MonkeyRunner工具是使用Jython(使用Java编程语言实现的

Python)写出来的,它提供了多个API,通过monkeyrunner API 可以写一个Python的程序来模拟操作控制Android设备app,测试其稳定性并通过截屏可以方便地记录出现的问题。

2.我们来看一下monkeyrunner官网是如何介绍monkeyrunner的:

官网介绍(已翻译成中文)宏哥在这里给小伙伴截取一段翻译,如下:

  monkeyrunner工具提供了一个API,用于编写从Android代码外部控制Android设备或模拟器的程序。使用monkeyrunner,您可以编写一个Python程序,安装Android应用程序或测试包,运行它,向其发送击键,截取其用户界面,并在工作站上存储屏幕截图、

monkeyrunner工具主要用于测试功能/框架级别的应用程序和设备以及运行单元测试套件,但您可以将其用于其他目的。

monkeyrunner工具与UI / Application Exerciser Monkey无关 ,也称为monkey工具。该monkey工具adb直接在设备或仿真器上的shell中运行, 并生成用户和系统事件的伪随机流。相比之下,monkeyrunner工具通过从API发送特定命令和事件来控制工作站中的设备和

仿真器。

3.monkeyrunner即android SDK中自带的工具之一,此工具提供API可按制android设备或模拟器。

4.有兴趣的小伙伴们或者童鞋可以查看一下monkeyrunner官网:monkeyrunner | Android中文API

5.monkeyrunner 路径:Andriod_SDK\tools

MonkeyRunner工具独特功能

1.多设备控制:monkeyrunner API可以跨多个设备或仿真器应用一个或多个测试套件。您可以物理连接所有设备或立即启动所有模拟器(或两者),以编程方式依次连接到每个设备,然后运行一个或多个测试。您还可以以编程方式启动模拟器配置,运行一个或多个测试,然后关闭模拟器。

2.功能测试:monkeyrunner可以对Android应用程序进行自动化的从头到尾的测试。您可以通过击键或触摸事件提供输入值,并将结果视为屏幕截图。

3.回归测试 - monkeyrunner可以通过运行应用程序并将其输出屏幕截图与一组已知正确的屏幕截图进行比较来测试应用程序的稳定性。

4.可扩展的自动化 - 由于monkeyrunner是一个API工具包,您可以开发一个基于Python的模块和程序的整个系统来控制Android设备。除了使用monkeyrunner API本身,您还可以使用标准的Python os和 subprocess 模块来调用Android工具,例如 Android Debug Bridge。

您还可以将自己的类添加到monkeyrunner API中。这在“ 使用插件扩展monkeyrunner ”一节中有更详细的描述 。

Monkeyrunner与Monkey区别

monkeyrunner和money没有什么直接的关系,monkey是在设备直接运行adb shell命令生成随机事件来进行测试的。相比较而言,monkeyrunner则是通过API发送特定的命令和事件来控制设备。

为了支持黑盒自动化测试的场景,Android SDK提供了monkey和monkeyrunner两个测试工具,这两个测试工具除了名字类似外,还都可以向待测应用发送按键等消息,往往容易产生混淆,以下是他俩的不同之处。

Monkey:

Monkey工具直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件流。

1.monkey运行在设备或者模拟器上边,可以脱离PC运行,其运行时如下图所示。

Monkeyrunner:

Monkeyrunner工具是在工作站上通过API定义的特定命令和事件控制设备或模拟器。

而monkeyrunner运行在PC上,需要通过服务器/客户端的的模式向设备或者模拟器上的android应用发送指令来执行测试,其运行时如下图所示。

2.普遍的做法是将monkey作为一个向待测应用发送随机按键消息的测试工具,验证待测应用在这些随机性的输入面前是否会有闪退或者崩溃。而monkeyrunner则接受一个明确的测试脚本(使用python语言编写的)。

3.虽然monkey也可以根据一个指定的命令脚本发送按键消息,但其不支持条件判断,也不支持读取界面的信息来执行验证操作。而monkeyrunner的测试脚本中有明确 的条件判断等语句,可用来做功能测试。

 总结:

  实际操作中,monkey由于缺少必要的条件判断等命令,难以在功能测试上有所作为,只能作为生成一些随机事件的工具,测试应用程序的健壮程度,待测应用崩溃后可以根据monkey打印的日志,再用monkey创建一个重现步骤,供开发调试。monkey服务器模式更适合用于黑盒测试,不建议用于自动化测试。

  而Monkeyrunner虽然有Python和Java类库的强大支持,但其自身提供的API有限,还得需要插件扩展其功能。

monkeyrunner API

monkeyrunner API包含在包中的三个模块中 com.android.monkeyrunner

1.MonkeyRunner:monkeyrunner程序的一类实用方法。此类提供了将monkeyrunner连接到设备或模拟器的方法。它还提供了为monkeyrunner程序创建UI以及显示内置帮助的方法。

2.MonkeyDevice:表示设备或模拟器。此类提供了安装和卸载软件包,启动Activity以及向应用程序发送键盘或触摸事件的方法。您还可以使用此类来运行测试包。

3.MonkeyImage:表示屏幕捕获图像。此类提供捕获屏幕,将位图图像转换为各种格式,比较两个MonkeyImage对象以及将图像写入文件的方法。

在Python程序中,您可以将每个类作为Python模块进行访问。monkeyrunner工具不会自动导入这些模块。要导入模块,请使用Python from语句:

1 from com.android.monkeyrunner import <module>

<module>您要导入的类名 在哪里。from通过用逗号分隔模块名称,可以在同一语句中导入多个模块。

运行monkeyrunner

您可以从文件中运行monkeyrunner程序,也可以在交互式会话中输入monkeyrunner语句。您可以通过调用SDK目录子目录中的monkeyrunner命令来执行这两项操作tools/。如果提供文件名作为参数,则该monkeyrunner命令将文件的内容作为Python程序运行; 否则,它会启动一个交互式会话。

monkeyrunner命令的语法是

1 monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>

表1解释了标志和参数。

表1. monkeyrunner标志和参数。

参数描述
-plugin <plugin_jar>(可选)指定.jar包含monkeyrunner插件的文件。要了解有关monkeyrunner插件的更多信息,请参阅 使用插件扩展monkeyrunner。要指定多个文件,请多次包含该参数。
<program_filename>如果提供此参数,则该monkeyrunner命令将该文件的内容作为Python程序运行。如果未提供参数,则该命令将启动交互式会话。
<program_options>(可选)<program_file>中程序的标志和参数。
 

运行monkeyrunner

命令语法为:

monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>

方式一:在CMD命令窗口直接运行monkeyrunner

方式二:使用Python编写测试代码文件,在CMD中执行monkeyrunner hongge.py运行

不论使用哪种方式,您都需要调用SDK目录的tools子目录下的monkeyrunner命令。

注意:在运行monkeyrunner之前必须先运行相应的模拟器或连接真机,否则monkeyrunner无法连接到设备

运行模拟器有两种方法:1、通过eclipse中执行模拟器 2、在CMD中通过命令调用模拟器

这里介绍通过命令,在CMD中执行模拟器的方法

emulator -avd test

上面命令中test是指模拟器的名称。

附:这部分前边已经讲解过,在这里就不再赘述)

问题:CMD运行提示monkeyrunner不是内部或外部命令,也不是可运行的程序或批处理文件。

解决:电脑环境变量未配置,将monkeyrunner所在目录配在环境变量里。

变量名:Path

变量值:D:\android\android-sdk-windows\tools;D:\android\android-sdk-windows\platform-tools

实例

实例一:卸载旧的APP,安装新的APP 

*准备

a. 连接安卓夜神模拟器设备

b. 运行CMD,检测是否连接成功

CMD>adb devices

附:(这部分前边已经讲解过,在这里就不再赘述)

问题:CMD运行提示adb不是内部或外部命令,也不是可运行的程序或批处理文件。

解决:电脑环境变量未配置,将adb所在目录配在环境变量里。  

*方式一: 

1.打开CMD,运行monkeyrunner

2.进入monkeyrunner的shell命令交互模式后,逐条输入以下命令

1 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
2 device = MonkeyRunner.waitForConnection()
3 device.removePackage('com.taobao.taobao')
4 device.installPackage('C:\\Users\\DELL\\Desktop\\702757.apk')

(1)输入命令前的夜神模拟器:

(2)输入第三行命令后的夜神模拟器

(3)输入第四行的夜神模拟器

注:每条命令的作用,请见方法二中的注解

实操如图:

c.检查手机app是否已更新 

*方式二:

a. 编写Python测试代码

 1 # File:   Test1.py
 2 # Vision: V1.0
 3 # Author: hongge  QQ群:707699217
 4 # 引入本程序所用到的模块
 5 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
 6 
 7 # 连接手机设备
 8 device = MonkeyRunner.waitForConnection()
 9 
10 # 截图
11 result = device.takeSnapshot()
12 # 将截图保存到文件 
13 result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_001.png','png')
14 
15 # 卸载APP
16 device.removePackage('cn.richinfo.thinkdrive')
17 print ('Uninstall Success!')
18 
19 # 暂停5秒
20 MonkeyRunner.sleep(5)
21 
22 # 截图
23 result = device.takeSnapshot()
24 result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_002.png','png')
25 
26 # 安装新的APP
27 device.installPackage('E:\\JAVA\\monkeyrunner\\Test1\\ThinkDrive_new.apk')
28 print ('Install Success!')
29 
30 # 截图
31 result = device.takeSnapshot()
32 result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_003.png','png')

注:拷贝运行时请去掉中文注释;或者在开头加入 #coding=utf-8 

b.执行Test1.py脚本

Monkeyrunner C:\Users\DELL\Desktop\test.py

实操如图:

c.检查手机app是否已更新

d.查看截图文件夹,截图和上边逐条输入命令,宏哥截得模拟器一模一样的。

e.注意如果截图不一样自己加个等待时间,就会一样,参考代码:

 1 # File:   Test1.py
 2 # Vision: V1.0
 3 # Author: hongge  QQ群:707699217
 4 # 引入本程序所用到的模块
 5 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
 6 
 7 # 连接手机设备
 8 device = MonkeyRunner.waitForConnection()
 9 
10 # 截图
11 result = device.takeSnapshot()
12 # 将截图保存到文件 
13 result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_001.png','png')
14 
15 # 卸载APP
16 device.removePackage('cn.richinfo.thinkdrive')
17 print ('Uninstall Success!')
18 
19 # 暂停5秒
20 MonkeyRunner.sleep(5)
21 
22 # 截图
23 result = device.takeSnapshot()
24 result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_002.png','png')
25 
26 # 安装新的APP
27 device.installPackage('E:\\JAVA\\monkeyrunner\\Test1\\ThinkDrive_new.apk')
28 print ('Install Success!')
29 
30 # 截图
31 result = device.takeSnapshot()
32 result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_003.png','png')

monkeyrunner内置帮助

您可以通过运行以下命令为monkeyrunner生成API参考:

1 monkeyrunner help.py <format> <outfile>

论点是:

  • <format>或者是text纯文本的输出或html用于HTML输出。
  • <outfile> 是输出文件的路径限定名称。

使用插件扩展monkeyrunner

您可以使用Java编程语言编写的类扩展monkeyrunner API,并将其构建为一个或多个.jar文件。您可以使用此功能使用您自己的类扩展monkeyrunner API或扩展现有类。您还可以使用此功能初始化monkeyrunner环境。

要为monkeyrunner提供插件,请monkeyrunner使用表1中-plugin <plugin_jar>描述的参数 调用该命令 。

在你的插件代码,你可以导入和扩展的主要monkeyrunner类 MonkeyDeviceMonkeyImageMonkeyRunnercom.android.monkeyrunner(见的monkeyrunner API)。

请注意,插件不允许您访问Android SDK。您无法导入包等com.android.app。这是因为monkeyrunner与框架API级别下的设备或模拟器交互。

插件启动类

.jar插件 的文件可以指定在脚本处理开始之前实例化的类。要指定此类,请将密钥添加 MonkeyRunnerStartupRunner.jar文件的清单中。该值应该是启动时要运行的类的名称。以下代码段显示了如何在ant构建脚本中执行此操作:

1 <jar jarfile="myplugin" basedir="${build.dir}">
2 <manifest>
3 <attribute name="MonkeyRunnerStartupRunner" value="com.myapp.myplugin"/>
4 </manifest>
5 </jar>

要访问monkeyrunner的运行时环境,启动类可以实现 com.google.common.base.Predicate<PythonInterpreter>。例如,此类在默认命名空间中设置一些变量:

 1 package com.android.example;
 2 
 3 import com.google.common.base.Predicate;
 4 import org.python.util.PythonInterpreter;
 5 
 6 public class Main implements Predicate<PythonInterpreter> {
 7     @Override
 8     public boolean apply(PythonInterpreter anInterpreter) {
 9 
10         /*
11         * Examples of creating and initializing variables in the monkeyrunner environment's
12         * namespace. During execution, the monkeyrunner program can refer to the variables "newtest"
13         * and "use_emulator"
14         *
15         */
16         anInterpreter.set("newtest", "enabled");
17         anInterpreter.set("use_emulator", 1);
18 
19         return true;
20     }

monkeyrunner环境搭建

1.安装并配置好jdk环境

2.安装android sdk

3.安装python 

4.monkeyrunner环境变量配置: {Path}\Andriod_SDK\tools

安装结果检测

在docs命令控制台输入命令:monkeyrunner出现如下显示内容则说明安装成功

Tips:退出monkeyrunner命令行模式可以 使用快捷键 ctrl+D退出。

小结

1.在方式二运行monkeyrunner报错(190724 14:33:20.837:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] Script terminated due to an exception)

解决方法,报出该错误是使用的notepad++编码格式问题,notepad++默认编码格式是ansi,我们使用的monkeyrunner脚本格式是utf-8,因此有冲突

修改方法如下

首先,看我们的脚本编码格式是什么,我这里的是utf-8,因此不用再做修改

3.如果编码格式不是utf-8的,就要对它进行修改了,点击格式,选择utf-8,再保存,也可选择无BOM格式的

4.再来运行一下,这次成功了

2.monkeyrunner常用的知识点

#引入程序所用的模块

1 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage 

#引入程序所用的模块,使用别名

1 from com.android.monkeyrunner import MonkeyRunner as mr
2 from com.android.monkeyrunner import MonkeyDevice as md
3 from com.android.monkeyrunner import MonkeyImage as mi
4 #如果给导入的模块起了别名,就必须使用别名,否则会出现错误。
5 #比如连接设备或模拟器,起了以上别名后,命令应该如下:
6 device=mr.waitForConnection()

#连接到设备或模拟器

1 #参数1:超时时间,单位秒,浮点数。默认是无限期地等待。
2 #参数2:串deviceid,指定的设备名称。默认为当前设备(手机优先,比如手机通过USB线连接到PC、其次为模拟器)。
3 #默认连接:
4 device = MonkeyRunner.waitForConnection()
5 #参数连接:
6 device = MonkeyRunner.waitForConnection(1.0,'4df74b8XXXXXXX') 

#向设备或模拟器安装APK 

1 #以下两种方式都是对的
2 device.installPackage('E:/JAVA/monkeyrunner/Test1/ThinkDrive_new.apk')
3 device.installPackage('E:\\JAVA\\monkeyrunner\\Test1\\ThinkDrive_new.apk')
4 #参数可以为绝对路径,也可为相对路径

#卸载设备或模拟器中的APK 

1 #参数为APK包名
2 device.removePackage('cn.richinfo.thinkdrive') 

#启动任意的Activity

1 #device.startActivity(component="包名/启动Activity")
2 #以下两种都OK
3 device.startActivity(component="cn.richinfo.thinkdrive/cn.richinfo.thinkdrive.ui.activities.NavigateActivity")
4 device.startActivity(component="cn.richinfo.thinkdrive/.ui.activities.NavigateActivity")

#手机截图 

1 #获取设备的屏蔽缓冲区,产生了整个显示器的屏蔽捕获。(截图)
2 result=device.takeSnapshot()
3 #返回一个MonkeyImage对象(点阵图包装),我们可以用以下命令将图保存到文件
4 result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_001.png','png')

#暂停 

1 #暂停目前正在运行的程序指定的秒数
2 #MonkeyRunner.sleep(秒数,浮点数) 
3 MonkeyRunner.sleep(5)

#字符串发送到键盘 

1 #device.type('字符串')
2 device.type('hongge')

#唤醒设备屏幕

1 #锁屏后,屏幕关闭,可以用下命令唤醒
2 device.wake()

#重起手机

1 device.reboot()

#模拟滑动

1 #device.drag(X,Y,D,S)
2 #X 开始坐标
3 #Y 结束坐标
4 #D 拖动持续时间(以秒为单位),默认1.0秒
5 #S 插值点时要采取的步骤。默认值是10
6 device.drag((100,1053),(520,1053),0.1,10)

#在指定位置发送触摸事件 

1 #device.touch(x,y,触摸事件类型)
2 #x,y的单位为像素
3 #触摸事件类型,请见下文中Findyou对device.press描述
4 
5 device.touch(520,520,'DOWN_AND_UP')

#发送指定类型指定键码的事件

 1 #device.press(参数1:键码,参数2:触摸事件类型)
 2 #参数1:见android.view.KeyEvent
 3 #参数2,如有TouchPressType()返回的类型-触摸事件类型,有三种。
 4 #1、DOWN 发送一个DOWN事件。指定DOWN事件类型发送到设备,对应的按一个键或触摸屏幕上。
 5 #2、UP 发送一个UP事件。指定UP事件类型发送到设备,对应释放一个键或从屏幕上抬起。
 6 #3、DOWN_AND_UP 发送一个DOWN事件,然后一个UP事件。对应于输入键或点击屏幕。
 7 以上三种事件做为press()参数或touch()参数
 8 
 9 #按下HOME键
10 device.press('KEYCODE_HOME',MonkeyDevice.DOWN_AND_UP) 
11 #按下BACK键
12 device.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP) 
13 #按下下导航键
14 device.press('KEYCODE_DPAD_DOWN',MonkeyDevice.DOWN_AND_UP) 
15 #按下上导航键
16 device.press('KEYCODE_DPAD_UP',MonkeyDevice.DOWN_AND_UP) 
17 #按下OK键
18 device.press('KEYCODE_DPAD_CENTER',MonkeyDevice.DOWN_AND_UP) 

 3.好了今天就到这里吧。


              【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】


一、Python编程入门到精通

二、接口自动化项目实战

三、Web自动化项目实战


四、App自动化项目实战

五、一线大厂简历


六、测试开发DevOps体系

七、常用自动化测试工具


八、JMeter性能测试

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!

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

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

相关文章

【VCS】(7)Fast Gate-level Verification

Fast Gate-level Verification VCS中SDF反标(Back-Annotation)Lab 门级网表的后仿真DC综合RTL级仿真波形后仿真 网表级的仿真可以验证综合后得到的门级网表和RTL代码是否一致。也可以验证&#xff0c;在加速时序信息&#xff08;SDF&#xff09;之后&#xff0c;设计的功能是否…

基于POX、JBX交叉的遗传算法求解车间调度

对于流水车间调度问题&#xff0c;n个工件在m台设备上加工&#xff0c;已知每个工件每个工序使用的机器和每个工件每个工序所用时间&#xff0c;通过决策每个机器上工件的加工顺序和每个工序的开始时间&#xff0c;使完成所有工序所用时间(makespan)最小。具有下列约束&#xf…

58寸透明屏的画质怎么样?

58寸透明屏是一种新型的显示屏技术&#xff0c;它具有透明度高、色彩鲜艳、清晰度高等特点&#xff0c;可以广泛应用于商业展示、户外广告、智能家居等领域。 首先&#xff0c;58寸透明屏的透明度高。 透明屏采用了先进的光学技术&#xff0c;使得屏幕在显示图像的同时&#x…

ubuntu 18.04 磁盘太满无法进入系统

安装了一个压缩包&#xff0c;装了一半提示磁盘空间少导致安装失败。我也没在意&#xff0c;退出虚拟机打算扩展硬盘。等我在虚拟机设置中完成扩展操作&#xff0c;准备进入虚拟机内部进行操作时&#xff0c;发现登录不进去了 shift 登入GUN GRUB设置项的问题 网上都是在开机…

Rust vs Go:常用语法对比(十三)

题图来自 Go vs. Rust: The Ultimate Performance Battle 241. Yield priority to other threads Explicitly decrease the priority of the current process, so that other execution threads have a better chance to execute now. Then resume normal execution and call f…

在centos 7系统docker上构建mysql 5.7

一、VM上已经安装centos 7.9&#xff0c;且已完成docker的构建 二、安装mysql5.7 安装镜像&#xff1a;[rootlocalhost lll]# docker pull mysql:5.7 查看镜像[rootlocalhost lll]# docker images 根据镜像id构建mysql容器&#xff0c;且分配端口号[rootlocalhost lll]# dock…

勘探开发人工智能应用:断层识别

1 断层识别 断层是地下岩层在受到挤压或拉伸力作用下,因脆性变形而形成的地层错断,是一种重要的地质构造特征。断层检测和解释是从地震剖面中认识岩层结构和储层特性的重要步骤。 1.1 数据描述 合成地震数据: 每一个合成地震数据都是由地质模型的反射系数与雷克子波进行褶…

chrome插件推荐

chrome插件推荐 chrome的一些插件, 真的能很大程度上提升我们的工作效率。而且chrome的插件极其丰富, 基本你想要的功能,都能找到对应的插件&#xff0c;接下来给大家推荐几个我自己在用的。 插件 1、Momentum 新标签页 简介: 超漂亮的新标签页面。每日更新精彩背景壁纸图片&…

124.【SpringBoot 源码刨析C】

SpringBoot源码刨析C (三)、SpringBoot核心功能2.Web4.数据响应与内容协商(1).响应JSON&#xff08;1.1&#xff09;jackson.jarResponseBody&#xff08;1.1.1&#xff09;、返回值解析器&#xff08;1.1.2&#xff09;、返回值解析器原理 (1.2).SpringMVC到底支持哪些返回值(…

一遍过JavaSE基础知识

文章目录 前言安装Java Development Kit (JDK)安装jdk配置开发环境验证是否安装配置成功 编写第一个Java程序hello world运行Java程序的流程 数据类型和变量数据类型变量 程序逻辑控制条件语句循环语句跳转语句 数组声明和创建数组访问数组元素数组长度遍历数组多维数组 面向对…

OpenAI大模型生态与ChatGLM ||学习大模型我们需要掌握些什么?

首先我们来看OpenAI系列模型&#xff1a; OpenAI 并不只有一个模型&#xff0c;而是提供了涵盖文本、码、对话、语音、图像领域的一系列模型。 语言类大模型 其中语言类大模型包括: GPT-3、GPT-3.5、GPT-4系列模型。 并且&#xff0c;OpenAI在训练GPT-3的同时训练了参数不同、…

Disulfo ICG Amine,二磺酸吲哚菁绿氨基,应用于多种生物大分子以及药物的检测

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ Disulfo-ICG-Amine试剂 | 基础知识概述&#xff08;部分&#xff09;: 中文名称&#xff1a;二磺酸吲哚菁绿氨基 英文名称&#xff1a;Disulfo-ICG-Amine&#xff0c;Disulfo ICG NH2 CAS号&#xff1a;N/A 分子式&#xf…

【Gray Hat Python】构建自己的windows调试器

环境准备 windows10 64bit python3.7 64bit 打开可执行文件&#xff0c;创建进程 定义变量 以下代码用 ctypes 定义了调用 windows API 需要的结构 my_debugger_define.py import ctypesWORD ctypes.c_ushort DWORD ctypes.c_ulong LPBYTE ctypes.POINTER(ctypes.c_uby…

微软5年敏捷转型策略:成功的16个关键

许多管理者怀疑规模化敏捷组织是否可行。微软成功地实现了为期五年的大规模敏捷转型表明&#xff0c;答案是肯定的。微软已不是一艘巨型军舰&#xff0c;而更像是同步行进的快艇组成的舰队&#xff1a;数百个团队中以协调的方式进行敏捷和Scrum。依赖关系如何处理&#xff1f;团…

常用自动化测试工具有哪些?

1、Appium AppUI自动化测试 Appium 是一个移动端自动化测试开源工具&#xff0c;支持iOS 和Android 平台&#xff0c;支持Python、Java 等语言&#xff0c;即同一套Java 或Python 脚本可以同时运行在iOS 和Android平台&#xff0c;Appium 是一个C/S 架构&#xff0c;核心是一…

Java Swing(C/S模式)特效雨滴系统界面

调节不同参数&#xff0c;生成不同特效: ------------------界面截图--------------------- package org.jd.data.netty.big.window.chat.frame.ui.controller.center; import lombok.extern.slf4j.Slf4j; import java.util.concurrent.*;/*** 设计模式: 单例模式* * 自定义线…

Docker 数据管理及网络通信 Dockerfile

一、Docker 的数据管理 管理 Docker 容器中数据主要有两种方式&#xff1a;数据卷&#xff08;Data Volumes&#xff09;和数据卷容器&#xff08;DataVolumes Containers&#xff09;。 1、数据卷 数据卷是一个供容器使用的特殊目录&#xff0c;位于容器中。可将宿主机的目…

华为OD机试真题 Java 实现【阿里巴巴找黄金宝箱(II)】【2023 B卷 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路1、题目关键点&#xff1a;2、大白话的意思就是3、比如4、思路这不就来了 五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于…

STM32单片机蓝牙APP语音识别智能记忆汽车按摩座椅加热通风儿童座椅

实践制作DIY- GC00160---智能记忆汽车按摩座椅 一、功能说明&#xff1a; 基于STM32单片机设计---智能记忆汽车按摩座椅 二、功能说明&#xff1a; 电路组成&#xff1a;STM32F103CXT6最小系统LD3322语音识别模块OLED显示3个ULN2003步进电机&#xff08;分别对应 前后距离、座…

小学期笔记——天天酷跑1

文件快照&#xff08;File snapshot&#xff09;通常是指对文件系统中某个特定时间点的文件或文件夹的快照或副本。它记录了文件或文件夹在某一时刻的状态&#xff0c;包括文件的内容、属性、权限、位置等信息。 文件快照通常用于数据备份、恢复和版本控制等目的。通过捕捉文件…