浅谈web接口测试

简介: 1.(web)接口的本质是什么?在谈接口测试之前,想先问一下,接口是什么?很多人可能使用过postman一类的工具,填上url和访问方法等等,然后工具会访问这个url并把返回值呈现给你,那么,是否这个url就是“接口”?答案是,不一定。

1.(web)接口的本质是什么?

在谈接口测试之前,想先问一下,接口是什么?

很多人可能使用过postman一类的工具,填上url和访问方法等等,然后工具会访问这个url并把返回值呈现给你,那么,是否这个url就是“接口”?

答案是,不一定。

(web)接口的本质,其实就是部署在服务器上的程序。

访问url,这个url可能只是一个静态资源,那么我认为不能算是接口,接口是有一定属性的、协商过的满足一定协议的服务,类似于www.baidu.com/pic/1.jpg这种静态文件的url,其实只是让你访问,但没有任何的处理。(但是并不是说静态资源就不用测了,是两回事,静态文件的url不能算接口, 但是cdn统一向外提供静态资源的服务可以算接口,图片的名称可以算传入的参数)

接口是开发预先定义好的程序,是web服务的子集,接口名其实就是程序名,当你(可能还带着参数)访问这个程序名的时候,程序就会按照预定的流程进行处理;这个程序可能会处理sql可能不会,可能会把数据做处理也可能只是简单返回一个ok,这不重要,重要的是,他一定是一段具有逻辑的程序。

2.如何进行(web)接口测试?

如果把问题从如何进行(web)接口测试,等价的换为,如何对一个程序进行测试,那么我想,对大家而言会轻松很多,因为一直以来,我们都在做这样的测试。

如何对一个程序如何进行测试?

很简单,先分类,首先是基本的功能逻辑验证,然后可能还会有安全性测试,程序健壮性测试,性能测试等等。

具体来说,我建议按照以下的顺序循序渐进的完善我们的接口用例case。

首先,做到回归可用,也就是说,将接口组合,串起一整条业务线,这个时候每个接口的参数可能是固定的,但是跑起来已经可以覆盖基础业务场景;

其次,完善接口测试的业务逻辑,达到业务逻辑的全覆盖,这个时候可能每个接口会有不同的入参以实现不同的业务场景(举例而言,金牌的业务场景和普通认证的就有不同)

然后,在该基础上,查验是否已经实现了接口文档所有的入参类型和返回值类型,如果没有实现,那么加上,最终实现对文档内参数的覆盖;

最后,有针对性的对接口增加边界值,异常值,安全测试数据等等非文档内的参数进行补充测试。

3.接口从哪儿来?

如果有接口文档,肯定是看文档最好了,但是一个文档应该要包含接口的所有信息(所有可能的入参包含是否必选,所有可能的返回值,返回值类型),目前而言,可能还不够能作为参考;

如果没有文档或者文档缺失严重,可以自己根据业务流程抓包(fiddler)。

4.接口测试的工具

自己写的话,可以用py+request库,结合测试框架比如testng等等进行设计;此外现成的工具比较著名的还有soapui,test studio for apis,以及我们今天要说的jmeter。

5.使用jmeter访问一个接口

jmeter的安装我就不说了,官网直接下载就行,需要说明的是,最新的jmeter3.2需要java8的支持。

首先我们需要在测试计划里新建一个线程组,所有的访问都会在该线程组下进行;

以我司登录接口举例,在线程组内,增加一个http取样器并填写好我们要访问的地址(xxxxx.xxxx.com),协议(https),方法(POST),路径(/passport/api/auth/app-login);

开始跑,发现已经跑完了,但是并不知道跑的结果;

要知道结果,我们需要添加一个监听器(聚合报告&查看结果树),

发现返回的是没登录的信息,这时候我们加上post参数,userName,password,tenantCode,

查看返回值,发现登录成功了,那么我们现在把参数改一下,把密码改为错误的密码。

查看结果,发现对于jmeter来说,这个访问依然算成功的,那么如何让正确的登录和错误的登录有区别呢?

我们需要增加断言,也就是,判断标准。

在取样器后加上断言。

现在我们断言登录正确的情况。

然后切回错误的密码,可以看到这时候jmeter已经算他是失败的了。

这样我们一个基本的访问-断言-查看报告的流程就形成了。

但是具体到业务场景,我们可能会遇到一些问题。

6.jmeter里的参数化

举个最简单的例子,我们很多接口都是有依赖的或者频繁用到某个参数,比如说,登录账号,那么如果哪天登录的账号出问题了,难道要一个接口一个接口改吗?

当然不是,我们可以对登录账户进行参数化。

这里先介绍一下量级比较少的话,我们可以用用户自定义的变量,右键添加一个配置元件,用户自定义的变量,在这里我们可以自定义变量名和变量值,使用${}的语法进行引用。

如果量级比较大,我们可以把数据放到excel里,然后使用csv data set config,同样式右键添加一个配置元件,这个暂时不细说了,有兴趣的可以百度或者之后直接问我。

7.jmeter里的取参传参

我们的可能会遇到很多情况是,一个接口,需要用到上一个接口里返回的参数,这时候,我们需要用到提取器来进行参数提取,此外,有登录依赖的接口,可以使用http cookies管理器,如果你登录成功了,会自动替你管理cookies。

