一名优秀的测试工程师需要具备哪些技能?

js/css 前端技术

很多测试工作都由前端发起,所以了解前端技术可以让测试人员使用更灵活的方式执行测试 任务。如何利用前端技术辅助测试人员更好地执行测试?就要从网络开发模式说起。

网络开发分为前端和后端,为了减少对后端没意义的请求,数据正确性的校验一般都会放在 前端代码中。这样即使后端不判断,正常情况下也不会出现什么大问题。但如果遇到前端代码被 篡改,就可以绕过前端验证发送请求到后端,而当后端的判断有问题就会造成错误的数据进入, 从而引发其他bug,所以要测试这种问题也要会修改前端代码,以便绕过前端验证。

举个输入手机号的例子。

现在一般都是以手机号作为用户名的,而手机号是固定的11位数字,前端一般会限制最多输 入11位数字,那要输入12位数字怎么处理呢?这时候需要使用浏览器的开发者工具了,以下为 操作步骤。

(1)打开 chrome 浏览器。

(2)按住F12调出开发者工具。

(3)选择最左边的定位元素按钮。

(4)选中需要测试的输入框。

(5)出现该输入框的对应的代码,如图所示。

在这里插入图片描述

可以看到输入框有个属性 maxlength=11,这段代码说明了输入框的最大长度是11,将11改 成一个很大的数字,然后再在输入框输入就可以超过11了

在这里插入图片描述

前端可以修改的东西还很多,这只是举一个简单的例子,所以测试人员需要懂得前端技术。 在学习技术的过程中,当遇到不懂的前端代码时可以请教前端开发,与其合作构建符合测试用例 预置条件的测试场景。

网络架构

网络架构一般分为两种。

(1)C/S(Client/Server)结构 (2)B/S(Browser/Server)结构

对于核心的Server端来说,简单的是可以在一台服务器上布代码和数据库;复杂的就需要一群 服务器,有些服务器布代码,有些服务器放数据库,有些服务器做中间层,有些服务器用于存储。

从最简单的开始说起,Server端就是一台服务器,上面有应用代码和数据库。

后来前端访问越来越多,一台服务器无法承受,把数据库和应用代码的服务器分开,于是就 形成了几台应用服务器+一台数据库服务器。

往后发展用户越来越多,一台数据库服务器也无法承受了,那就需要进行数据库分离,把不 同用户的数据库放到不一样的数据库服务器上,于是形成了几台应用服务器和几台数据库服务器。

随着用户和访问量越来越多,并发的情况导致数据库堵塞,聪明的IT工程师想了一种办法, 能不能在代码与数据库之间加上一个保护?于是诞生了中间层。中间层也可以理解为另外一种应 用服务器,上面有代码,也有数据库,即代码请求数据的时候不直接连接数据库,而是连接中间 层,中间层连接数据库。逻辑如图所示。

在这里插入图片描述

这样当中间层缓存了数据库的数据之后,第二次前端访问同样的数据时,即可通过中间层返 回,而不需要再去请求数据库。当然这只是读数据库的逻辑,写数据库其实也差不多,就是通过 中间层去写数据库,写完数据库再将写完的数据返回来缓存到中间层,这样很大程度减少了读数 据库的压力,起到了保护数据库的作用。

有了中间层之后也并不是高枕无忧了,随着业务功能越来越多,应用服务器也可能随时承受不住 压力,为了规避风险和提高服务质量,通过域名对业务进行分离,保证一块业务模块单独用一个域名, 然后每个域名再用多台服务器,这样一旦某个业务模块出问题之后也不会影响到其他业务模块,而 且单独一块业务用一群服务器也能提高处理效率。

经过不停的演变和进化,Server 端越来越复杂,最 后如图所示。

在这里插入图片描述

当然这并不是一个终极形态,只是完成了树干而已,随着业务的拓展和提供更快、更稳定的服务,可以再进

