接口测试 02 -- JMeter入门到实战

news2024/11/18 6:36:56

前言

JM eter毕竟是做压测的工具,自动化这块还是有缺陷。
如果公司做一些简单的接口自动化,可以考虑使用JMeter快速完成,如果想做完善的接口自动化体系,建议还是基于Python来做。
为什么学习接口测试要先从JMeter开始?
工作中,并不是一开始我们就写代码来测接口
只有接口通了,才能开始做接口自动化
即便真的不需要做功能测试,但是做自动化之前,务必要先确保单接口已经调调试通了( JMeter、poastam)

1. JMeter简介及安装

1.1 JMeter的优点

● JMeter是基于Java的开源工具,扩展性强,可自定义开发插件;
● JMeter社区活跃,会定期更新、修改bug、优化功能;
● JMeter学习成本低,提供了方便的图形界面来编辑和开发测试脚本,上手快;
● JMeter可以和很多工具兼容,如Jenkins,方便测试自动化;
● JMeter具有平台无关性,可以轻易在Windows、Linux和macOS上运行。

 1.2 JMeter的安装

① 安装JDK

从官网下载JDK: https://www.oracle.com/cn/java/technologies/download
s/#java8-windows (需要注册)
嫌麻烦的话,可以从这里下:
https://pan.baidu.com/s/15PE5vikEHhma-2rEcjjSzA?pwd=zh57
这是一个其他人帅心善的博主提供的资源,这里借花献佛咯
以下是博主的JDK详细的安装教程:
[ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)_如何安装环境1.8-CSDN博客
或者我的这篇文章中也有介绍JDK安装: pytest -- 进阶使用详解-CSDN博客

② 安装JMeter(windows)

从官网下载JMeter的Binaries版本(可执行的版本),另外一个Source版本是源码,需要自己编译,需注意区别,别下载错了。
官网地址: https://jmeter.apache.org/download_jmeter.cgi

进入官网:点击下载

下载好之后解压文件 -> 运行/bin目录下的 jmeter.bat

即可打开JMeter的图形化界面进行脚本的编写。

建议放在c盘(不用配置环境变量),我尝试了放在D盘,配置环境变量怎么配都启动不了

启动后:会出现左边的cmd,使用过程中不要关闭cmd,关闭了cmd就相当于关闭了jmeter

③ jmeter界面设置

初次启动,界面上的字体小的感人,眼睛快戳瞎了……

界面调整:

中文模式:

但是关掉重启之后,又恢复了一开始那么小的字体、语言又显示成了英文

 找到JMeter的配置文件jmeter.properties,用记事本打开,修改字体设置,找到这两行代码:

前两行默认是注释掉的,把前面的#去掉,最后一行放开并修改后面的数字

jmeter.hidpi.mode=true   #放开
jmeter.hidpi.scale.factor=2.0   #放开
jmeter.hidpi.scale.factor=2.357948  #放开并修改后面的数组

waht?再重新打开还是这么小

然后重新点一下放大,就不需要点很多次,点一次就这么大了

凑合着用吧,目前没找到一次修改配置能够永久性设置的方法

修改语言为中文:配置文件jmeter.properties找到language=这行,改为:下面第一行这样

Preferred GUI language. Comment out to use the JVM default locale's language.
language=zh_CN

#Preferred GUI language. Comment out to use the JVM default locale's language.
#language=en  这是原本的

重新打开,文字显示为中文了

1.3JMeter常用的核心组件介绍

由于JMeter涉及的组件数目很多,据不完全统计至少有110个,而其实只需要掌握 20%的组件就可以完成80%甚至更多的日常工作了,所以接下来我们重点学习使用最频繁的核心组件,只需要优先掌握这10个左右的组件就能应付日常大部分的接口测试工作。
---------------->>>
注意:
(1)所有组件的添加都是通过鼠标右键单击上一层组件的方式选择的。
(2)比较好用的功能是使用鼠标右键单击做启用(enable)或禁用(disable)的切换,对于不想测试的请求可以禁用,而不用删除处理。

Jmeter常用组件的功能

