软件测试|个人心得与资源分享 - 1

作者:小镇做题家char、风化的木头人

作为一个刚刚入门不久的代码狗,从力学到金融再转型到软件测试的相关领域,笔者在其中走过不少弯路,并且在最近的几个月内恶补了软件测试的各部分知识。受到朋友的启发,决定开一个专栏来记录自己的学习历程,这里首先感谢“羊工智能”提供的思路和想法,有想要学习机器学习的朋友可以移步知乎专栏https://zhuanlan.zhihu.com/p/392891560?utm_source=wechat_session&utm_medium=social&utm_oi=57904866525184&utm_campaign=shareopn&s_r=0,同时感谢朋友风化的木头人对其中内容的相关指导与意见以及思维导图(文末)。这里仅作为面向小白、初学者以及希望从零开始入门软件测试的朋友的一些个人心得与资源分享,希望能够对大家起到帮助,以及也算是对笔者自身学习过程的一个记录。

本篇文章将会从以下四个角度,对软件测试的基础学习了解路径及资源分享做一个简要的说明:

1、基础概念

2、Python知识

3、相关软件

4、相关基础互联网知识

5、思维导图

一、基础概念

我们在这里只对软件测试最基本的概念与结构做一个简要的说明,具体的内容可参见知乎上大量的介绍文章。

1、软件测试的两种方式:手工测试、自动化测试

手工测试最容易想象的方式就是我们常说的“点点点”,可以理解为对于一个写完的函数,将不同的值代进去(合法非法皆可),而后验证其反馈是否符合预期(如在计算器函数中输入?+!应该返回错误提示而不是得出一个具体的结果)。

自动化测试即使通过一些软件,如jmeter、postman或自己搭建的python测试框架,通过unittest、pytest等工具完成测试的自动化工作并自动生成对应的测试报告,这是在测试的中后期会进行的主要工作。

2、软件测试的阶段:

单元测试:对于软件中最小的单元进行测试验证,验证其输入输出及错误判断是否满足预期要求

集成测试:在单元测试的基础上,对于各个细小单元构建成的子模块进行测试,验证其接口与功能是否满足预期要求

系统测试:将集成测试后的软件通过与计算机系统中的其他部分结合进行测试

验收测试:将整个软件作为整体,在交付前进行测试,检验其是否满足相关的需求,各部分运行是否正常。其中包含了面向开发者内部的alpha测试,以及脱离开发者的beta测试。我们常见的iOS系统下TestFlight中的各软件(如bilibili、QQ音乐)的beta版本即为即将发行的新版本的测试版本

需要注意,在各测试阶段,测试工作越靠后,测试的成本越大,发现bug后的处理代价也越高(每个阶段几乎是十倍以上的代价),因此软件测试应结合在开发的每一个阶段,并且及早发现问题能带来更小的成本。

3、软件测试的方法:

这里我们只用最通俗的语言说明几个在面试中或者最基础的教程中会提到的几个方法,更详细的方法不再赘述:

黑盒测试在不了解代码运行逻辑的情况下,直接对其进行测试,检验其功能、性能等是否满足要求。可以理解为看电视时,按一下遥控器电视台就会切换,但是不考虑电磁波是怎么传输到电视上的,电视内部是怎么收发信息的,只关注结果,不关注原理

白盒测试:与黑盒测试相反,此时需要对代码逻辑有了解并且有时需要通过阅读代码对代码内容进行纠错

灰盒测试:即对白盒测试与黑盒测试的混用

4、软件测试的种类:

沿用上面说过的例子,我们以一个计算器软件作为事例进行说明:

功能测试:测试软件各个功能是否可以正常实现

        事例:测试各运算符是否可以对数值正常使用,是否得出正确的结果

                   测试对于非法字符,如标点符号,是否会正常运行

                   测试对于极端情况,如10^99 + 10^99是否可以正常运算或正常报错等

UI测试:测试软件的界面是否符合要求、是否美观,字体是否正确,是否易用

        事例:用户按下加号后,是否即进行正确的加法计算

                   软件的输出内容是否出现在正确位置

性能测试:对软件的性能进行测试,常见的包括负载测试、强度测试

        负载测试:检验软件在超负荷状态下运行的性能

        强度测试:检验软件在低系统资源下的运行性能

