一丶软件测试的分类
1.按阶段划分:
a.单元测试 对一个模块的测试
b.集成测试 对多个模块测试(有一定关联)
c.系统测试 在软件编译后执行的整体测试
d.验收测试 对软件执行后的用户体验的测试
α(阿尔法测试) 有一定的开发测试人员的测试 俗说内测
β(贝塔测试) 只有用户参与的测试 俗说公测
2.按是否运行程序划分;
a.静态测试 UI设计图
b.动态测试 有执行代码过程中产生的问题
3.是否查看源代码方式划分;
功能测试 界面 安装 兼容 易用
性能测试 压力测试 负载测试 一般性能 稳定性测试
压力测试 在同一时间内进行多个用户的访问
负载测试 在多个用户在一段时间的持续访问
a.黑盒测试 不看源代码结构 只关心外观和能否输入输出以及响应时间
b.白盒测试 只看代码结构以及代码实现方式
c.灰盒测试 介于黑盒和白盒之间一种
软件测试工具
分为自动化软件测试工具和测试管理(禅道)工具
1 WinRunner
Winrunner 最主要的功能是自动重复执行某一固定的测试过程,它以脚本的形式记录下手工测试的一系列操作,在环境相同的情况下重放,检查其在相同的环境中有无异常的现象或与预期结果不符的地方。可以减少由于人为因素造成结果错误,同时也可以节省测试人员大量测试时间和精力来做别的事情。功能模块主要包括:GUI map、检查点、TSL 脚本编程、批量测试、数据驱动等几部分
2 LoadRunner
商业化-挣钱 性能测试工具 响应时间,CPU,内存,吞吐量....
LoadRunner® 是一种预测系统行为和性能的工业标准级负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner 能够对整个企业架构进行测试。通过使LoadRunner ,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。LoadRunner 是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。LoadRunner 的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来帮助您更快的查找和发现问题。此外,还能支持广范的协议和技术,为您的特殊环境提供特殊的解决方案
3 QTP
QTP是一个B/S系统的自动化功能测试的利器,软件程序测试工具。Mercury的自动化功能测试软件QuickTest Professional ,可以覆盖绝大多数的软件开发技术,简单高效,并具备测试用例可重用的特点。Mercury QuickTest Pro 是一款先进的自动化测试解决方案,用于创建功能和回归测试。它自动捕获、验证和重放用户的交互行为。 Mercury QuickTest Pro为每一个重要软件应用和环境提供功能和回归测试自动化的行业最佳解决方案。
4 TestDirector
测试管理工具
基于WEB的测试管理工具,他能够让你系统地控制整个测试过程,并创建整个测试工作流的框架和基础,使整个测试管理过程变得更为简单和有组织。他能够帮助你维护一个测试工程数据库,并且能够覆盖你的应用程序功能性的各个方面。T并且还为你提供了直观和有效的方式来计划和执行测试集、收集测试结果并分析数据。还专门提供了一个完善的缺陷跟踪系统。并可以同Mercury公司的测试工具、第三方或者自主开发的测试工具、需求和配置管理工具、建模工具的整合功能。你可以通过他进行需求定义、测试计划、测试执行和缺陷跟踪,即整个测试过程的各个阶段
5 Selenium
自动化测试工具 支持java python的脚本 python
自动化--写好脚本,运行脚本,自己执行,自己出测试报告,自己发送到测试和开发邮箱
80%bug 手动测试出来
Selenium是为正在蓬勃发展的web应用开发的一套完整的测试系统。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。它的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建衰退测试检验软件功能和用户需求。支持自动录制动作和自动生成。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可运行于任何支持JavaScript的浏览器上,包括IE、Mozilla Firefox、Chrome、Safari等
6 Appium
自动化测试工具,android和ios软件 手机App app
Appium是一个开源、跨平台的,适用于原生或混合移动应用(hybrid mobile apps)的自动化测试平台。Appium使用WebDriver(JSON wire protocol)驱动安卓和iOS移动应用.Appium的设计哲学是不要为了移动端的自动化测试而重新发明轮子,重新写一套惊天动地的api,也就是说webdriver协议里的api已经够好了,拿来改进一下就可以了另外Appium可以把server放在任意机器上,哪怕是云服务器都可以,所以Appium和WebDriver天生适合做云测试
7 Jmeter
开源,免费,简单,易操作。 开源组织,支持脚本录制,支持抓包测试,支持测试移动端软件压力和负载测试
8 PostMan
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
接口测试的目的是测试接口,尤其是那些与系统相关联的外部接口,测试的重点是要检查数据的交换,传递和控制管理过程,还包括处理的次数。外部接口测试一般是作为系统测试来看待的
接口上传参数的正确性,和服务器返回值的正确性,容错性验证(滴滴),以及安全性检测。
9 抓包测试
包是指数据包.目的是分析包的内容与相关协议,然后衡量是否符合当初的设计或排除故障.
在被测接口并没有明确的接口文档给出时,我们需要借助抓包工具来帮助测试,利用抓包工具我们几乎可以获得接口文档中能给你的一切
Charles,fiddler 抓包工具
抓浏览器,抓手机APP请求
二丶测试用例:
测试用例的特性:
a.代表性:能够代表并覆盖各种合理的和不合理、合法的和不合法的、边界的和越界的以及极限的输入数据、操作等。
b.针对性:对程序中的可能存在的错误有针对性地测试
c.可判定性:测试执行结果的正确性是可判定的,每一个测试用例都应有相应的期望结果
d.可重现性:对同样的测试用例,系统的执行结果应当是相同的。
测试用例的格式,包含那些要素:
编写测试用例的8大要素有:用例编号,所属模块,测试标题,重要级别,前置条件,测试输入,操作步骤,预期结果。以及编写测试用例时的注意事项 。
a.用例编号
由字符和数字组合成的字符串,测试用例编号应该具有唯一性、易识别。
如系统测试的用例编号格式为:产品编号-ST-系统测试项名-系统测试子项名-xxx。(备注:每个公司对于用例书写的规则不尽相同,具体细则还需要参考公司配置命名规范)
b.所属模块
当前测试用例所在的测试大类或被测试需求、被测的模块、被测单元等
f.输入数据
测试用例在执行过程中需要输入的外部数据。依据用例具体情况,通常包含有手工录入、文件、DB记录等。
g.操作步骤
执行当前测试用例需要的操作步骤,通常要明确的给出每个步骤的详细描述,用例执行人员需根据该步骤完成用例执行。
h.预期结果
当前用例的预期输出结果,包括返回值的内容,以及界面的响应结果,输出结果的规则符合度、数据库等存储表中的操作状态等。
测试用例的输入类型:
字母 数字 特殊符号 空字符 汉字
测试用例的样式:
回归测试、冒烟测试、随机测试
回归测试 是指对软件的新版本进行测试时,重复执行上一个版本测试时的用例,比如在1.0版本中,有一个bug,到了2.0版本中,再重新测试1.0中这个bug
冒烟测试 指对一个软件进行系统大规模的测试之前,先验证一下软件的基本功能是否实现,是否具备可测性。
测试小组在正式测试一个新版本之前,先指派一两个测试人员测试一下软件的主要功能,如果没有实现,则打回开发组重新开发,这样做可以节省大量的时间成本和人力成本。
随机测试 是指测试中所有的输入数据都是随机生成的,其目的是模拟用户的真实操作,并发现一些边缘性的错误。
测试计划及测试报告:
1.测试计划的定义:
测试计划,描述了要进行的测试活动的范围、方法、资源和进度的文档;是对整个信息系统应用软件组装测试和确认测试。它确定测试项、被测特性、测试任务、谁执行任务、各种可能的风险。测试计划可以有效预防计划的风险,保障计划的顺利实施。
测试流程:
2 – 较严重的缺陷,例如,软件的某个菜单不起作用或者产生错误的结果;
3 - 软件一般缺陷,例如,本地化软件的某些字符没有翻译或者翻译不准确;
4 - 软件界面的细微缺陷,例如,某个控件没有对齐,某个标点符号丢失等;
2 – 较高优先级,例如,影响软件功能和性能的一般缺陷;
3 -一般优先级,例如,本地化软件的某些字符没有翻译或者翻译不准确的缺陷;
4 – 低优先级,例如,对软件的质量影响非常轻微或出现几率很低的缺陷;
1. 禅道简介:
禅道由青岛易软天创网络科技有限公司开发,国产开源项目管理软件。它集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体,是一款专业的研发项目管理软件,完整覆盖了研发项目管理的核心流程。禅道
官网使用步骤详解:http://www.zentao.net/book/zentaopmshelp/38.html
2.禅道项目管理系统的特点:
第一款完整涵盖产品管理、任务管理、测试管理的开源管理软件,使用一个软件解决项目管理核心问题。
基于国际流行的敏捷管理方式scrum。
B/S Broswer/Server C/S Client/Server 架构,方便部署、使用。
概念简单,容易上手。
开源的项目管理软件,可自由进行定制,修改。
免费的项目管理软件,降低企业的投入成本。
自主的开发框架,预留扩展机制,通过第三方的插件扩展获得更多的功能
3. 禅道系统的功能列表:
1. 产品管理:包括产品、需求、计划、发布、路线图等功能。
2. 项目管理:包括项目、任务、团队、版本、燃尽图等功能。
3. 质量管理:包括bug、测试用例、测试任务、测试结果等功能。
4. 文档管理:包括产品文档库、项目文档库、自定义文档库等功能。
5. 事务管理:包括todo管理,我的任务、我的Bug、我的需求、我的项目等个人事务管理功能。
6. 组织管理:包括部门、用户、分组、权限等功能。
7. 统计功能:丰富的统计表。
8. 搜索功能:强大的搜索,帮助您找到相应的数据。
9. 扩展机制,几乎可以对禅道的任何地方进行扩展。
10. api机制,所见皆API,方便与其他系统集成。
4. 用户角色:
禅道管理软件中,核心的三种角色:产品经理、研发团队和测试团队,这三者之间通过需求进行协作,实现了研发管理中的三权分立。其中产品经理整理需求,研发团队实现任务,测试团队则保障质量,其三者的关系如下图:
2. 禅道的安装
2.1. 双击文件,安装(解压)
2.2查看目录
点击服务:apche可以选择80或88端口,mysql可以选择3306或3308端口
点击访问禅道,页面会自动跳转到禅道的页面。
也可以直接访问http://localhost/zentao/ 管理用户:admin,密码 123456
备注:如果你启动的是88端口,请使用http://localhost:88/zentao来访问。
2.3. 登录
2.4. 登录成功
3. 禅道操作
3.1. 禅道的使用
1.人员管理
2.权限分配
3.产品控制
4.项目控制
5.编写用例
6.提交缺陷(bug)
3.1.1. 人员管理
1.1.1. 添加部门
1.1.2. 添加用户
1.1.3. 添加成功展示效果
4. 使用流程
4.1. 创建产品
在禅道中,产品是一切的核心,所有的东西基本上都是围绕产品展开。那么如何创建第一个产品呢?
- 产品经理登录禅道。
- 进入产品视图。
- 在页面右侧,有“新增产品”选项。
4.点击【新增产品】,出现产品创建的页面。
5.在这个页面中,产品名称和产品代号是必填的。比如,我们创建一个“测试产品”,代号为test。点击保存。
6.添加模块
4.2. 添加需求
添加了产品之后,需要创建一个需求。
所谓需求,就是来描述一件事情,如模板:作为一名<某种类型的用户>,我希望<达成某些目的>,这样可以<开发的价值>。这样的需求,有用户角色,有行为,也有目的和价值所在,非常方便与团队成员进行沟通。
创建需求的步骤如下:
- 产品经理登录禅道。
- 进入产品视图。
- 在页面右侧,有“新增需求”菜单,点击菜单,出现新增需求的页面。
- 需求的创建页面,预计工时和需求名称都为必填项。预计工时,也就是你估计完成这个需求大约多少个小时。
注意:由谁评审,选择不需要评审,这样新创建的需求状态是激活状态。只有激活状态的需求才能关联到项目中,进行开发。
4.3. 创建项目
创建了产品和需求以后,需要创建一个项目,来完成这个需求。在实际的情况中,肯定会有多个需求。那么如何确定一个项目中该做哪些需求呢?应该对需求进行优先级的排列,并根据项目的周期和参与的人手来决定。
创建项目的步骤:
- 项目经理登录禅道。 PM
2.进入项目视图
3.在页面的右侧,有“新增项目”按钮。
4.点击此按钮,进入新增项目页面。
5.项目名称、项目代号、起止日期和团队名称为必填项。
6.访问控制选择“私有项目”。
创建了项目之后,要确定其团队成员。在禅道里面,是通过“团队成员”管理来完成的。
- 进入项目视图之后,点击【设置团队】,出现团队的成员列表。
- 点击下面的团队管理,即可维护团队的成员。
注意:成员在该项目中预计投入的时间。不能按照项目中的成员,每天都是8小时全勤投入来计算。
4.4. 关联需求
项目创建完之后,需要关联要做的需求。
首先,需要关联产品。步骤如下:
- 项目经理登录禅道。
- 进入项目视图。
3.点击【关联产品】按钮。然后点选该项目相关的产品即可。
确定了产品之后,第二个操作就是关联需求。
- 项目经理登录禅道。
- 进入项目视图。
- 点击【关联需求】,出现关联需求的界面。 在关联需求的时候,可以按照优先级进行排序。 (只有审批通过的需求才能在“关联需求”中显示)
4.5. 分解任务
需求确定之后,项目中几个关键的因素都有了。确定的时间,确定的人手,确定的事情,那么接下来就是如何在规定的时间里面,调用团队的成员积极性,完成这些事情。第一步,就是要分解任务。
分解任务的步骤:
- 项目经理进入项目视图。
- 进入需求列表。
- 选择某一个需求,点击【分解任务】。
分解任务的时候,注意确定任务的优先级,还有非常重要的就是任务的最初预计。
当任务分解完后,团队成员领取自己的任务,开始具体的工作。然后每天更新自己所负责的任务,更新其预计时间。
4.6 Bug管理
- 提交Bug
提交Bug的步骤:
a.测试人员进入QA视图。
b.在页面右侧有“创建Bug”按钮。
c.点击【创建Bug】。
d.影响版本和Bug标题为必填项。
e.查看我所创建的bug
2.解决Bug
开发人员针对分配给自己的Bug去解决,解决Bug的步骤:
a.进入我的地盘或QA视图。
b.选择“我的Bug”或“缺陷管理”后,点击【解决】按钮。
c.填写解决方案,如“已解决”,选择解决版本,添加备注。
d.点击【保存】,显示Bug页面。
e.登录测试账号,查看bug
3.激活Bug
针对Bug状态为“已解决”的Bug,如果问题依然存在,则需要重新打开Bug。激活Bug的步骤:
a.进入我的地盘或QA视图。
b.选择“我的Bug”或“缺陷管理”后,点击Bug标题后进入QA视图的缺陷管理中的Bug页面。
c.直接点击【激活】按钮,添加备注。
d.点击【保存】,Bug的状态变为“激活”状态。
4.关闭Bug
针对Bug状态为“已解决”的Bug,如果此时问题不再存在,则此时测试人员需要关闭Bug。关闭Bug的步骤:
a.进入我的地盘或QA视图。
b.选择“我的Bug”或“缺陷管理”后,直接点击操作后的【关闭】按钮。
c.添加备注后,点击【保存】。我的地盘中的“我的Bug”中将不会存在状态为“关闭”的Bug。
4.7. 创建发布
当某一期的项目结束后,如果这一期的版本可以对外发布,此时产品经理的一个职责就是创建一个发布。创建发布的意义在于告知相关部门人员,有新产品上线,可以让相关人员继续开展工作。
创建发布的步骤:
- 产品经理进入产品视图,选择“发布列表”。
- 点击【创建发布】,进入创建发布页面。
- 填写必填项:发布名称、Build和发布日期。
注意:发布的前提是要创建一个Build。
5. 测试团队
5.1. Bug处理
生成bug列表
5.2. 测试用例操作
1.1.1. 修改用例
用例操作
1.1.2. 执行测试用例
1.1.3. 设置第三个测试用例执行失败
1.1.4. 可以直接将执行失败的用例转成bug
Mysql:
网址:https://kdocs.cn/l/shgqzkf9B
MySQL数据类型 含义
char(n) 固定长度,最多255个字符
varchar(n) 固定长度,最多65535个字符
tinytext 可变长度,最多255个字符
text 可变长度,最多65535个字符
mediumtext 可变长度,最多2的24次方-1个字符
longtext 可变长度,最多2的32次方-1个字符
char 和 varchar:
1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以 char 类型存储的字符串末尾不能有空格,varchar 不限于此。
2.char(n) 固定长度,char(4) 不管是存入几个字符,都将占用 4 个字节,varchar 是存入的实际字符数 +1 个字节(n<=255)或2个字节(n>255),所以 varchar(4),存入 3 个字符将占用 4 个字节。
3.char 类型的字符串检索速度要比 varchar 类型的快。
日期时间类型
MySQL数据类型 含义
date 日期 '2008-12-2'
time 时间 '12:25:36'
datetime 日期时间 '2008-12-2 22:06:44'
timestamp 自动存储记录修改时间
数据类型的属性
MySQL关键字 含义
NULL 数据列可包含NULL值
NOT NULL 数据列不允许包含NULL值
DEFAULT 默认值
PRIMARY KEY 主键
AUTO_INCREMENT 自动递增,适用于整数类型
UNSIGNED 无符号
CHARACTER SET name 指定一个字符集
1:使用SHOW语句找出在服务器上当前存在什么数据库:
charles 是在 PC 端常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。除了在做移动开发中调试端口外,Charles 也可以用于分析第三方应用的通讯协议。配合 Charles 的 SSL 功能,Charles 还可以分析 Https 协议。
Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。
Charles 主要的功能包括:
- 截取 Http 和 Https 网络封包。
- 支持重发网络请求,方便后端调试。
- 支持修改网络请求参数。
- 支持网络请求的截获并动态修改。
- 支持模拟慢速网络。
工具导航栏中提供了几种常用工具:
- :清除捕获到的所有请求
- :红点状态说明正在捕获请求,灰色状态说明目前没有捕获请求。
- :灰色状态说明是没有开启网速节流,绿色状态说明开启了网速节流。
- :灰色状态说明是没有开启断点,绿色状态说明开启了断点。
- :编辑修改请求,点击之后可以修改请求的内容。
- :重复发送请求,点击之后选中的请求会被再次发送。
- :验证选中的请求的响应。
- :常用功能,包含了 Tools 菜单中的常用功能。
- :常用设置,包含了 Proxy 菜单中的常用设置。
Charles 主要提供两种查看封包的视图,分别名为 Structure
和 Sequence
。
- Structure: 此视图将网络请求按访问的域名分类。
- Sequence: 此视图将网络请求按访问的时间排序。
使用时可以根据具体的需要在这两种视图之前来回切换。请求多了有些时候会看不过来,Charles 提供了一个简单的 Filter
功能,可以输入关键字来快速筛选出 URL 中带指定关键字的网络请求。
对于某一个具体的网络请求,你可以查看其详细的请求内容和响应内容。如果请求内容是 POST 的表单,Charles 会自动帮你将表单进行分项显示。如果响应内容是 JSON 格式的,那么 Charles 可以自动帮你将 JSON 内容格式化,方便你查看。如果响应内容是图片,那么 Charles 可以显示出图片的预览。
Charles抓包详解
Filter : 过滤,可以输入关键字来快速筛选出 URL 中带指定关键字的网络请求 Overview : 查看这次请求的详细内容,例如耗时详细列车了请求开始时间、结束时间,响应开始时间、结束时间,总耗时、DNS耗时、网络延时等。 对于Size也详细列出了请求头大小、响应头大小、压缩比例等内容。 URL:进行网络请求的链接; Status:当前状态,complete表示请求完成; Responce Code:返回码。不同的接口,不同的请求结果,返回码都不同; Protocol:使用的协议; Method:请求方式,如GET请求,POST请求等; Kept Alive:判断当前是否正在链接(活跃); Content-Type:发送的内容类型,如这里用的是XML文本,以UTF8的方式发送; Client Address:客户端的IP地址; Remote Address:远程服务器的IP; Timing: Request Start Time:请求开始的时间; Request End Time:请求结束的时间; Response Start Time:返回开始的时间; Response End Time : 返回结束的时间; Duration : 总时间; Size: Request Header :请求的头部大小; Response Header:返回的头部大小; Request : 请求发送的大小; Response:返回数据的大小; Total:所有数据大小; Request Compression : 请求压缩; Response Compression : 返回压缩; Request : 查看请求内容(底下的Headers,Query String,Cookies,Raw。) Headers:发送请求的头部信息; Query String : 发送参数列表; Cookies: 浏览器缓存; Raw:发送的原生数据,包括了头部和参数; Reponse : 查看响应内容 Headers:是返回的头部信息; Text:返回信息(除去头部)后的文本; Hex:返回信息的16进制表示; XML:我返回的数据是XML。如果你返回的是JSON,这里就会显示JSON; XML Text:如果你返回JSON,这里会显示JSON Text; Raw:返回的所有原生数据,包括头部; Summary: 查看发送数据的一些简要信息(主机,状态码,数据的类型,header和body大下,加载时间,总时间) Chart: Summary中简要信息以图表形式展示 Notes: 其他信息
抓取移动设备发送的Http请求
先将移动设备连接到Charles客户端。首先在电脑中输入cmd打开命令行窗口,输入ipconfig查看本机连接无线网络的IP地址,这个地址作为移动设备连接Charles客户端的代理地址,
打开Charles客户端,点击Proxy->Proxy Settings菜单,可以设置移动设备连接到Charles的端口(8888),这样移动设备代理配置需要的ip地址和端口号都有了。
打开手机wifi,设置所连接的wifi的代理网络;wifi代理设置为手动,代理的服务器ip填写上一步骤中查看到的电脑ip,端口填写上一步骤提到的charles的服务端口:
注意:移动设备配置之后,第一次通过手机访问手机中的发送请求时,Charles会弹出提示框,提示有设备尝试连接到Charles,是否允许,如果不允许的话,手机发送请求失败,点击Allow允许,这样这个设备的IP地址就会添加到允许列表中,如果错误点击了Deny可以重启Charles会再此提示,或者通过Proxy->Access Control Settings手动添加地址,如果不想每个设备连接Charles都要点击允许的话,可以添加0.0.0.0/0允许所有设备连接到Charles。
Charles是通过将自己设置成代理服务器来完成抓包的,勾选系统代理后,本地系统(如果通过浏览器发送请求)发送出去的请求都能被截取下来。因此,如果想只抓取手机APP发送的请求的话,可以不勾选WindowsProxy选项,这样在测试时就不会被本机Http请求所干扰。
如果想要抓取浏览器发送的请求包,勾选WindowsProxy选项之后还是抓取失败,可能是浏览器没有设置成使用系统的代理服务器,只要设置成使用系统的代理服务器,或者将浏览器的代理服务器设置成127.0.0.1:8888也可以成功。
在抓取手机发送的请求时,有许多请求包是对图片等不需要关注的资源的请求,我们只想对指定目录服务器上发送的请求进行抓取,这时候就可以通过过滤网络包的方式实现。有两种实现方式:
1)选择Proxy->Recording Settings菜单,然后在include栏添加需要抓取包的指定服务器请求协议、地址、端口号,也可以在exclude栏添加不抓取包的地址。在主界面的中部的 Filter 栏中填入需要过滤出来的关键字。例如我们的服务器的地址是:http://blog.csdn.net, 那么只需要在 Filter 栏中填入 csdn 即可。
Jmeter:
Jmeter是什么:
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。JMeter的作用1.能够对HTTP和FTP服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试(通过JDBC)。2.完全的可移植性和100% 纯java。3.完全 Swing 和轻量组件支持(预编译的JAR使用 javax.swing.*)包。4.完全多线程 框架允许通过多个线程并发取样和 通过单独的线程组对不同的功能同时取样。5.精心的GUI设计允许快速操作和更精确的计时。6.缓存和离线分析/回放测试结果。JMeter的高可扩展性1.可链接的取样器允许无限制的测试能力。2.各种负载统计表和可链接的计时器可供选择。3.数据分析和可视化插件提供了很好的可扩展性以及个性化。4.具有提供动态输入到测试的功能(包括Javascript)。5.支持脚本编程的取样器(在1.9.2及以上版本支持BeanShell)。在设计阶段,JMeter能够充当HTTP PROXY(代理)来记录IE/NETSCAPE的HTTP请求,也可以记录apache等WebServer的log文件来重现HTTP流量。当这些HTTP客户端请求被记录以后,测试运行时可以方便的设置重复次数和并发度(线程数)来产生巨大的流量。JMeter还提供可视化组件以及报表工具把量服务器在不同压力下的性能展现出来。相比其他HTTP测试工具,JMeter最主要的特点在于扩展性强。JMeter能够自动扫描其lib/ext子目录下.jar文件中的插件,并且将其装载到内存,让用户通过不同的菜单调用。1、Label: 定义的HTTP请求名称2、Samples: 表示这次测试中一共发出了多少个请求3、Average: 访问页面的平均响应时间4、Min: 访问页面的最小响应时间5、Max: 访问页面的最大响应时间6、Error%: 错误的请求的数量/请求的总数7、Throughput:每秒完成的请求数8、KB/Sec: 每秒从服务器端接收到的数据量主要组件介绍
(1)测试计划(Test Plan)
是使用JMeter进行测试的起点,它是其它JMeter测试元件的容器。
(2)线程组(Thread Group)
代表一定数量的并发用户,它可以用来模拟并发用户发送请求。
(3)取样器(sampler)
定义实际的请求内容,被线程组包含,我们主要用HTTP请求。
(4)监听器(Listener)
负责收集测试结果,同时也被告知了结果显示的方式。我们常用的包括:聚合报告、察看结果树、用表格查看结果,都支持将结果数据写入文件。其他的添加上去看看就行。
(5)逻辑控制器(Logic Controller)
可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
其分为循环控制器和事务控制器。
(6)断言(Assertions)
可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。
(7)配置元件(Config Element)
维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。我们主要在参数化中用到CSV Data Set Config。
(8)前置处理器(Pre Processors)和后置处理器(Post Processors)
负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。我们主要在动态关联中用到后置处理器的正则表达式提取器。
(9)定时器(Timer)
负责定义请求之间的延迟间隔。
3.三种脚本生成方式
方式一:直接导入 Badboy所录制脚本
在前面的文章我们讲解了使用badboy进行脚本录制,这里可以直接将其导入到Jmeter中。具体补步骤如下:
(1)打开JMeter会有一个默认的测试计划,点击文件->打开,选中录制的脚本文件如:Baidu_login.jmx,打开脚本进行测试。
(2)在线程组(Thread Group)上添加 监听器->聚合报告(用于分析测试结果)后,点击 运行-启动,开始测试,测试完毕后在聚合报告中就可以看到测试结果。一个简单的测试计划就完成了。
方式二:手动编写测试样例
(1)在测试计划中先添加一个线程组,然后在该线程组中加入http请求模块。可以在sampler中看到,Jmeter还能测试数据库连接查询压力,FTP连接压力等。
(2)编写测试请求。
(3)添加监听等。
(4)设置线程并发量。
(5)点击运行,查看运行结果,进行分析。
即300个并发量中,平均时间是17074毫秒,中间段发出的的请求耗时18891毫秒,末尾百分之90处发出的请求耗时25575毫秒。整个测试过程中,最小耗时为2616毫秒,最大耗时为26911毫秒。
Jmeter主要组件介绍
1.测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。
2.线程组:代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的请求内容在Sampler中定义,它被线程组包含。可以在“测试计划->添加->线程组”来建立它,然后在线程组面板里有几个输入栏:线程数、Ramp-Up Period(in seconds)、循环次数,其中Ramp-Up Period(in seconds)表示在这时间内创建完所有的线程。如有8个线程,Ramp-Up = 200秒,那么线程的启动时间间隔为200/8=25秒,这样的好处是:一开始不会对服务器有太大的负载。线程组是为模拟并发负载而设计。
3、取样器(Sampler):模拟各种请求。所有实际的测试任务都由取样器承担,存在很多种请求。如:HTTP 、ftp请求等等。
4、监听器:负责收集测试结果,同时也被告知了结果显示的方式。功能是对取样器的请求结果显示、统计一些数据(吞吐量、KB/S……)等。
6、断言:用于来判断请求响应的结果是否如用户所期望,是否正确。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。
7、定时器:负责定义请求(线程)之间的延迟间隔,模拟对服务器的连续请求。
5、逻辑控制器:允许自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
8. 配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。
9. 前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。
添加HTTP接口测试
我们的所以工具都会在Jmeter工具中完成,接来就按照一般步骤来创建一个HTTP接口测试。
如上图,右键点击“测试计划”-->“添加”-->“Threads(Users)”-->“线程组”。
如上图,设置线程组,线程组主要包含三个参数:线程数、准备时长(Ramp-Up Period(in seconds))、循环次数。
线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
准备时长: 设置的虚拟用户数全部启动的时长。如果线程数为20 ,准备时长为10(秒) ,那么需要10秒钟启动20个线程。也就是平均每秒启动2个线程。
循环次数:每个线程发送请求的个数。如果线程数为20 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,直到手动点击工具栏上的停止按钮,或者设置的线程时间结束。
因为这里要做接口测试,所以各个参数为均1。
如上图,右键点击“线程组”-->“添加”-->“Sampler”-->“HTTP请求”。
名称:本属性用于标识一个取样器,建议使用一个有意义的名称。
注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。
服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址。
端口号:目标服务器的端口号,默认值为80 。
协议:向目标服务器发送HTTP请求时的协议,可以是HTTP或者是HTTPS ,默认值为http 。
方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
Content encoding :内容的编码方式,默认值为iso8859
路径:目标URL路径(不包括服务器地址和端口)
自动重定向:如果选中该选项,当发送HTTP请求后得到的响应是302/301时,JMeter 自动重定向到新的页面。
Use keep Alive : 当该选项被选中时,jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信,默认选中。
Use multipart/from-data for HTTP POST :当发送HTTP POST 请求时,使用Use multipart/from-data方法发送,默认不选中。
同请求一起发送参数 : 在请求中发送URL参数,对于带参数的URL ,jmeter提供了一个简单的对参数化的方法。用户可以将URL中所有参数设置在本表中,表中的每一行是一个参数值对(对应RUL中的 名称1=值1)。
如上图,右键点击“线程组”-->“添加”-->“监听器”-->“察看结果树”。
二、添加新的POST请求
POST请求的添加方式与前面GET请求一样。不过POST请求需要设置参数。
服务器名称或IP: 127.0.0.1
端口号:8000
方法:POST
路径:/polls/question_vote/
同请求一起发送参数:
点击“添加”按钮,添加POST请求的参数。
名称:
值
qid
1
cid
1
执行测试:
选择菜单栏“运行”-->“清除”,或者点击工具栏清除按钮。然后重新执行启动测试。并查看结果树。
JMeter连接mysql操作:
首先要导入jar包:
1.Test Plan中添加mysql-connector-java-5.1.25-bin.jar包;
2.Test Plan下添加线程组,在线程下添加配置元件-JDBC Connection Configuration,进行数据库的连接配置;
3.Test Plan下添加线程组,在线程下添加取样器-JDBC Request,Query区域编写sql脚本;
4.线程组下添加监听器-查看结果树,运行后查看实际结果。
下载完成后放到JMeter的libext目录下,如图1
2.JMeter中,在线程组下右键添加 - 配置元件 - JDBC Connection Configuration
3.查看JDBC Connection Configuration页面配置信息,设置数据库配置项,如下图
(1)Variable Name for created pool:创建的变量名(JDBC Request可调用)
(2)Database URL:格式为jdbc:mysql:// 数据库IP地址:数据库端口/数据库名称
(3)JDBC Driver class:下拉选项形式,这里选择com.mysql.jdbc.Driver
(4)Username:需要连接数据库的用户名
(5)Password:需要连接数据库的密码
4.线程组上右键添加 - 取样器 - JDBC Request
JDBC Request页面,Query区域编写SQL脚本
5.添加查看结果树,运行后进行结果查看
写到这里,说明已经完成了JMeter与数据库连接操作,并对数据库进行了查询操作。
附:
(1)向数据库中插入数据
数据库表中查询结果:没有202004301300@qq.com用户数据;
通过JDBC Request请求进行添加数据操作。
由于是向数据库进行插入操作,所以Query Type应选择“Update Statement”,如下图
运行后,查看结果树中显示1 updates
我们到数据库中重新查询,发现已成功插入一条用户数据
Linux简介:
Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。伴随着互联网的发展,Linux得到了来自全世界软件爱好者、组织、公司的支持。它除了在服务器方面保持着强劲的发展势头以外,在个人电脑、嵌入式系统上都有着长足的进步。使用者不仅可以直观地获取该操作系统的实现机制,而且可以根据自身的需要来修改完善Linux,使其最大化地适应用户的需要。Linux不仅系统性能稳定,而且是开源软件。其核心防火墙组件性能高效、配置简单,保证了系统的安全。在很多企业网络中,为了追求速度和安全,Linux不仅仅是被网络运维人员当作服务器使用,Linux既可以当作服务器,又可以当作网络防火墙是Linux的 一大亮点。Linux 具有开放源码、没有版权、技术社区用户多等特点 ,开放源码使得用户可以自由裁剪,灵活性高,功能强大,成本低。尤其系统中内嵌网络协议栈 ,经过适当的配置就可实现路由器的功能。这些特点使得Linux成为开发路由交换设备的理想开发平台。常用命令:Ls /
展示当前目录下的所有文件
Etc 用来存放配置文件和子目录
Var 存放日志以及线程程序
Bin /user/sbin 系统用户使用的命令
对文件的基本操作
Cd .. 进入上一曾目录
Cd ../ 进入根目录
Cd bin 进入bin目录下bin可以更换为任意的文件夹
Ls 展示所有的文件下的子文件夹和子文件
Ls -l 显示文件的属性以及文件所属的用户和组
L rwx rwx rwx
0 123 456 789
下标为0的时候代表的是 确定文件里欸选哪个
下标为123 确定文件的所属 拥有该文件的权限
下标为456 确定属性组 所有有权限的用户组
下标789 其他用户拥有该文件的权限
0 有的字母为 d - l b c
D 是一个目录 - 是一个文件 l 链接文档 b 装置文件c 穿行端口设备
后面3位制
R 读
W 写
X 执行
- 权限
屏幕清空 clear
更改文件的属性
- chgrp 更改文件的属组
Mkdir -p test2 创建文件夹
rmdir test2 删除文件夹
Cd.. 上一级目录
Cd../ 根目录
Cd~ 根目录
Cp 选项 来源文件 复制到地址文件
Pwd 显示目前的目录
Rm 移除文件或者是目录 -f - i -r 忽略不存在的文件 互动模式 递归删除
Mv 移动文件或者是目录 -f - i -u 文件已经存在直接覆盖 询问是否覆盖 文件升级
Vi 编辑文件
I insert输入
:wq: 退出编辑
文件查看内容
Cat 由第一行显示内容
Cat -a -b(显示行号) -e -n(显示行号 空行也占一行) -v显示特殊字符的
Tail 查看文件的后面几行
-n -f
Less 文件名
f 下一页
回车 换行
Q 推出
添加用户账号 useradd
Useradd ** 用户名
** -g 用户组
-u 用户号
-d 指定用户住目录
-s shell文件 指定用户登录shell
Linux的磁盘分区的 fdisk
查看的 df du
格式化盘符 mkfs
Vi 进行编辑 命令模式 command mode
输入模式 insert mode
底线模式 LastLine mode
使用shell脚本的方式
- 在Linux下进行创建文件 后缀名位 .sh
- 编辑创建的好的文件
- Chmod +x /文件路径
- 执行编译的命令
常用命令:
runlevel 查看当前的运行级别 systemctl status firewalld 开启网络服务功能 stop 关闭 restart 重启 reload 重载 reboot 关机 poweroff 关机 查看文件常用指令
cat 在命令提示符下查看文件内容 more 在命令提示符中分页查看文件内容 less 命令行中查看文件可以上下翻页反复浏览 head 命令行中查看文件头几行 tail 命令行中查看文件尾几行 wc 统计文件的单词数 行数等信息 chgrp 更改文件的属性
Cat -a -b 显示行号 -e -n 显示行号,空行也占一行 -v 显示特殊字符 L rwx rwx rwx 0 123 456 789 下标为0的时候代表的是 确定文件里欸选哪个 下标为123 确定文件的所属 拥有该文件的权限 下标为456 确定属性组 所有有权限的用户组 下标789 其他用户拥有该文件的权限 0 有的字母为 d - l b c D 是一个目录 - 是一个文件 l 链接文档 b 装置文件 c 穿行端口设备 R 读 W 写 X 执行 - 权限
目录管理常用指令
pwd 查看你当前所在的目录 cd 切换目录 ls 查看显示目录的内容 du 统计目录和文件空间的占用情况 mkdir 创建新目录 rmdir 删除空目录 touch 创建文件 rm 删除文件 ln 创建硬链接 ln -s 创建软链接 cp 复制文件或目录 mv 移动文件或目录 which 查看linux命令所在的目录 Vi 编辑文件 mkfs 格式化盘符
Rm -f 忽略不存在的文件 -i 互动模式 -r 递归删除 Mv -f 文件已经存在直接覆盖 -i 询问是否覆盖 -u 文件升级 Vi i 输入 :wq 退出编辑 命令模式 command mode 输入模式 insert mode 底线模式 LastLine mode
账号与权限
组管理 groupadd group_name 创建一个新用户组 groupdel group_name 删除一个用户组 groupmod -n new_group_name old_group_name 重命名一个用户组
用户管理 useradd zhangsan 创建账户张三 passwd zhangsan 给用户设置密码 userdel -r zhangsan 删除张三及他的宿主目录
用户组管理 gpasswd -a zhangsan root 将张三用户加入root组 groups zhangsan 确认zhangsan用户在root组 gpasswd -d lisi root 将李zhangsan户从root组中删除
权限管理 chown -R zhangsan /aaa 将文件夹/aaa的多有者修改为zhangsan chown root:root /aaa 将/aaa文件夹的属主和属组都改成root chmod 777 /aaa 给文件夹文件/aaa设置权限为777 shell命令
chmod +x ./sle.sh 执行sle.sh文件
详情见菜鸟教程
Linux在线安装jdk:详细看网址:https://blog.csdn.net/qq_37345604/article/details/80556639
wget在线下载
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
解压
tar -xzvf jdk-8u191-linux-x64.tar.gz -C /usr/local/tools
解压至指定目录
配置环境变量
vim /etc/profile 在文件最下方添加
JAVA_HOME=/usr/local/tools/jdk1.8.0_141/
JRE_HOME=$JAVA_HOME/jre
CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
PATH=$JAVA_HOME/bin:$PATH
export PATH JAVA_HOME JRE_HOME
保存后刷新配置文件
source /etc/profile
测试安装(java -version)详细看网址:https://blog.csdn.net/wrs120/article/details/77509070
压缩包和解压包的存放目录均为/usr/local/src/
环境变量在/root/.bash_profile (自己添加)
linux在线安装mysql
一、安装前准备
1. 安装gcc
# 安装命令 yum install -y gcc gcc-c++ make automake #查看是否安装成功 gcc -v
2. 安装cmake
# 下载 wget http://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz # 解压 tar -zxvf cmake-2.8.10.2.tar.gz # 安装(一步步输入) > cd cmake-2.8.10.2 > ./bootstrap > gmake > gmake install # 查看是否安装成功 cmake -version
3. 安装ncurses-libs包
yum install ncurses-libs
4. 安装ncurses-devel包
yum install ncurses-devel
二、安装Mysql
1. 进入/usr/local/src/目录
cd /usr/local/src/ # 创建安装目录 mkdir mysql # 创建数据库存放目录 mkdir mysql/data # 创建mysql用户 groupadd mysql # 创建mysql用户组 useradd -r -g mysql mysql
2. 安装mysql
wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.37.tar.gz
3. 解压到当前目录
tar -zxvf mysql-5.6.37.tar.gz
4. 安装
# 进入解压目录下面 即 /usr/local/src/mysql-5.6.37 执行以下命令 cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/src/mysql -DMYSQL_DATADIR=/usr/local/src/mysql/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DENABLED_LOCAL_INFILE=1 #参数说明 #-DCMAKE_INSTALL_PREFIX=/usr/local/mysql //安装目录 #-DINSTALL_DATADIR=/usr/local/mysql/data //数据库存放目录 #-DDEFAULT_CHARSET=utf8 //使用utf8字符 #-DDEFAULT_COLLATION=utf8_general_ci //校验字符 #-DEXTRA_CHARSETS=all //安装所有扩展字符集 #-DENABLED_LOCAL_INFILE=1 //允许从本地导入数据 #注释: 若是出现CMake Error: The source directory "xxxx" does not appear to contain CMakeLists.txt. 的提示, 那就是mysql的那安装包没有下载对, 这个时候 就多找几个安装包试一下 # 安装 make make install
5. 配置数据库
# 进入安装目录 /usr/local/src/mysql # 把当前目录中所有文件的所有者所有者设为root 所属组为mysql # 命令语句后面的"."不要忘记了 chown -R root:mysql . chown -R mysql:mysql data # 将mysql的启动服务添加到系统服务中 cp support-files/my-default.cnf /etc/my.cnf cp support-files/mysql.server /etc/init.d/mysql # 创建系统数据库的表 scripts/mysql_install_db --user=mysql
6. 配置环境变量
# 编辑root 下的.bash_profile文件 vim /root/.bash_profile # 添加如下内容 注意修改路径 # Mysql MYSQL_HOME=/usr/local/src/mysql PATH=$PATH:$MYSQL_HOME/bin export MYSQL_HOME export PATH # 使其生效 source /root/.bash_profile
7. 登陆mysql
# 启动mysql服务 service mysql start # 修改mysql用户root的密码为"123456" ./bin/mysqladmin -u root password '123456' # 登陆mysql mysql -uroot -p # 然后输入密码
Linux在线安装Tomcat
1. 下载tomcat:
#wget http://apache.fayea.com/tomcat/tomcat-7/v7.0.54/bin/apache-tomcat-7.0.54.tar.gz2. 将tomcat放置到 / server / tomcat / 目录下
#mv apache-tomcat-7.0.54.tar.gz / server / tomcat /3. 解压缩:
tar -xvzf /server/tomcat/apache-tomcat-7.0.54.tar.gz4. 设置tomcat开机自启动,编辑/server/tomcat/apache-tomcat-7.0.54/bin/startup.sh
# vi /server/tomcat/apache-tomcat-7.0.54/bin/startup.sh
加入如下行:
#chkconfig: 2345 80 90
#description:tomcat auto start
#processname: tomcatchkconfig是让tomcat以service方式运行,这行表示缺省启动的运行级别以及启动和停止的优先级,如该服务缺省不再任何运行级启动,则以 - 代替运行级别。此例在tomcat中表示脚本在运行级2、3、4、5启动,启动优先权为80,停止优先权为90。
语 法:chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset]
description行对服务进行描述.5. 将tomcat加入开机自启动
# vi /etc/rc.d/rc.local
加入如下内容:
/server/tomcat/apache-tomcat-7.0.54/bin/startup.sh start执行# /server/tomcat/apache-tomcat-7.0.54/bin/startup.sh 启动tomcat,
执行# /server/tomcat/apache-tomcat-7.0.54/bin/shutdown.sh 关闭tomcattomcat默认监听8080端口,如果要修改端口,按如下步骤修改:
# vi /server/tomcat/apache-tomcat-7.0.54/conf/server.xml
找到
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />修改为:
<Connector port="9080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector executor="tomcatThreadPool"
port="9080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />Python 简介
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
Python 是交互式语言: 这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码。
Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。
Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。
Python 特点
1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。
2.易于阅读:Python代码定义的更清晰。
3.易于维护:Python的成功在于它的源代码是相当容易维护的。
4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。
5.互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。
6.可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。
7.可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。
8.数据库:Python提供所有主要的商业数据库的接口。
9.GUI编程:Python支持GUI可以创建和移植到许多系统调用。
10.可嵌入: 你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。
常用语法:
注释:
单行:#
多行:''' '''
冒号:
函数、类、分支、循环语句等
字符串:
单引号双引号均可
可以加、乘
不能改变字符
截取
字符串前加r,字符串内部不发生转义
格式化:"我叫%s今年%d岁"%('小明',10)
各种字符串函数:
count(str,beg=i,end=j)
find(str,beg=i,end=j)
len(str)
replace(old,new[,次数])
列表:
截取:[:]
删除:del
拼接:+
常用函数:
len:
max:
min:
list:
append:末尾添加
insert(index,obj):
extend(obj):相当于拼接
count(obj):
remove(obj):第一个obj
pop(index):默认弹出最后一个
sort():
字典:
键:必须不可变,所以可以用数字,字符串或元组充当
值:任意
集合:
新建:set或{ }
添加:add
删除:discard == remove
集合的运算:交叉并
分支语句:
if:
elif:
else:
导入:
模块:import 模块 [as 别名]
函数:from 模块 import 函数名 [as 别名]
赋值:
a = b = c = 1
a, b, c = 1, 2, "runoob"
运算符:
/ 返回一个浮点数,// 返回一个整数
**乘方
and、or、not
in、not in
各种数学函数:
abs、round(x,n)
Python关键字
Python预先定义了一部分有特别意义的标识符,用于语言自身使用。这部分标识符称为关键字或保留字,不能用于其它用途,否则会引起语法错误,随着Python语言的发展,其预留的关键字也会有所变化。表1列出了Python预留的关键字。
表 1 Python预留的关键字表
Python的语法有二点需要注意:(1)Python同一代码块的缩进要对齐,不然就会出现语法错误;(2)Python在字符串表示上和其它语言有所不同,Python的字符串可以用单引号(’)、双引号(”)、三引号(’’’)表示。