App接口测试的流程和测试方法

时间:2024-03-12 11:53:53

App接口测试

使用工具

Fiddler、Jmeter、postman

测试设计:
通过性验证:
首先肯定要保证这个接口功能是好使的,也就是正常的通过 性测试,按照接口文档上的参数,正常传入,是否可以返回正确的结果。
参数组合:
现在有一个操作商品的接口,有个字段 type,传 1 的时候代 表修改商品,商品 id、商品名称、价格有一个是必传的,type 传 2 的时 候是删除商品,
商品 id 是必传的,这样的,就要测参数组合了,type 传 1 的时候,只传 商品名称能不能修改成功,id、名称、价格都传的时候能不能修改成功。
接口安全:
1、绕过验证,比如说购买了一个商品,它的价格是 300 元,那我在提交 订单时候,我把这个商品的价格改成 3 元,后端有没有做验证,更狠点, 我把钱改成-3,是不是我的余额还要增加?
2、绕过身份授权,比如说修改商品信息接口,那必须得是卖家才能修改, 那我传一个普通用户,能不能修改成功,我传一个其他的卖家能不能修改 成功
3、参数是否加密,比如说我登陆的接口,用户名和密码是不是加密,如 果不加密的话,别人拦截到你的请求,就能获取到你的信息了,加密规则 是否容易**。
4、密码安全规则,密码的复杂程度校验
异常验证:
所谓异常验证,也就是我不按照你接口文档上的要求输入参数,来验 证接口对异常情况的校验。比如说必填的参数不填,输入整数类型的,传 入字符串类型,长度是 10 的,传 11,总之就是你说怎么来,我就不怎么 来,其实也就这三种,必传非必传、参数类型、入参长度。
性能测试
接口并发情况,如上面提到的:一个账号,同时(大于 2 个请求)对最后 一个商品下单,或不同账号,对最后一个商品下单 接口响应时间,响应时间太长了,肯定需要优化,一般都是毫秒级别
在这里插入图片描述
GET 和POST 的区别:
GET 在浏览器回退时是无害的,而 POST 会再次提交请求。
GET 产生的 URL 地址可以被 Bookmark,而 POST 不可以。
GET 请求会被浏览器主动 cache,而 POST 不会,除非手动设置。
GET 请求只能进行 url 编码,而 POST 支持多种编码方式。
GET 请求参数会被完整保留在浏览器历史记录里,而 POST 中的参数不会
被保留。
GET 请求在 URL 中传送的参数是有长度限制的,而 POST 么有。
对参数的数据类型,GET 只接受 ASCII 字符,而 POST 没有限制。
GET 比 POST 更不安全,因为参数直接暴露在 URL 上,所以不能用来传递
敏感信息。
GET 参数通过 URL 传递,POST 放在 Request body 中。

使用jmeter测试方法:
1. 确认接口
从开发人员那里获取接口文档,接口文档应该包括完整的功能接口、接口请求方式、接口请求URL、接口请求参数、接口返回参数。
如果当前项目没有接口文档,则可以使用fiddler或charles对APP进行抓包确认。
fiddler和charles对手机进行抓包的方法可以参考:http://blog.csdn.net/whorus1/article/details/50673740
在手机上对APP进行操作,然后在Fiddler中可以抓取对应的网络交互信息(一个功能中可能设计多个接口的交互)。在抓取的信息中可以看到接口请求方式、接口请求URL、接口请求参数、接口返回参数。