行分离。优化从无止境,所以Server端的网络架构只会 更复杂,更精细。了解Server端的架构对于测试来说是 一种基础,只有明白了所有的环节,才能对每个点进行测试,不然无法保证测试的覆盖率。不仅如此,这对于定位bug也是大有帮助的。

网络协议

在网络上,计算机之间是如何通过通信进行信息交流的?就如同开心和比目鱼先生进行对话一样,网络协 议就相当于人类所使用的语言。不同的网络协议类似于 不同的语言,它们具备各自的规则特性及约定的标准集合。常用的网络协议有Http 协议、Https 协议和WebSocket协议等。

懂得网络协议对测试人员做专项测试尤为重要。特别是接口测试以及性能测试,它们所使用 的数据通信机制就是建立在协议的基础上的。测试人员了解协议后,才能明白数据传输究竟是怎 么一回事,熟悉协议的组成部分,才能自如地构建测试数据,绕过前端向服务器发送请求。协议 是数据传输的本质,也是测试人员在技术提升上的一大步。

DNS解析

DNS是计算机域名系统(Domain Name System或 Domain Name Service)的缩写,它是由解 析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具 有将域名转换为IP地址功能的服务器。

DNS解析就是把域名解析成ip的过程,一般网络的访问流程如图1.34所示。

一般来说DNS服务器都是由网络运营商提供的,也就是说不需要特别设置,当你使用该网络 时默认会去访问运营商提供的DNS服务器。当然你也可以自动设置DNS服务器,在网络的TCP/IP 协议中,手动输入DNS的IP,于是便会通过你设置的DNS去解析对应的IP。

好学的开心提问:“用不一样的DNS有什么区别吗?”

“对于只有一个IP的网站来说是没有区别的,对于有多个IP的网站就不一定了。”比目鱼先 生回复道。

先举个例子,当百度只有一个IP的时候,无论哪个DNS解析到的只有一个IP,这样域名对应IP就是一对一的关系

在这里插入图片描述

再举个例子,当百度存在多个IP的时候,不同的DNS会解析到不同的IP,这样域名对应IP就是一对多的关系。然而一个用户只能使用一个DNS服务器,所以对于一个用户来说,他访问IP也是唯一的。如果他改了DNS服务器,也许才会解到另外一个IP,如图所示

在这里插入图片描述

其实还有一种特殊情况是一个 DNS 解析到多个IP,就是DNS轮询。一个域名针对多个IPa记录的解析,DNS服务器将解析请求按照a记录的顺序,逐一分配到不同的IP上,当轮了一圈之后继续循环,即IP1,IP2,IP3,IP1,IP2,IP3这样的顺序。

这样的好处是为了实现负载均衡,但随着CDN技术的普及,这种方式已经渐渐被淘汰,DNS是CDN的基础,所以先要明白DNS,才可能理解CDN。了让大家更深刻地理解DNS,再介绍一下域名对应多个IP图DNS 劫持的原理。简单来说就是计算机中病毒,然后病毒修改了计算机的DNS设置。此时访问任意网站都会通过该DNS,而该DNS返回给你的IP并非该网站的真正IP,而是一些广告网站或者色情网站的IP。当然这并不是最高级的,因为用户可以很容易改回正常的DNS,高级的做法是入侵正常的DNS服务器,改掉域名和IP的正确对应关系。于是使用该DNS的用户都会遭殃,这种情况只能等运营商去修复或者使用其他未被入侵的DNS。

负载均衡策略

随着网络的普及和发展,瓶颈已经不再是服务器或者数据库的压力了,而是流量和访问速度。打个比方,有一个很大的水池可以存放很多水,但是只有一个水龙头放水,此时水就会放得很慢,后面的水要等前面的水放出来才能进入水池,那么怎么办呢?多弄几个水龙头同时放水就可以解决这个问题。其实CDN就是这么一件事情。

