驱动在驱动里面是吧?选择幺二零零,幺零啊,当然我直接发给你的 file drive 文件,我是配置好的,这里面幺二零零和或者幺五零零这样一个驱动, 如果你发现你这里是灰色的,说明什么?说明你没有破解成功啊。然后这个地方我们在配置, 配置,这个地方 s 七幺二零零,看这个布尔输入偏移,从十开始偏移,不要从零。为什么呢? 因为它会跟你的泵体打架的。你们有没有看到 plc 泵体上有输入点了,那你不能用它泵体上的输入点,它是一个,你就从十开始用,你从十点零开始用,不要用它泵体上,比如说用 i 零点一, i 零点二啊,那不行的, 因为它是仿真的,你就不能用泵体上的 i 点,你要用远一点啊,你就像这里 qd 啊, id id 一 千, id 一 百, id 幺零四, 当前液位出水流量给定液位啊,放水阀开度,进水阀开度三个灯,这是一些按钮, 不是一共一共几个模拟量输入啊,这个设备上对于 plc 来讲的话,几个输入 一个,对吧?是不是当前页位啊?当前页位,我要检测它的当前页位是不是用的 plc 的 模拟量输入,几路输出 两路吧。哇,我要控制放水阀的开度和净水阀的开度,一路模拟量输入,两路输出 i o 点位 go, 是 不是?这个项目其实可以用幺二幺五 幺二幺四行不行?幺二幺四的话他好像没有输出,对不对?幺二幺四上面没有模,自带的没有,你要加模块。那用幺二幺五,幺二幺五,上面有两路输入,两路输出 直接一个本体就可以可以搞定,但还要注意的是本体上的输入输出是不是他的电流和电压信号给你规定死了, 你不能调节,那万一你这进水阀和出水阀它是电流型的,那你的泵体本身只是是电压型的,那就也不能用,对不对啊?所以这个时候我们模拟的模块。
粉丝695获赞3395


漫步者耳机如何下载驱动?首先我们点开浏览器输入漫步者官网, 找到官方网站之后点击进入,找到下载与支持,点击进入,这里输入我们想要的耳机型号,比如说漫步者 g 五,输入 g 五, 在这里搜索下面我们会看到很多型号,找到漫步者 g 五,然后我们点击进入,这里有一个相关软件,相关软件 点击进入,然后点击下载,这里会出现很多,比如说各种各样的型号,后期也会添加新款的型号,这里点击下载驱动即可。 漫步者耳机驱动如何使用?首先我们点击下载好的驱动,第一次进入这里会有个识别耳机,然后我们识别到耳机之后我们点击进入, 首先我们可以看到这里有个音效设置,这里有一二三四可以调节,各方面,点开之后这里都有参数都可以,比如说人声清晰化,可以根据你实际的使用场景来改变,具体的细节大家可以看一下。 接下来就是一个均衡器的设置,打开均衡器我们可以根据你玩的不同的游戏,比如说三角珠,无畏契约以及绝地求生,像反恐精英,永劫无间,玩不同的游戏你可以自己更改,像这里他都是职业玩家帮你搭配好的一个配置, 大家可以参考,也可以自行更改。另外一个就是我们的一个七点一, 打开之后有一个游戏模式和电影模式,根据你房间大小也可以进行更改选择,还有一个启动环绕扩帧,这样让你的脚步听得更清晰,知道敌人具体从哪个方位过来的也是没有问题的。 第三个就是我们的一个麦是可以改变声音的,比如说你想要怪兽的声音还是卡通,还是男性,都是可以。比方说你现在是一个小男生,那你想要三级头,三级甲,那你打开女性,你只需要喊一句小哥哥,我需要三级甲了,三级头了,那别人能不给你吗? 这就是整个漫步者驱动的一个使用教程。另外一个就是大家比较担心的一个问题,就是上一个客人设置完之后,那下一个客人来不适应怎么办?这里没有关系,我们在这里可以一键恢复。

这一期是我们莱奥博格 k 八幺这一款键盘的一个驱动下载教程。首先的话,拿到手键盘之后,因为键盘只能有线才能使用驱动,所以说先将我们的拨档拨到 usb, 播到中间这个连接模式,然后插上电亮灯光有反应,然后搜索我们莱奥伯格 k 八幺,然后搜索它的驱动或者官网任意浏览器,我以 qq 浏览器为例,然后点开它, 它会有这个页面,然后点莱奥伯格官网驱动官网入口一点点搜官网网址, ok, 官方入口为这个,那就下,那就复制一下 来删掉 control 为搜索一下,点开一下,然后这就是他们的官方网址, 然后点开的话,我们这边是要查它的驱动,然后就点驱动 好,然后这边要找型号,我们是属于键盘 k 八幺,这直接都显示出来了,看到没?什么科二幺, amg 六五, k 六七,还六五 k 幺零八,我们是属于 k 八幺,然后我们点击这个点击下载驱动, 点击之后呢?嗯,看你直接打开或者下载,我这边以下载为为准,然后保存到页面的话,看你自己是桌面还是哪里,自己想保存哪里保存哪里,我以桌面为例,然后点击下载, 然后右上角这边有我们的一个下载的一个记录,然后稍等一下, 然后点击完成,点击打开,点击这个标识文件的文件当中显示,然后点全部缩放,这就是我们 k 八幺的一个呃,它的一个文件,然后双击它, 然后点击打开,然后这边就是驱动,然后再次点击双击, 先不动不运行,双击 擦掉,不管不行脱下来,然后出来了,这就是 k 八幺,然后点返回双击一下试试 看有没有反应 更多信息,人要运行,点人要运行,估计是电脑有些东西阻挡了,然后点击试,我们要让他让我们安装, 然后点击确定,点击下一步,点击下一步,点击下一步,点击安装, 他要解压,然后点击完成,此时这个就是我们 k 八幺了,然后驱动就下好了,然后的话这个是驱动,这估计是他的一个下载的一个类似于安装包的一个东西,放一边 就安好了,然后就是驱动的页面,驱动上自己玩。

今天一镜到底,带大家看看西门子博图是怎么控制仿真工厂 factory l 软件的。 打开场景之后,我们把需要用到的 i o 标签名字改一下这个皮带机,我们就把名字改成皮带机,启动按钮,停止按钮也改一下。本次视频只是用其保停的形式来跟大家演示一下 西门子怎么跟仿真工厂通讯交互的,所有其他的先不管。第二步,点击文件,再点击驱动,选择西门子仿真驱动就是最下面那个,选择正确的驱动后,导出 l 标签, 这个就是 i o 标签文件。第三步,打开薄图软件,找到 plc 变量表,导入我们刚刚保存的 i o 标签文件。 标签文件导入之后,我们来写一个简单的起保停程序, 先写一个启动按钮,再停止按钮,最后写个线圈输出皮带机,下面再加一个皮带机常开触点字锁,一个简单的起保停程序就写完了。 程序写好了之后,我们点击变异保存,然后下载进去 程序下载进去之后,我们打开 factory l 这个软件验证一下, 软件打开之后,点击运行按钮,启动仿真软件,软件启动后, 点击场景里面这个控制柜上面的启动按钮,按钮按下去之后, 程序里面这个变量就会导通,后面这个皮带机的线圈就会断电,程序就会自锁,皮带机和发料就会持续输出,当你按下停止按钮,后面的输出就会断开, 皮带机也会停下来,大家来一起看下是不是这样的。

大家好,欢迎参加本次关于 o g 的 深度解析分享。在现代制造业中,我们常常困惑于设备看似忙碌,产量却不尽人意。今天,我们将通过一张核心图表,彻底揭开某一页设备综合效率的神秘面纱,学习如何利用这个强大的工具,将我们的生产效率提升到新的高度。本次分享将分为四个部分, 首先,我们将探讨 o 一 为何事制造业不可或缺的管理工具。接着,我们会深入拆解 o 一 的三大核心指标。然后,我们将剖析导致效率损失的六大根源。最后,我们将分享提升 o 一 的实战策略,希望通过这个结构能帮助大家系统地掌握 o 一 的本质。我们首先来思考一个问题, 为什么我们需要 oe? 因为它能帮助我们从忙碌走向高效。 oe 不 仅仅是一个数字,它是一面镜子,照出生产过程中的各种浪费。它通过时间、性能和质量三个维度告诉我们设备的真实效率,帮助我们找到改进的方向。 o a e 的 重要性体现在五个方面,它能帮我们量化效率,识别瓶颈。能让我们聚焦损失。精准改善能衡量改善效果,支持持续优化,最终提生产能,降低成本。同时,它还能促进全员参与,营造积极的改善文化。可以说, o e 是 现代制造业管理的基石。 现在,我们进入核心部分,深入解读 o e 的 三大指标这个公式。时间开动率乘以性能开动率再乘以合格频率是理解 o e 的 关键。 它看似简单,却将复杂的生产效率难题拆解为三个清晰可量化的维度,为我们提供了大局审视生产环节的管理视角。接下来,我们将以右侧这张图为蓝本,逐一剖析每个指标的含义、计算方法以及在实际生产中如何针对性的改善。首先是时间开动率, 它回答的问题是,设备在干活吗?它衡量的是设备在计划生产时间内真正有效运行的时间比例。从我们的案例中可以看到,计划生产四百五十分钟,但因为故障和换模损失了九十分钟, 实际运行三百六十分钟,所以时间开动率是百分之八十,这个指标直接反映了各种停机损失。第二个指标是性能开动率,他回答的是设备干活快吗?他关注的是设备运行速度和理论速度的差距。在我们的案例中,设备运行了三百六十分钟,理论上应该产出三百六十件,但实际只产出了三百二十件, 所以性能开动率约为百分之八十八点九,这说明存在速度损失,比如设备没有全速运行,或者有短暂的空转和停顿。第三个指标是合格频率,他回答的是设备干的活好吗?他衡量的是铲除产品的质量。在案例中,总生产了三百二十件,带有二十件是次品,所以合格频率是百分之九十三点七五。 将这三个指标相乘,我们得到最终的 o e 值约为百分之六十五。这个数字告诉我们,在计划生产的时间里,只有百分之六十五是真正创造价值的有效时间。了解了三大指标后,我们来深入剖析吞食效率的六大损失。这六大损失对应着 o e 的 三个维度,是导致效率低下的根本原因, 它们分别是影响时间开动率的停机损失、影响性能开动率的速度损失以及影响合格频率的质量损失。 接下来我们会逐一分析。首先是停机损失,它直接影响时间开动率,主要包括设备故障和换膜换线。设备故障是突发性的,需要通过 t、 p、 m 等手段进行预防,而换膜换线时间在多品种生产中占比很高,我们可以通过 s max 快 速换膜 技术来大幅缩短这个时间。接下来是速度损失,它影响性能开动率,包括空转与小停机,比如物料卡堵,虽然单次时间短,但累积起来非常可观。还有速度降低,设备没有达到设计速度,这可能是因为操作习惯或设备老化 改善,这些问题需要我们深入现场找到根本原因。最后是质量损失,它直接影响我们的合格频率,是生产成本的隐形杀手。 这类损失主要分为两类,一是在稳定生产时产生的生产次品。二是设备刚启动时产生的启动损失。 对于生产次品,我们要实时自工序完结,利用防错法 poke rock 在 源头杜绝问题,绝不让一个不合格品流向下一道工序,避免产生连带浪费。对于启动损失,核心在于优化开机流程和缩短调试时间。标准化的作业指导书 saf 能有效降低试错成本,让设备快速进入稳定生产状态。 每一个不合格品本质上都是对材料、人工、能源的浪费,因此必须通过精细化管理将其降至最低。分析了问题,我们该如何解决?提升构思需要系统性的策略。首先,要建立数据驱动的文化,确保数据准确,并通过可视化看板和分析会让问题暴露出来。其次,要针对六大损失, 运用 t p m sm 法等工具进行针对性改善。最后,要善用价值流图、互联网等更高级的精益工具和技术理论。结合实际,我们来看一个真实的案例。 一家汽车零部件厂通过数据诊断发现了换膜和故障是主要损失。他们成立了跨智能团队,实施了 sm 和 t p m, 引入了防错装置并建立了激励机制。最终在六个月内, o e 从百分之五十大幅提升到了百分之八十五,这充分证明了 o a e。 改善方法的有效性。最后,我们来总结一下, o a e 是 一种思维方式,它帮助我们看清浪费,找准方向、量化成果。它的核心价值在于驱动持续改善。我们的目标不是追求百分之一百的 o a e, 而是通过这个工具不断发现问题、解决问题,实现效率和效益的螺旋式上升。 整套 o a e 从概念拆解、计算到改善,一次性给你讲透,觉得实用,点赞收藏,你家 o e 有 什么卡点?评论区留言,一起交流!

新手入坑压不住,来,十秒钟教你搞定啊!首先打开咱们手机系统,然后点配帧键,然后点桌面,然后点创建,点导入,先打开保存, ok, 看一下它的鼠标,想要哪个文件直接找。