① 测试计划:测试起点,所有组件的容器
② 线程组:代表一定数量的用户
③ 取样器:向服务器发送请求的最小单元
④ 逻辑控制器:结合取样器实现一些复杂的逻辑
⑤ 前置处理器:在请求之前的工作
⑥ 后置处理器:在请求之后的工作
⑦ 断言:判断请求是否成功
⑧ 定时器:负责请求之间的延迟间隔。常用的有固定,高斯,随机
⑨ 配置元件:配置信息
⑩ 监听器:收集结果
------------------->>>
执行顺序:
测试计划 -> 线程组 -> 配置元件 -> 前置处理器 -> 定时器 -> 取样器(请求)-> 后置处理器-> 断言 -> 监听器
作用域:
必须组件:测试计划、线程组、取样器
辅助组件:剩余的
辅助组件作用于父组件,同级组件以及同级组件下的所有子组件

前、后置处理,对应的页面按钮: 


2. 使用jemter接口测试实战

2.1 接口请求分析

目标网站接口信息

以下根据目标网站的注册接口为例:进行接口分析 -> 接口测试

 ● 目标网站域名:http://xxx.com?

 ● 目标网站公共参数

目标网站注册_请求urlapi/user/reg

目标网站注册_请求参数:

参数名
是否必须
类型
默认值
描述
accounts
string
用户名
pwd
string
密码
type
string
类型

公共参数是所有接口都必须带的参数,请求参数对应每个具体接口的参数


接口分析

接口请求四要素

在文档当中找:接口URL、请求方法、请求参数、响应数据

在工作当中:token字段一般是放在对应的请求头(header)

目标网站比较特殊,项目token在url当中(最后面)

目标网站解析:http://xxx.com?

  • s=api/user/login
  • application === app
  • application_client_type=== weixin

根据规则拼凑出一个完整的注册接口:

接口URL : 协议+域名+路径 + 公共参数(用&拼接)

http://xxx.com?s=api/user/reg&application=app&application_client_type=weixin

----------->>>

看到注册接口的请求方式是post,我们第一反应要清楚:

● post请求的请求参数是放在body中的

● body请求参数,与请求头的content-type是一一对应的

body请求数据类型:

那么问题来了:

body的请求数据类型(如上图)有那么多,我们怎么确定是哪一种呢?

● 有些接口文档会注明,它是什么请求类型:那么直接选择即可

● 如果接口文档没写:

        一般默认用form表单提交 (字段相对比较少):x-www-form-urlencoded
        提交需带有对应的图片: from-data
        字段非常多,或者它的数据是{xXXX: XXXX}:raw-json

所有的工具也都是这个规则

得到请求参数(目标网站的body格式josn)

type有手机号、邮箱、自定账号;这里我们使用自定义账号,即username

{accounts":"username",
"pwd":"password",
"type":"username" }

响应数据:

上面我们已经清楚了注册接口的请求url、请求方法、请求参数及body数据类型,根据请求信息,我们就能得到一个请求结果了。

那么根据这个请求,我们期望得到的结果是什么呢?

期望结果:

1. 输入正确的数据:注册成功
2. 输入已经存在的数据:账号已存在测试用例设计

……

这就类似于测试用例设计

请求参数不同数据的组合,得到的对应的结果

考虑正向场景、异常场景,和功能测试的设计思路一致

注册接口测试用例示例 


2.2 单个执行接口测试用例

jmeter执行接口测试用例,详细步骤如下:

① 添加线程组

jmeter属于半自动工具,需要有人的介入,一定数量的用户表示一个【线程组】

右击【测试计划】--> 添加 --> 添加线程组:

② 添加取样器

我们需要做什么?发送一个接口请求:【取样器】

在JMeter中,虽然在取样器的类型中只有HTTP,但是它可以发送HTTPS请求。

要发送HTTPS请求,只需在HTTP请求中指定协议为HTTPS,即在服务器名称或IP地址前加上"https://"前缀。在HTTP请求中,可以使用如下格式的URL来发送HTTPS请求:https://www.example.com 或 https://192.168.0.1。

右键【线程组】右击 --> 添加 --> 选择HTTP请求(我们这里是接口请求属于http) 

 ③ 填写请求信息

