postman接口测试(入门到精通)

 下载: 

postman官方地址
 

测试外部接口:测试被测系统和外部系统之间的接口。(只需要测试正例即可)
测试内部接口:
1.内部接口只提供给内部系统使用。(只需要测试正例即可)
2.内部接口提供给外部系统使用。(测试必须非常全面,正例,各种异常场景,权限控制)

一 接口测试的流程以及用例的设计

1.向开发要接口api文档(没有的话通过抓包工具获取):

熟悉接口业务,接口地址,入参,出参,鉴权码

2.编写接口用例以及评审

思路:

 正例:输入正常入参,接口能够成功返回数据

 反例:

  •   鉴权反例:鉴权为空,鉴权码错误,鉴权码过期。。。
  •  参数反例:参数为空,参数类型异常,参数长度异常。
  •  错误码覆盖:根据业务而定的
  •  其他错误场景:接口黑名单,接口使用次数限制,分页场景

项目名称程序版本
测试环境
用例编号测试接口用例标题请求方式预置条件操作步骤输入数据预期结果优先级数据库结果

二 postman安装,注册,登录

最好要注册,要不然会影响一些功能

步骤:

1.创建项目

 api例子

三 发送get请求和响应页签详解

添加请求

右键--添加请求

 

请求url: 

https://api.thecatapi.com/v1/votes

header

Content-Type:application/json

x-api-key:DEMO-API-KEY

请求页签
Params:get请求传参
Authorization:鉴权
headers:请求头
Body:post请求传参

  • form-data:既可以传键值对参数也可以传文件
  • x-www-form-urlencoded:只能够传键值对参数
  • raw:可以传Text、JavaScript、JSON、HTML、XML
  • binary:把文件以二进制的方式传参

Pre-request Script:请求之前的脚本
Tests:接口请求之后的脚本、断言
Coolies:用于管理cookies信息

 

 响应页签:

Body:接口返回的数据
Pretty:以JSON XML HTML Text不同格式查看返回的数据
Row:以文本的方式查看返回的数据
Preview:以网页的方式查看返回的数据
Cookies:响应的Cookies信息
Headers:响应头
Test Results:断言的结果
200 状态码
OK 状态信息
441ms 响应的时间
743B 响应的字节数

四 发送post请求以及get和post的区别

请求地址:

https://api.thecatapi.com/v1/votes

HEADERS

Content-Type:application/json

x-api-key:DEMO-API-KEY

BODY raw

{"image_id":"39i","sub_id": "my-user-1234","value":4
}

面试题:
get请求和post请求的区别:
1.get请求一般是获取数据,post请求一般是提交数据。
2.post请求比get请求安全。
3.本质区别是传参的方式不一样:

  •     get请求在地址栏后面以?的方式传参,多个参数之间用&分隔。
  •     post请求是在body以表单的方式传参。

以上的问题:
多种环境:开发环境,测试环境,生产环境(两个接口的域名是一样的)
接口关联:需要手动关联(第一个接口返回的token值手动填到第二个接口的参数)
参数需要手动修改(name参数不能与已存在的标签名重复,每次修改需手动修改)

五 Postman的环境变量以及全局变量 

开发环境,测试环境(变量名保持一致,都为ip)

 用双大括号加变量名的方式来取得环境变量的值

send前,选择哪个环境

环境变量:环境变量就是全局变量
全局变量:全局变量是能够在任何接口里面访问的变量
获取环境变量和全局变量的方法:{{变量名}} 

六 接口关联 

1.Json提取器

