随着这两年测试行业的不断内卷,不管工作需要还是不需要,整个行业对测试人员的要求越来越高。
以前自动化测试、性能测试都算是中高级的测试技能。
现在自动化测试、性能测试已经成为了测试人员的标配技能了。
你简历上没有一个自动化测试的经验,不会一门代码什么的,找工作的时候,连简历筛选这一关都过不了。
在大环境的技术要求不断的提高的背景下,测试开发的概念应运而生。
测试开发介绍
说起来测试开发的概念也不算是已经很新的概念了,毕竟在17年的时候我就已经知道了什么是测试开发了。
所谓的测试开发其实就是字面意思,测试人员去做开发。
不过这里做开发,主要指的是测试人员去开发测试工具,和开发人员所做的工作并不是一样的。
开发人员做的开发的工作是围绕公司的项目需求所进行的。
而测试人员的开发工作是围绕公司的测试同事的需求进行的。
也就是说,测试开发的核心工作是给公司的测试人员提供定制的测试工具。
最开始的时候,测试开发只是给公司定制一些简单好用的测试工具而已,比如现在测试界比较出名的httprunner就是在这个时候做出来的。
而现在的测试开发已经不再满足于只是完成一些基本的工具的开发,而是围绕公司的测试流程和测试人员的需求,去为公司定制测试平台。
测试平台上面会集成各种所需要的测试工具,比如可以通过测试平台实现接口测试,接口自动化测试,性能测试,测试环境的自动部署,测试数据的自动生成等等功能。
可以让不懂编程的同事,直接在平台上操作,而实现一些复杂的测试过程。
技术栈
测试开发人员的技能要求是没有一个准确的标准的。
因为测试平台这个东西一般都是根据公司测试团队的要求进行定制的。
不同的功能涉及到的技术点是不一样的。
比如,我们要开发一个测试平台,先不管这个平台具体的功能有什么,我们要实现这么样的一个平台,那么后端、前端、数据库这些东西是必须要掌握的。
而后端、前端的开发都可以采用各种不同的编程语言或者框架来实现。
数据库也有各种选择。
而且实现的平台是需要在服务器上运行的,所以Linux、docker、shell等环境运维的知识点也是需要掌握的。
所以在具体的实现的过程中,大家可以选择自己所擅长的技术来开发。
基本框架的实现
因为我擅长的python的那一套东西,所以后续的内容都是以python为核心的,当然你也可以用其他语言同类型的包来实现。
要实现一个平台首先就是后端的开发。
python也是可以做后端开发的,但是需要使用对应的后端框架,比如flask或者django。
借助后端框架我们可以很快的完成一个基本接口。
后端有了那么就是数据库了,总是会有很多数据需要保存的。
比如使用MySQL数据库,这里接口要去操作MySQL,就需要掌握pymysql。
通过对pymysql的封装,实现接口对数据库的增删改查的操作。
如果后端还要考虑状态管理,那么也许还需要使用redis。
而前端的实现,现在基本上都是Vue\react\anglue三大框架。
要掌握这三大框架,又必须先掌握HTML+CSS+JS。
那么搭建一个最基本的测试平台就得掌握以下内容:
-
python的基本语法
-
flask/django框架的应用
-
pymysql操作MySQL数据库
-
redis操作redis数据库
-
MySQL存储数据
-
redis存储用户缓存
-
html+css+JavaScript
-
vue的基本语法
-
vue-router路由操作
-
vuex页面状态管理
-
axios调用接口
-
linux操作系统
-
nginx
-
gunicorn
实现接口测试
基本的平台框架起来后,就需要实现具体的测试功能,而最常见的就是直接在平台上实现一个接口测试的功能。
这里你可以理解成是直接实现了一个网页版的postman。
可能这个时候就有人问了,postman或者apifox之类的接口测试工具那么好用,为啥还需要自己去实现一个接口测试工具呢?
因为使用第三方的测试工具,对于不同的测试资源的管理是分散的,每个人都在自己的电脑上的工具去完成对应的工作,
对工作进度的把控不直观,对团队协作的内容管理也不方便,每个人写好了脚本后,还需要单独进行管理。
所以做到平台上,就可以一目了然的看到了。
而且apifox、postman等工具有不少的功能对于不少团队来说有些多余,或者在某些细节上不能满足测试团队的需求,
所以就需要单独的开发一套接口测试工具。
而完成一个接口测试工具最基本的技能要求就是掌握requests的应用。通过requests就可以实现对接口的操作。
可能公司已经存在了一些接口的测试用例了,有可能在excle表里,也有可能在postman、jemter、apifox里面,
所以就需要平台具备导入导出的功能。openpyxl就是用于excle文件的读写的,yaml、json也是用于对应格式的文件的操作。
所以要实现接口测试工具,必备的技能就是以下的python第三方包的应用。
-
requests调用接口
-
openpyxl读取excle文件
-
yaml格式的用例读写
-
json文件的转换
实现接口自动化测试
接口测试和接口自动化测试最主要的区别就是接口测试只需要关心单个接口的运行结果。
而接口自动化测试,就难免需要考虑接口的参数和响应的互相关联。
如果从0开始自己去实现这么一套工具肯定是很难的,所以这里我们可以直接使用httprunner来实现接口的数据关联和批量运行。
接口自动化测试工具的原理一般都是采用数据驱动的方式来实现的。
所以要实现一套接口自动化测试工具,除了httprunner外,还需要掌握对数据的操作。
而数据在平台里,就可以通过多种方式来记录。
比如excle文件直接导入到系统中,又比如直接从数据库中读取。
所以这里我们就需要掌握以下python的第三方的包。
-
httprunner
-
openpyxl
-
pymysql
实现性能测试
对于性能测试,虽然python也有做性能测试的包,locustIo,虽然locustIo确实也很好用,但是业界采用locustIo来做性能测试的团队确实很少。
所以这里我们有多种方案去实现性能测试工具。
第一种就是直接对locustIo进行二次封装,好处是locustIo天生就支持接口测试用例的使用,不需要重复的编写测试用例,但是缺点也十分的明显,只能在平台所在的服务器去运行性能测试。
所以很可能会因为内存占用过高而导致平台直接崩溃。
第二种是通过shell脚本的方式,使用ssh协议远程操控jmeter,而且可以借助docker实现在任意服务器上去快速部署性能测试环境。
所以要在平台上实现性能测试的效果,就必须掌握以下技能。
-
jmeter
-
shell
-
locustIo
-
docker
-
linux
-
paramiko
实现测试环境的部署
在测试的过程中,每次开发发版,都需要重新去部署更新测试环境,如果公司没有使用持续集成工具来自动化部署,手工部署的过程是很难受的。
所以大多数的公司都会使用类似于Jenkins的工具来实现自动化部署环境。
但是Jenkins等工具能实现的只是代码的更新,等部署完成后,还需要测试手动去删除历史的垃圾文件或者数据。
而我们自己去实现的测试环境部署的工具就可以不受这个限制。
我们可以利用git自动的拉取最新的代码,编译打包,然后制作docker镜像,然后根据设定好的配置信息自动化的服务器上完成环境部署。
并且可以选择是否对测试环境中的数据进行初始化,一键完成测试环境的初始化,
让每一次测试迭代都拥有一个干干净净的环境,以此来避免测试的时候因为垃圾数据导致的问题。
要实现这个过程,我们就必须掌握以下知识点。
-
git
-
github/gitlab/gitee
-
docker
-
mysql
测试数据的生成
在我们的测试过程中 ,经常都会去制造我们需要的测试数据。
根据不同的需要,手动的去制造测试数据,只能够在页面上通过被测项目的功能去制造所需要的数据。
听起来这个过程就是十分的枯燥和麻烦的。
所以测试数据的生成功能也是必不可少的。
根据项目的实际情况,去定制生成测试数据的功能,只需要输入所需要的数据量,就可以一键生成测试数据了,非常的方便。
要实现这个功能也是十分的简单的,我们既可以直接在数据库中插入数据,也可以调用被测项目的接口去批量的生成。
所以这里我们需要掌握的技术就有以下几点:
-
random
-
time
-
requests
-
pymysql
实现消息推送
不管是什么工具,在执行完功能后都是需要告诉我们结果的。
不论是接口自动化测试、性能测试、环境部署,在运行了对应的功能后,都是需要一定的时间去完成的。
我们不可能守着平台等结果,所以我们就需要一个能及时通知我们的方式。
而钉钉、企业微信就是目前最佳的选择。
我们可以利用钉钉、企业微信的机器人,实现自动的把结果推送到我们的手机上。
让相关的同事都可以及时的都是运行结果。
-
钉钉机器人
-
企业微信机器人
-
requests
总结
在上述的内容中,我们所描述的只是一些通用的测试平台的功能,除了这些常见的以为,不同的公司根据项目的特点不同,还会有更多的定制化的需求。
不过,在掌握了以上的内容后,我相信不管是什么需求,大家都是有能力去完成实现的。
希望大家在软件测试的路上不要停步不前,坚持学习,提升自己,不断向前。