上面我们得到的注册接口完整的url是:

http://xxx.com?s=api/user/reg&application=app&application_client_type=weixin

路径从?开始,截图中漏了

④ 添加监听器

添加监听器,是为了方便执行后查看结果

右键接口名 --> 添加 --> 监听器 --> 查看结果树

⑤ 执行接口测试: 

上面截图字打错了,是保存;根据个人需要,也可以不保存 

点击保存后,等1~2秒即出来执行结果:

响应中显示的响应结果,对应这个接口请求的实际结果

测试用例的结果,是我们的期望结果

当然实际工作中,我们不可能一个个点进去,肉眼去确认接口返回的实际结果

那么:我们可以通过添加断言,来看接口的返回是否和我们的期望结果一致

⑤ 添加断言

比如,我就想断言这个注册接口返回的响应josn信息中,msg是否为注册成功

需要对哪个接口进行断言,就右键对应的接口 --> 添加 --> 断言 --> 选择JSON断言

JSON断言中,默认使用的是JOSN path,这个json path填写有一定的规则 

可以先取查看结果树种测试一下,写的对不对,具体见下图备注:

填写断言信息:

重新执行一遍:

查看断言信息、断言失败(只有失败了下面才会显示断言,成功的话不会显示短信信息)

2.3 多个接口执行测试用例

基于上面的注册接口之后,再新建一个登陆接口(即再加一个取样器)

登陆接口请求url:api/user/login

登陆请求参数:与注册一致

jmeter配置原件 

大家可能已经发现了一个问题,就是每增加一个接口,都需要再填一遍HTP请求信息,是不是很麻烦?如果哪天请求的域名变了,那么是不是几十个、几百个接口都得改一遍?那么有没有简单的方法呢?

----------------->>>>

是的,有更简单的方法,就是使用【配置原件】这个功能:

我们的接口是HTTP,那么就选择 HTTP请求默认值 

把域名和协议类型,填在默认请求页面里

下面的注册 和 登陆接口页面中的 域名和协议类型就可以删掉了

重新运行一下:

设置环境变量

根据上面的配置原件使用思路,同理可得:

特别适用于环境切换的修改,比如有测试环境、生产环境,有100个接口

我不需要再两个环境中都去各写100遍接口,只需要加一个【请求默认值】,根据不同环境的域名填写即可

执行哪个环境,就把另一个环境给禁用掉;

比如现在我要在测试环境,把就把生产环境的禁用

禁用后,它的字体颜色就变浅了

设置变量

即用户定义的变量

比如我基于上面测试用例中一个用户名、密码注册好之后,我还需要再次注册账号,那么每换一个不同的账号注册,注册和登陆HTTP请求信息的页面中,都需要取改对应的用户名、密码,是不是也很麻烦?

------->>>

so,偷懒的办法:就是添加一个【用户定义的变量】

定义变量:

在【用户定义的变量】 中定义账号、密码

引用变量:

重新运行一下:可以看到,注册和登陆都成功了

所以:

定义变量,适合请求参数中的某些字段值是经常要变的,就不要固定写死,把它提取出来,放在用户变量里,运行的时候动态来取值引用;

改的时候也只有改一处,其他地方不用动,非常方便


2.4 Jmeter数据驱动测试

数据驱动测试,也叫DDT

--------------->>>>>

例如:上面的excel截图中,一个登陆接口,我们有多种场景需要测试

共同点是:请求URL相同

不同点是:请求参数不同

那么我们能不能把接口数据提取出来?当然可以

再新建一个线程组,可以使用复制黏贴的方式:

选中登陆&注册--ctrl+c  --> 点击测试测试计划  ctrl+v即可

然后把登陆&注册这个case禁用掉:点击登陆&注册 右键 --> 禁用即可

准备数据:

在桌面新建一个文件夹:

这里使用Notepad++这个软件(它不会带任何格式),编写登陆接口的不同测试场景

注意:使用英文逗号,不用加双引号把字符串引起来,jmeter也可以处理

添加配置元件 --> csv

配置csv文件信息

添加循环控制器