使用json提取器实现接口关联(只能针对Josn数据

第一个接口:

console.log(responseBody); //打印
//使用json提取器提取id值
//把返回的字符串格式的数据转换成对象的形式。
var result = JSON.parse(responseBody);
//把id设置为全局变量
//pm.globals.set("id", "result.id");pm.globals.set("id", "result[1].id");

第二个接口

{{id}}

2.正则表达式

我用的接口没有 token,可以看下面的部分(十四 Postman的Cookie鉴权和Token鉴权)

使用正则表达式的方式实现接口关联

正则表达式

  • 开始标志位双引号"+正则表达式提取内容+结束标志位双引号"
  • 需要传递获取的值用(.*?)代替
  • 如果提取的内容含有双引号,那么标注位的双引号变为单引号

第一个接口

console.log(responseBody); //打印
//判断当返回结果中包含有id时才通过正则表达式去取值 
if (responseBody.search("image_id")!=-1){//使用正则表达式提取器实现接口关联,match匹配。var result1 = responseBody.match(new RegExp('"image_id":"(.*?)"'));console.log(result1);  //控制端输出结果var result2 = responseBody.match(new RegExp('"image_id":"(.*?)i'));console.log(result2);  //控制端输出结果var result3 = responseBody.match(new RegExp('"image_id":"(.*?)9i'));console.log(result3);  //控制端输出结果//设置为全局变量pm.globals.set("mage_id",result1[1]);}
//业务断言
pm.test("检查响应中包含的值", function () {pm.expect(pm.response.text()).to.include(31102);
});

 第二个接口:

{{mage_id}}

七 Postman内置动态参数以及自定义的动态参数

postman内置动态参数:

{{$timestamp}}  //生成当前时间的时间戳
{{$randomint}}   //生成0-1000之间的随机数
{{$guid}}       //生成速记GUID字符串

1.自定义时间戳参数 

调用变量用{{times}} 

//自定义动态参数时间戳
var times = Date.now();
console.log(times)
//设置为全局变量
pm.globals.set("times", times);

2.随机整数

//随机数
const randomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) +min; 
//打印 
console.log(randomMobile(100000000,999999999));

  3.随机手机号

//随机数
const randomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) +min; 
//随机手机号
var randomMobile = `18${randomInt(100000000,999999999)}`; 
//打印 
console.log(randomMobile);

4.等待时间

有些接口有调用时 2限制,5秒之内只能调用1次。 

const sleep = (milliseconds) => {const start = Date.now();while (Date.now() <= start + milliseconds) {}};//等待2秒sleep(2000)

八 其他接口

1. 上传文件的接口

2. 删除信息接口

3. 更新数据接口

也就是一个增删改查的闭环 

九、断言

常规的六种断言:
Status code:Code is 200 检查返回的状态码是否为200
Resoonse body:Contains String 检查响应中包含指定字符串
Response body:JSON value check 检查响应中其中json的值
Response body:Is equal to a string 检查响应等于一个字符串

Response headers:Content-Type header check 检查是否包含响应头Content-Type
Response time is less than 200ms 检查请求耗时小于200ms

点击右侧可以直接插入断言 

1. 局部断言

 //断言
//状态断言
pm.test("检查返回状态码为200", function () {pm.response.to.have.status(200);
});
//业务断言
pm.test("检查响应中包括id", function () {pm.expect(pm.response.text()).to.include("id");
});
//检查响应头中包含有Content-Type响应头
pm.test("Content-Type is present", function () {pm.response.to.have.header("Content-Type");
});
//检查响应时间少于500ms
pm.test("Response time is less than 200ms", function () {pm.expect(pm.response.responseTime).to.be.below(500);
});

//业务断言
pm.test("检查响应中id值", function () {var jsonData = pm.response.json();pm.expect(jsonData.id).to.eql(31102);
});

 

2. 全局断言

可以把状态断言放到全局断言里

十 postman批量运行测试用例 

 

点击run后,进行设置

run运行

 运行结果:

注意:

在批量运行测试用例时,如果接口中含有需要上传文件的接口,那么需要把文件存放在工作目录下,且允许访问外部工作目录

十一 postman数据驱动之CSV文件和JSON文件的处理

用第一个接口来做数据驱动,也就是说既有正例,又有反例

1. CSV

Postman(接口自动化测试)-CSDN博客

在任意位置新建一个CSV文件

 1.1 修改参数

当数据文件写好之后,第一个要改的地方,参数取数据文件里面的值也是用双大括号来取

1.2 修改断言数据

第二个要改的地方,断言的时候写死的,要改成从数据文件里面取:

或者用apidata01["assert_value"] 