大家好,今天来分享一期谷歌 antigrati 零基础教程,我会从十四个点分别介绍 antigrati, 结合案例一步步带大家更加了解 antigrati。 第一部分, antigrati 介绍如果你以前听说过 cuda、 cloud code code, 或者听说过一些 ai 编程,但是不知道这些工具怎么用,这期视频就是给你准备的, 我会从最基础的地方开始,一步步带你看懂 antiquity 是 什么,怎么安装界面,怎么看,怎么让它帮我们写代码,检查网页、连接外部工具,以及怎么用 scare 来帮我们固定工作流程。 简单说, antiquity 不是 一个普通的代码编辑器,它更像是一个可以管理 ai 员工的工作台,不是只让 ai 回答问题,而是可以给他一个任务,让他自己规划,自己写代码,自己打开浏览器检查,最后把结果交给你确认。这就是这期视频要讲清楚的东西。 如果你第一次接触 integrity, 看完这期视频,你至少会三个问题,第一, integrity 能做什么?第二,普通人应该从哪里开始?第三, m c p、 scares、 ross。 这些东西听起来很专业,到底是什么意思?视频制作不易,欢迎大家三连。 第二部分, antiquity 是 什么?你可以把它理解成一个 ai 版的代码编辑器,但是这个说法还不够准确。传统代码编辑器,比如 vs code, 主要是用来写代码,打开文件,自己运行,自己检查。 后来出现了 ai 编辑器,比如 coder, 它可以在你写代码的时候帮你补全,帮你解释代码,帮你修改某一段代码。再后来出现了 cloud code、 cortex 这类工具, 它们不止补全代码,而是可以帮你执行一个任务,比如修 bug、 写测试、生成网页。而 antgrity 更进一步,它的重点是 ai 帮你写几行代码,而 ai agent 帮你完成一个任务。 这里的 agent 我 们可以理解成一个智能体,你不用把它想得太玄乎,其实它就像是一个会自己干活的 ai 助手, 告诉他帮我做一个登录页面的开发,他不会只回答你一段代码,他会先理解你的需求,然后按照当前文件夹有什么文件,再列出任务清单,写实施计划,修改文件,运行项目, 打开浏览器检查页面,最后告诉你他做了什么。普通 ai 更像是在回答你的问题, integrity 更像是在替你执行任务。 所以我们可以用一句话总结, antiquity 是 谷歌推出的以 ai agent 为中心的开发工具,它可以让 ai 在 编辑器、终端、浏览器之间工作,帮你完成比较复杂的软件任务。如果你不会编程, 你可以把它理解成一个能够帮你做网站、看项目、改代码、写文档、查问题的 ai 工作台。第三个, ontgrity 和其他 ide 的 区别很多朋友问,那我经常听说 cuda、 cloud code code dex、 ontgrity 和它们有什么区别? 其实 ai 编码编辑器基本能力已经拉平, m c p、 scare 多 agent 等这些 ai 代码编辑器都能够实现。但是 ontgrity 强调的是 agent first, 还有免费的模型可用,内置的有最新的 gmail 模型, cloud 模型。所以我们重点分享 integrity。 integrity 的 特点是什么?它最特别的地方就是 agent manager, 专门管理 ai agent 任务界面,你可以把它理解成一个任务控制台。以前你可能打开一个聊天框和 ai 来回聊天, 但在 antiquity 里面,你可以同时打开多个任务,比如 agent 帮你做网页, agent 帮你测试,一个 agent 帮你怎么研究部署,你就像一个项目经理一样,在这个界面可以管理它们。所以 antiquity 的 核心不是一个聊天框,而是多个 agent 任务管理, 这就是它和很多 ai 编程工具不一样的地方,当然工具没有好坏。 integrity 更强调 agent 的 自动执行,浏览器验证、任务管理和工作过程可见。第四部分, integrity 安装、登录和出手话设置。大家直接在浏览器里面搜索谷歌 integrity, 进入官网, 进入官网之后点击 download, 支持 mac windows linux, 如果你是 mac, 下载完的软件,拖进 application 就 可以。如果你是 windows, 双击直接安装,跟普通软件一致。第一次打开 antiquity 的 时候,它会让你做几个出手话设置。 第一个设置是否导入你以前编辑器里面的配置,比如 vscode 浏览器。如果你是新手,我建议你不用纠结,直接点击默认配置就可以。第二个设置,选择主题,浅色深色,这个完全看个人习惯。 第三个设置比较重要,是 a 件的工作模式,也就是你希望 ai 有 多大的自主选择权。有些模式比较保守, ai 做关键决策之前会询问你的意见。有些模式比较自动, ai 可以 自主执行更多命令。 如果你是第一次用,我建议你选择 review drive development。 最后一步,需要登录我们的谷歌账号,我们点击登录 选择自己的账号, 登录完之后,我们就进入了主界面。第五个, antiquity 主界面结构介绍如果你用过 vs code, 大家可能会觉得很熟悉,左侧是文件列表,中间是代码编辑区域,右边是 a 帧的区域。我们可以在这个 a 帧的区域下侧 选择模型,它内置的有 gimini 最新模型和 cloudsonitops 相关模型,自己手动可以切换。如果你只想修改一个文件,或者问一段代码什么意思,可以让 ai 修改这个小功能, 我们直接拖进输入框跟它沟通就可以。或者通过 app file 命令,然后选择自己的文件跟它沟通就可以,它会帮你完成相应代码的调整。还有一个比较重要的功能叫做 agent manager, 这才是 antigue 最有特色的地方。 agent manager 可以 理解成 ai 任务管理台,你可以在这里创建任务,查看正在运行的 agent, 看它完成了哪一些步骤,查看它当前的计划截图和总结。这个界面通常会看到以下几种东西,第一个 workspace, workspace 就是 工作区,也可以理解成一个项目文件夹,比如要做一个网站,就新建一个网站项目目录文件, ai 在 这个项目里面生成文件,修改代码,都会放到当前工作区。第二个 conversation, conversation 就是 一次对话,也可以理解成一次任务, 比如帮我做一个个人主页,就是一次 conversation。 第三个 browser, browser 就是 浏览器 integrity 的 agent, 可以 打开浏览器看网页,点击按钮、截图、检查页面都没问题。第四个 terminal, terminal 就是 终端,很多项目需要运行命令,比如安装依赖 启动网站、运行测试 agent 都可以在终端里面执行这些操作。所以 integrity 的 界面可以理解成 edit 是 你和代码一起工作的地方。 agent 的 manager 是 ai agent 干活的地方, browser 是 ai 检查网页效果的地方, tome 是 ai 执行命令的地方, workspace 是 存放所有文件的地方。第六个, agent 是 怎么工作的?接下来我们看一下 integrity 最核心的流程, agent 是 怎么工作的?我们不要把它当成一个聊天机器人,它更像是一个会按步骤的工作助理,给他一个任务,比如帮我做一个个人簿客,它通常不会乱写代码。第一步,它会先理解需求, 它会判断你到底要什么页面,需要哪些模块,用什么技术来实现。第二步,它会扫描当前项目,也就是当前文件夹。 workspace 是 空项目,还是已有的 rack vue 这样的项目。第三步,它会生成一个 implementation plan, 也就是实现计划。它会告诉你准备修改哪些文件,为什么这么改。如果我们对它实现的计划我们不太满意,我们可以直接添加评论,它会按照我们的计划修改。第四步,它会生成一个 tasklist, 也就是任务清单,比如创建项目目录结构,创建簿刻的列表,还有文章详情,导航,启动本地服务,打开浏览器检测修复,发现问题会创建一个 task list。 第五步,才是真正它修改代码的地方。 第六步,它会运行命令,比如安装依赖启动项目,跑测试,它会打开浏览器进行验证。这一步非常重要, 因为很多 ai 工具只会写代码,但不知道页面长什么样。 integrity 可以 自己打开页面看效果,截图,发现问题自己修改。最后一步,它会生成一个完成总结, 它会告诉你我做了什么,改了哪些文件,怎么验证,都有相应的截图。所以 integrity 的 完整流程不是你问我答,而是你给任务它规划、 执行,验证、总结,然后你 review, 这就是 agent 工作流。第七个,我们讲一下 advise, 我 们刚才提到了 task, list, implementation, plan, workflow, 这些东西都是 integrity 里面叫做 atiface。 atiface 这个词听起来有点专业,你可以把它理解成 ai 干活过程中留下来的工作材料。比如一个真实员工完成任务,不应该说一句我做完了,他最好告诉你我计划怎么做,我实际做了什么,我遇到什么问题, 我怎么检查结果,还有哪一些风险? adfast 就是 这些东西。常见的 adfast 包括任务清单、实现、计划、修改、总结、浏览器截图、页面录屏、测试结果、知识记录。为什么这个东西重要?因为 ai 最大的问题就是黑箱, 他改了很多文件,你不知道为什么这么改,他说已经完成了修改,你不知道有没有真正检测,他说没问题,你不知道有没有跑过测试。 有了 atfast, 你 就可以检查它的过程,你可以查看它的计划是否合理,查看截图是否符合预期,可以查看它有没有启动项目,有没有报错。所以 anti grati 的 思路是, ai 不 止交付结果, 还交付了整个过程,对普通用户非常重要,因为你不一定能看懂每行代码,但是你能看懂它的任务清单, 截图和总结。第八个,浏览器能力,让 agent 自己检查页面。接下来我们介绍一个特别实用的功能,浏览器能力。普通 ai 写完网页的时候经常有一个问题,他觉得自己写好了,但你打开一看,页面很丑, 按钮重叠,可能文字超出屏幕,手机端完全断掉。为什么?因为他是在生成代码,不一定真实看个页面。 antigrity 的 浏览器能力就是为了解决这个问题,它可以帮你打开本地网页,运行在 logos 的 三千,也可以自己打开这个网址。我们给他一个网站,帮我测试一下。个人簿客点击发送, 它可以滚动页面,可以点击页面按钮,可以输入内容,可以查看控制台报错, 也可以截图。如果发现问题,还可以回滚代码继续修改。所以以后你让他做网页提示词,里面一定要加一句, 完成后启动本地服务,打开浏览器检查并提供截图。这句话非常重要,因为他会强迫 agent 不 只写代码,还要检查结果。第九个, mcp。 mcp 全称是模型上下文协议 model context prote, 这就是 ai, 可以 调用外部工具,你只需要知道 m c p 是 让 ai 连接外部工具的接口。没有 m c p 的 时候, integrity 主要是看你本地项目的文件 运行终端,打开浏览器。但现实工作里,我们需要连接其他工具。我们一起来看一下 integrity 如何安装 m c p。 我 们来到右侧的 a 镜的区域,点击三个点, 选择 m c p server。 大家可以看到这里有很多 m c p 服务,比如数据库相关的, github 相关的,比如数据库相关的,我们的 agent 就 可以通过这个 m c p server 去连接我们的 my circle。 github 相关的,我们的 agent 可以 安装 m c p 服务来连接我们的 github。 本地,我们来演示一个设计稿相关的 fig 码,我们可以在这里搜索, 因为我这里安装了,如果没有安装是 install, 首次点开,我们直接点击安装,这样我们的 m c p 服务就能安装。在本地,这里安装的是 figma 的 m c p, 也就是我们的 agent 可以 去读我们 agent 中的设计稿,我们一起来看一下。我们返回 agent, 我们来到设计稿,我这里有一个设计稿,我们选中 copy link to selection, 给他一条指令,帮我读取设计稿,然后点击发送。这些外部工具怎么连接到 ai? 这个时候就需要 mcp, 你 可以把 mcp 想象成一个插头, 数据库有数据库的插头, figma 有 figma 的 插头。 antgrity, 通过这些插头就能让 agent 使用对应的工具。所以 mcp 解决的问题是,什么? agent 能连接什么?我们这里配置了 figma mcp, agent 就 可以读取设计稿, 然后帮我们还原页面。我们刚才看到了,在 figma 中,我这里有一个设计稿, antgrity 安装了 figma, mcp 给他了 figma 的 设计稿的地址, 它已经帮我分析出来了,这是一个电商设计首页,这个页面的核心板块,它都已经帮我分析出来了,背景色、主色调它都能分析出来, 说明我们的 agent 通过了这个 m c p 连接到了我们 figma 这个外部工具。但是这里一定要注意安全, m c p 一 旦连接外部工具, 也就意味着 agent 有 更多的实操能力,它这里可以来读取我的设计稿。一句话总结, mcp 是 integrity 连接外部世界的一种新方式,也是所有的 ai 工具都是通过 mcp 来连接外部服务,让 agent 具有更强大的能力。第十个 scares, 让 agent 学会固定工作方法。 刚讲完 mcp, 我 们再来讲讲 scares。 scares 也很重要,而且和 mcp 很 容易混淆。我们先用一句话区分 mcp 解决的是 ai 能连接什么工具。我们刚才使用 mcp 连接我们的设计稿,它能够读取我们的设计稿。 scares 解决的是 ai 遇到某类问题该怎么做,比如让 ai 做代码审查。我们来演示一下,大家可以打开这个网站,这个网站有常见的 scares antiquity 的 常见 scares, 我 们一起来看一下,这里说选择你的工具,我们这里使用的是 antiquity, 我 们复制这个命令,来到我们的 antiquity, 打开终端,输入这个命令回车,这样就可以把我们这一个工具包里面常见的 scares 都安装上。我们稍等一下, 安装完了,我们来看一下有哪一些 scares。 我 们通过 nps scares list 就 可以查看, 我们刚才安装的这个插件里面有很多 scares。 我 们来找一个代码审查的 scares, 我 们就拿这个 code review scares 来举例,我们复制一下它的名字,来到 agent 的 区域,给他一条指令, 使用这个 scares 帮我检查当前类的代码,我们发送给他,我们稍等一会儿,如果没有 scares, 它会没有规范的检查代码, 然后说代码不错,但是如果我们给他一个 scar, 这个 scar 里面写清楚,先看代码的改动,再找 bug 有 没有风险,有没有缺陷测试,最后再看严重的输出问题。下次 ai 做代码审查的时候,就会按照我这个 scar 的 这个流程 来检查。你可以把 scar 理解成 ai 的 工作说明书,告诉 ai 遇到这个问题,按照哪一些步骤来执行,需要注意哪些问题,最后的输出格式是什么?这就是 scar。 比如说常见的有很多开源的 scar, 我 们也可以自定义 scar, 比如说写文章,写小红书,代码审查,写测试,数据分析,都有很多很多 scar。 如果要区分 mcp 和 scar, 可以 这样记, mcp 像是工具箱,负责连接工具。 scar 是 说明书,告诉 ai 怎么干活。 我们看一下刚才我们用的这个 scar 来分析这个页面,它已经执行完了核心审查中发现架构与 seo 瓶颈,版权、年份印编码, 是不是它分析出来了,有这么多缺陷?这就是我们用的这个 code review scasse。 在 后面我们会通过一个具体的案例来进行演示,这里使用的是一个 scasse。 第十一个 rules workflows, 我 们一起来看一下。 除了 m c p, scarce 还有两个概念值得讲一下,一个是 loose, 一个是一个是 workflows。 loose 就是 规则,我们看一下在哪里配置 loose, 我 们打开 a 键的区域,点击更多, 我们选择第一个,这里有一个 loose, 我 这里已经配置了两个。看一下,这里有一个是前局的 global, 还有一个是 workspace, 我 们来打开看一下, 我这个例子很简单,它的要求就是回答用简体中文, 它是一个前局的,所以看到 agent 的 回答的时候, 他回答的时候是不是把我们的这个回答变成了中文?这就是我们配置的一个规则。我们常见的在这个 list 里面,我们可以配置配置的有,比如说默认中文回答这个项目使用的语言,不要使用哪一些库, 所有的按钮都要和设计系统里面的组建一致,修改代码后必须要运行测试,这一些都是长期规则,也可以结合自己的项目来设置自己的规则。这个规则可以针对的是当前的 workspace, 也可以是前局的, 这是 loose workflows, 是 工作流,是一致的,它也是有前局的,跟 workspace。 我 们看一下,我这里配置了一个前局的 workspace f two p, 它的描述是根据设计稿还原页面,这个是我们等一下要做一个项目案例演示的, 我们看一下,它里面写的很简单,第一个深度拉取数据,通过 m c p。 第二步样式对齐,跟设计稿的样式要对齐。第三步才是结构化编码。第四步是动态注入, 就是扫描设计稿上的一些组建。第五步是视觉检查,定义了 workfloor, 它其实就是一个工作流。接下来我们 来演示案例的时候,他会按照我们定义的一二三四五步这个工作流来完成我们代码的一个实现。比如说我们一个发布的流程,先跑测试,再更新版本号,再写 log, 再打 tag, 再部署,这就是一个完整的一个流程。 我这里定义的这个流程就是我们会根据 fake 码上的一个设计页面,然后来生成代码,它规范的一个流程。 这几个概念跟大家再总结一下, roles 就是 要遵守的规则, skills 就是 需要用到的方法包 ai 使用的说明书。 work flows 就是 一套固定的工作流程, mcp 是 连接外部的工具的接口。第十二个权限和安全,我们来看一下 a 境的权限, a 境它能做什么?第一个,运行命令,打开浏览器,获取和编辑代码,还有使用工具, 比如说配置 m c p 可以 使用外部工具。 a g 的 能力很强,但权限有限,我们只能让他在明确的边界内工作。第二个权限最小原则,明确边界,我们尽量只给他当前项目的工作目录。第二个代码需要有一个版本管理, 他可以读写删代码,所以我们需要一个代码的版本管理,防止他误删。 第三个,不要给予最高的权限使用,普通用户运行不需要 root 管理员权限,避免系统级风险。第四个,高风险操作必须需要有一个确认, 我们可以配置规则,比如说删除文件,部署项目,修改数据库,系统配置,这些都需要经过人工确认才能执行操作。 敏感信息我们绝对不能交给 agent, 比如说密码,密钥,生产环境的权限,还有敏感的配置,我们这一些信息千万不能交给 agent。 最后我们总结一下,给 agent 最小的权限只能在当前项目目录中工作, 所有的代码变更都需要通过 get 管理,不要使用管理员权限,避免系统风险。 高风险,必须高风险,操作必须经过人工确认,防止误操作,敏感信息不共享, 保护密码,生产环境更安全。定期审查 a 件的操作日记,及时发现异常。第十三个完整案例演示,我们通过一个具体的案例 来把我们刚才所分享的一些 mcp, scare, workflow, rules、 figma, 我 们结合起来,把这些知识点结合起来,生成一个完整的案例。我们这一次要实现的一个功能是 figma 中的一个设计稿,也是 ai 生成的,我们打开看一下, 就是当前页面一个电商的首页,我们再来看一下 ai 生成完的页面是什么样子,这是 ai 生成的页面,我们的 integrity 需要读取我们的设计稿,我们这里用到了一个 mcp 服务是 figma, mcp 这里安装就可以。第二步,我们讲一下 rules 和 workflows, workflows 里面我们配置了返回用简体中文,刚才前面已经讲过。第三个 workflows workflows, 这是我自定义的一个工作流,然后定义了五步, 这个五步里面插入了一个东西,插入了一个 scare, 看一下。最后一步,使用 webos code review 这个 scare 做代码分析, 它会按照我们的这个工作流来给我们生成代码。这里讲到了 rose 和 workflows mcp, 我 们看一下它是怎么实现的,怎么来还原我们这个设计稿的,我就给他了一个指令, f two p 是 我们刚才定义的工作流,然后给他了我本地 figma 的 一个设计稿地址,这是通过 mcp 生成的,然后它会给我们生成一个计划, 我们计划怎么看呢?我们只需要点击 atfast implementation, 它给我们写了一个计划,需要我们确认的有三点。 刚才我们定义了 workflows, 第一个环境准备、结构转换、样式迁移、动态注入、交互、实现格式化检查和代码审查。这个代码审查我们是不是用到了一个 scare, 然后他会按照他自己制定的这个计划来实现,他会给自己列一个 tasklist, 最后 tasklist 他 都完成了之后,他会生成一个 walkthrough, 就是 一个结果结果报告,他生成的结果报告里面有截图还原效果图, 还有帧机演示图,这是一个视频,对不对?最后还用到了我们定,我们给他定义的这个 scale 写了一个代码规范审查的一个合规报告,比如说代码逻辑完整性、 t s 严谨度,还有交互性审查,它都做了一个检查,这样它是不是把我们的 m c p, scare rules, workflow 这些都结合起来, 生成了我们这个代码,这个代码的这个代码运行起来就是这样的。第十四个总结一下,到这里我们把 antiquity 零基础内容完整的走了一遍,我们讲了它是什么,和其他 ide 有 什么区别,怎么安装 主界面怎么看, agent 是 什么? at first 是 什么?浏览器怎么用, m c p scale workflows 是 什么?以及最后我们生成了一个完整的实操案例。 如果用一句话总结 antiquity antiquity 它不是 ai 在 旁边给你提建议,而是让 ai 进入编辑器终端浏览器,帮你真正完成任务。 它代表一种新的工作方式,以前我们在 id 里写代码,现在我们在 id 里管理 agent, 未来的软件开发很可能会像这样人负责目标判断、验收, ai 负责执行检查和总结。 好的,这期视频就分享到这里,希望你有所收获,如果你觉得有帮助,别忘记三连,我们下期见。