因为是一个接口对应4条用例,需要让它循环来执行:

数据驱动tab右键 --> 添加 --> 逻辑控制器  --> 选择‘循环控制器’

注意层级关系:需要让jmeter循环读数据,然后循环进行登录,

所以把数据文件配置、 登陆接口拖到循环控制器的下面

并且在循环控制器中,修改循环次数(根据自己的用例条数,是几条写几)

修改断言

执行测试用例

上面的逐步都配置好了之后,就可以运行用例了

下面三条用例为什么失败了呢?

是因为断言里的预期结果的文案与接口文档中的不一致,需要一致才行

重新修改一下文件中的期望结果文案、重新执行一下,然后全部成功

结果查看--优化

因为上面我们的场景是一个接口对应多条测试用例,当我们运行完之后,没法第一眼就知道哪条结果对应那条用例,所以我们可以在接口名称后面也加一个变量引用:

重新运行一下:查看结果时,清晰明了


2.5 Jmeter接口关联测试

接口关联,可以理解为接口的上下游操作之间的依赖

例如:一个电商平台

1、需要先登陆

2、通过登陆之后选购商品加入到购物车

3、……

=====================================================================

在接口测试中,需要解决的是哪个登录用户的问题,也就是说加入购物车的时候,怎么知道是哪个用户。

鉴别用户身份,通用的方法就是Token(软件中临时身份证号,代表某个具体的账号)

token怎么来的?一般在登陆之后,会在响应数据、或者请求头中

看看上面运行登录接口的接口, token在响应数据的body中

1、需要先登陆:得到token:226795e8cbc5ff159f6befb645b1ee01

2、通过登陆之后选购商品加入到购物车:请求数据需要加上token

3、……

一般token放在head里,但是也有特殊的,是需要直接放在请求url的最后,比如现在这个目标网站就是需要放在url里

=====================================================================

总结来说:

上一个接口的响应数据(token值),作为下一个接口的请求数据(token = token值)

添加后置处理器

前面有了解过,后置处理器,就是处理在请求之后的工作

配置josn提取器

添加下游接口

添加配置信息头管理器

在 JMeter 中,HTTP信息头管理器用于管理 HTTP 请求中的请求头信息。

HTTP 请求头包含了一些关于请求的元数据,例如用户代理、内容类型、授权信息等。

通过使用 HTTP信息头管理器,可以方便地管理这些请求头信息,以便在测试计划中的多个 HTTP请求中重复使用。

具体来说,HTTP信息头管理器可以用于以下几个方面:

  1. 添加通用的请求头信息:可以在 HTTP信息头管理器中添加常用的请求头信息,例如 User-Agent、Accept、Content-Type 等,以便在测试计划中的多个 HTTP请求中重复使用这些信息。

  2. 管理授权信息:可以在 HTTP信息头管理器中添加授权信息,例如 Basic 认证的 Authorization 头部,以便在多个请求中使用相同的授权信息。

  3. 管理自定义的请求头信息:可以在 HTTP信息头管理器中添加自定义的请求头信息,以满足特定的测试需求。

这里,我们添加HTTP信息头管理器的目的:是因为josn格式的body请求信息,需要与请求头当中的 Content-Type一一对应

设置content-type的格式为:application/ison(请求参数格式为josn)

运行接口用例:

接口关联--总结:

1. 上一个接口的响应数据,作为下一个接口的请求数据(比如token)

2. 如果请求参数的数据格式是json,务必要添加配置信息头管理器,设置json格式


2.6 JDBC驱动及数据断言

JMeter中如果要用SQL语句查询数据库,就需要用到JDBC请求和JDBC Connection Configuration了。

也可以作为数据驱动测试的另外一种方式

------------->>>

在测试过程中,对于数据库的操作场景一般有
● 测试数据的制造
● 查询数据用于测试的输入
● 测试完成之后查询数据用于检测结果
● 业务SQL的性能测试

数据库连接JDBC驱动下载

打开MySQL JDBC的下载网站:
https://downloads.mysql.com/archives/cj/,并选择操作系统: Platform Independent。