console.log(responseBody); //打印
//使用json提取器提取id值
//把返回的字符串格式的数据转换成对象的形式。
var result = JSON.parse(responseBody);
//把id设置为全局变量
//pm.globals.set("id", "result.id");pm.globals.set("id", "result[1].id");//断言
//状态断言
pm.test("检查返回状态码为200", function () {pm.response.to.have.status(200);
});
//业务断言
pm.test("检查响应中包括id", function () {//pm.expect(pm.response.text()).to.include("id");  修改前pm.expect(pm.response.text()).to.include(apidata01.assert_value);  //修改后
});
//检查响应头中包含有Content-Type响应头
pm.test("Content-Type is present", function () {pm.response.to.have.header("Content-Type");
});
//检查响应时间少于500ms
pm.test("Response time is less than 200ms", function () {pm.expect(pm.response.responseTime).to.be.below(500);
});

 1.3 修改正则表达式

判断当返回结果中包含有id时才通过正则表达式去取值

//判断当返回结果中包含有id时才通过正则表达式去取值 
if (responseBody.search("id")!=-1){//使用正则表达式提取器实现接口关联,match匹配。var result = responseBody.match(new RegExp('"id":"(.*?)"'));console.log(result[1]);  //控制端输出结果//设置为全局变量pm.globals.set("id",result[1]);}
//业务断言
pm.test("检查响应中包括id", function () {//pm.expect(pm.response.text()).to.include("id");  修改前pm.expect(pm.response.text()).to.include(apidata01.vote_id);  //修改后
});

1.4 导入csv文件

哪个接口有用到csv文件,哪个接口就☑️ 

然后运行

2. JSON

新建一个文件data.json 

(mac:终端cd进入要创建文件的路径下,使用touch apidata.json指令即可)

[{"vote_id":"31102","assert_value":"31102"},{"vote_id":"31104","assert_value":"31104"}
]

其他操作都一样 

十二 测试必须带请求头的接口


常见的请求头:
Host 请求的主机地址
Connection 连接方式
Accept 客户端接收到的数据格式
X-Requested-With 异步请求
User-Agent 客服端的用户类型

Referer 来源
Cookie Cookie信息
Content-Type 请求内容的格式

测试接口 

https://www.baidu.com/s?wd=接口测试

如果没有加请求头的话,会发现响应显示有问题(至于哪个请求头是必填的,一般需要自己一个个的试) 

十三 Postman接口Mock Server服务器

mock模拟
后端的接口还没有开发完成,前端的业务需要调用后端的接口。

下图中 2 部分的请求方式(GET)和URL中的 (test)都可以根据实际的需要进行修改

1. 自动生成一个环境变量:

2. 自动生成一个项目和请求

假设前端想要返回的数据如下(前端需要什么数据就填写什么数据)

{“error_code”:0,“msg”:“返回成功”,data:[]}


那就在default里面直接替代掉success,保存再去发送请求的时候就得到了想要的数据

 再次发送效果:

 在浏览器里访问测试下:

十四 Postman的Cookie鉴权和Token鉴权

什么是cookie?
cookie是一小段文本,格式key=value。
cookie鉴权的原理:
1.当客户端第一次访问服务器的时候,那么服务器就会生成Cookie信息,并且在响应头的set-cookie里面把生成的cookie信息发送给客户端。
2.当客户端第N次(N>1)访问服务器的时候,那么客户端就会在请求头的cookie带上cookie信息,从而实现鉴权。

cookie的分类:
会话cookie:保存在内存,当浏览器关闭之后就会自动化清除cookie。
持久cookie:保存在硬盘,浏览器关闭后不会清除,只有当失效时间到了才会自动清除。
F5刷新页面,浏览器按F12, Application->Cookies查看cookie: 

接口一:访问接口

1.访问phpwind论坛首页接口

http://47.107.116.139/phpwind/


 

查看cookies

2.正则表达式提取token值

input type="hidden" name="csrf_token" value="13311087a61defe0"

 正则表达式提取token值,在第二个接口请求参数里面用,实现token关联鉴权。

var result = responseBody.match(new RegExp('name="csrf_token" value="(.*?)"'));console.log(result);
//将 csrf_token设置为全局变量
pm.globals.set("csrf_token", result[1]);

接口二:登录接口

http://47.107.116.139/phpwind/index.php?m=u&c=login&a=dorun 

接口一发送成功后,自动生成3个cookie,接口二带上这3个cookie请求才会成功(接口二的 3 个 cookie默认自动加上)

登录的抓包Header信息:

参数设置:

抓包的 Body部分

结果有success就是成功的! 

十五 postman实现接口的加密和解密

1.目前市面上的加密方式

对称式加密:DES,AES,Base64加密算法

非对称加密:双钥(公钥,私钥,公钥加密私钥解密,私钥加密公钥解密)加密,RSA加密算法

不考虑加密:MD5,SHA1,SHA3

在线JSON校验格式化工具(Be JSON)

1.1 对称式:DES,AES加密解密

加密

解密

 AES和上面的一样

1.2 对称式:Base64加密解密

1.3 非对称:双钥(公钥,私钥)加密,RSA加密算法

对admin进行公钥加密

用私钥进行解密

 1.4 MD5加密解密

一般MD5加密,使用的是 “32 位大写 ”

解密

2. postman如何使用加密解密

市面上所有的加密中,MD5的加密使用是最广泛的

接口说明:

自定义的基于 flask的加密接口

postman中api设置: 

对 username和password进行MD5加密 (在Pre-req中设置)

//poatman的MD5加密的方法
//打印 32 位小写
//var username = CryptoJS.MD5("admin").toString();
//打印 32 位大写
var username = CryptoJS.MD5("admin").toString().toUpperCase();
var password = CryptoJS.MD5("123").toString().toUpperCase();
console.log(username)
console.log(password)
//设置全局变量
pm.globals.get("username",username);
pm.globals.get("password",password);

然后,设置变量

 实际运行接口会不成功,因为是本地接口,这个不重要,主要了解postman的MD5如何加密的即可!

十六 Postman+Newman+Jenkins实现接口测试持续集成

newman和newman-reporter-html下载安装

jenkins下载安装

1. newman

postman是专为接口测试而生,Newman是专为postman而生。newman可以让我们的postman的脚本通过非GUI(命令行)的方式。这样就可以和jenkins集成。

运行命令:newman run
常用参数:
-e 引用环境变量(开发环境/测试环境/生产环境)
-g 引用全局变量
-d 引用数据文件
-n 指定测试用例迭代的次数
-r cli,html,json,junit --reporter-html-export 指定生成HTML的报告

选择一个位置,新建一个名为postman的文件夹

然后

1.1 导出测试用例

导出名称改为test_case.json

1.2 导出生产环境

导出名称改为environment.json

 1.3 导出全局变量

导出名称改为globals.json

1.4 数据文件也存放到postman文件夹中

总的导出文件如下:

1. 5 通过newman运行用例

进入 postman文件夹的路径下

运行

newman run test_case.json -e environment.json -g globals.json -d apidata01.csv -r cli,html,json,junit --reporter-html-export report.html

 在 postman文件夹下,可以看到生成的html报告

用newman-reporter-htmlextra可以导出更漂亮的报告

newman run test_case.json -e environment.json -g globals.json -d apidata01.csv -r cli,htmlextra,json,junit --reporter-HTML-export report.html

或者不需要 json junit也可以

newman run test_case.json -e environment.json -g globals.json -d apidata01.csv -r htmlextra,cli 

不知道是浏览器还是 Mac电脑的问题,我查看的报告也不是很漂亮。。。

2. jenkins插件安装

我用的版本是Jenkins 2.440.2 (jenkins页面右下角可查看)

 2.1 安装HTML Publisher插件/Groovy插件/Startup Trigger插件

安装后可以在“Installed plugins”已安装列表查看 

2.2 安装 newman  和 newman-reporter-html

2.2.1 安装 nodejs plugin

2.2.2 全局管理工具配置

安装 newman和newman-reporter-html

安装成功以后,Global npm packages to install部分的安装内容就可以不填了

查看是否安装成功:

创建Jenkins自由风格项目

  • 构建步骤1:选择Execute NodeJS script
  • 构建步骤2:选择执行shell脚本

步骤 1 

步骤 2

构建结果

newman-reporter-html 安装及验证

 ——————————————————————————————————

3.创建 jenkins项目

3.1 进入 jenkins,新建项目

3.2 回到 jenkins首页,选择上一步创建的项目,进行配置Configure

配置上面导出的文件所在的空间(即 postman文件夹路径)

3.3 构建Execute NodeJS script

3.4 执行windows的批处理命令

构建 Execute windows batch command

macOS构建 Execute shell

newman run test_case.json -e environment.json -g globals.json -d apidata01.csv -r cli,html,json,junit --reporter-html-export report.html

masOS

cd /Users/mac/Documents/study23/postman
newman run test_case.json -e environment.json -g globals.json -d apidata01.csv -r cli,html,json,junit --reporter-html-export report.html

3.5 执行系统的Groovy脚本(目的:报告显示的样式可正常显示)

构建 Execute system Groovy script 

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","")

mac

3.6 生成的HTML报告集成到jenkins

构建后操作 Publish HTML reports

 3.7 项目运行

 保存完成后,回到jenkins首页,posyman项目右键build now:

4. 生成报告

Jenkins内也能查看报告 

5.报错信息

5.1 Groovry报错UnapprovedUsageException

点击批准即可

5.2 HTML Publisher报错java.nio.file.AccessDeniedException: /.file 

 报告的路径设置问题或权限问题

总结


Postman可以用来创建、发送、调试和记录HTTP请求,并且可以自动化测试流程和代码生成,并支持多种HTTP请求方法(GET、POST、PUT、DELETE等)和数据格式(JSON、XML、HTML等)。

因此,我们可以将Postman接口测试定义为通过使用Postman工具来验证API是否能够正确地响应预期的请求并返回正确的响应数据。

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

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

相关文章

AI大模型探索之路-应用篇13:企业AI大模型选型指南

目录 前言 一、概述 二、有哪些主流模型&#xff1f; 三、模型参数怎么选&#xff1f; 四、参数有什么作用&#xff1f; 五、CPU和GPU怎么选&#xff1f; 六、GPU和显卡有什么关系&#xff1f; 七、GPU主流厂商有哪些&#xff1f; 1、NVIDIA芯片怎么选&#xff1f; 2、…

P8602蓝桥杯大臣找路

很久以前&#xff0c;T 王国空前繁荣。为了更好地管理国家&#xff0c;王国修建了大量的快速路&#xff0c;用于连接首都和王国内的各大城市。 为节省经费&#xff0c;T 国的大臣们经过思考&#xff0c;制定了一套优秀的修建方案&#xff0c;使得任何一个大城市都能从首都直接…

政安晨:【深度学习神经网络基础】(八)—— 神经网络评估回归与模拟退火训练

目录 简述 评估回归 模拟退火训练 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 简述 深度学习神经网…

全排列问题

日升时奋斗&#xff0c;日落时自省 目录 1、全排列 2、全排列II 3、子集 4、组合 1、全排列 首先要了解全排列是怎么样的 例如:数组[1,2,3]的全排列&#xff08;全排列就是不同顺序排列方式&#xff09; 例子所有的排列方式如&#xff1a;[1,2,3],[1,3,2],[2,1,3],[2,3…

大话设计模式之享元模式

享元模式是一种结构型设计模式&#xff0c;旨在有效地支持大量细粒度的对象共享&#xff0c;从而减少内存消耗和提高性能。 在享元模式中&#xff0c;对象分为两种&#xff1a;内部状态&#xff08;Intrinsic State&#xff09;和外部状态&#xff08;Extrinsic State&#xf…

初级软件测试常见问题

1.JMeter &#xff08;1&#xff09;在http请求的时候&#xff0c;消息体数据中的数据需要用{}和“”标记起来&#xff0c;变量要用${}括起来。 &#xff08;2&#xff09;在响应断言的时候&#xff0c;要根据测试模式输出的内容来改变测试字段&#xff0c;假如输出错误可以把…

vscode 调试debug gdb vector string等STL容器,指定长度

主要展示2个调试信息&#xff1a; 1. 数组 *tr20&#xff0c;指tr数组的前20个元素 2.Vector *(int(*)[5])a ,指a容器前5个元素&#xff0c;也可以解决1的问题 二维数组 -exec p/d b也可以 附&#xff1a;命令参考 gdb 调试常用命令 - 红旗kernel - 博客园 (cnblogs.com) GD…

书生·浦语大模型开源体系(五)笔记

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

定时器、PWM定时器、UART串口通信

我要成为嵌入式高手之4月15日ARM第八天&#xff01;&#xff01; ———————————————————————————— 定时器 S3C2440A 有 5 个 16 位定时器。其中定时器 0、1、2 和 3 具有脉宽调制&#xff08;PWM&#xff09;功能。定时器 4 是一个无 输出引脚的内部…

部署项目的时候的一些错误

项目打jar包&#xff0c;找不到资源&#xff0c;连接不上数据库 项目打包后无法运行 直接在idea运行可以 解决方法&#xff1a;pom文件中增加&#xff08;配置文件如果是yml&#xff0c;写yml&#xff09; <resources><resource><directory>src/main/java&…

MySQL—MySQL架构

MySQL—MySQL架构 MySQL逻辑架构图如下&#xff1a; Connectors连接器:负责跟客户端建立连接&#xff1b;Management Serveices & Utilities系统管理和控制工具&#xff1b;Connection Pool连接池:管理用户连接&#xff0c;监听并接收连接的请求&#xff0c;转发所有连接的…

使用Scrapy选择器提取豆瓣电影信息,并用正则表达式从介绍详情中获取指定信息

本文同步更新于博主个人博客&#xff1a;blog.buzzchat.top 一、Scrapy框架 1. 介绍 在当今数字化的时代&#xff0c;数据是一种宝贵的资源&#xff0c;而网络爬虫&#xff08;Web Scraping&#xff09;则是获取网络数据的重要工具之一。而在 Python 生态系统中&#xff0c;S…

hadoop编程之部门工资求和

数据集展示 7369SMITHCLERK79021980/12/17800207499ALLENSALESMAN76981981/2/201600300307521WARDSALESMAN76981981/2/221250500307566JONESMANAGER78391981/4/22975207654MARTINSALESMAN76981981/9/2812501400307698BLAKEMANAGER78391981/5/12850307782CLARKMANAGER78391981/…

Rust语言入门第五篇-数据类型

文章目录 数据类型1.标量类型1. 整数类型2.浮点数类型f32 和 f64示例代码注意事项 3.布尔类型4.字符类型 2.复合类型整数类型技术细节1. 检查溢出&#xff08;Checking Overflow&#xff09;2. 溢出时 panic&#xff08;Panic on Overflow&#xff09;3. 使用 Wrapping 模式&am…

hadoop编程之工资序列化排序

数据集展示 7369SMITHCLERK79021980/12/17800207499ALLENSALESMAN76981981/2/201600300307521WARDSALESMAN76981981/2/221250500307566JONESMANAGER78391981/4/22975207654MARTINSALESMAN76981981/9/2812501400307698BLAKEMANAGER78391981/5/12850307782CLARKMANAGER78391981/…

【C语言基础】:预处理详解(二)

文章目录 一、宏和函数的对比二、#和##运算符2.1 #运算符2.2 ##运算符 三、#undef四、命令行定义五、条件编译六、头文件的包含1. 头文件包含的方式2. 嵌套文件包含 上期回顾&#xff1a; 【C语言基础】&#xff1a;预处理详解(一) 一、宏和函数的对比 宏通常被应有于执行简单…

Web前端-JavaScript

黑马程序员JavaWeb开发教程 文章目录 一、js引入方式1、内部脚本2、外部脚本 二、js基础语法1、书写语法&#xff08;1&#xff09;基本语法&#xff08;2&#xff09;输出语句 2、变量&#xff08;1&#xff09;变量&#xff08;2&#xff09;注意事项 3、数据类型、运算符、流…

腾讯云服务器CVM标准型S8实例CPU内存、网络和存储性能测评

腾讯云第八代云服务器标准型S8实例基于全新优化虚拟化平台&#xff0c;CPU采用Intel Emerald Rapids 全新处理器&#xff0c;睿频3.0GHz&#xff0c;内存采用最新DDR5&#xff0c;默认网络优化&#xff0c;最高内网收发能力达4500万pps&#xff0c;最高内网带宽可支持120Gbps。…

java编译过程

java编译器将 java 源文件转换成 class 文件的过程。 &#xff08;1&#xff09;词法分析器 作用&#xff1a;将Java源文件的字符流转变成对应的Token流 每个词法单元&#xff08;token&#xff09;都有一个类型&#xff08;token type&#xff09;和一个值&#xff08;toke…

Ollama教程——使用langchain:ollama与langchain的强强联合

Ollama教程——使用langchain&#xff1a;ollama与langchain的强强联合 简介背景知识ollama简介langchain简介结合使用的重要性 环境搭建安装LangChain安装ollama环境设置 加载文档使用WebBaseLoader加载《奥德赛》 文档处理分割文档 向模型提问构建查询使用文档内容进行查询创…