今天给大家分享一下 linux 下如何通过寄存器控制 g p i o。 虽然现在 linux 下驱动基本都是基于设备数编写,但作为一个工程师,对芯片的寄存器,这些底层原理应当熟悉和了解。 这里用到的是正点源字二 k 三五零六开发版,其他版字可参考对应思路。首先打开开发版底板原理图, 这里以 g p i o e b。 三为例,给大家演示如何通过配置寄存器使其输出高低电频。通过原理图上可以看到引脚,默认是做 u r t 二的 tx 引脚。 我们先看到瑞星微官方提供的二 k 三五零六寄存器手册,手册在开发版光盘资料中零八二 k 官方文档文件夹下 就是这个 r k 三五零六 t r m part 文件。我们需要思考控制一个盈角输出高低电瓶需要哪些步骤?首先是需要将盈角附用为 g p i o 功能,接着要配置 g p i o。 盈角作为输出盈角。 最后控制 g p i o。 盈角输出高低电瓶。首先我们看到第十八张 i o controller, 我们需要控制的 g p i o e b。 三引脚属于 g p i o e 控制器。找到 g p i o e i o c register description 章节, 这里的 g p i o e i o c g p i o e a。 就是 指 g p i o e a。 那 一组引脚。我们使用的是 g p i o e b。 三,就需要看到 g p i o e b i o max 寄存器, 这里可以看到寄存器的十五到十二 bit 位就是 g p i o e b。 三的复用配置。前面的三十一到十六位表示的是协使能, 简单来说就是三十一到十六共有十六位,这十六位一一对应地去控制十五到零这十六位寄存器是否可以写入芯片复位后,三十一到十六位复位成零 x 零零零零 对应的三十一到十六至十六位的写使能位均为零,即不能写入。如果我们想往 bit 十五写出数据,那么就需要将 bit 三一设置为一。 同理,要想往十五到零的某一位写出数据,就需要将三十一到十六位对应使能。接着我们看到这个寄存器的地址, 其中 g 地址是零 x f f 六六零零零零,偏移地址是零 x 零零二八,所以寄存器的地址就是零 x f f 六六零零二八。 我们启动开发版,进到系统终端,使用 i o 命令去查看零 x f f 六六零零二八寄存器上的值,其中二表示读取,四表示以四字节格式。最后是要读取的地址, 可以看到这里读取到的数据是零 x 零零零零七七七零。我们试着解读一下这个数据, 可以看到三十一到十六位全部为零,这里就对应了寄存器手册上说明的芯片复位后,三十一到十六位显示能关闭, 然后是十五到十二,这四位为零 x 零一一对应的就是附用为了 r m i o 二六功能,我们可以打开原理图, 从原理图上就能看到,即 p i o e b。 三十作为 r m i o 功能,通过 r m i o 服用成了 u r t t x 引角 r m i o 这个服用方式可以去看这个手册,这里不做过多赘述。 接着我们看到手册,这里要将十五到十二位服用成 g p i o e b 三对应的就是零 x 零七七零。 我们通过 i o 指令向零 x f f 六六零零二八寄存器写入零 x f 零零零零零零。 这里的 w 是 写入的意思,本来附用 g p i o e b 三是写入零 x f 零零零零七七零的,这样不影响其他位。这里主播故意写成零 x f 零零零零零零零,是为了验证只有三十一到十六位协使能才能写入。 写入完成后,我们再重新读去一下零 x f f 六六零零二八寄存器,可以看到,因为写入的三十一到十六位中只有高四位至一,所以对应的只有十五到十二位,这四位数据值变为零,而后面的零 x 零零零并没有写入到寄存器中。 将引角配置成 gpio 后,还需要配置引角为输出引角。看到寄存器手册第十七章 gpio 章节,从这里就能看出 gpio swapped d r l gpio swapped d r h。 控制输出高低电频 g p i o swapped d d r l g p i o swapped d d r h 控制输入输出。这里结尾的 h 和 l 表示高四位和低四位引脚,因为要控制的是 g p i o e b 三 b 三在低四位,所以看 g p i o swapped d r l 寄存器。 这里能看到寄存器的片一地址是零 x 零零零零,而 g 地址是 g p i o e 对 应的地址零 x f f 八七零零零零。然后再看到 g p i o swap 滴滴 r l 寄存器, 它的偏移地址是零 x 零零零八。我们接着看到这个寄存器地址的详细描述,可以看到这个寄存器也是三十二位的,也是被分成高十六位,三十一到十六位控制低十六位,十五到零位是否能写入 其中?低十六位从零到十五位就分别对应 g p i o 的 a 零到 b 七引角作为输出寄存器,值就为一,输入则为零。 g p i o e b 三中 b 三就对应第十一位, 对应的十六禁制值就是零 x 零八零零。需要注意的是,还要将高十六位中对应写是能,所以最终写入到零 x f f 八七零零零八,寄存器的值就是零 x 零八零零零八零零。 这样就配置好了。 g p i o e b 三引脚为输出引脚,接着看到 g p i o swapped d r l。 寄存器,控制引脚输出高低电瓶。 可以看到这里的寄存器配置方式和刚才 g p i o swapped d d r l。 寄存器配置方式一致。引脚对应的寄存器位为,一是输入高电瓶,零则输出低电瓶。 接着我们打开终端,让 g p i o e b 三引脚输出高电频往零 x f f 八七零零零零寄存器地址写入零 x 零八零零零八零零。 我们打开逻辑分析仪查看引脚电频状态, 可以看到此时 g p i o e b 三盈角已经在输出高电平。接着我们写入零 x 零八零零零零零,让盈角输出低电平,可以看到盈角已经开始输出低电平,再试一下将盈角变为高电平也是能正常输出高电平的。 这样我们就成功地通过配置寄存器的方式实现了对引脚的控制。我们可以试着基于这种方式在 linux 驱动代码中实现对引脚控制。这里主播基于 linux 中标准的一个字母设备驱动框架来举例,需要代码的可以评论区留言。 首先这里定义了三个寄存器配置的红定义,接着定义三个指征变量,用于接收寄存器地址对应的虚拟映设。之所以这样做,是因为内核不能直接读写物理地址,必须先映设成内核虚拟地址才能访问硬件寄存器。 这里定义了一个 g p i o 设备结构体,这部分内容属于 linux 字符设备驱动框架,这里大致讲解一下。 驱动模块被加载后去执行 ctrl enit 函数,在 enit 函数中完成对字体设备号的申请注册以及设备节点生成。 在模块卸载后执行 exit 函数注销字体设备驱动。如果对这部分内容不是很了解,可以去看一下这个 linux 驱动文档。 在内核驱动成功加载后,用户态中就可以通过 open 函数调用这里的 c d f test open 函数。在这个函数中使用 imap 对 g p i o 配置的寄存器地址做映设, 完成映设后,通过映设地址向寄存器配置引脚为 g p i o 以及做输出。 接着用户 type 中的应用程序通过 write 函数调用驱动中的 c dev test write 函数,通过用户 type 传入的零或一来控制 g p i o e b 三引脚输出高低电频。 接着看到用户 type 应用程序,这里先打开设备驱动节点,这个节点的名字就是前面驱动注册好的字母设备驱动名字。 然后就是通过 write 函数将输入的零或异参数传递给内核驱动。接着我们翻译驱动以及用户态应用程序 这里的 mac file 中交叉编辑器的路径需要根据自己实际情况修改。因为主播使用的是正点原子的三五零六 b 开发版,所以直接使用三五零六 s d k 中的交叉编辑器去翻译 cadir 变量需要指相对应的内核路径,然后执行 make arch 等于 arm 编域驱动源码,其中 arch 等于 arm 是 指定编域,成 arm 架构 编好后会生成一个点扣结尾的驱动模块,然后是编应用层代码。因为开发版是跑的 build 系统,所以需要用到 sdk 中编一 build 生成的交叉编辑器去编辑。 将翻译好的用户层代码 test tab 以及驱动的控模块拷贝到开发版, 然后先执行 insmod 命令加载驱动模块,再执行 test tab 临时及 p i o e b 三输出低电频, 输入 e 则为高电频。好了,今天的内容就讲到这里了,记得一键三连哟!