其余还有对于需求文档的测试、对于浏览器兼容性的测试等等,在这里我们就只先介绍这三种最常见的测试,如有需要,后期会再进行补足

二、Python相关知识

1、Python基础知识

首先在此感谢复旦大学王雪平老师的PPT学习材料,其中包含了Python最基础的相关知识内容(包含正则表达式),链接如下:(不想要单个存储的童鞋可以移步文章最后,笔者将所有的文件也统一打包分享了)

链接: https://pan.baidu.com/s/1gcgauAc24rSNRjbdeMKPSQ 提取码: ruuc

由于笔者做的是Python进行软件测试的相关工作内容,因此我们这里只给出Python语言的学习资料,对于其他语言的相关基础内容,请自行查找,如C笔者推荐c.biancheng.net

2、unittest、pytest

Python中对于单元测试、接口测试等最常用的库是unittest、pytest,笔者个人更青睐于pytest一些,因为其方法的使用更为灵活,也更适合入门学习。

Unittest我推荐官方的Unittest Framework这本书作为入门,其中介绍了最基础的unittest的方法,同时也可以提供使用代码进行测试的基本思想与框架

Pytest我推荐Brian Okken的Python test with pytest这本书作为系统学习,其中系统地介绍了pytest的诸多方法以及fixture装饰器、参数化等测试方法。两本书的链接如下:

链接: https://pan.baidu.com/s/1BwvBLjqG9k3crIGaLo44Bw 提取码: 2khq

3、locust

Python中比较常用的性能测试的库为locust,他会在运行后提供一个网页界面,可以在其中对并发数等进行设置,而后可以直观的看到性能以及其他统计数据的实时变化。其测试结果界面如下图所示:

软件测试|个人心得与资源分享 - 1_第1张图片

软件测试|个人心得与资源分享 - 1_第2张图片

在新版本更新后,网络上很多的教程中的一些语法需要更改,关于locust的学习内容在知乎和CSDN中都有大量的博主介绍,并且内容也是大致相当。

在使用locust库的时候,容易出现两种问题:

(1)端口号被占用,此时可通过终端输入(此处只说明Linux系统下的写法)

lsof -i: 端口号

查询对应端口号的进程ID即PID,而后通过输入

kill -9 PID

将对应进程杀死即可正常运行

(2)报错,在新版的Locust库中,有两处比较常见的更改,在网上查找资料学习的时候需要注意,一是locust中原HttpLocust变成了HttpUser,二是task_set与tasks的问题,在网上面向旧版本Locust的一些学习文件中,会在定义测试集时,使用以下的形式:

task_set = MyLocust

其中MyLocust是上文中自己定义的测试类,如果这样的情况出现报错,可尝试更改为:

tasks = [MyLocust]

问题一般即可解决

三、相关软件

本部分由风化的木头人 编写,感谢其帮助,笔者有学习经历的相关部分链接可移步至本章末尾:

‘’‘

1、WiKi(Confluence):企业内团队协作工作工具,协同编写文档和管理的工具;领导可以在wiki上查看团队提交的任务进度报告,每日工作报告等内容;

2、测试用例编写工具

(1): Excel:经典Office工具,除了做表格之外也可以用来写测试用例(下图是本人的用例编写模板)

(2): Testlink:比较经典的一款测试用例编写工具。

(3): Zentao(禅道):同样也是一款测试用例编写工具,但是除此之外还具有bug提单等诸多功能,也是目前企业使用的多的一款软件。(个人觉得禅道比Testlink好用太多了,具体选择还是得看企业选择用什么那就用什么)

3、Jira:企业级研发管理工具,它主要是一款项目与事务跟踪工具。你可以理解为一块黑板,上面写着每个人的任务,任务进度云云。

4、Linux相关工具:

Xshell:Xshell是一个用于windows平台的强大的SSH,TELNET终端仿真软件。它使得用户能轻松和安全地从windowsPC上访问linux主机。

Xftp:Xftp是一个用于Windows平台的强大的FTP和SFTP文件传输程序,Xftp能安全地在linux和windowsPC之间传输文件

Navicat:数据库管理和设计工具,支持多种系统,mac,win,linux

5、UI自动化: 