点击 DOWNLOADS,把页面滚动到最下面,点击 MySQL Community (GPL) Downloads

点击 Connector/J ----进入后选择Platform Independent ---选择zip格式(windows系统选zip)

注意下载驱动的版本要与mysql的版本相匹配,如果驱动版本比msql版本高,可能用不了

点击下载:

下载后,将mysql-connector-java-5.1.48-bin.jar这个文件放到jmeter的bin目录下

Jmeter中关联jar包

点击测试计划 --> 浏览 --> 选中jar包 --> 点击open

必须引用jar包,不然执行会报错

配置连接数据库的配置信息

选择要添加的线程组 --> 添加 --> 配置元件 --> 选择JDBC Connection Configuration

添加JDBC请求配置

JDBC Connection Configuration页面:相当于mysql的链接信息配置 

拉到最下面,把数据库连接的4项信息填上 

Database URL:dbc:mysql://xx域名:3306/数据库地址  (3306是端口号)

添加配置JDBC Request

注意层级关系,把它拖到循环控制器的下面

引用JDBC Connection Configuration中的数据库名字

正常写sql就行 

上面的【HTTP请求默认值】不变(协议、域名),还是使用上面的测试网址信息

【用户定义的变量】,变量信息指明,账号与密码为前面已注册成功的

添加一个【HTTP请求】 ,请求名称使用上面的SQL查询结果变量

【用户定义的变量】中指定了账号与密码的变量,所以使得【JDBC Request】中的查询结果就是查询变量中的账号/密码:

登陆接口基于【JDBC Request】的查询结果,拿到的账号密码执行登录,所以执行成功

这就是为什么登录接口的名称中要引用查询的变量

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

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

相关文章

VS Code + Python + Selenium 自动化测试基础-01

VS Code Python Selenium 自动化测试基础-01 让我们来讲一个故事为什么要写自动化开发前的准备工作牛刀小试开常用的web DriverAPI-定位元素id定位:find_element_by_id()name 定位:find_element_by_name()class 定位:find_element_by_class…

Oracle SQL Developer执行sql脚本文件

文件过于大,无法打开,直接在界面执行。 ①将文件放置到D盘,文件名 daochu5.sql ② 在工具执行SQL界面输入 d:\daochu5.sql;,点击运行按钮运行

范围运算between...and和空判断

目录 between...and 空判断 Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 between...and between...and的主要功能是用户进行范围查询,语法如下: select 字段 | 数值 between 最小值 and 最大值; 1.查询工资在 1500 ~ 3000 的所…

基于JavaWeb+SSM+Vue基于微信小程序生鲜云订单零售系统的设计和实现

基于JavaWebSSMVue基于微信小程序生鲜云订单零售系统的设计和实现 滑到文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 滑到文末获取源码 Lun文目录 目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计…

逻辑运算

目录 AND OR NOT Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 逻辑运算可以保证连接多个条件,连接主要使用 AND、OR 、NOT完成 AND 1.查询职位不是办事员,但是工资低于 300 的员工信息 这个范例可以理…

【GitHub项目推荐--全球首个开源图像识别系统】【转载】

你知道人脸识别、商品识别、车辆识别,以图搜图乃至自动驾驶,背后的技术是什么嘛?并不是图像分类、目标检测这些东西,而是综合使用目标检测、图像分类、度量学习、图像检索的【通用图像识别系统】… 度量学习是啥?图像检…

Postman接口测试高阶——精通Mock Server模拟服务器的创建及使用等

文章目录 一、什么是Mock Server二、为什么使用Mock Server四、Mock Server使用场景五、创建Mock Server模拟服务器1.创建Mock Server2.配置Mock Server3.创建Mock Server模拟服务器成功 六、使用Mock Server模拟服务器七、修改Mock Server模拟服务器配置 一、什么是Mock Serve…

AI跟踪报道第25期-新加坡内哥谈技术-本周AI发展更新-酷炫来袭

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Java毕业设计-基于springboot的学习英语管理系统-第89期

获取源码资料,请移步从戎源码网:从戎源码网_专业的计算机毕业设计网站 项目介绍 基于springbootvue的医院管理系统:前端 vue、bootstrap、coreui,后端 maven、springmvc、spring、mybatis、redis,角色分为管理员、医…