在家里找了一个很旧的一个有线网卡,不知道能不能用, 我怕这边网卡这边是不显示 的,找到驱动软件去给他打一下, 然后这边是可以显示的,我们看一下能不能给他装 上去。这个是网卡的信号,然后这边点一下安装, 然后网卡这边有显示的, 然后驱动也打上去了。那我们试一下这个网卡能不能用, 先把这个 wifi 给它禁用了, 再点一下, 然后这是可以用的。

重装系统后遇到驱动安装不上的问题不用着急,今天结合易建重装的流程,教大家快速解决的方法,演示操作细节,让你顺利完成驱动安装。电脑正常使用。开始下载。安装之前先退出或卸载杀毒软件,部分杀毒软件会误报,删除系统界面文件务必先关闭退出。第一步,准备系统镜像文件。 首先在桌面打开浏览器,在地址栏中输入三 w 点纯净云站点 com, 按键盘回车键打开这个网页。我们以安装 win 十专业工作站版为例, 网页栏目的选择 win 十系统,找到 win 十六四位下载,找到相应的下载地址并进行下载。请注意下载的文件不要放在 c 盘或桌面上,你看我就选择了。下载到 d 盘 之后,我们打开刚刚镜像文件下载的位置,然后右键选择解压我们的镜像文件。 第二步,解压完成后,双击打开解压后的文件,双击打开纯净云栈一键童装助手,在弹出的信息提示窗口中点击,我知道了。第三步,其他选择参数全部默认就可以,然后点击开始安装,在弹出的信息提示窗口中点击,确定,到了这一步时即可离开电脑 系统将自动完成安装,并智能适配驱动程序安装,全程无需手动操作,最终进入电脑桌面为止。在这里我们要注意不能将自己的电脑手动问题,不能断电,否则会造成系统安装失败,导致电脑开不了机。解决驱动问题后,系统运行正常干净无故障,自己动手就能轻松应对。

萨拉丁 x 装配太慢?教你阵列驱动零部件实现一键自动排列。如图,模型已安装好第一块隔板,下面我们依据支撑腿顶部开孔位置放置其余的隔板查看。开孔特征 限性阵列创建开孔特征,点击阵列驱动零部件阵列要阵列的零部件选择支撑腿零件中阵列特征,点击选原位置, 定义阵列起始位置,点击不同点位阵列效果不同。添加跳过的实力点,可删减多余的阵列实力。 勾选延伸视觉属性阵列与原模型相同效果配置同步到原阵列,与原模型同步。最后我们一键应用一下,会发现修改原模型配置时,阵列会同步变更, 如不勾选配置同步,每一阵列零件也可自由变更配置,掌握这个阵列技巧。机架支撑腿同款零件装配,再也不用一个个手动对位了,记得点赞关注哦!

一个视频学会采用乐星官方 led strip 组建库,驱动 ws 二八一二,全程不用写一行代码。我们先创建工程,然后在工程根目录下执行命令,执行成功后,工程自动生成 manage the components 文件夹库自动纳入工程编辑,无需手动改配置。 vs code 软件下打开工程,按下 ctrl 加 shift 加 p, 选择添加 vs code 配置文件加自动刷新头文件缩影,解决头文件报错和无法跳转问题。实际项目中使用时,直接在代码中引入官方头文件,无需额外配置路径,无需改 c, m, a, r, 然后调用 api 接口即可。 关于驱动和代码具体实现,大家结合 ai 选择性学习。这里我们使用豆包直接生成历程复制到过程中 修改 g p, i o 引角和灯珠数量,编印工程,然后下载到开发版,详 细教程和代码已放在我们在线笔记自行查看。驱动中这三个函数最重要,分别是,第一函数是设置指定灯珠颜色, 第二个函数是刷新输出,调用后灯珠才会变色。第三个是全部灯珠熄灭函数。我是致歉 ai 工作室余生关注我,一起用 ai 玩转嵌入式!

在重装系统前,我们要如何备份我们的驱动?我们可以在 u 盘上新建一个文件夹,名字任取,不要放在 c 盘。重装会清空数据之后以管理员身份运行命令提示符。 我们还需要将刚才创建的文件夹路径复制起来,输入 d i s m online slash export dash driver destination d 驱动。 d 驱动就是你刚才新建文件夹的路径,按下回车后等待导出全部驱动就可以了。提示,操作完成后,我们可以去刚才创建的文件夹下看下有没有备份好的驱动,这些就是我们备份好的驱动文件了。等重装完系统后,我们只需点击此电脑下的管理, 点击设备管理器右键菜单,选择更新驱动程序,选择浏览我的电脑已查找驱动程序,选择浏览,找到你刚才驱动文件夹的位置,底下的包括此文件夹,记得勾选起来 之后点击下一步就可以了。又或者继续以管理员身份运行命令提示符,输入 gism online i driver driver d 启动 recurse, 一 键还原。

给大家讲解一下电脑怎么去下载打印机驱动,然后如何安装? 下面我来教一下大家怎么去下载电脑的打印机驱动。我们首先打开浏览器啊,在浏览器搜索方输入三 w 点 h p 点 com, 把网址输进去之后,我们敲一下回车,等待它跳转界面 啊,界面跳转之后呢,我们去选择最上方的支持,支持往下,然后有一个软件与驱动程序下载,我们点进去之后呢,然后页面跳转, 跳转之后呢,然后会呈现一个这个界面,我们选择第一个打印机, 打印机点了之后呢,它会跳转界面,我们在这个页面的搜索栏里输入我们要搜索的打印机型号啊,我们把打印机型号输入进去之后,然后它就会下方显示, 我们直接去选择我们需要对应的型号,点上去之后呢,它的页面就会跳转, 跳转之后呢,就是现在这个界面就是我们要下载驱动的界面了啊,我们把自己需要的驱动,然后点开,我们需要下载里面文件最大的一个 mb 的 驱动点右右方的一个下载,点完之后呢,他在 网页的这个右上角,然后就会出现一个下载的横条啊,我们去等待他走完,然后就下载成功了。 下载成功之后呢,我们就只需要点一个文件夹,然后找到驱动下载好的双击啊,双击点它安装。 安装的时候呢,我们需要把打印机的电源线和数据线都插上啊,一确保,然后他能识别到打印机, 这个是我们把驱动调到了桌面上,然后去安装,然后给大家演示,最方便快捷,能看得清楚。安装的时候呢,我们只需要点击下一步,然后按照视频中的勾选 啊,然后选择这个方式,有 usb 网络连接,还有无线网络,选择你想要连接的,然后。

