浅谈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

目录
相关文章
|
3天前
|
SQL 安全 测试技术
Web应用程序安全测试
Web应用程序安全测试
|
3天前
|
Web App开发 编解码 前端开发
面试题22:如何测试Web浏览器的兼容性?
面试题22:如何测试Web浏览器的兼容性?
|
3天前
|
存储 缓存 监控
Web 应用程序性能测试核心步骤
Web 应用程序性能测试核心步骤
|
1天前
|
JavaScript Java 测试技术
《手把手教你》系列技巧篇(四十六)-java+ selenium自动化测试-web页面定位toast-下篇(详解教程)
【5月更文挑战第10天】本文介绍了使用Java和Selenium进行Web自动化测试的实践,以安居客网站为例。最后,提到了在浏览器开发者工具中调试和观察页面元素的方法。
12 2
|
2天前
|
Web App开发 JavaScript 测试技术
《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)
【5月更文挑战第9天】本文介绍了在Appium中处理App自动化测试中遇到的Toast元素定位的方法。Toast在Web UI测试中也常见,通常作为轻量级反馈短暂显示。文章提供了两种定位Toast元素的技巧.
10 0
|
3天前
|
存储 人工智能 测试技术
python自动化测试实战 —— CSDN的Web页面自动化测试
python自动化测试实战 —— CSDN的Web页面自动化测试
194 0
|
3天前
|
安全 测试技术 持续交付
在Python Web开发中,测试是一个至关重要的环节
【5月更文挑战第12天】在Python Web开发中,测试至关重要,包括单元测试(unittest模块)、集成测试、功能测试、系统测试、验收测试、性能测试、安全测试和端到端测试。常用的测试工具有unittest、pytest、selenium、requests和coverage。遵循“测试先行”和“持续集成”原则,确保代码质量与稳定性。
141 3
|
3天前
|
JSON 监控 安全
LabVIEW测试和调试Web服务
LabVIEW测试和调试Web服务
14 1
|
3天前
|
SQL 安全 数据处理
Web 测试神器:HackBar 保姆级教程
Web 测试神器:HackBar 保姆级教程
|
3天前
|
XML Web App开发 测试技术
python的Web自动化测试
【4月更文挑战第16天】Python在Web自动化测试中广泛应用,借助Selenium(支持多浏览器交互)、BeautifulSoup(解析HTML/XML)、Requests(发送HTTP请求)和Unittest(测试框架)等工具。测试步骤包括环境搭建、编写测试用例、初始化浏览器、访问页面、操作元素、验证结果、关闭浏览器及运行报告。注意浏览器兼容性、动态内容处理和错误处理。这些组合能提升测试效率和质量。
15 6