技术标签: 测试用例 selenium pytest 软件测试 功能测试 IT 安全性测试
如下是我工作之余熬夜整理的软件测试学习思维导图,通过回顾多年的从业经验,总结提炼出来的一些东西,希望能对大家有些帮助,特别是刚入门软件测试行业或将要加入软件测试行业的同学,可以认真看一下,可以作为参考和指引,对于已经加入软件测试行业的,可以重点看一下专项测试章节,看还有哪些需要提升的地方:
目录
作为一名专业的软件测试人员,我们事先要具备扎实的测试理论知识,需要弄清楚以下常见问题:什么叫软件测试,测试的目的是什么,测试过程中要遵循什么原则,测试的方法是什么,以及测试流程又是怎样的。这一块大家可以到网上多多查阅相关资料或者相关书籍,我就不在这里详细介绍了。
测试用例设计方法是测试人员必备的一项重要技能,测试用例设计的好坏直接关系到后面测试执行覆盖的程度、测试执行的充分性,因此,使用合适的测试设计方法是输出高质量的测试用例的前提。
等价类划分是一种典型的、重要的黑盒测试方法,它将程序所有可能的输入数据划分成若干个等价类,然后从每个部分中选取具有代表性的数据作为测试用例进行合理的分类,等价类分有效等价类和无效等价类。
等价划分是指把输入空间划分为几个“等价区间”,在每个“等价区间”中只需要测试一个典型值就可以了。
使用等价类划分方法设计测试用例要经历划分等价类(列出等价类表)和选取测试用例两步。
等价类的划分有两种不同的情况:
① 有效等价类:是指对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合。
② 无效等价类:是指对于程序的规格说明来说,是不合理的,无意义的输入数据构成的集合。
在设计测试用例时,要同时考虑有效等价类和无效等价类的设计。
典型案例:
需求规格说明书要求:工单系统中用户手机号码为1开头的11位数字,且手机号码为必填项。那么设计测试用例如下:
“缺陷遗漏在角落里,聚集在边界上”。边界值测试法是对等价划分法的补充。
边界值分析的基本思想是:使用在最小值、略高于最小值、正常值、略低于最大值和最大值处取输入变量值。
测试临近边界的合法数据,以及刚超过边界的非法数据。
典型案例:
就拿上面用户手机号码的例子来说,其实测试用例T01、T02、T03这三条用例的设计就用到了边界值分析法,为了看起更直观,优化为如下:
因果图法也是较常用的一种黑盒测试方法,是一种简化了的逻辑图。因果图能直观地表明输入条件和输出运作之间的关系。
因果图法是一种适合于描述对于多种输入条件组合的测试方法,根据输入条件的组合、约束关系和输出结果的因果关系,分析输入条件的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件涉及的各种组合情况。因果图法一般和判定表结合使用,通过映射同时发生相互影响的多个输入来确定判定条件。因果图法最终生成的就是判定表,它适合于检查程序输入条件的各种组合司。
因果图法产生的背景:等价类划分法和边界值分析方法都是着重考虑输入条件,但没有考虑输入条件的各种组合、输入条件之间的相互制约关系。这样虽然各种输入条件可能出错的情况已经测试到了,但多个输入条件组合起来可能出错的情况却被忽视了。
典型案例:
例如,程序的规格说明要求:输入的第一个字符必须是“#”或“*”,第二个字符必须是一个数字,在此情况下进行文件的修改;如果第一个字符不是“#”或“*”,则给出信息N;如果第二个字符不是数字,则给出信息M。
(1)在明确了上述要求后,可以明确地将原因和结果分开:
原因:R1-第一个字符是“#”
R2-第一个字符是“*”
R3-第二个字符是一个数字
结果:E1-给出信息N
E2-修改文件
E3-给出信息M
(2)用因果图表示:
(3)将因果图转化为判定表:
(4)设计测试用例:
最左边两列,原因R1和R2同时为1不可能,排除掉,根据表可设计出6个测试用例。
综上,用因果图法设计测试用例一般步骤如下:
因果图方法中已经用到了判定表,它是分析和表达逻辑条件下执行不同操作的情况下的工具。
场景法也是较常用的一种黑盒测试方法,一般是对系统的业务和流程进行描述,验证主要功能和业务流程是否实现,场景业务流通常分为基本流、备选流、异常流程。
错误推测法是指在测试程序时,人们可以根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例的方法。这种方法没有固定的形式,依靠的是经验和直觉,很多时候,我们都会不知不觉的使用到。
正交试验设计 法是通过正交试验理论来指导测试用例的选取,以便能够用较少的测试用例使测试充分,此方法在系统测试用例的设计中不常用。
综上,以上测试用例设计在实际项目中最常用的是等价类划分、边界值分析、因果图法、判定表法、场景法和错误推测法。
测试环境部署是测试流程中比较关键的一步,没有测试环境,测试执行无法进行,因此,作为一名测试人员,测试环境部署是必备的一项技能,通常情况下主要涉及到应用环境的部署、数据库环境的部署、测试工具环境部署等,下面我们主要介绍一下应用环境部署和数据库环境部署:
以Java工程web项目为例。
步骤1:在linux服务器,创建用户名和密码及设置用户权限;
创建用户组:groupadd –g 888 test
创建用户:useradd -g test zjydtest
useradd -d /home/test/zjydtest -g test -m –s /user/bin/csh –p openssl passwd -1 zjydtest’ zjydtest
修改权限:chmod –R 777 .. /home/test/zjydtest /
步骤2:安装JDK,首先确认项目使用的jdk版本进行安装,并设置环境变量;
说明:修改环境变量配置文件 vi /etc/profile,在文件的最后添加:
① JAVA_HOME
② CLASS_PATH
③ PATH
注意:设置完成之后并执行source /etc/profile命令,使环境变量文件生效。查看安装的JDK版本命令:java -version
步骤3:将tomcat包上传到创建的linux用户下,并解压;
步骤4:启动tomcat;
在项目所在bin目录下执行命令:./startup.sh
步骤5:查看tomcat日志信息;
执行命令:cd /home/test/zjydtest /apache-tomcat- 8.0.9/logs,可以查看实时输出的日志信息,有助于确认和定位在测试中发现的bug。
步骤6:通过浏览器查看tomcat主页,查看页面是否可以正常访问。
步骤7:部署java项目,若是前后端分离的项目,则分别将项目的后端和前端的包上传到 /home/test/zjydtest /apache-tomcat- 8.0.9/webapps对应的目录下,并解压。
步骤8:修改配置文件,修改连接数据库服务器的ip、账号,密码,端口号等。
步骤9:修改配置文件后,需要重启tomcat服务:先执行./shutdown,然后再./startup启动服务,服务启动正常,就可以通过浏览器访问项目了.
说明:查询进程的命令ps –ef|grep zjydtest,关闭进程的命令:kill -9 进程ID
步骤10:浏览器访问部署的项目http://ip:8516/index
数据库环境搭建,我们拿常见的oracle数据库为例:
步骤1:Oracle服务端环境搭建:
(1)创建oracle用户组:groupadd -g 120 oinstall
(2)创建oracle用户:useradd -d /oracle/ora11g -g oinstall -p `openssl passwd -1 oracle` oracle -m
(3)将oracle服务端安装软件拷贝到oracle用户目录;(/oracle/ora11g)下,然后用解压命令解压,并进行相关安装:
(4)设置oracle环境变量:
vi .bash_profile
##oracle环境变量设置
ORACLE_BASE=/oracle/ora11g/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/11.1.0/db_1
ORACLE_SID=dbpop
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:$LD_LIBRARY_PATH
THREADS_FLAG=native
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_BASE ORACLE_HOME ORACLE_SID LD_LIBRARY_PATHPATH
保存退出:wq!
让环境变量生效需要source一下:
oracle@suse11:~>source .bash_profile
(5)设置Oracle服务端字符集和SGA大小,切换到oracle用户,进入oracle服务端的SQLPLUS操作界面进行相关操作。
(6)启动oracle服务:
su – oracle
sqlplus /nolog 以不连接数据库的方式启动
SQL>conn /as sysdba sysdba用户模式连接
SQL>startup 启动数据库
SQL>exit 退出
lsnrctl start 启动监听
exit
启动监听若有报错,可按提示修改listener.ora
步骤2:Oracle客户端环境搭建:
(1)需要将plsql developer下载到本地电脑,并进行相应的安装,这个比较简单,就不在这里详细描述了。
(2)在oracleclient中配置listener.ora和oracleclient监听文件。
步骤3:Oracle表空间创建:
开启oracle服务,打开plsql工具,使用管理员账户登录,在sql窗口中输入如下命令:
创建临时表空间:
create temporary tablespace test_temp tempfile 'D:\oracle\oradata\Oracle9i\ test_temp.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local;
创建数据表空间:
create tablespace test_data logging datafile 'D:\oracle\oradata\Oracle9i\test _data.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local;
步骤4:Oracle用户创建并指定表空间;
create user test identified by test default tablespace test_data quota 500m on users;
步骤5:用户授权
用户创建成功后,进行授权。输入grant all privileges to test;
步骤6:Oracle数据的备份、导入和导出。
这一块比较 简单,就不在这里详细描述啦。
功能测试是实际项目中接触到最多的测试,大多测试人员都是从功能测试做起,逐渐提升,一般包括:业务流程测试、UI界面测试(用户体验测试)、数据存储检查、前后台一致性校验、系统兼容性测试、易用性测试等。一般功能测试能发现80%的问题,因此,做好功能测试是软件质量保障的基础。
专项测试是在功能测试的基础上能力提升的又一个大台阶,专项测试不仅要求测试人员会使用各种专项工具,同时,也要有定的代码能力。
性能测试常用到的功工具jmeter、LoadRunner,一般根据项目的特点选择合适的工具。
接口测试常用到的功工具SoapUI、PostMan、Jmeter。
自动化测试目前在业界内比较流行,要做好自动化,需要有一定的代码功底。一般来说,自动化主要包含接口自动化、Web自动化和APP自动化。用到的常用工具如下:
(1)接口自动化:需要掌握Python+Pytest+Requests框架
(2)Web自动化:需要掌握Python+Selenium框架
(3)APP自动化:需要掌握Python+Pytest+Appium框架
5.4.1 常用工具
(1)BurpSuit:主要用于攻击web 应用程序的集成平台
(2)NMAP:主要用于端口扫描工具
(3)AppScan、AWVS、Sescan:主要用于web漏洞扫描
(4)SecureCAT:主要用于服务器漏洞扫描
(5)fuzzing:主要用于协议健壮性扫描
(6)Wireshark、Fiddler:主要用于抓包
5.4.2 常见安全测试类型
(1)失效的身份验证机制;
(2)Sql注入;
(3)XPath注入;
(4)Xss跨站脚本攻击;
(5)越权(横向/纵向越权);
(6)敏感信息泄露;
(7)隐私保护;
(8)加密算法;
(9)CSRF攻击;
(10)口令安全;
(11)日志审计;
(12)…….。
测试常用工具这一块我主要从缺陷管理工具、代码管理工具、持续集成构建、其它工具这4个方面来介绍:
(1)缺陷管理工具:常见的工具有Bugzilla、DTS、Jira、禅道。
(2)代码管理工具:常见的工具有SVN、git。
(3)持续集成构建:常见的工具有CI构建、jenkins环境部署。
(4)其它工具:常见的工具有SecureCRT。
软件质量管理这一块我主要从BUG管理和版本质量评估和晾晒这两方面来介绍:
Bug管理这一块包含Bug提交规范、Bug处理回单规范、Bug关闭原则。
7.1.1 Bug提交规范:
一个规范的bug提交一般包含如下信息:
(1)【简要描述】:用精炼的语言,把问题描述清楚,让别人一看到标题就能明白说的是什么问题。
(2)【问题详细描述】:主要包含以下方面
1)【重现条件】:描述问题是在什么环境、用的什么版本、用什么浏览器、哪个版本的浏览器、用的什么测试数据等等;
2)【重现步骤】:描述问题是做怎样的操作时出现的,出现时机等;
3)【实际结果】:描述该问题当前实际结果是怎样的,现象是什么;
4)【预期结果】:描述预期的结果应该是怎样的;
5)【抓包/截图】:上传问题出现的现象截图、日志信息、录屏信息等;
6)【重现次数】:描述该问题出现的概率,是必现、高概率出现、还是低概率出现,出现的概率是多少;
7)【严重等级】:描述问题的严重程度;
8)【问题发现的阶段】:描述问题是在项目哪个阶段测试时产生的;
9)【所属模块】:描述问题所属模块;
10)【期望解决日期】:描述问题希望哪个时间节点要解决完;
11)【问题出现日期】:描述问题的发生时间;
12)【问题提交人】:描述问题提交人姓名及工号。
13)【开发责任人】:描述问题所属开发姓名及工号。
7.1.2 Bug处理回单规范:
一个规范的bug回单规范一般包含如下信息:
(1)【问题类型】:描述该问题是需求问题、设计问题、编码问题、还是界面问题等等;
(2)【问题原因】:描述问题的产生是由于哪个类、哪片代码片段引起的等;
(3)【问题解决方案】:描述解决该问题用的什么修复方案;
(4)【自测结果】:描述修复该问题后开发自测结果,可以附上自测通过的截图等。
(5)【回归版本】:描述该问题在哪个版本解决的,告诉测试人员用哪个版本进行回归测试等;
(6)【回归建议】:描述该问题回归有什么建议,告诉测试人员有什么注意事项等。
7.1.3 Bug关闭原则:
一个规范的bug关闭一般应遵循如下原则:
(1)【回归版本】:描述该问题是在哪个版本回归的;
(2)【回归方法】:描述回归该问题的操作步骤;
(3)【回归结果】:描述该问题的回归结果情况,是pass还是failed。
(4)【回归次数】:描述该问题回归的次数。
这一块主要是介绍此项目测试用了多长时间,多少人力,经过多少轮测试,执行了多少用例,发现了多少问题,以及各特性问题分布情况如何,这些问题已解决多少,已关闭多少,还有多少未解决,多少未回归测试,以及问题类型都是怎样的,有多少阻塞,风险情况如何等相关数据的统计、晾晒和评估。
这一块主要介绍一个项目从立项到正式商用发布期间,测试工程师需要做的主要事情。
(1)测试计划输出
(2)测试方案设计
(3)测试用例设计
(4)测试用例评审
(5)测试环境搭建
(6)测试执行&测试bug提交与跟踪
(7)项目测试日报的输出
(8)项目测试周报的输出
(9)项目测试报告的输出
(10)测试评估和总结
(11)项目复盘
作为一名测试人员,可以往技术专家方向发展,也可以往管理层发展,总之,要想成为业界大师,获取更高的薪水,不仅要做好功能测试、专项测试,还要具备一定的代码能力、较强的管理能力,需要平时多学习、多修炼、多积累、多沉淀、多思考、多总结、多实践、多复盘、多突破自己。It's never too old to learn!keep moving!让我们的工作价值更高,让我们的生活更充实和精彩!
如果你觉得此文章对你有一定的帮助,记得点赞、收藏一下,记得顺便点击如下链接关注一下小编的微信公众号吧,后续会不断有干货输出^.^~O(∩_∩)O
文章浏览阅读614次。[Android Version]Android 5.0/5.1 (L)Android 6.0 (M)Android 7.0(N)Android 8.0(O)[DESCRIPTION]L及之后的版本紧急号码Customer的部分改成了在XML文件中来配置,文件的路径: alps\vendor\mediatek\proprietary\external\EccL..._sim卡 ecclist
文章浏览阅读1.1k次。Bcrypt百度百科:1、 bcrypt,是一个跨平台的文件加密工具。由它加密的文件可在所有支持的操作系统和处理器上进行转移。它的口令必须是8至56个字符,并将在内部被转化为448位的密钥。2、bcrypt算法相对来说是运算比较慢的算法,在密码学界有句常话:越慢的算法越安全。算法越算,黑客破解成本越高.通过salt和const这两个值来减缓加密过程,ta的加密时间(百ms级)远远超过md5(大概1..._写一个bcrypt
文章浏览阅读2.4w次,点赞14次,收藏87次。LaTeX中英文字体设置、混排,ctex宏包引用_latex英文字体
文章浏览阅读5.7k次,点赞2次,收藏20次。这里用的是uni-app自带的UniPush1.0(个推服务),所以只针对UniPush1.0介绍实现步骤。当然现在已经出了UniPush2.0(HBuilderX 3.5.1及其以上版本支持),新项目的话还是推荐使用UniPush2.0。如果要使用UniPush2.0,请移步 UniPush 2.0 使用指南。_uniapp消息推送功能
文章浏览阅读1.3w次,点赞41次,收藏217次。一、sort()sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数原型:sort(key,reverse=False)key:用来指定一个函数,此函数在每次元素比较时被调用,此函数代表排序的规则,也就是你按照什么规则对你的序列进行排序;reverse:是用来表明是否逆序,默认的False情况下是按照升序的规则进行排序的,当reverse=True时,便会按照降序进行排序。例如:1、list=[2,24,8,6,35,7,22,30]list.sort()pri_sort和sorted函数的区别
文章浏览阅读299次。同上一篇一样,这边摸鱼笔记也是关于分类和回归分支的权重设计。Mutual Supervision for Dense Object Detection(ICCV2021)阅读笔记_mutual supervision for dense object detection
文章浏览阅读3.6w次,点赞126次,收藏373次。 偶然看到一道笔试题,所以简单整理了一下磁盘的结构。本文主要介绍传统的磁盘结构,包括盘面、磁道、扇区、柱面、读写数据过程的概念,最后给出所遇到的笔试题。磁盘结构 传统的硬盘盘结构是像下图样子的,它有一个或多个盘片,用于存储数据,盘片多采用铝合金材料;中间有一个主轴,所有的盘片都绕着这个主轴转动,一个组合臂上面有多个磁头臂,每个磁头臂上面都有一个磁头,负责读写数据。..._磁盘结构
文章浏览阅读1.4w次,点赞7次,收藏16次。两个集合: a = [1,2,3,4,5,6] b = [3,5,7]1.求交集 方式一: intersection = [i for i in a if i in b] intersection = list(set(a).intersection(set(b))) 结果: [3, 5]2.求并集 union= list(set(a).u..._python计算四个数组的交集代码
文章浏览阅读1.1k次。谷歌在 I/O 2021开幕式的主题演讲中发布了 Android 12系统;目前 Android 12系统可用于谷歌的 Pixel 手机(Pixel3及以上),以及联想、一加、华硕、OPPO、realme、夏普、Tecno、vivo、TCL、小米和中兴等手机,国内的众多手机厂家即将上线,但是还没有荣耀的消息,华为肯定不要考虑,必然是鸿蒙系统。发布的Android 12第一个Beta版本,可以看到用..._微软手机安装鸿蒙
文章浏览阅读265次。并发编程之锁ReentrantLockReentrantReadWriteLockConditionReentrantLockReentrantReadWriteLockCondition
文章浏览阅读7.4k次,点赞11次,收藏45次。Apollo 携程Apollo配置中心目录导航 携程 Apollo 配置中心 | 学习笔记(一) | Apollo配置中心简单介绍 携程 Apollo 配置中心 | 学习笔记(二) | Windows 系统搭建基于携程Apollo配置中心单机模式 携程 Apollo 配置中心 | 学习笔记(三) | 自..._apollo分布式配置黑马学习笔记
文章浏览阅读1.1k次,点赞16次,收藏25次。人工智能 (AI) 是对人类智慧行为的仿真。它通常是设计用来感知环境、了解行为并采取行动的一台计算机或一个系统。想想自动驾驶汽车:此类 AI 驱动系统将机器学习和深度学习等 AI 算法集成到支持自动化技术的复杂环境。据麦肯锡预计,到 2030 年,AI 的全球经济价值将高达 13 万亿美元。这是因为在 AI 浪潮的影响下,几乎各行各业乃至每一个应用领域的工程环节都在转型。除了自动驾驶以外,AI 还广泛应用于以下领域:机器故障预测模型,告知何时需要进行机器保养;健康和传感器分析,如病患监护系统;