像APP、WEB这种测试工程师入门级测试技能,对大家来说经常是点点点,但是现在业内大多岗位都是服务端测试,从前端页面发起的测试很容易被替代。
面试一般会重点考察服务端的测试,说到服务端的话当然离不开接口测试,互联网测试从业者的要求越来越高,不仅仅局限于术,更要在道上有所造诣,在面试过程中的考察点一般会涉及以下几点:
(1)软实力;
(2)测试基础理论;
(3)java基础;
(4)linux基础;
(5)sql基础;
(6)测试工具;
(7)自动化等。
面试官会给到候选人一个比较有挑战性的任务,考察其面对问题的态度、分析问题的思路;如果给一个需求如何保证质量,考察责任心;沟通过程是否主动,因为测试工程师对沟通的要求相对来说是比较高的;测试的过程描述是否详细,认证细致也是测试工程师及其优秀的一种品质。
什么是API?
API是(Application Programming Interface)首字母缩略词,即应用程序编程接口。API是一组用于构建软件应用程序的规程,协议和工具。API充当软件应用程序之间的接口,并允许两个软件应用程序相互通信。API是一组软件功能,可以由其他软件执行。
什么是API测试?
API测试是一种软件测试,涉及直接测试API,也是集成测试的一部分,用于检查API是否满足应用程序的功能,可靠性,性能和安全性方面的期望。在API测试中,我们主要关注软件架构的业务逻辑层。可以在包含多个API的任何软件系统上执行API测试。测试人员模拟客户端向服务器发送报文请求,服务器接收请求报文后对相应的报文做处理并向客户端返回应答,客户端接收应答的一个过程。
涉及两大类:
1)代码内部接口调用,代码A与代码B在组合的时候,必然需要定义一些名称以及参数、类型,这种在测试中一般划分在白盒测试中,对内部逻辑进行测试。
2)系统与系统之间,通过网络数据的传递进行交互,这种在测试中一般划分在黑盒测试中,也就是看不到代码,但可以通过各种手段将网络数据发送到接口从而得到接口的响应信息,达到测试的目标。
常见的API测试类型有哪些?
API测试通常涉及以下实践:
单元测试:不依赖外部的数据库,本地调试接口,确保接口的请求、返回符合预期
功能测试:针对接口业务功能做用例设计,通过接口调用工具发起测试执行
负载测试:通过压力测试评估接口的性能
安全测试:检测接口是否存在安全漏洞
故障测试:模拟超时、依赖服务故障、网络故障等,检测接口稳定性
常见的网络协议有TCP、UDP、HTTP,常用的rpc框架有dubbo、thrift、sofa等,面试时经常会了解如下内容:
HTTP: HTTP(超文件传输协议)是一种应用层的网络协议,当前大多数web应用都构建在HTTP协议之上,目前广泛使用的是HTTP/1.1版本。它具有以下几个主要特点:
1)客户机-服务器模型,用于本地浏览器与远程WEB服务器的信息交互 ;
2)请求-响应模式,浏览器为单个事务发起连接请求,服务器在响应这个请求后立即关闭连接(开启了keep-alive除外);
3)无状态协议,协议本身对事务处理没有记忆能力,同一台客户机和服务器的相邻两次连接在HTTP看来是完全无关的,为了记录连接的状态,所以引入了Cookie和Session机制;
4)HTTP在传输层使用的是TCP协议,所以它可以保证信息传输的可靠性。
Thrift:thrift主要用于各个服务之间的跨语言远程通信,thrift通过IDL(Interface Description Language)来关联客户端和服务端。thrift主要支持以下几种服务模型,TSimpleServer: 简单的单线程服务模型,常用于测试;
TThreadPoolServer: 多线程服务模型,使用标准的阻塞式IO;TNonBlockingServer: 多线程服务模型,使用非阻塞式IO(需要使用TFramedTransport数据传输方式); THsHaServer: THsHa引入了线程池去处理,其模型读写任务放到线程池去处理,Half-sync/Half-async处理模式,Half-async是在处理IO事件上(accept/read/write io),Half-sync用于handler对rpc的同步处理。
Dubbo:Dubbo是Alibaba开源的分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。其本质就是一个RPC分布式框架。
用于API测试的一些工具如下:
Eolink: https://www.eolink.com/
Curl
httpie
https://pypi.org/project/thrift/
Postman
Katalon Studio
SoapUI
Assertible
Tricentis Tosca
Apigee
JMeter
Rest Console
RoboHydra Server
SOAP Sonar
测开工程师的职责除了业务质量保证之外,对提效的要求也非常高,一般通过自动化测试提高测试效率,Eolink平台提供了比较成熟的自动化测试工具。在Eolink(https://www.eolink.com/)平台编排自动化用例构建测试计划后,可发起自动化测试,用户可以根据自己的需求灵活编排冒烟测试计划或者回归测试计划,示例如下:
创建自动化测试项目
在API 自动化测试平台中,所有的测试用例都是以项目维度来进行管理,一个自动化测试项目可以从多个API文档项目中引用API信息来创建API测试用例。
进入** 项目 项目列表页,点击新建自动化测试**按钮:

在弹窗中输入相应的信息,点击确定即可:

创建自动化测试用例
进入用例管理页面,点击 添加用例 按钮,在弹窗中输入测试用例的名称,然后点击确定:

创建定时测试任务
API自动化测试可以设置定时任务,实现项目在无人值守的情况下自动测试并且发送报告给相应的邮箱,监控项目监控情况。
进入定时任务页面,点击 新建定时任务 按钮:

在新页面中设置定时任务的周期:

点击 **添加用例 **按钮,设置需要定时执行的测试用例:

设置通知邮件的发送地址,然后点击 保存 按钮即可创建一个定时测试任务:

查看定时测试历史
在定时任务页面,点击相应定时任务的 【历史】 按钮:

在弹窗中可以看到历史的测试报告,您可以将报告导出为文件:

围绕测试开发工程师的核心能力详细讲述了以上几点,其他相关知识: java基础、linux基础、sql基础可在菜鸟教程学习基础知识,常见命令、语法熟练使用即可。
图中所使用的的接口管理工具是 eolink,感兴趣可以自行使用:www.eolink.com
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test