那下来的话呢,是我们需要第二个掌握的东西,就是我们 pad 啊,这个 request, 那 request 用来干什么呢?用来去啊什么呢?向接口发送请求。哎,所以你会发现,其实我们,比方我们过去啊,去使用工具做接口测试,可能我用到什么 postman 啊, jimmy 啊,是吧?我只会这一个东西就可以了。那今天直播之前我跟大家讲说, 呃,你学习 python 动画,很多人觉得难,难在什么地方?难在一个非常重要的特点,就是你过去可能只需要一个 pos 的 慢,或者只需要一个 gmail, 但是你学 python 的 话,你需要同时掌握很多个, 为啥呢?因为他们各司其职啊,各司其职。那么,呃, python 的 话呢,就是一个对用力的管理说用力啊,比方说这个地方我们就创建用力了啊,这个用力内容很简单,就是一,一加一等于二,二加二等于三。 但是不是说这个框架只能做数据线呢?不是啊,他负责是管理用力。至于这个用力里边你要干什么?你要做接口类的测试,还是做 web 类的测试,还是做性能类的测试?这随你啊, 对吧?所以我们它是一个框架,是一个整体性的一个东西啊。那接下来说,比如说我们有了框架了, 我们是不是就可以去测试一加一是不是等于二这样一个简单的问题了?好,那么既然你能够测试一加一等于二,那你是不是也就能够? 哎,花点心思,我们做一点复杂的事情呢?做什么事情呢?我们向接口发送请求,那么向接口发送请求,我们借助谁呢?我们就借助 request 啊,借助 request。 好, 那么这里面我们就到了这个 request, 那 request 也是一样的啊,大家用这个 paper 去安装就可以了。我这个之前已经安装过了啊,安装过了, 好,那么接下来的重点就是我们怎么样把这个新的一个东西啊?和我们前面那个已有的 python 框架结合起来,就这个地方非常重要啊,非常重要。为什么?就是我们假设, 假设你能够把什么呢?把向,哎,我把这个地方你能够把什么呢?把向接口发送请求这件事情和 ipad 结合起来,就你能够把向接口发送请求这个事儿和测试框架结合起来,你是不是就能够 进行接口优化测试了?好,既然你能够把向接口发送请求这件事情和它框架接起来,你是不是还能做另外一件事情?就是你能够什么呢?哎,去什么呢?哎?去控制什么呢?浏览器 是吧?只要你,你把这个第一第二,你把接口和框架结合起来,那就是接口自动化测试。你如果把浏览器和框架结合起来,那不就什么,那不就是 remote 自动化测试吗?当然你还可以什么呢?哎,你能够把什么把这个控制什么?手机 app 是不是和框架结合起来,你就形成什么 web 自动化测试啊? app 自动化测试了,对吧?所以你会发现就框架这个框架很厉害啊。为什么我们先讲框架,它是一个框架,它是个基础啊,一旦这个基础搭建好了之后呢?你一旦横向扩展,你就不再是了,这个地方我们叫什么?我们叫 什么啊?就叫啊,接口自动化,对不对?接口自动化,那么一旦你将来想要去把它转成什么啊? web 自动化的话,其实你将来想要去把它转成什么啊? web 自动化难不难?非常简单 对不对?因为对你来讲,你只需要实现控制浏览器就可以了。那如果说你将来想要做 ap 自动化测试的话,其实也是一样的, 你只要研究怎么去控制手机就可以了,因为关于自动化本身,你已经掌握了啊,关于测试框架本身啊,你已经掌握了,对吧?所以那么我们今天虽然说我们这里分享的是怎么样去快速的去掌握接口自动化测试,实际上我们啊就是说 把它作为一个,就是把这个内容,把这个第二个环节一改,把它变成怎么样快速掌握外部自动化测试,掌握 a b 自动化测试,掌握性能测试,其实是差不多的啊,差不多的好,那么我们接下来的话呢, 就来看一下这个东西怎么去用啊?怎么去用啊?那这里面我们怎么去用呢?我们在这个里面去用啊,在这个里面去用。那么比方说这里之前我们举了一个例子啊,是这样子的,好,现在我要去做接口测试了,这里面有框架,这里面有用力的啊,那我现在要做一个访问接口的用力怎么做呢?我要把我请求 接口的代码写在什么地方吗?我在这地方吗?啊?不是的啊,不是的,我们前面提到过了,在框架当中一切都以什么为单位啊?都以这个 用力为单位,对不对?所以你要创建一个什么呢?你要创建一个,比如说 test 百度点 com 啊,这个 com 这个有标点符号,我就 test 百度啊,就,你要啥呢?你要创建一个, 创建一个新的用力啊,新的函数,是吧?好,然后你对 request 的 使用,你都把它放在这个函数当中去, 放在这个函数里面去啊,你不要写到外面去啊,你也不要写到别人的用力里面,你就写到你自己里面去啊。所以那么我们的代码,我们说了,有了框架之后,他就有了相应的条条框框啊,你就知道你的代码该放在什么地方了啊,那我们代码写在什么地方呢?写在这个里面啊,写在这个里面。好,那写在这里面,接下来怎么写呢?我们首先导入我们的 request, 那么导入是一个特殊的操作啊,它必须放在所有代码的最上面,所有用力的最外面,所以我们首先呢,哎,导入 request 啊,导入 request, 那 么这个是我们使用第三方库的一个基本操作啊,就是我们做第一件事呢,就是要把它导入进来,为什么呢?因为 python 它支持很多东西, 它支持自动化测试啊,支持这个自动化运维啊,支持这个啊,数据分析啊,图形图像处理,对吧?它支持各种各样的,所以那么你要告诉他你要干啥?所以你要先告诉他说我要用 request 的 这个工具, 我要用这个工具。好,那我用这个工具,那么拍摄你就知道说你要用这个工具,他就把这个工具呢,从一堆的工具箱里面拿出来,放在这个文件里面啊,你就可以在这个文件里面去使用这个工具了。好,那接下来我们就开始写这个,这个调用的快捷一个代码了啊,怎么写呢?我们可以这样去写, 首先啊,我们比方说我们要测试百度啊,那百度的话呢?比方说我们用 get 请求去啊,对它进行请求,对它进行访问,怎么做呢?我们首先调用 request 啊这个库,然后呢调用里面的一个 request 的 方法,好,这是它的 哎,基本用法,这是它的基本用法,也是统一的用法, 统一的用法就后面啊,不管说你要请求哪个接口 啊,不管你要发送什么参数,你要发送什么数据,统一使用这行代码啊,统一使用这行代码,说这行代码的话呢,我们就记住了非常非常的一个啥呢啊,非常非常的 非常非常的简单啊,非常非常简单,就是你不需要记录说很多很多的代码的写法,就之前很多同学说,老师我 python 其实掌握的不是特别好 啊,然后或者说老师这个我虽然说我学了拍摄很久了,但是就很多东西我还是不该怎么写。那么对于 request 来讲,对于接口自动化来讲,我们其实有一个非常好用的工具,就是他可以把他所有的用法都统一了, 哎,不管你请求一个什么样的接口,你放心,他的用法就这样子,他不会变啊,就这样写的。 但是呢,同学可能会焦虑说老师,那么如果说你的写法是一保持不变的,那你怎么去应对不同的 项目,不同的接口,不同的数据,不同的参数呢啊,那么他的怎么去处理呢?就通过他不同的这个啊参数,或者说不同的调用方式啊,来进行实现的。比方说我们去访问百度啊,那么他需要传递几个重要的参数,第一个你要告诉他的请求方法是什么啊?对, 第二个呢,你要告诉他的接口地址是什么啊?比如说 s b b s, 百度点 com, 当然第三个,你可能还需要去告诉他的一些什么呀?啊?他的一些参数是什么啊?比如说 a 等于一啊, b 等于二, 是吧?好,所以你会发现这里面其实啊,我们虽然这里是以百度啊来举例子,但其实呢,你会发现任何一个接口在请求的时候,其实我们都是需要 对接口请求说,都需要对他去提供必要的信息。什么信息呢啊?这个就是我们的叫做 f d d p 的 啊,请求方法啊,请求方法,这是必须要有的啊,任何一个接口都需要这个东西。第二个的话呢,就是我们的接口地址, 接口地址,那第三个呢,就是我们的接口参数,那这里注意了,这个紧急换码和接口地址每一个接口都必须要有啊,所以我们可以理解成什么必填,对不对啊?必填。 那么第三个参数啊,这个就不一定了,因为大家之前访问百度时候好像也没有输入参数啊,说明什么呢?说明参数实际上是一种选填 啊,它是一种选填,而且它的选填,注意它的参数类型其实有很多种啊,这里面写个数字啊,类型是吧?类型 有多种?有很多种,所以我们不一定说传比特啊,我们可能传长音字母串,我们可能传 jason, 我 们可能传锦球头,是吧?我们可能传各种各样的东西,你都可以传啊,都可以传,因为这个都是选填的嘛,类型有很多种,只要前面两个给我盯死了 啊,第一个参数必须传方法,第二个参数必须传它的地址啊,不能错错,不能不传,不能乱传啊,不能传错,这个是必须的,每一个接口都是这样子的啊,这是由协议决定的,是吧?那么这个后面的话呢,它就可能有不同的,比如说有 data 类的参数啊,比如说还有什么呀? 啊?比如说这个有 data 类的参数,对吧?还有什么呀?比如说还有文件类的参数 啊,比如说还有什么自定型,自定引擎,油头,对吧?啊,那这些统一啊,都是什么?都是我们这里说的,他也属于接口菜单数的不同的类型啊,他是选填的啊,就是说不可能说每一个接口吧,装的东西都一模一样啊,那么这里面可能会有些许不同,但是啊,这两个前面我盯死了,他是必填的, 必须要有的啊,那么后面的话呢,可以没有,可以没有啊,或者说不同的接口他后的参数类型可能也是会有很多种的,比如说有的用 data, 有 的用 json, 有 的用文件,有的用头 啊,这个都可以,对吧?但是呢啊,他都属于选填所以这一类啊,这个我们都称之,为什么呢?都称为,都称之为啊参数的类型,所以到时候你根据接口的文档或者根据项目的要求选择合适的那一类啊,就可以了,所以你会发现哦,其实啊,这个写法不就这么写吗? 啊,这么写就可以哦。啊,这么写就可以,对吧?好,那么这里面就说我们给大家去讲这么多,就是想要大家去明白一点,就是你不管是应对什么样的项目的,什么样的接口,你放心啊,这个写法绝对够用了, 绝对够用了,他的区别仅仅是参数的内容不同,他的写法是一模一样的。所以你现在如果说听完北方老师今天今天的分享,你还跟我说老师这个什么代码,我就,就是吧,我一一看就会,我一写就废啊,我闭上眼睛,我不知道该怎么写了,我把视频关掉,我不知道该怎么写了, 那说明什么呢?那说明我就你还是没有掌握他的精髓,他的核心是什么?就是你要以不变应万变,什么东西是不变的,你要抓住,然后根据不变的规律,然后再去应对啊,可能各种各样的不同的场景,明白吧。好,那这个代码其实我们就写完了啊,这个地方就已经 提供了足够的向接口传递参数的内容啊,包括方法、地址和参数就够了。好,那接下来的话呢?我们这个代码其实就已经向 什么呀?已经在向接口发送数据了,当然通过我们发送过去的这个数据是给到了对方,对方可能看到我们看不到,那怎么办?我怎么知道对方有没有收到呢? 按照 hdd 的 协议啊,对方在收到请求之后,必然会给我们一个响应啊,或者必然给我们一个回复,我们把这个回复呢,保存在一个变量当中啊,就可以了。说这个地方 response 表示我们接收对方的回复啊,来,注意啊, 来,同学们注意一个小的细节,说等号的右边这个呢,就是我们的什么,我们接收对方的返回啊,那么等号的左边这一大坨就是干什么呢?就是用来去发送的啊,这个地方我来写一个叫做什么?就是发送请求, 就是发送请求。那这个呢?这个左边这个一小块呢?他在干什么?他在接收响应, 是吧?什么叫请求?什么叫响应?请求就是我们给对方响应,就是对方回复我们啊,接口给我们的回复,所以这个地方就是我们响应对不对?好,那么有了响应以后,我是不是就可以判断了?比如说我们可以 print 啊,这个响应当中他给我们做了什么样的回复呢?我可以知道他的状态码是多少, 那么我可以知道他的这个响应头是什么,然后呢,我也可以知道他的响应的 内容是什么,所以这里面对于接口给我们的回复,其实就是行头正稳,是吧?有这三个那就够了。 那么当然我们接下来就可以做个断言吗?比如说断言什么呢?断言说你给我的状态码呢?啊?正常来讲,我们说状态码应该多少呀?正常来讲的话应该是等于两百啊,两百表示啥呢啊?两百的话呢?表示这个接口请求成功了吗?对不对啊?所以这里面, 然后呢,我们还可以做一个断言,断言什么呢?说里面有百度音,于是弹出点 text 啊,或者说拼音。百度啊,也可以啊,就表示这个返回的是和百度相关内容,对不对?好,那这里面我们在没有写这两行之前,它只是一个简单的脚本啊,它能不能够称之为一个自动化测试用力呢?啊?是不能够称之为用力的啊,因为它的代码很简单,第一个呢,向接口去发送了一些数据, 发送了一些参数,然后得到了一个回复啊。第二部分呢,他把这个得到的接口的回复打印出来了,那么他有没有断言呢?没有断言啊,没有断言就不能够称之为用力啊,尤其在自动化测试当中,断言是 非常非常重要的啊,必须要有断言,所以那么现在我们就有了断言,断言是用来干什么呢?断言就是对结果进行判断的啊,就过去我们在讲课的时候,好多同学就会发现他陷入了一个误区,他以为自动化就是代替我们去做一些事情, 没错啊,但是不完整。那么自动化测试不仅是代替我们啊,点点点代替我们自动的去完成一些动作,他还要代替我们自动的 啊,对你的动作结果进行判断啊,如果你只有这个自动化的操作,没有自动化的判断,那是不够的啊,因为你结果你最终还需要人工干预去参与去判断,那就说明他还是不够自动化是不是?所以断言很重要啊,一定把断言加上。那么当我们有了接口请求,有了这个断言,那基本上来讲, 我们就用力啊,就完整了。那用力完整呢?是把你的用力设计完了,接下来干什么呢?接下来就是执行用力,对不对啊?怎么执行呢?我们前面讲过啊,打开这个终端,然后输入 paytest, 然后按下回车啊,就可以了,那么它就会去帮助我们 啊,帮助我们去执行这个用力,对吧?啊?帮助我们,然后这个时候结果就发生了变化。发生什么变化呢?他说呢,有一个用力是失败的,还有一个用力是成功的啊,那为啥失败呢?因为我们第一个用力就是一等于二吗?有这个事情肯定还是不对的,对不对啊?但是说有一个用力成功了, 哎,那就说明什么?说明我们这个接口请求啊,是没问题的,对吧?啊?接口请求是没问题的。好,那这个时候同学们说,老师,我这里有一个疑问啊,什么疑问呢?就是我们刚才啊,我们是获取了啊,我们向接口发送的数据,然后得到了接口的回复。 呃,我们对接口的回复还进行了判断啊,就是进行了断言,但是同学我们中间在断言之前,我们其实做了一个事情啊,做了一个什么事情?就是我将服务器的回复啊,我打印了出来,对不对?那么我打印出来以后 才对他进行了断言,但是我目前从这个结果上来看,好像我只能够看得到什么啊?我只能够看得到他好像是说有一个用力执行了,然后呢?他到底打印了没有啊?我没有看到他打印了,所以我虽然框架提醒我们说第二个用力通过了, 但实际通过了没有。不知道啊,为什么不知道?因为我们不知道接口它实际上返回了什么,那么这里就产生了一个矛盾,就是我明明写了这三行代码,它为什么不显示呢? 它这个三行到底执行了没执行呢?它是没执行吗?还是执行了之后不显示呢?啊?所以这里面它有一个非常厉害的一个啊,非常厉害的一个东西,就大家可能最开始, 最开始呢啊,不需要掌握的这么深,但是后面的话呢,我们就会用到什么呢?比方说我们讲说我们在学习 test 的 时候呢,有什么一二三四四个层次啊?那第一个层次呢就掌握参数,第二个的话掌握标记,第三个 future, 第四个 hulk, 那 实际上啊,在它的这个 hulk 的 层面就是这个里面,它的这个东西我们称之为天花板,对吧? 在天花板的层面的话呢,我们就知道,其实 paytest 在 执行过程当中将它的标准输入和标准输出进行了拦截捕获,所以呢,你这个地方就看不到你的 print 结果,对不对?我这么说估计没人能听懂,哈哈,是不是因为什么呢?因为这属于天花板啊,没关系, 虽然说我们同学们暂时理解不了天花板这个水平的内容,但是你至少可以理解第一个层次参数啊,参数。那么参数的话呢,我们要学习一个参数,就是我们有一个什么参数呀?就是有一个杠 s 参数,可以什么呢?可以关闭 i o 补货, 关闭 i o 补货啊,也就是说啊,我虽然刚讲那个原理你没听懂,但是呢,我们知道可以通过杠 s 参数呢,可以把那个功能给关掉,把那个功能关掉,你的 print 啊,就可以 这个什么啊就可以正常运行了,对吧?然后我们执行之后,然后再看,你会发现哦,就出现了很多很多内容,对不对啊?出现什么内容呢?同学们别着急,我们细细的来看啊,首先的话呢,我们打印了几个,我们打印了一二三三个啊,所以理论上来说至少他是有三行,第一行的话呢,这个地方两百 就是我们的什么啊?就是我们的状态码啊,就是我们的状态码。那第二个的话呢,大家看到的这个样子像是字典一样的这个内容呢?它实际上就是我们的什么头,所以这里面给大家讲,状态码实际上是一个数字啊,是一个整数, 对不对啊?在拍摄当中它是一个整数的结构。那么这个响应头的话呢?实际上是一个什么啊?实际上是一个啊,字典啊,是一个字典。然后呢?啊,这里面这个 tech 的 话呢,就是后面大家看到这大段大段内容,这个东西是什么啊?这个东西呢?实际上是一个什么东西啊?实际上是一个啊, 字母串,对吧?啊?字母串。但这里又有一个新的问题啊,什么问题呢?就如果接口为我们返回了 jason 啊,所以呢,就如果接口为我们返回了一个 jason 的 方法 啊,这个地方呢,他返回的就是节省啊,所以他为我们接口返回的内容啊,我们在拍摄当中如何去得到和处理和判断呢?啊?就是通过这种方式来进行获取的啊,所以我把这个代码呢,哎,把这个完整的代码哎,我们就可以放到什么,就可以放到我们的这个 笔记里面去啊,放到笔记里面去,那么这里面第一个啊,这个就是我们的获,就是发送请求啊,并且获得响应。这里呢就是把我们的结果 展示出来啊,把我们的结果展示出来。好,那这里面把这个结果展示出来之后呢?同学们再去判断一下啊,看到没有?我们可以看到,比方说我们后面有两个断言,首先断言说状态码等于两百啊,那么你现在你看到了状态码对不对?状态码真的等于等于两百,所以它 测试什么?哎?测试通过,对吧?然后呢我们说它里面的这个,这个这个字母串啊,它里面有保百度的这个内容,我们来搜索一下有没有,有,是吧?啊?有是吧?啊?说明什么呢?说明它确实是有,那么所以呢,它就能够测试通过啊。那我们来举个例子,比方说 我们说这个地方要求它状态码返回两百,然后里面居然很厉害,还有什么?它居然有北繁,有没有呢?没有 啊,没有的情况下,我们的框架会做一个什么样的表现呢?就如果你要去让他去判断某一件事情,这个事情其实是不对的啊,什么叫不对呢?比如说一加一不等于二了,比如说北伐出现到百度了,这是一个不对的结果的话,那么他就会告诉我们这个地方是错的 啊,所以断言他是自动化的,帮助我们对结果进行判断。一定要注意啊,测试和爬虫不一样, 爬虫他只需要自动化操作就可以了,因为爬虫就是自动化加下载数据啊,自动化测试不一样,自动化测试的话呢,就自动化操作加自动化的判断啊,所以断也很重要,对吧?好,我们把这地方改回去,改成一个正确的 啊,改成百度,改成正确的,改成正确的,那你会发现啊,这个第二个用力呢啊,就通过了,对吧?所以这个还是比较友好的啊,比较友好的好,那这里面那么我们其实通过这样一个简单粗暴的例子,是吧?我们就已经大概就知道了说,哎,我们这个什么东西啊?哎?我们这个 啊,我们这个 request, 哎,它是一个怎么样的用法?其实就是在这里面去不断地去传递参数啊,传递根据你的啊,根据你的接口文档, 根据你的业务需求啊,去传递内容,传递完了内容之后呢,把接口的返回值拿出来对它进行判断啊,就可以了啊,就可以了。好,那么这里面如果我们只讲这么多的话,你会发现在你的项目当中其实是有点点吃力的,为啥呢?因为我们在项目当中可能会遇到各种各样的 场景啊,各种各样的场景,所以呢,这里面我们需要去给大家讲一下,你可能会遇到哪些场景,然后这些场景应该怎么样去进行解决。好吧,第一种场景,也就是我们用到的见到的最多的场景叫做表单参数, 我们刚刚是不是提到了,这里面其实有很多种参数类型啊?啊?那么这个 data 呢,就是表单参数,还有一些什么样的参,什么样的场景呢?啊?节省参数,现在呢,我们大部分的接口就是节省参数,所以那你要知道如果你的遇到了一个节省参数的接口,那你应该怎么去处理?当然还有一个 很重要的,就是我们不管是过去和现在啊,都会经常用到的一个接口类型叫什么?就是文件上传,对吧?啊?文件上传,比如说啊,我们不管是因为从 web 二点零的说 啊,就基本上就需要是,呃,用户在用户生成内容了啊,所以呢,你看,不管是抖音也好,快手也好,是吧?京东也好,天猫也好,哪个没有文件上传的功能呢啊?必须要有啊,因为这个地方就涉及到了用户内容生成嘛, 所以这个文件上传啊非常重要的一个功能。那除了文件上传之外呢,我们还有一些,比如说啊接口关联啊,刚才我们前面提到接口关联还有什么呢?还有就是我们说的,哎,参数化测试, 参数化测试啊,参数化测试啊,这是我们要去,呃,可能会就是你在你的实际项目当中啊,可能会遇到的场景啊,不是说你在某一个项目当中会把这一二三四五都会遇到啊?这个不一定 啊,只是说代表说这里面有我们五种常见的场景,可能在你的某一个项目当中可能会用到第一个和第二个 啊,在可能在另外一个项目当中呢,可能用到第二个和第三个啊,可能在另外一个项目当中呢就用到第五个啊,不是说这一个项目当中他一定要覆盖一二三四五啊,只是说呢,我们这里把一二三四五给大家列出来之后呢,同学们啊,将来这个,呃,将来这个就是 你在项目当中遇到这个场景或者遇到这个功能,遇到这个例子的时候,你就知道大家该怎么办了啊,有的说接口封装呢啊,你说接口封装是什么意思 啊?因为封装这两个字代表的含义太多了,是对 pax 的 封装还是对测试测试框架的封装啊?我们到最后的话呢,如果来得及会给大家介绍一些啊,框架级别的封装啊,但是我不知道你说的接口封装是什么意思啊?因为这个封装这两个词太抽象了,它包含内容太多了啊,好,那我们来接下来就通过一些具体的 啊,项目的案例,对吧?来给大家去演示啊,我们遇到这些不同的场景啊,应该怎么去处理?那么这个东西,嗯, 就是一个例子啊,一个例子,同学们,那么听完课之后呢,要能够学习,举一反三,在你的项目当中,可能你遇到也是一个表达参数,只不过他的他的接口地址啊,参数名啊,可能和我们这个今天的不一样,但是没关系啊,你知道啊,什么叫做表达参数,然后呢?在项目当中遇到啊,该怎么去解决啊?就可以了 啊,各种锦绣,比如查询表单,这个就你,你创建一个函数,把它封装起来,就你创建一个函数,然后在函数里面把这些参数都调好了,对吧?然后你调用这个函数不就可以了吗? 对不对啊?你说的这个封装,其实我跟你讲都算不上,是封装都算,因为它属属于函数级的,很初级的封装,因为它仅比那个脚本 啊,就复杂那么一丢丢啊,这个其实不是什么很难,你就创建一些函数吗?比如说啊,你要什么查询商品,那你就创建一个函数,然后把这个查询商品的什么方法地址参数丢进去,然后需要的时候调用这个函数就可以了。然后你要是吧,你要调另一个接口,再再创建一个函数, 这个,这个其实很简单啊,这个这个就太简单,不要把它想的很复杂的啊,我以为你要讲框架的封装,这个很简单啊,面向对象都用不上啊,一个函数就把它搞定了啊,放关心啊,这个问题不大 好。那么先说一下表单参数,表单参数实际上过去主要用在什么地方呢啊?主要用在我们说啊,浏览器的啊,或者 web 项目, web 项目啊,过去主要用在 web 项目当中啊,然后呢?呃,在使用表单参数的时候我们需要注意的一个事情就是注意几个事情吧,第一个呢就是 啊,表单参数啊,参数只能是自控数啊,你传的什么整数也好啊,字典也好,这没用啊,通通会变成自控数啊,这都都会变成自控数。然后第二个的话呢,就是我们在使用这个 啊,这个这个表单参数的时候呢啊,我们要注意几个小细节啊,就是我们可能要去检查一下我们的请求头中 啊,包含什么呢?包含 f o m form 表单啊,这也是为什么它叫表单参数的原因,就是因为在镜头里面包含了这个 form 啊。好,那么我们来通过一个例子啊,来给大家去看一下,好吧,我们这里呢创建一个新的接口,叫做 test e p i。 什么呀?就是 form 来创建一个表单接口的这样的一个啊,全新的一个例子啊,全新的一个例子。 好,然后的话呢我们会在里面去写代码。怎么写代码呢?相信大家应该都比较熟悉了,对不对?怎么做呢?是吧?你首先第一件事情,你要发送请求啊,你要发送接口的请求啊,然后呢我们就调用什么,就 hash 等于什么?等于 request 点 request, 对 吧?然后呢把接口的这个什么相关的信息写进去,比如说接口的, 因为我这个地方直接写嘛,所以如果你你想啊,下次不不不重复的写,那么你就把它定义成一个函数啊,直接调用啊,就可以了啊,比如说这个方法啊,比如我们一般表单一般是用 pos 的 啊,然后也有 get, get 比较少,一般是用 pos 的。 然后呢给他一个什么呢?给他一个? 给他一个接口地址。我们前面说过了啊,这两个参数是必填的,每一个接口都必须要,必须要啊,提供这两个东西。好,这是我们什么呢?这是我们传递第二个 就是接口地址啊,接口地址。好,那第三个,第三个就是来了。第三个来什么呢?就是我们要注意你要把你的数据放进去放在什么地方?如果是 post 请求参数要放在包底当中, 然后呢我们要注意一个什么?注意一个。呃?什么东西啊?啊?就注意一个,注意一个啊,球头啊,注意一个警头啊。所以那么我们来举个例子,比方说我们在 这个 request 当中,我们通过 data 啊,通过 data 来进行啊,参数的传递啊,通过参数的传递,那么我们传递什么参数呢?比方说我们传递一个用户名啊,叫 your name 啊, your name。 然后呢再传递一个什么?再传递一个 什么呀?传递一个,传递一个。传递一个什么?传递一个 password 啊? 啊?我这地方改一下,是吧?这就是我们的参数的内容啊,参数的内容。好,那么现在的话呢?我们刚提到一个说你要有一个啥呀? 啊?应该有一个请求头,对不对啊?应该有一个请求头,但是我这里有没有呢?我这里呢?暂时没有 暂时没有,所以如果我现在有没有请求头呢?没有请求头啊,我们刚刚讲了说你这个有一个注意的点,就是你需要有请求头,但现在我没有,那我没有的话,他应该就报错,是吧?所以我们来写个断言,断言什么呢啊?断言说状态码等于两百 等于两百啊,那这个地方请同学们注意,我其实没有传递请求头,所以这个事应该会什么?他实际上会可能会失败 啊?这个可能会失败,那么我们来运行一下,所以等一下你失败的时候不要慌啊,因为这事本身我们其实就没做到位啊,那报错其实是正常的啊。好,我们来,我们来执行一下啊,我们来执行一下。 好,执行以后呢啊,大家看,这里面有两个用力的失败啊,有两个用力失败,当然我们说前面有已经有一些用力是有问题的,比如说这个用力是有问题的, 是吧?那么我们说这个时候老师我不想执行这个用力了,怎么办呢?来给大家介绍一个非常好玩的技巧,我们通过 mark 标记,对吧?啊?标记用来筛选用力嘛,对吧?比如我这个用力是吧?我把这个用力挑过去了,我说这个用力我不执行了,哎,就主打一个什么呢?主打一个任性,说这两个用力不执行了,那么接下来的话呢?我们重新的去执行,那么那两个用力呢? 啊?他就不会执行,那两个用力他就不会执行,是吧?所以他一共只执行了几个用力呢?一共只执行两一个用力,然后这个用力你看到的错误提示就是完全是属于我们啊,属于我们这个,这个 我们下面这个表单参数的用力啊,表单参数的这个用力的结果了。什么结果呢?就是失败啊,就是失败啊,失败什么呢?大家可以看到他实际的状态吗?是什么 实际的状态嘛?大家看到没有?四百二十二啊?四百二十二,那四百二十二是他的实际结果, 是他实际结果,那么你的两百呢?是他的预期的结果,就是他实际上来讲是你的预期结果和实际结果啊,应该相等,但实际上不相等,那么两百是我们写的,我希望是两百,但实际的呢?实际是这个 啊,四百二十二,说明啥呀?啊?说明我们这个请求成功了没有啊?没有成功,对不对?为什么没有成功啊?就是因为我们没有传递请求头,就是因为我没有传递,因为这个地方我没有传递请求头,那么实际上啊,他就等同于说,呃,等同于告诉他说我这个地方其实不是一个表单 啊,所以这个地方就报错了,对吧?那么接下来我们说,我们如果把这个请求头加上这个 form 表单的这个 form 头的话,那么告诉他我真的是一个表单,那么这个事可能就成功了啊,就可能成功了。那怎么加呢?我们要知道这个地方我们加的请求头叫 content tip 啊, content tip 就是 内容的类型,哎,怎么写 content tip? ctrl tab, ctrl tab 是 个内容的类型,然后它的具体内容类型是什么呢?就是一个 application 啊,然后呢?三 w form, 然后 u r 拷拷拷的啊,这个地方就告诉我们是一个通过表单进行内容编码的这样的一个内容,对吧?好,哎,这个地方还有一个什么地方? word 啊? 好,那这个地方,那就告诉他加了请求头了,加请求头告诉我是什么?我是表单了啊,我是表单的话呢,我们再去执行,那么这个事情可能就 ok 了, 对吧?啊?就可能就用力就通过了,对不对?所以我们就明白说什么叫表单啊?表单他就是将一些字母串通过一种固定的方式来进行编码,并且呢在请求头里面进行声明 啊,你声明说这是一个什么 form 表单啊?这是一个 form 表单,那这种方式可能有点累,因为对于很多同学来讲,说老师这个东西我看不懂啊, 好长,我记不住啊,记住,我可能会写错啊,那怎么办呢?那这里面其实还有另外一个方法,或者说称之为一个技巧,就是我们的 request 它对我们进行了一个封装啊,什么封装呢?这里面我们注意了啊, 上面给大家讲的是什么?哎,上面给大家讲的是基础知识,那么下面这个地方呢,就是一个 request 什么呀? request 的 一个技巧啊,技巧,什么叫技巧呢?就是它不是知识,它只在这个地方啊,能这么用 啊?技巧?什么技巧呢?就是它会把什么呢?如果 啊,如果,如果 data 参数是一个字典,则什么呢?自动将其识别为 表单识别为表单,那并且呢啊,自动添加 球头啊,自动添加球头。所以那你就说我们可能同学们说,老师,我我我知道这个知识啊,我面试的时候我可以跟面试官讲说啊,那我知道这个表单他是一个什么什么东西, 但是你说面试官他会让我去现场把这个球头写出来吗?大概率是不会的,对不对?那我在工作当中需要每次都把这些字母,一个字母字母一个一个的抠出来吗?也大概率也是不会的,是吧?但是那么我们有什么的方式能够便捷的让他帮我们去识别出来 啊?因为这个是个固定的知识吗?那换来任何一个工具也好,是任何一个语言也好,任何一个框架也好,都是一样的东西。既然是一样的重复的,能不能自动的实现?可以啊,咱们实现呢?我们这里讲了,如果比特是一个字典, 哎,我们现在是不是字典?我们现在不是字典,我们是一个什么啊?字符串,对吧?所以如果你想用的话,你要这样用,我们在这里呢创建一个就是 u r info 啊,创建一个什么呀?创建一个字典啊,创建一个字典,然后呢?你这个字典当中呢?把你的参数呢?用字典的方式 啊,用字典的方式来把这个参数准备好啊,比如说我们的 u r name 啊,比如说我们还有一个什么 password, 对 吧?那么这个呢?你看内容是一样的啊,数据内容是一模一样的,没发生变化,但它的形式不一样,之前是字母串,现在是字典,那么我现在是字典了,我就把字典传递过去啊,把字典传递过去,那么前面我们提到说如果, 如果你的数据是一个字典的话,会自动识别,然后自动添加,如果它识别了的话呢?我们需要传递请求头吗?可能就不需要了,对不对?所以我就把它给删掉,把它删掉以后啊,我们来看一下能不能够成功啊,如果删掉就是我没有添加请求头, 那么它也能够成功的话,那就说明它识别正确了,它能够识别,对不对?好,我们来重新试一下, 可不可以啊?没有问题,测试通过,对吧?好,这个事情就过了,所以这就是一个小技巧啊。小技巧?那这是一个技巧,技巧是什么意思呢?就在 request 当中才可以这么做,那如果我们不是在用用 request 的, 比方说我在用什么,我在用普斯曼,用几 meter, 那 么你就要注意检查你的紧球头,好吧。啊,检查你的紧球头,那么这个地方, 呃,这是基础知识啊,这个是在啊 request 当中的一些技巧。好,这是我们的表单的用力啊。表单的用力,那除了表单的用力之外呢?啊?还有啥呀?啊?我把这个放到笔记里面去啊, 除了表单的用力,那个表单用力,前面我们提到了主要用在 web 项目当中,对吧?那么这个的话呢,现在都是什么移动端天下了,对吧?所以现在我们很多的项目它是那种,就是 啊,三端的啊,跨平台的啊,或者说呢,哎,就是移动端的,对吧?那么我们的这个什么呀?我们的这个表单主要用在 web 项目当中啊,然后呢,我们这个节省参数呢?主要用在各类项目中啊,就是如果你是在 浏览器里面 web 项目,那么可能会用表单,但只要你不是 web 项目,比如说你是 app 的 啊,什么小程序的啊,那么很可能就是用节省参数了 啊,为什么呢?因为它不需要去考虑什么 cooking 啊,表单啊这种坑爹的事情啊,那么 jason 在 传递数据的时候,它的效率会比较高啊,比表单要高一点,为什么呢?它可以支持就是 jason, 它是支持多种数据结构的,我们前面提到了,我们说这个里面字幕串参数只能是字幕串啊,是吧?那这里面对吧,它的参数类型 很多啊, jason 的 参数类型是比较多的,这个大家可以课后自己去了解。好吧,那比如说我们可以有字母串啊,有什么整数啊,啊,什么浮点数啊,我们都叫数字是吧?啊,就数字,什么布尔啊,空值啊, 对吧?空值啊,什么数组啊啊,等等等等,好吧,就很多很多,那不是说单纯丢了一个简单的一个啊,字母串,字母串也可以,但是除了字母串之外,其他的东西他也可以,所以现代化的项目其实很多都是用节省参数的啊,都是节省参数。然后呢,我们在上面提到说你的 在表单参数当中呢啊,他可能会包含一个 form 啊,那么在你的节省参数当中的话呢,主要就是包含啊,我想一下,他其实有些地方我们是包含这个, 呃,有些地方其实包含这个,呃, java script 啊,但有些地方的话呢,是包含 jason 的, 这个其实应该问题不大啊,有的叫 application jason 嘛啊?包含 jason 啊,包含 jason。 好, 那这个时候你就没有那个什么什么字母串的问题了,因为它必须是一个 jason 啊,必须是一个 jason, 这就没有什么可以可以讨价还价的地方了啊,因为只有是 jason 的 情况下才能够坚持这么多种数据类型嘛,对不对?好,所以那么我们来, 我们来给大家去演示一下,好吧,啊,这样子,我们还是把刚才那个接口啊,我们复制一份啊,复制一份,那接口换掉了,从表单换成什么了?换成 jason 了, 那么接口地址也换了,换成 jason 了,但是我的参数没有换啊,还是什么呢?这个地方表单的方式传餐。那么同学们想一下,我的接口是一个 jason 的 接口,但你的参数是一个表单的参数,那么它是成功还是失败? 是成功还是失败?那肯定是失败啊,那怎么可能会成功吗?对吧?所以我们来运行一下啊,这个事他肯定就会什么,他肯定就会失败,但是失败你不要紧啊,是我们预期之内的啊,我们心里有数,对不对啊?这个通过这个失败想要告诉大家,其实接口对参数是比较挑的 啊,不是说什么这个好多人以为说我这个地方啊,我只要知道了什么接口的,什么接口的地址,接口的什么参数名,我就可以啊,肆无忌惮的去怼 啊?不是的,那接口人家是调的,人家要根据你的这个看你做的对不对啊,他才会去决定是否接收你。比方说对于一个节省的接口,你传一个表单的参数是吧?那就直接告诉你四二, 四二什么意思啊?啊?你的传餐的这个格式啊,不正确,对吧?好,所以呢,这个地方他就不对,那么这种情况下怎么办呢?这种情况下, 我们从原理上来讲,就是你要把 json 内容直接作为参数内容,同时呢为它去添加请求头,哎,我们又看到请求头了,哎,我们刚刚说了,这个这个表单的请求头实际上是可以什么?实际上是可以添加的,对吧?所以,那么我们 json 请求头可不可以添加呢?也可以啊,所以又学到一个什么呀? 学到一个 request 的 一个,哎,技巧啊,什么技巧呢?就是如果传递 json 数啊,那么就会自动识别,为什么呢 啊?节省的参数类型啊,自动添加请求头,哎,所以这个对我们来讲啊,对我们想要去快速去掌握接口自动化测试来讲,那这个就非常舒服了,你只要传递节省参数啊,传递节省参数就可以了。大家,这个节省参数, 它应该是字典还是字母串?应该是字典还是字母串?思考一下,想一下啊,刚才我们讲说,你在表单当中,如果说你是想要自动去识别,自动添加请求头,它必须是一个字典, 那么这个地方,我如果我是一个 json 的 话, json 参数里面传递的应该是一个字母串还是一个还是一个 json 啊?应该是什么?应该是什么? 不知道是吧?哎,不知道的话,你如果不知道,为了防止是吧面试官进一步的追问,那你就说是字典,为什么呢?因为你前面说的是字典,它字典它才能够识别, 对不对啊?所以这地方你就说字典,这个说字典肯定是不对,但是呢,啊,这个不对呢,就可以避免面试官对你的追问啊,所以虽然说这个你这个地方 这个答案是错的啊,但是呢,因为你确实不知道嘛,啊,那么就避免了进一步的尴尬了啊,好,那这地方呢,我们用 jason 啊去传递这个字典,字典肯定是可以传的啊,只不过呢,字典之外东西也可以传啊。 好,那么这里面把字典传递过去,那么刚才我们是以表单的方式传单,那么你改成接收的话呢,就改成什么?就是叫做接收方式的传单啊,如果你的接口是接收的,你的传单方式是接收的,那么这个时候测试就会什么,哎,测试就会通过,是吧?哎,测试就会通过。所以对我们来讲, 我们要了解的是什么,我们要了解接口有哪些类型,同时我们需要去了解对于路由器来讲,有没有什么技巧啊?如果说他有技巧的话呢?其实这个工作是非常非常简单的,你看我们其实参数的内容都没变, 对吧?这个什么这好东西都都不怎么需要动的,就改一个接口地址,改一个团团方式啊,这事就过去了,是吧?所以这个地方你不要觉得很难啊,但是你必须要面对一点,就是他确实可能会有很多种不同的这种,这种细节需要我们去考虑。那你 怎么考虑啊?我,我可能有些东西我还不知道,哎,有这么多种参数类型,我不知道有这么多种场景,那怎么办?那肯定前提大大大大,前提就是你得先知道啊, 你得先有一个基本的一个知识框架或者知识脉络啊,对不对?然后呢,第二呢,就是你针对不同的脉络,不同的框架,不同的细节,最好是有一个相一相对的这样的一个项目的实操来进行练习。那么练好之后呢,你就会发现啊,这块你掌握了啊, 刚才我们介绍了几种传餐啊,一种是表单的,一种是节省的,这个一般是采用产地数据的,那么还有一个非常非常常用的,非常非常重要的一个场景,是呢,有文件上传, 对吧?比如说你要去啊,你要去发个抖音啊,你是不是得上传一下 啊?或者说你要去报名参加什么考试,是不是把头像也得上传一下?这个很常见啊,这个太常用了,这个功能啊,这个太常用的功了, 那么这个这个啊,文件上传的话呢,我们又要去啊,给大家去补充一些基础知识啊,这个就用,主要用在各种项目类型当中啊。第二个的话呢,它的上传方式啊,其实有两种,有两种, 有两种啊,有两种啊,我直接写那两种吧。第一种的话呢,就叫做什么呢?叫做包底直传,这个其实用的比较少啊,还有种的话就通过表单, 通过表单啊,表单也可以上传文件啊,所以表单不只是说传字幕串啊,他其实可以传传文件啊,然后呢?串串,这里面是,然后这个地方就是不论 啊,不论你用的是表单,就是用 body 直传的方式,还是要用表单的方式,那么一定要注意,要请牛头,因为你不,你如果不告诉你,你要不告诉我你用的哪种方式,我怎么知道是哪种呢?比如说你用 body 直传的,结果我用表单方式进行读取,那不就擦皮了吗? 或者你是用表达的方式进行传递,让我用 body 直传的方式去读取,那么肯定也读取错误了嘛,所以我们也需要请求头啊,请求头需要什么呢?说明使用哪种方式,对吧?啊?所以这地方又到了个请求头的问题,那么请求头,你看我们已经讲这是第几个场景了,第三个场景了, 我们前面的两个场景说这个请求头其实都是可以自动处理的,那么咱们第三个前面两个都自动处理了,第三个我会手动处理吗? 肯定不会啊,对吧?我们主打一个自动化,对不对?所以第三个肯定不会啊,那么这里面他也是什么呢?也是啊,自动的去处理和添加球头的,所以对我们来讲,我们转你了解了基础知识后呢?掌握技巧就可以了啊。掌握技巧, 那么掌握什么印象呢?就是如果你传递的是一个 files 参数,那么会自动地识别为什么文件类型啊?自动识别为什么呢?表单啊,会自动识别为表单 表单文件上传啊,然后呢?自动添加请求头啊,自动添加请求头,所以这块啊,非常的香啊,非常的香,那么我们只要用这个参数名就可以了啊,用这个参数名就可以了。好,那接下来我们来举一个具体的例子啊。啊?上面那个没有补补笔记啊,不好意思,我把这个笔记呢, 我先把这个上一个用力的代码,哎,放在笔记里面去啊,然后接下来我们开始写下一个用力了,写下一个用力了啊,就是文件上传啊,那文件上传我们肯定是吧,我不可能在之前的用力当中去写写代码呀,我就写在一个新的 用力当中啊,创建一个新的用力 upload, 创建一个新的用力,然后这个用力其实也很简单,因为我为什么做了这里做了这么多次,就是想让你知道,其实你看这个接口,它其实很像啊, 接口的用法都是一样的,就是构造参数传递得到接口回复,然后断言啊,所以多次的重复实际上是一个磨练,让你去了解啊这些接口它的规律。好吧?好,接下来我们就是搞一下这个文件上传啊,文件上传的话呢,首先你需要做一件事,就是你要准备一个文件,就非要个 pass, 准备一个文件啊,准备一个文件,那么这里面的话呢,我比如说我准备这个文件,准备一个我们啊之前生成的一个文件啊,一个文件,然后的话呢,我们就是可以发送请求了,怎么发送呢?我们还是跟刚才一样把这个代码呢,就是复制抄一下。哎,为什么?你看就是我做的这个事情啊,实际上是一个演示 啊,是一个演示,你看我其实可以把上一个用力删掉啊,或者说我在上一个用力去改,我没有那么做啊,我创建了一个新的,这是有深意的 啊,有深意的。然后呢,我在写代码时候,我也没有直接去从头开始写,我也是把上一个复制过来啊,也是有深意的,因为我们在过程当中你要养成一个比较好的习惯,明白吧?好,这里的话也是一样,我们复制过来,复制过来,你会发现为什么复制呢?因为他们的结构是一样的啊,发送请求得到结果,并且判断是吧?好,那么 复制过来之后啊,千万要记得一件事,就是复制过来之后,千万千万要记得,要要去改改改内容啊,改内容?改什么内容呢?改这个参数内容啊,首先方法啊,一般来说文件上传表单上传啊,使用 pos 的 那个就不用说了,那文件 肯定不能是用之前的老接口去上传文件,对吧?所以那么你要给它输入新的新的这个接口 啊,输入新的这个接口的,这个这个这个这个什么呀?啊?接口地址啊,这个接口地址的话呢,一般在接口文档当中啊,如果你们之前现在你们公司有接口项目的话,你就知道啊,有一个接口文档,那么在接口文档里面就非常清楚的写出来了接口的方法参数和 地址啊,如果说你没有的话呢,还是那样啊,你可以去啊报名学习我们的这个 vip 课程, vip 课程里面提供了全套的啊,笔记原码视频和项目实战,那么里面就会有什么呢?就会有这个啊,里面就会有这个啊这个文档啊,这个 耳听为虚嘛,我给大家找一下,好吧,给大家找一下啊接口文档,哎,哪去了? 哎,忘了, 哎,好久好久没打开了,因为我基本上其实很多很多东西都是熟了以后都开始都都都自己都快记住了啊。 好,这是我们的一个啊,几个一个接口文档,它是一个网页的形式啊,嗯, 八八八三,哎, 大概长这个网页当中啊,它可能会告诉你说,哎,一个接口的功能, 接口的地址,接口的方法,接口的参数以及啊预期的响应值,对吧?那这里面其实有很多啊,很多一般来讲他可能会有一些比如说市力啊,给一个市力你可以去拿去改,当然还有很多就是那种什么呢啊,还有就是很多就是他会给你一些呃参数的说明啊,比如说 有一个发帖接口,那他会告诉你说有一个发帖发帖接口的话,就告诉你说,你说你需要从上一个或说从某一个接口当中 来获取数据,成为这一次请求的一个参数啊。所以过去好多同学可能说,老师,哎,为什么?你看你,你怎么对吧?你动不动你就改一下,动不动就改一下,这是因为接口文档里面要求的 啊,只不过我能看到文档,我知道文档里面的内容,所以我就,我就这么去改啊,就因为你没看到,所以你说,哎,老师,你这个改的很奇怪,没关系啊,就是你,你们在做项目的时候会有配套的啊,这个,这个像这个文档啊,会有配套的接口,有配套的项目,所以你到时候一看就明白了,接口地址他就就长这个样子啊, 啊?你在实际项目当中你要去考虑这个地址,为什么不需要考虑?你这复制粘贴就完了,什么请求方法,什么?你直接复制粘贴就完了啊?参数名,直接复制粘贴就完了,你要你要注意的是,是吧?参数的值是什么来的啊?参数的值是什么来的?这个参数里面有什么深意,然后接口的返回值, 接口的结果啊,代表什么,对吧?啊?说这个事我们要去注意,像这种什么地址啊,方法呀,名啊,这个参数名啊,那就是一个 ctrl c、 ctrl v 的 问题, 所以这个时候我们为什么呢?我要去改这个接口地址,为啥呢?因为这是另外一个接口,在另外一个接口当中啊,它的地址就长这个样子啊,长这个样子 好,那么长这个样子之后呢,我们接下来就改它的传单方式吧,我们说这个方式,它实际上是一个接收传单,但是我现在是要通过表达的方式上传文件,那上传文件我们前面提到了 request 呢,有一个技巧,就通过 files 来传递啊, files 来进行传递,所以呢,我肯定改成这个样子吧, 对吧?那么这就是改成什么?就是表单上传的啊,表单上传文件的传单方式。那么上传哪个文件呢 啊?再上传那个什么 url 吗?肯定不是,对吧?啊,不是啊,所以呢,这个地方我们还要做一个,哎,小小的修改。做一个什么样的修改呢?就是我们在这里呢,哎,通过这个字典就不能够是那个 url 了,你要重新去写一个字典啊,这个字典呢,就包括了你的一个 file 啊,参数名、 变量名和什么呢?和你的这个啊,文件和你的这个文件内容,那么你这个地方如果直接传 pass 的 话,这个当地方相当于是一个。什么?是一个字母串,是不是你要上传文件还是上传字母串啊?你要上传文件,所以这个地方我们要做一个 open 啊,把这个文件打开,根据这个文件打开,根据这个文件对象啊,然后呢,你把这个文件放进去 啊,把这个文件放进去,就你不能够只传一个字母串啊,一定要把字母串变成字母串对应的那个文件啊,打开打开,得到对象,对象才能进行传递,就比方说我直接啊,我,我这么写,我这么写,肯定错,你信不信? 肯定会失败,为什么呢?因为这是字母串,你上传字母串,上传的不是文件,那么这个事情就不对啊,我们来试一下我们来试一下。这地方肯定就不对, 是吧?报错了吧?啊?报错了吧?啊?这地方对不对啊?这个地方不对,是吧?好,但是我们改一下,我们把它改成文件啊,我把它改成文件以后呢这个事就对了。为什么呢?因为我本来就要上传文件嘛。 啊?我现在把文件打开了,把文件对象传过去了,那么它就啊能够成功了,对吧?好,这里面的它还报错啊,我看下哪哪行报错。呃。报错文件 fills。 哦,不好意思,冒号啊,它这个字典改成什么了?改成逗号是改成了 集合啊,集合不对啊,集合不对。那这是个字典啊,这是个字典,然后这就是字典,那么我改成这个文件他是对的。如果你改成路径啊不对啊,我刚才把一个符号改错了, 所以你看,其实我们在工作当中也有一一部分的这个时间和精力啊,就主要解决什么问题呢?就解决这种什么什么逗号啊,多逗号少逗号的问题,那么这块也是经验,如果你 你有有踩过这些坑,或者说你在课程当中有看过别人怎么踩这个坑,然后这个坑怎么爬出去的,就相当于你攒了这部分经验了吗?啊?那么后面的话呢你就能够避免或者说遇到了,你知道怎么去解决?如果你从来没有做过啊,就是好多同学就是天天就是看视频,从来不动手自己去做啊。那 那很多可能就是别人避免掉的错误,你其实避免不了,因为你没有遇到过呀,所以当有一天你突然遇到的错误的话,你就懵逼了,对不对啊?之前是 pass 啊,这个地方用力是失败的,接口断言啊,失败,失败的四二,然后改成 f, 就 改成文件, 这个上就对了啊,这个文件就上传,上传过去了啊,就成功了。那刚才为什么失败呢?是因为这个地方啊,他这个字典冒号啊,我把它写错了,我改成逗号了,这地方就错了。好,这里面就是一个。什么就是一个啊,非常简单的一个啊,文件上传啊,文件上传。那你会发现老师我们在做这个工作当中有没有去哎?添加请求头呢?没有, 哈哈,是吧,我又没有添加镜头,但是不担心。为什么呢?因为它会自动识别,自动的去添加镜头。我们的断言,通过我们的测试通过我们的断言,其实就足以证明我们这个参数构造的是符合接口要求的。 符合接口要求的,对吧?好,这是文件上传啊,文件上传。那文件上传以后呢,我们再来说一下接口关联吧,因为这几个,你看我们说表单也好,接收也好,文件也好,实际上是什么叫做单接口测试?什么叫单接口测试呢?就是我们只对其中的某一个接口单独对它进行 数据的传递和结果的判断啊。但是其实很多项目,你看我举个例子,比方说我们在接口那里面会看到这样一个接口,那么这个接口的话呢?他和普通的接口看起来也是一样的啊,那么他也会有接口的地址,对吧?有接口的情况也会有些参数,是吧?那么看起来我们只要对这个接口进行请求就 ok 了,但其实 行不行呢?其实不行,因为他这里面有一个参数说的非常清楚,我们必须要从另外的一个接口当中来得到结果。什么意思呢?就是我们这个叫什么?这个叫第七号接口啊,七号接口呢,他需要使用一号接口的结果,也就是说你能不能够 不请求其他接口,只请求七呢?对不起,不行。为啥呢?因为他需要一些依赖数据,那么这个时候我们的七号啊,和我们的这个一号,他们之间是一个什么关系? 那这个时候你发现其实光请求一个接口,单接口已经不行了,因为接口和接口之间他们需要配合呀,是不是单请求一个不行了?那怎么办?那就需要请求多个,那么他们之间是什么关系呢啊?他们实际上就称之为叫依赖关系,对吧? 依赖关系,谁依赖谁啊?七依赖一嘛,对不对啊?为什么一人家是一啊?因为啊,他是别人的前世啊,七依赖一啊,七依赖一,好,那反过来讲,那一和七之间是什么关系呢?叫关联关系,对吧?啊?一啊一 关联谁啊?一关联七,对不对啊?一关联七就搞清楚了吧?啊?这是这样一个关系,所以这里面就是我们经常会提到的就接口关联。那我们在做接口测试的时候,我们说有两个基础的啊,必须掌握的技能啊,如果这两个东西你没掌握了啊,人家就根本不认为你是 会或者不认为你做过接口自动化的啊。哪两个基础知识呢?一个叫做接口关联,一个就是参数化测试,对不对啊?这两个东西只要你你们公司里面实际项目当中啊,啊,只要说你们公司真的说在做接口自动化,一定会用到这两个东西,不可能的,没有例外的 啊,没有例外的,一个是接口关联,一个是数据啊,一个是啊,这个这个这个数据驱动啊,所以这两个呢,就是对,我们好多同学去就是如果你之前你们公司有这个接口自项目啊,有接口自动化测试的这种这种落地,那你就知道我在说什么啊?你觉得这个其实很简单,但是对于很多同学他之前他公司没有,你知道吧? 他公司就是用波斯曼或者 mini 做功能类的这种接口测试啊,或者说有些同学他可能就没有做过接口,可能就纯粹是点点点,就被这几个字就给吓住了。其实很简单啊,其实很简单,非常简单 啊。有些人问说如果什么如果登录接口需要验证码,这个验证码是变化的,不是一个数字,是一个图片,怎么办?那就识别图片吧,现在 ai 这么牛逼,图片都可以生成了,你觉得他识别不了吗? 对不对啊?验证码是一个非常小的问题,当然还有一些验证码,比方说比较高级一点的,比如说滑动的啊,再高级一点的啊,就是环境信任的,还高级一点的行为分析的,那这种情况下啊,不可能就是不太方便用 ai 去破破解的,那就直接就关闭就可以了, 对不对啊?你给他一个后门,比如说什么万能验证码呀,给他一个信任环境啊啊,或者说给他一个,给他一个后门呢,对吧?这个都可以绕过的,这个 就是,呃,接口现在是非常非常普及的一种项目类型嘛,对吧?那验证码也是一个非常非常普及的功能,所以你放心啊,业界有非常多的成熟的解决方案啊,就是你不要想着对抗的角度去看,说老师,这个,这个他妈有验证码,他妈我测不了, 那是人家这个验证码是防外人的,咱自自己人他不防的啊。自己人你,你有很多种方式对他进行处理, ai 怎么识别?对啊,你可以调用 ai 的 接口啊,把图片传过去啊, ai 就 帮你,帮你识别出来里面写的是什么呀?识别率还很高的,接近百分之九十八 啊,就说你可能可能搞搞那么几百次才能错那么几次啊,所以这个成功率非常非常高的啊。好,那这个是什么?这个就是我们说啊,这个啊,文件上传啊,文件上传来,把它放到笔记里面去 啊,接下来讲一个接口关联,讲个接口关联。接口关联这个东西啊,啊,其实很简单啊,其实很简单很简单。