服务端测试相关 2018-7-30 10:33:57

服务端测试相关

服务端测试分为两种: 一种是对web端或app端的服务端进行测试,这种服务端是对web/app提供数据接口,以供客户端对数据的读取/存储/修改等,一般都是以http接口的方式提供,在后端开发完成接口以后,测试人员就直接用TestNG+HttpClient写接口测试用例、或者用Postman等工具手工测试。如果项目紧张,一般会先用Postman等工具先手工测试,等版本发布完以后,再用TestNG+HttpClient把自动化用例补上去,或者用Python的Nose框架。

如果遇到后端服务大的重构、或者是第一次上线预计有大流量的,那还需要对后端服务做一个性能测试,用JMeter/Grinder等工具编写脚本并进行压测,看看后端服务能不能撑住大流量(需要掌握接口压测工具)

还有一种就是对更后端的数据库、缓存系统、中间件、文件系统等进行测试 这种就类似于云计算等后端基础服务的测试,对于一些大的公司,会有一个专门的团队来开发这种后端基础服务,这种服务当然也需要测试人员来保证质量。

不过,对于这类后端服务来说,接口只是暴露给外用的部分,内部逻辑通常是非常复杂的,所以,除了针对接口做测试之外,测试人员还需要细致地了解这些服务端产品的技术框架及技术实现,需要了解到模块的级别,对于系统框架图、时序图等都有很好的理解。针对这些理解去设计用例,再跟开发一起讨论如何实现用例。 如果这种基础服务用了某一个开源软件,那通常也需要测试人员能关注社区的进展,并把我们发现的Bug及解决方案等推到社区,为社区做贡献。 除了接口测试之外,在我们公司,异常测试、稳定性测试、性能测试也是服务端测试必备的测试类型。

异常测试会模拟各种异常情况,比如硬件异常-机器挂掉的情况下能否启动备机、硬盘挂掉的情况下是否会丢失数据;网络异常-网络忽然断掉、或者网络流量变小的情况;系统异常-操作系统忽然挂掉的情况。这些极端的情况出现的时候,我们需要验证数据有没有丢、能不能尽快启动备机对外提供服务、系统状态有没有异常等。我们会采用各种方式或者工具来模拟这些异常,比如用TrafficControl工具来控制网络流量。

稳定性测试,就是模拟系统在7*24的运行下会不会出问题,一般会用接口测试或者性能测试用例不断地跑,在运行期间,我们会模拟各种情况,比如说负载的变化、系统的各种干扰等。可以用ChaosMonkey等工具来进行这类测试。

性能测试,其实细分起来会有各种类型,比如负载测试、压力测试、配置测试、甚至还有线上压测、容量规划等。最常规的性能测试,一般是先规定一个系统需要承受的压力,比如说,某一个系统,1个小时之内会有1W单的单子,那基于这个需求我们分析服务器后端需要承受的压力,分析出来以后,就写性能测试脚本,然后逐渐增加压测的力度,直到超过这个预定的压力。通常在这个测试过程中会发现各种问题,比如数据库索引没有建、线程池太小、系统异常等。需要解决了之后再加大压力测试。也是用Grinder/JMeter等工具来进行性能测试,不过难的不是这些工具的使用,而是发现问题以后的定位。 对于这种后端服务的测试人员来说,技术上的要求是挺高的,需要有较好的编程能力,需要对数据库、操作系统等机制有很好的了解才行。

什么是接口测试?

接口可以想象成是电脑的usb接口, 两个物体相连就需要接口连通。 外界的系统想要访问你的系统,你就要暴露出接口,这样你俩才能链接通信, 每个接口都是独立的,各有各的用处。具体到程序中来说就是每个接口都会返回 特定的一组数据, 外界系统访问就是通过 http 协议接口来请求。 接口测试的目的是测试接口,尤其是那些与系统相关联的外部接口, 测试的重点是要检查数据的交换,传递和控制管理过程,还包括处理的次数。外部接口测试一般是作为系统测试来看待的。 为什么要做接口测试:

a:缩短项目开发时间

b:提高工作效率

c:提高系统的健壮性

请求结构:6A9921E2-9F8D-4CA0-B7CF-B5571E3612A7

一个URL就是一个接口:接口大致会分为一下几个部分:

  • 请求协议: http --- 普通的http请求 https --- 加密的http请求,传输数据更加安全 ftp --- 文件传输协议,主要用来传输文件
  • 请求IP:就是指提供接口的系统所部署的服务器地址
  • 请求端口:如果不填端口,默认是80,否则需要填写端口号
  • 接口路径:指系统提供的接口在什么位置
  • 接口参数:参数在接口路径后,用“?”来表示路径地址完了,剩下的都是参数了,用“&”来区分参数个数,

http请求类型: 7BFB6E81-3C13-4011-8041-7E1AA0E29BC

以下详述http请求类型的区别: GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,例

http://push.test.amberweather.com/api/v1/message?appid=11001&lang=ru_RU&appver=2010&spkg=mobi.infolife.ezweather.widget.storm&cc=RU&lang=ru_RU&uid=Z2E4492947423EA862F2E4680C633BD5411&sw=720&sh=1280&brand=samsung&model=SM-J510FN&os_ver=7.1.1&os_vcode=25&ftime=1516766873208

POST把提交的数据则放置在是HTTP包的包体中。

举一个超级简单的例子,假如要请求一个user id=1的数据: get请求: F873A0C7-AA8D-4F15-AE38-5BF7237BE09F post请求: BA3FBB16-2791-48DF-92FB-F52DC9AD67B4

Post请求会将请求数据放在一个body内,post可进行数据的创建与修改,假设你要创建一个user,而你要创建的user数据会放在body内提交给服务端进行创建 AEAE250D-3749-4B38-8A59-684CB8A20A0D

上面的应该知道是怎么回事了,咱们再看正规一点就看微博请求用户数据的的api,用的是get请求。

然后是post请求接口,对微博进行一条评论 一般GET一般用于获取/查询资源信息,而POST一般用于更新资源信息,但是大家不要就这么以为,因为get也可用于更新资源,post请求也可用户查询信息,get与post的区别往大了说是性能好坏的区别,往小了说,是请求数据放置位置的区别。很多人贪方便,更新资源时用了GET,因为用POST必须要到FORM(表单),这样会麻烦一点。

http请求头 请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度。示例: 0B4460EE-DE5F-4608-891A-68BD37BE024E

请求体就是请求等正文了,可以有很多种请求体。 json格式 xml格式 html格式 二进制格式( 多数用于图片 ) 字符串格式

接口测试就是修改接口的参数来测试,类似功能测试一样。可以使用功能测试用例设计方法来设计接口测试用例。

可以借助接口测试工具,如postman:

postman这个接口使用工具很简单,若是get请求的接口,就将接口地址复制到地址栏内send即可,下方会展示接口返回数据,post请求则粘贴完地址后将请求数据粘贴到body内再send即可,接口返回数据以及格式是由开发定的,一般开发会给出接口文档。可用功能测试的方法测试接口,靠修改参数的方式。

开发提供接口文档。最重要的有一下几点:

A:被测接口的地址

B:接口参数,以及各个参数的说明

C:必要的http头与http体 ( http头是可以自定义的,可以用来校验是否是自己人访问 )

D:接口返回什么值,以及各个返回值的说明

E:接口是干什么的

具体的图以后再贴吧,等着提交周报呢。