CDN的全称是 Content Delivery Network,即内容分发网络是通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络。CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet 网络的状况,提高用户访问网站的响应速度。

最常见的就是通过CDN服务商去分配合适的IP给用户访问,一般遵循3种方式分配。

(1)就近分配,即CDN服务器获取本地IP所在地,然后访问最近的CDN节点,这样可以少经过几条路由,从而加快访问速度,如图所示。

在这里插入图片描述

(2)负载均衡分配,如果都按照上图的原则去分配,势必会导致一个问题,即北上广的用户过多,而其他地方用户太少,这样北上广用户还是会慢,都堵在一个节点。所以需要根据每个节点的负载压力自动将其分配到压力较小的节点。

(3)手动分配,以上两种都是自动分配,但有一种情况是某个节点网络出问题,或者机房断电等不可控因素,这时候就要手动调配节点以保证用户不受影响。

当然也可以不通过CDN服务商达到CDN的目的,就是自己做CDN,虽然成本较大,但私密信息不会泄露。毕竟通过CDN服务商必须把信息放在CDN节点上,这样隐秘性比较难保证。

最后说一下云服务,随着网络架构越来越复杂,需要耗费大量的人力和物力去搭建网络架构,还有很大的维护成本。于是就兴起了云服务,云服务的说法众说纷纭,原理搭建一套独立的网络系统提供给企业或者个人使用,从中收取费用。对使用者而言节约了自身的开发和搭建的时间,而对于云服务的开发者来说又提供了很好的服务。这是一个双赢的结果,也是越来越多企业和个人愿意使用云服务,而各种大公司又愿意开发云服务的原因。

Linux 系统基本操作

Linux 系统作为常用的服务器系统,不论测试环境的部署,还是构建测试场景,它的基本操作对专家级的测试人员来说都是必须掌握的技能。测试人员可以从以下几方面学习Linux知识。

(1)获得帮助·#help #man

(2)基础命令

    tar与gzip 34

    mount,umount 图形界面和命令行界面的切换

    列出目录中的文件(LS)

    ·目录切换(CD)

    ·创建、移动、复制、删除文件的操作

    ·重启和关机

(3)建新目录

         cp rm

        · mv

        ·dudf

        ·cat

(4)文件指令
(5)清除屏幕
(6)组管理
(7)进程服务
(8)网卡设置
(9)服务进程

    ·Web服务
    ·ssh服务

数据库知识

数据库对于测试人员来说不是陌生的话题。测试工程师在编写测试用例时,要根据数据库的 表结构编写SQL语句。让测试结果不受前端显示的影响,可以更彻底地校验数据的正确性。

对于专家级的测试人员,数据库的使用也不是单单停留在查询数据而已。可以通过对数据库 的修改构建测试人员所需的测试场景。这算是一种比较高级的测试,这种测试已经不是简单的黑 盒测试,首先要对程序逻辑清楚,而且还要对数据库的表和字段都非常熟悉,不然是没法通过对 数据库的操作来达到测试的目的的。

有些时候需要测试工程师具备检验异常情况下的程序处理能力,而某些异常场景通过测试数 据本身无法模拟。这时候就需要通过修改数据库,如插入一条异常数据,或者修改某个字段,达 到构建异常测试场景的效果。具体情况需要根据程序和数据库的处理逻辑来修改,这是专家级测 试人员必备的一种测试思路。

以上这些不需要样样精通,但至少需要达到理解的程度。因为具备这些知识不仅可以发现更 深层次的bug,对于分析定位bug也非常有用。而此时可以做的测试内容就非常多了,不再局限 于手工测试,可以借助于各种辅助工具来协助测试,从而完成一些手工测试无法做到的测试,比 如接口测试或者安全性测试等。