Python:这个编程语言不需要多说了吧,使用PyCharm或VSCode进行代码编写。不管是UI自动化,APP自动化还是接口自动化都需要,当然了会Java,C等语言的可以选择忽略这一条。

      Selenium:WEB UI自动化时使用的工具,selenium测试直接运行在浏览器中,就像真正的用户在操作一样

6、APP自动化测试:

APPium:App测试工具,配合模拟器使用,在电脑上模拟出手机端的操作

7、接口测试:

Fiddler:抓包工具

Postman

Requests库:接口自动化所需。

8、Jmeter 

       性能测试工具,用于测试软件吞吐量,负载等内容。

9、Jenkins

       是一款CI持续集成工具,主要用于持续、自动地构建项目、软件测试项目等;监控一些定时执行的任务;同时还会提供持续集成报告,Email的方式通知相关负责人,其要求是需要进行日构建的项目已经编写好全自动的项目编译脚本。

        Git:代码管理工具,分布式管理

         Svn:代码管理工具,也可用于文件的管理。

’‘’

关于这个部分,网络上有大量的学习资料,笔者本人使用的是(非打广告)黑马培训机构的免费网课,其官网也提供了一个学习树与学习思路,可参考以下链接自行选择所需的相关资料(免费):

http://bbs.itheima.com/forum.php?mod=viewthread&tid=405757?tjlb

关于Fiddler,本人推荐bilibili上柠檬班的教学视频:

https://www.bilibili.com/video/BV1c4411c7zH?from=search&seid=14020749479010982554

其中对于HTML的相关基础介绍也非常重要

四、相关基础互联网知识

这部分是笔者最近在学习补足的内容,如果你和笔者是一样的情况,从非计算机科班出身转型到互联网相关的公司或者工作岗位,那么计算机网络的相关基础知识则是必须了解的基础的一部分,这里我推荐bilibili上一个考研机构的视频网课,其对于互联网分层结构及每层协议、功能、设备等都有翔实且清晰地介绍,可谓深入浅出。(并且我相信你们听了小姐姐讲课的声音就不想退出来了)

https://www.bilibili.com/video/BV19E411D78Q?from=search&seid=1736031655656269495        

五、思维导图

软件测试分类:

​​​​​​​

软件测试原则:

软件测试|个人心得与资源分享 - 1_第3张图片

软件测试生命周期:

软件测试|个人心得与资源分享 - 1_第4张图片 

测试用例设计方法总结:

 

Bug的分类:

 

APP测试:

 

六、写在最后

在现在金融、互联网都极度内卷的情况下,很多朋友同学想要从土木、飞行器、金融转型到互联网,这是一个目前来看还比较好的个人选择,但是也希望所有从业者在入行之前都先了解清楚这个行业具体做什么,工作的具体内容怎样,需要学习的知识是否符合个人兴趣和职业发展,这些是至关重要的。笔者在最后选择这个方向前,也考虑过大数据、机器学习AI等方向,最后选择了这个方向,关于这些方向笔者现在还能找到的学习资料也在这里给出:

Numpy:

https://www.lanqiao.cn/courses/912

https://www.kesci.com/home/project/59f29f67c5f3f5119527a2cc

https://www.lanqiao.cn/courses/1090

Pandas:https://www.heywhale.com/mw/project/5ddc974ef41512002cec1dca

Matplotlib:

https://www.lanqiao.cn/courses/881

https://www.lanqiao.cn/courses/1093

https://www.kesci.com/home/column/5b87a78131902f000f668549

https://www.kesci.com/home/user/profile/59e428f14663f7655c499105

https://www.kesci.com/home/project/5de9f0a0953ca8002c95d2a9

https://www.kesci.com/home/project/5ef0274ecaa99b002d6f423d

https://www.kesci.com/home/project/5ef02d07caa99b002d6f4ed1

希望以此帖来记录个人的学习经历与心得,有错误之处还请海涵提出加以指正,谢谢。

所有本文中提供的本地资源的链接如下,后期如果有修改,会更新这个总链接:

链接: https://pan.baidu.com/s/1P6xBDu47qzwWtPv_ts2Xbw 提取码: nbhu     

你可能感兴趣的:(软件测试,软件测试,python,功能测试,压力测试,集成测试)