在取样器右键选择后置处理器-正则表达式提取器,进行参数的提取。

8.jmeter里获取数据库的数据

我们有可能会遇到需要校验或者使用数据库里的参数,比如说,验证码登录,我们就需要去数据库里查询验证码,这时候需要用到jdbc connection configuration,在线程组下右键-添加-配置元件-选择jdbc connection configuration

9.把jmeter放进持续集成

首先我们需要安装一个ant,然后把jmeter extras目录下的ant-jmeter-1.1.1.jar这个包扔到ant的lib目录,再把jmeter下的build.xml修改一下,这时候就可以用ant启动jmeter,并把测试报告转化为html了。
然后配置一下jenkins,使用ant插件构建build.xml就可以了
这个比较麻烦,所以不单独写了,附上我之前参考的文档:
Jmeter+Ant+Jenkins搭建持续集成的接口测试框架https://my.oschina.net/hellotest/blog/516079

目录
相关文章
|
23天前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
106 7
Jmeter实现WebSocket协议的接口测试方法
|
23天前
|
前端开发 机器人 测试技术
【RF案例】Web自动化测试弹窗处理
在进行Web自动化测试时,常会遇到不同类型的弹窗,如ajax、iframe、新窗口及alert/Confirm等。这些弹窗可通过Selenium进行定位与处理。其中,ajax弹窗直接定位处理;iframe需先选中再操作;新窗口类似iframe处理;而alert/Confirm则需特殊方法应对。在Robot Framework中,需先定义并获取窗口后使用特定关键字处理。此外,还有部分div弹窗需在消失前快速定位。希望本文能帮助大家更好地处理各类弹窗。
23 6
【RF案例】Web自动化测试弹窗处理
|
23天前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
101 3
快速上手|HTTP 接口功能自动化测试
|
13天前
|
安全 API 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
在当前的Web开发中,Python因能构建高效简洁的RESTful API而备受青睐,大大提升了开发效率和用户体验。本文将介绍RESTful API的基本原则及其在Python中的实现方法。以Flask为例,演示了如何通过不同的HTTP方法(如GET、POST、PUT、DELETE)来创建、读取、更新和删除用户信息。此示例还包括了基本的路由设置及操作,为开发者提供了清晰的API交互指南。
55 6
|
23天前
|
JavaScript 前端开发 测试技术
ChatGPT与接口测试
ChatGPT与接口测试,测试通过
31 5
|
2月前
|
测试技术
基于LangChain手工测试用例转Web自动化测试生成工具
该方案探索了利用大模型自动生成Web自动化测试用例的方法,替代传统的手动编写或录制方式。通过清晰定义功能测试步骤,结合LangChain的Agent和工具包,实现了从功能测试到自动化测试的转换,极大提升了效率。不仅减少了人工干预,还提高了测试用例的可维护性和实用性。
47 4
|
2月前
|
Web App开发 测试技术 API
自动化测试之美:使用Selenium和Python进行Web应用测试
【8月更文挑战第31天】在软件开发的快节奏世界中,自动化测试如同一束明灯,照亮了质量保证之路。本文将引导你通过Selenium和Python的强大组合,探索如何构建高效的Web应用测试框架。我们不仅会讨论理论,还会深入代码,从一个简单的示例开始,逐步扩展至更复杂的场景。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。让我们一同揭开自动化测试的神秘面纱,体验它的魅力所在。
|
2月前
|
网络协议 测试技术 网络安全
Python进行Socket接口测试的实现
在现代软件开发中,网络通信是不可或缺的一部分。无论是传输数据、获取信息还是实现实时通讯,都离不开可靠的网络连接和有效的数据交换机制。而在网络编程的基础中,Socket(套接字)技术扮演了重要角色。 Socket 允许计算机上的程序通过网络进行通信,它是网络通信的基础。Python 提供了强大且易于使用的 socket 模块,使开发者能够轻松地创建客户端和服务器应用,实现数据传输和交互。 本文将深入探讨如何利用 Python 编程语言来进行 Socket 接口测试。我们将从基础概念开始介绍,逐步引导大家掌握创建、测试和优化 socket 接口的关键技能。希望本文可以给大家的工作带来一些帮助~
|
2月前
|
网络协议 测试技术 网络安全
Python进行Socket接口测试的实现
在现代软件开发中,网络通信是不可或缺的一部分。无论是传输数据、获取信息还是实现实时通讯,都离不开可靠的网络连接和有效的数据交换机制。而在网络编程的基础中,Socket(套接字)技术扮演了重要角色。 Socket 允许计算机上的程序通过网络进行通信,它是网络通信的基础。Python 提供了强大且易于使用的 socket 模块,使开发者能够轻松地创建客户端和服务器应用,实现数据传输和交互。 本文将深入探讨如何利用 Python 编程语言来进行 Socket 接口测试。我们将从基础概念开始介绍,逐步引导大家掌握创建、测试和优化 socket 接口的关键技能。希望本文可以给大家的工作带来一些帮助~
|
2月前
|
SQL Java 测试技术
SpringBoot单元测试快速写法问题之PorkService 接口中的 getPork 方法的作用如何解决
SpringBoot单元测试快速写法问题之PorkService 接口中的 getPork 方法的作用如何解决
下一篇
无影云桌面