后台管理系统: sku管理模块

完成添加SKU静态组件 完成添加SKU静态组件 点击添加sku&#xff0c;触发回调&#xff0c;场景为2 静态界面完成 <template><div><el-form ref"form" label-width"80px"><el-form-item label"SPU名称"> 海绵宝宝 <…

用红黑树封装实现map与set

红黑树 红黑树 &#xff0c;是一种 二叉搜索树 &#xff0c;但 在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是 Red 或 Black 。 通过对 任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路 径会比其他路径长出俩倍 &#xff…

新品发布 | 多通道总线记录仪TLog1004,是你期待的吗?

新品发布 2024年1月12日&#xff0c;同星智能又发布一款多通道 CAN &#xff08;FD&#xff09;总线、LIN 总线接口logger设备&#xff0c;此款产品在TLog1002基础上进行了升级&#xff0c;同时内置 3 路数字输入和 2 路数字输出&#xff0c;便于多种信号测量和系统集成。可以满…

12- OpenCV:算子(Sobel和Laplance) 和Canny边缘检测 详解

目录 一、Sobel算子 1、卷积应用-图像边缘提取 2、Sobel算子&#xff08;索贝尔算子&#xff09; 3、相关的API&#xff08;代码例子&#xff09; 二、Laplance算子 1、理论 2、API使用&#xff08;代码例子&#xff09; 三、Canny边缘检测 1、Canny算法介绍 2、API使…

Vulnhub-LORD OF THE ROOT: 1.0.1

一、信息收集 端口扫描、发现只开了22端口 连接ssh后提示端口碰撞&#xff1a; 端口敲门是一种通过在一组预先指定的关闭端口上产生连接请求&#xff0c;从外部打开防火墙上的端口的方法。一旦收到正确地连接请求序列&#xff0c;防火墙规则就会被动态修改&#xff0c;以允许…

eNSP学习——配置通过Telnet登陆系统

实验内容&#xff1a; 模拟公司网络场景。R1是机房的设备&#xff0c;办公区与机房不在同一楼层&#xff0c;R2和R3模拟员工主机&#xff0c; 通过交换机S1与R1相连。 为了方便用户的管理&#xff0c;需要在R1上配置Telnet使员工可以在办公区远程管理机房设备。 为…

探究Java中的链表

引言&#xff1a; 在Java编程中&#xff0c;链表是一种常见的数据结构&#xff0c;具有灵活的内存管理和动态的元素插入与删除能力。本篇博客将深入探讨链表的结构和概念&#xff0c;比较链表与顺序表的区别&#xff0c;介绍Java中LinkedList的常用函数并通过示例说明LinkedLis…

2023:既是结束也是开始

2023年注定是不平凡的一年&#xff0c;这一年真的经历了很多事&#xff0c;包括学习、生活、工作等等&#xff0c;上半年忙着毕业以及一些其他的事情&#xff0c;很多挖的坑都没来得及填&#xff0c;下半年研一开学以后终于有了足够的时间学习&#xff0c;接下来就用这篇文章来…

【linux】Debian10.0配置vsftpd

一、基本步骤 在 Debian 10 (Buster) 上要配置 vsftpd (Very Secure FTP Daemon)&#xff0c;请按照以下步骤操作&#xff1a; 1. 安装 vsftpd: sudo apt update sudo apt install vsftpd 2. 在启动配置之前&#xff0c;建议备份原始的配置文件: sudo cp /etc/vsftpd.con…

python解释器多版本设置

当你的项目很多&#xff0c;切python版本不一样时&#xff0c;如何为每个项目设置不同的python解释器版本和虚拟环境&#xff1a; 1、安装pyenv brew install pyenv 配置 Pyenv&#xff1a; 将以下内容添加到你的 shell 配置文件&#xff08;如 ~/.bashrc、~/.zshrc 或 ~/.ba…

【c++】初始c++

1. 什么是C 下图就是我们c的祖师爷 C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&#xff0c; 20世纪80年代&#xff0c; 计算…