2. 在Jmeter中编写测试脚本
1.在测试计划中添加一个线程组(在测试计划上右击,添加-Threads-线程组)。
在这里插入图片描述
可以将线程组的名称改成测试项目的名称。
在性能测试时可以通过配置线程属性中的参数来控制并发用户数:
线程数:虚拟用户数,即并发数,一个线程表示一个虚拟用户;
Ramp-Up Period:所有线程启动的时间,单位s。通过这个参数可以设置每个线程间的启动间隔,防止给电脑造成太大性能压力;
循环次数:测试循环的次数,如果勾选了“永远”,那么所有线程会一直发送请求,直到手动停止运行脚本;
在这里插入图片描述
2. 在线程组中添加HTTP请求(在线程组上右击,添加-Sampler-HTTP请求)。
可以将名称改为待测接口的名称;
在Web服务器中填入请求服务器的地址和端口号;
协议中填入HTTP请求的协议,可以是http或https,我们一般用的都是http;
在方法中选择HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE;(我们项目中的接口方法使用的主要是GET和PUT,在目前易户网的项目中由于APP不直接和服务器交互,中间有一个统一接口平台,所以GET方法的接口请求也要使用POST进行交互。)
在路径中填入接口请求的URL;
请求参数:如果是GET方法的请求,请求参数直接写在URL后面即可;如果是POST的方法,则需要在Body Data中填入包含请求参数的数据(Body Data可以从Fiddler抓的包中获取,将Fiddler抓取的到数据包中Inspectors-TextView中的数据复制到Body data中即可);
在这里插入图片描述
3. 在线程组中添加HTTP信息头管理器(在线程组上右击,添加-配置元件-HTTP请求信息头管理器)
配置如下:
在这里插入图片描述
4.添加监听器(在线程组上右击,添加-监听器-XXX)。
主要配置完成了,需要添加监听器以查看测试结果。一般我们使用查看结果树和聚合报告查看。
查看结果树:在结果树中会以树形结构展示每个接口请求的测试结果,包括取样器结果、请求、响应数据,在响应数据中可看到网络侧返回的数据,可以以接口文档中期望返回的参数做比较以判断返回是否正确。在结果树中通过颜色可以直观的看到接口测试的结果,绿色为通过,红色为失败。
在这里插入图片描述
**聚合报告:**从聚合报告中我们可以获取到比较多的信息,包括接口的响应时间、吞吐量、通过率等,在接口的性能测试中很有用。
在这里插入图片描述
表中参数的含义如下:
在这里插入图片描述
5. 添加响应断言(添加-断言-响应断言)。
查看测试结果时我们会发现有时候网络侧返回数据不符合要求时Jmeter给出的结果仍是通过的。这时候我们需要通过断言来判断网络的返回数据是否符合要求。
比如,我们可以添加一个断言来检查返回信息中是否包含关键字“errMsg”来判断错误信息:
首先添加一个相应断言,在要测试的响应字段中选择响应文本,在模式匹配规则中选择包括,勾选否,在要测试的模式中添加提一条,输入关键字“errMsg”;
意思是检查网络返回结果中不包含“errMsg”的才会判定为通过。
另外我们还可以从监听器中添加一个断言结果,在断言结果中可以查看断言的详细返回信息。
在这里插入图片描述
在这里插入图片描述
3. 其他补充
使用CSV Data Set Config定义变量。
举个例子,我们想要测试多用户登陆时要怎么做?可以在线程属性中配置多个线程,但是这样只是同一个用户多次登录,多个不同的用户需要输入不同的用户名密码。当然我们可以写多个登录的HTTP请求,每个请求输入不同的参数,但是这样太傻了。
这个时候我们可以通过CSV DataSet Config来定义两个变量代表用户名和密码,然后传入不同的值即可实现多用户的登录:
1、我们在登录的case中添加一个CSV DataSet Config(添加-配置元件-CSV Data Set Config)。
在这里插入图片描述
0Filename:指定读取用户名和密码的文件,我们会将所有的用户名密码写到该文件中;
FileEncoding::写入用户名密码的文件编码格式,不写的时候默认为ANSI
VaribleNames:定义文本文件中的变量名用户名=user和密码=pwd,变量之间逗号分隔。

2、我们到上面Filename的路径下创建该文件并写入用户名密码,用户名和密码之间用逗号分开,不同用户名密码之间换行。

3、到Jmeter的脚本中将原本的用户名密码改为变量名,由于我们使用的是Post方法,所以到Body Data中修改:

使用postman做接口测试
以下是postman界面:
在这里插入图片描述
第一步创建一个请求
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二步输入接口的请求方式和接口域名和接口地址:
在这里插入图片描述
get请求(get请求的参数是放在Params里面的)
在这里插入图片描述
POST请求(post请求的参数是放在Body里面的,需要选择数据提交的格式)
在这里插入图片描述
在这里插入图片描述
第三步运行postman对接口进行请求(点击send,即可在"Response" 中查看返回的结果。)

在这里插入图片描述
以上就是postman接口测试基本使用方法总结。