专家级的测试人员需要具备很强的综合能力,不但要精通各方面相关技术,还需要具备一定的编码能力,能将人工的测试转化为自动化测试和并发测试,并且通过工具或自己写的脚本把人力从一些烦琐和重复的测试之中解放出来,从而投入到其他更需要花时间测试精力的地方。这就需要测试人员具备专业以外的技能,如项目管理以及业务分析等。

专家级的测试相比工程师级的测试,可以通过各种方式把测试贯穿在整个项目中,将测试进行得更全面和细致,大大缓解了测试时间的压力,自然而然项目的质量也会更好。虽然说“三个臭皮匠赛过诸葛亮”,但考虑人力成本的性价比,公司应该一定会选择一个诸葛亮。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 你需要具备嵌入式软件工程师的基本知识和技能,包括编程语言(如C/C++)、数据结构和算法、计算机系统结构以及电路设计等。另外,你还需要具备良好的问题解决能力、分析和调试能力,以及对嵌入式系统技术的熟悉。 ### 回答2: 作为一名嵌入式软件工程师,你需要具备以下技能: 1. 编程技能:精通C/C++编程语言是嵌入式软件开发的基础。同时,你还需要熟悉使用汇编语言,并具备良好的数据结构和算法基础。 2. 微处理器和嵌入式系统知识:了解和熟悉各种微处理器和嵌入式系统架构,如ARM、MIPS等,以及它们的特性、寄存器和系统级编程。 3. 操作系统:掌握嵌入式操作系统,如Linux、RTOS等的开发和调试技术。了解操作系统的原理和内核实现,能够进行任务调度、内存管理和设备驱动等相关开发。 4. 硬件知识:了解基本的电路原理、数字和模拟电子技术,熟悉各种外设接口协议(如UART、SPI、I2C等),能够进行硬件和软件之间的交互开发。 5. 调试和故障排除能力:能够运用调试工具和设备,如示波器、逻辑分析仪等进行硬件和软件的调试和故障排除。 6. 团队合作和沟通能力:作为一名软件工程师,你需要与硬件工程师、测试人员等不同团队成员进行有效的沟通和合作,完成项目的开发和测试工作。 7. 持续学习和自我提升能力:嵌入式领域技术更新快速,持续学习和自我提升能力至关重要。关注新技术和行业动态,积极参与培训和技术交流,不断提升自己的技术水平。 总之,成为一名嵌入式软件工程师需要具备扎实的编程基础和深入的硬件知识,同时具备良好的分析和解决问题的能力,以及团队合作和自我学习的能力。 ### 回答3: 要成为一名嵌入式软件工程师,你需要具备以下技能: 1. 编程技能:精通嵌入式软件开发所需的编程语言,如C和C++等。你需要能够写出高效、可靠的代码,处理底层硬件和外设。 2. 硬件知识:了解嵌入式系统的硬件组成,包括微处理器、存储器、外设等。你需要能够根据系统要求选择合适的硬件平台,并与硬件工程师紧密合作。 3. 操作系统:熟悉常见的嵌入式操作系统,如RTOS(实时操作系统),以及系统级开发。 4. 电路设计和电子知识:了解基本的电路设计原理、数字和模拟电路的工作原理。这有助于你更好地理解和调试嵌入式系统。 5. 软件测试和调试:掌握嵌入式软件的调试和测试技巧,能够使用各种工具进行错误检测和修复。 6. 嵌入式系统架构和设计:理解嵌入式系统的架构和设计原理,包括系统性能优化、功耗管理、数据通信等。 7. 项目管理和团队合作:具备良好的项目管理能力和团队合作精神,能够与团队成员协作完成项目。 8. 持续学习和兴趣:嵌入式技术不断发展,你需要保持持续学习的态度,紧跟技术的最新动态,并对嵌入式软件开发有浓厚的兴趣。 以上这些技能是成为一名优秀的嵌入式软件工程师所必须具备的。通过深入学习和实践,你可以逐渐提升自己的技能水平,并在这个领域中取得成功。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佛系的老肖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值