App接口测试
使用工具
测试设计:通过性验证:首先肯定要保证这个接口功能是好使的,也就是正常的通过性测试,按照接口文档上的参数,正常传入,是否可以返回正确的结果。参数组合:现在有一个操作商品的接口,有个字段type,传1的时候代表修改商品,商品id、商品名称、价格有一个是必传的,type传2的时候是删除商品,商品id是必传的,这样的,就要测参数组合了,type传1的时候,只传商品名称能不能修改成功,id、名称、价格都传的时候能不能修改成功。接口安全:绕过验证,比如说购买了一个商品,它的价格是300元,那我在提交订单时候,我把这个商品的价格改成3元,后端有没有做验证,更狠点,我把钱改成-是不是我的余额还要增加?绕过身份授权,比如说修改商品信息接口,那必须得是卖家才能修改,那我传一个普通用户,能不能修改成功,我传一个其他的卖家能不能修改成功参数是否加密,比如说我登陆的接口,用户名和密码是不是加密,如果不加密的话,别人拦截到你的请求,就能获取到你的信息了,加密规则是否容易破解。密码安全规则,密码的复杂程度校验异常验证:所谓异常验证,也就是我不按照你接口文档上的要求输入参数,来验证接口对异常情况的校验。比如说必填的参数不填,输入整数类型的,传入字符串类型,长度是10的,传1总之就是你说怎么来,我就不怎么来,其实也就这三种,必传非必传、参数类型、入参长度。性能测试接口并发情况,如上面提到的:一个账号,同时(大于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放在Requestbody中。
使用jmeter测试方法:确认接口从开发人员那里获取接口文档,接口文档应该包括完整的功能接口、接口请求方式、接口请求URL、接口请求参数、接口返回参数。如果当前项目没有接口文档,则可以使用fiddler或charles对APP进行抓包确认。fiddler和charles对手机进行抓包的方法可以参考:http://blocsdnet/whorus1/article/details/50673740在手机上对APP进行操作,然后在Fiddler中可以抓取对应的网络交互信息。在抓取的信息中可以看到接口请求方式、接口请求URL、接口请求参数、接口返回参数。
在Jmeter中编写测试脚本在测试计划中添加一个线程组。可以将线程组的名称改成测试项目的名称。在性能测试时可以通过配置线程属性中的参数来控制并发用户数:线程数:虚拟用户数,即并发数,一个线程表示一个虚拟用户;Ramp-UpPeriod:所有线程启动的时间,单位s。通过这个参数可以设置每个线程间的启动间隔,防止给电脑造成太大性能压力;循环次数:测试循环的次数,如果勾选了“永远”,那么所有线程会一直发送请求,直到手动停止运行脚本;在线程组中添加HTTP请求。可以将名称改为待测接口的名称;在Web服务器中填入请求服务器的地址和端口号;协议中填入HTTP请求的协议,可以是http或https,我们一般用的都是http;在方法中选择HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE;在路径中填入接口请求的URL;请求参数:如果是GET方法的请求,请求参数直接写在URL后面即可;如果是POST的方法,则需要在BodyData中填入包含请求参数的数据;在线程组中添加HTTP信息头管理器。配置如下:添加监听器。主要配置完成了,需要添加监听器以查看测试结果。一般我们使用查看结果树和聚合报告查看。查看结果树:在结果树中会以树形结构展示每个接口请求的测试结果,包括取样器结果、请求、响应数据,在响应数据中可看到网络侧返回的数据,可以以接口文档中期望返回的参数做比较以判断返回是否正确。在结果树中通过颜色可以直观的看到接口测试的结果,绿色为通过,红色为失败。**聚合报告:**从聚合报告中我们可以获取到比较多的信息,包括接口的响应时间、吞吐量、通过率等,在接口的性能测试中很有用。表中参数的含义如下:添加响应断言。查看测试结果时我们会发现有时候网络侧返回数据不符合要求时Jmeter给出的结果仍是通过的。这时候我们需要通过断言来判断网络的返回数据是否符合要求。比如,我们可以添加一个断言来检查返回信息中是否包含关键字“errMsg”来判断错误信息:首先添加一个相应断言,在要测试的响应字段中选择响应文本,在模式匹配规则中选择包括,勾选否,在要测试的模式中添加提一条,输入关键字“errMsg”;意思是检查网络返回结果中不包含“errMsg”的才会判定为通过。另外我们还可以从监听器中添加一个断言结果,在断言结果中可以查看断言的详细返回信息。其他补充使用CSVDataSetConfig定义变量。举个例子,我们想要测试多用户登陆时要怎么做?可以在线程属性中配置多个线程,但是这样只是同一个用户多次登录,多个不同的用户需要输入不同的用户名密码。当然我们可以写多个登录的HTTP请求,每个请求输入不同的参数,但是这样太傻了。这个时候我们可以通过CSVDataSetConfig来定义两个变量代表用户名和密码,然后传入不同的值即可实现多用户的登录:我们在登录的case中添加一个CSVDataSetConfig。0Filename:指定读取用户名和密码的文件,我们会将所有的用户名密码写到该文件中;FileEncoding::写入用户名密码的文件编码格式,不写的时候默认为ANSIVaribleNames:定义文本文件中的变量名用户名=user和密码=pwd,变量之间逗号分隔。
我们到上面Filename的路径下创建该文件并写入用户名密码,用户名和密码之间用逗号分开,不同用户名密码之间换行。
到Jmeter的脚本中将原本的用户名密码改为变量名,由于我们使用的是Post方法,所以到BodyData中修改:
使用postman做接口测试以下是postman界面:第一步创建一个请求:
第二步输入接口的请求方式和接口域名和接口地址:get请求POST请求第三步运行postman对接口进行请求
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点