最近总结了一下在接口测试方面的知识与心得,在这里与大家分享一下,如有说的不对的地方请多多指正。

接口测试概述

定义

API testing is a type of software testing that involves testing application programming interfaces (APIs) directly and as part of integration testing to determine if they meet expectations for functionality, reliability, performance, and security. Since APIs lack a GUI, API testing is performed at the message layer.[2] API testing is now considered critical for automating testing because APIs now serve as the primary interface to application logic and because GUI tests are difficult to maintain with the short release cycles and frequent changes commonly used with Agile software development and DevOps).

WIKI定义:接口测试作为集成测试的一部分,通过直接控制API来判断系统的功能性,可靠性,性能与安全性。API测试是没有界面的,执行在通讯层。API 测试在自动化测试中有着重要的地位,因为API一般是应用逻辑的主要接口,而GUI测试在敏捷开发和DevOps的快速迭代和频繁变更中很难维护。

分类

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。接口测试大体分为两类:模块接口测试和web接口测试。

模块接口测试

模块接口测试是单元测试的基础。它主要测试模块的调用与返回。经常需要编写一些桩模块与驱动模块。

主要测试要点如下:

检查接口返回的数据是否与预期结果一致。

检查接口的容错性,假如传递数据的类型错误时是否可以处理。

接口参数的边界值。例如,传递的参数足够大或为负数时,接口是否可以正常处理。

接口的性能,接口处理数据的时间也是测试的一个方法。牵扯到内部就是算法与代码的优化。

接口的安全性

WEB接口测试

web接口测试又可分为两类:服务器接口测试和外部接口测试。

服务器接口测试:是测试浏览器与服务器的接口。用户输入的数据是输入到的前端页面上,怎样把这些数据传递的后台的呢?通过http协议的get与post请求来实现前后端的数据传递。这也可认为是接口测试。

外部接口测试:这个很典型的例子就是第三方支付,比如在我们应用中在充流量时,交话费时,都会调用第三方支付接口。

主要测试要点如下:

请求是否正确,默认请求成功是200,如果请求错误也能返回404、500等。

检查返回数据的正确性与格式;json是一种非常常见的格式。

接口的安全性,一般web都不会暴露在网上任意被调用,需要做一些限制,比如鉴权或认证。

接口的性能,这直接影响用户的使用体验。

接口测试工具

SOAPUI

JMeter

Grinder

Suds Python

在工作中主要应用SOAPUI与JMeter。SOAPUI对接口安全测试有比较好的支持。本文还是主要介绍JMeter的使用,关注的是功能测试,对于它的强项性能测试,在以后的文章中描述。

测试用例设计与原则

因为在实际工作中测试的接口都是基于HTTP协议的,所以下面的测试用例及原则也是针对此类接口。

测试用例

正面测试用例:

  • 覆盖所有的必选参数
  • 组合可选参数
  • 参数边界值
  • 如果参数的取值范围是枚举变量,需要覆盖所有枚举值
  • 还应考虑实际业务应用场景,去设计输入参数的组合。(这些用例可用来测试功能,作为SMOKE用例。也可将来用于压力测试模拟实际业务场景,但要注意保证用例的独立性,因为压力测试是多线程的。比如我们测试ACCOUNT 创建接口,NAME是不能重的,在写测试用例时,给NAME赋值时可以加一个时间戳, 这样用例在多线程并发测试时也不会有问题)

负面测试用例:

  • 空数据
  • 包含特殊的字符
  • 越界的数据
  • 错误的数据

验证点:

  • status code (正常情况下,所有请求都应该返回200)
  • 响应信息数据结构(目前大多数情况下,返回信息都是JSON, 我们应该验证相应的结构当数据信息发生改变时)
  • 验证结点的类型
  • 验证结点的值 (主要是针对固定的值或者值遵循某些规则,我们能知道预期的结果的)
  • 对于列表,应该根据请求参数,也应该验证列表的长度是否与期望值一致
  • 负面测试用例,应验证ERROR INFO是否与实际相匹配

测试原则

测试应该是独立的、可读的、抗变的、可维护的,其实这也是所有自动测试应该遵循的原则

  • 每个测试用例都是独立的
  • 测试用例都是可重复运行的 (这主要是说一些测试数据不能写死,不同的环境数据可能不同。在实际工作中,解决方案有二:自已创建所需要的数据,比如你要测试接口需要输入参数ACCOUNTID,你可以先调用创建ACCOUNT API, 然后从响应值拿到ACCOUNTID, 当你测试完你要测的接口后,再把新建的ACCOUNT删除,也就是说一个测试用例分了三步。另外一种方法就是读取数据库,从数据库获取数据,这种方法在测试开发与测试环境还OK,但如果测线上环境就比较困难了,因为我们不能随意更新上面的数据,也不能放过多的测试数据在上面。因此我个人比较推崇第一种方法,虽然增加开发用例的工作量,但一劳永逸)
  • 测试能被运行在不同的环境里(平常测试环境至少会分DEV/TEST/STAGING/ONLINE,我们在测试过程中,应该把域名,token/apikey等应放在一个变量里,当切换环境时,我们只需改变变量的值即可
  • 测试数据与业务相分离(测试数据包括参数接口数据/ 测试执行所需要的系统数据)
  • 尽量统一共用的测试环境变量
  • 测试完成后,要删除不必要的测试数据。

JMeter 使用

在实际工作中,我主要应用JMeter对接口做功能测试,所以下面主要介绍一下JMeter的使用

基本介绍

下面是我的一个测试脚本,通常一个文件会包含下面这些组件。我通过简单控制器与DEBUG Sampler来组织管理不同的接口,验证点主要通过写一些Beanshell脚本来实现。对于一些复杂的操作,如果网上能找到到现成的资源,比如JAR,CLASS文件会直接在Beanshell PreProcessor/PostProcessor引用。另外在Jmeter里写Beanshell不容易DEBUG,所以还是建议复杂的功能直接在Eclipse里编写,然后生成JAR包. 关于Beanshell使用会在后面介绍

使用Beanshell 在 JMeter

BeanShell是一种完全符合Java语法规范的脚本语言,并且有自己的一些语法和方法

我的脚本几乎所有验证都是通过Beanshell脚本,只有少部分应用了Response Assert。

Beanshell 常用内置变量

下面是一些实际的例子

  • 操作变量:(vars)
  • 获取前面的sample返回的信息(prev)
  • 写入信息到jmeter.log文件

log.info("log information")

  • 获取属性(props)

它是类似的与vars, 相应的属性在在文件jmeter.properties中定义

  • 引用外部文件(jar/class/java)

另外如果引用外部JAR包,也可在TEST PLAN中配置,在JMeter中点击Test Plan 结点,就会看到下面的界面,可以直接添加JAR包所在路径

其它

CSV配置组件使用

CSV_Data_Set_Config 当发送多组同样的请求,只是所带参数不同,这时可以加这个配置组件

然后在SAMPLER中可以应用上面这些变量配合循环控制器

连接数据库

在测试过程中,我们需要一些测试数据来自于数据库,这时我们需要在Jmeter连接数据库

下面以连接MySQL数据库为例

  • 下载 MySQL JDBC driver
  • 拷贝这个文件到JMeter安装路径下的“lib"文件夹
  • 建立“JDBC Connection Configuation"

其它数据库连接请参考下图:

  • 添加JDBC request

因为我们在接口测试中,更多的时候是获取数据,所以基本都用“SELECT"。如果想INSERT数据,需要选择“Callable Statement"在"Query Type"

在使用过程中注意以下几点:

  • SQL语句不要加分号
  • 如果查询条件是变量,在语句中用“?”号代替,具体的值在下面的“Parameters Value"定义,如果有多个参数,中间要用分号隔开。当然也可以用${变量名}(在用户定义变量组件中已经定义)
  • 对于“variable names" 数据表中有多少列就可以设置多少变量,对于不需要设置变量的列用逗号占位就可以了。
  • 获取查询结果数据在Beanshell里

添加监听器

  • View result tree
  • Aggregate report

Aggregate Report 是 Jmeter 常用的一个Listener, 中译为“聚合报告”,每一列具体表示如下。

Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值

#Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100

Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间

Median:中位数,也就是 50% 用户的响应时间

90% Line:90% 用户的响应时间

Min:最小响应时间

Max:最大响应时间

Error%:本次测试中出现错误的请求的数量/请求的总数

Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数 KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec

Jmeter 与 Jekins 集成

说这个之前简单说一下如何在命令行执行JMeter

  • 首先配置JMETER_HOME环境变量,值即为你Jmeter解压路径
  • 在命令行运行jmeter -v , 正确返回当前版本,证明环境OK
  • 运行jmeter -n -t script.jmx -l log.jtl

接口持续集成

在这块卡了好久,主要是report展示。之前是不想再用其他工具(如:Ant, Maven ), 就想将jtl文件的报告展现出来,弄了很久没成功。最后还是向工具屈服,用的Ant来编译.

主要是配置build.xml

一个示例:

out="${jmeter.result.htmlName}"

style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" />

Jenkins 上安装 “Publish performance test result report” ,“Publish HTML reports” 的插件,配置一下。

运行。

结果如下:

如果加上一些并发,负载等,就是性能测试报告了。

性能测试报告:

之前一直出了个错:

Performance: Recording JMeter reports '**/*.jtl'

Performance: no JMeter files matching '**/*.jtl' have been found. Has the report generated?. Setting Build to FAILURE

Build step 'Publish Performance test result report' changed build result to FAILURE

Finished: FAILURE

导致结果出不来。后面在 Jmeter/bin 下将 jmeter.properties 中的:

jmeter.save.saveservice.output_format=csv

改成:

jmeter.save.saveservice.output_format=xml

结果就是这样的:

作者:xuxinhong&snake

jmeter mysql驱动jar包_用 Jmeter 做 Web 接口测试相关推荐

  1. 【java】Java连接mysql数据库及mysql驱动jar包下载和使用

    文章目录 JDBC JDBC本质: JDBC作用: 跟数据库建立连接 发送 SQL 语句 返回处理结果 操作流程和具体的连接步骤如下: 操作步骤: 需要导入驱动jar包 mysql-connector ...

  2. mave本地导入mysql的jar包_将本地的jar包引入到maven项目中

    首先进入到maven的目录下,并且将要引入的jar包也放在这个目录下 然后执行命令 mvn install:install-file -Dfile=checkDataAdapter-api.jar - ...

  3. druid连接池jar包_我的Java Web之路56 - MyBatis使用第三方数据源(比如Druid)

    本系列文章旨在记录和总结自己在Java Web开发之路上的知识点.经验.问题和思考,希望能帮助更多(Java)码农和想成为(Java)码农的人. 目录 介绍 继承UnpooledDataSourceF ...

  4. mysql驱动程序jar包下载

    1.下载Mysql驱动jar包 http://download.csdn.net/detail/mujunfengplay/6994509 2.配置环境变量 右键点击[我的电脑]->[属性]-& ...

  5. mysql数据库链接驱动jar包的下载(Jmeter中使用为例)

    登录官网:MySQL,点击downloads 点击MySQL Community (GPL) Downloads » 选择对应的类型: 然后解压,就会得到mysql的驱动jar包 如果想要下载历史版本 ...

  6. Jmeter调用自定义jar包

    一. 场景 在测试过程中经常需要调用第三方jar包来生成测试数据,或者使用java工具类来实现业务场景,普遍的做法是手动调用jar包,再把这些值赋给jmeter中的某个参数,以满足业务测试需求目的,j ...

  7. mysql 介绍 怎么下载 驱动jar包 各种细节问题大详解

    对碰到的问题做个记录总结. 1 MySQL 的官网下载地址:http://www.mysql.com/downloads/ 版本说明. 1. MySQL Community Server 社区版本,开 ...

  8. 在哪下载Mysql数据库的JDBC驱动jar包

    目录 在哪下载Mysql数据库的JDBC驱动jar包 (1)进入此链接: (2)选择需要支持的语言 (3)选择其运行平台: (4)注意看后缀,点击下载. ​ (5)小调查 (7)解压 在哪下载Mysq ...

  9. 【工作笔记】如何在MySQL官网下载Java连接MySQL数据库的驱动jar包

    我们在开发时,Java连接MySQL数据库需要驱动jar包,而驱动包的版本要跟MySQL数据库版本相匹配,以下介绍怎样在MySQL官网下载各MySQL数据库对应版本的驱动包. 1.登陆Oracle官网 ...

最新文章

  1. java中是否支持多重继承_java支持多重继承吗 JAVA特性面试题:
  2. linux 常见服务端口
  3. 流媒体(视频)服务器调研
  4. JavaScript工具
  5. IKVM.NET_第二篇_应用
  6. SQL获取当前日期函数
  7. Windows XP 系统中内置的AT命令
  8. macbook 终端命令怎么使用_Mac 常用终端命令整理
  9. HTML5响应式手机模板:IOS风格app手机个人中心页面模板HTML+CSS+JavaScript
  10. KEIL5下载并安装STM32包
  11. 电容在计算机运用原理,隔直电容的作用及原理 - 全文
  12. 错误的SQL脚本,错误消息 4104
  13. Unity 3D环绕Demo
  14. TSU-求最大最小数
  15. 大牛给计算机方向学生的 7 个建议
  16. 如何利用html制作电影影评网,HTML制作电影影评网 - 手册网
  17. mysql exit quit_MySQL数据库5.5基础 exit quit \q 退出MySQL数据库
  18. 计算机考试题库判断题,计算机等级考试、期末计算机考试复习题库--1.判断题...
  19. 51单片机学习笔记(串口通信 LED点阵屏 DS1302)
  20. python抓取货币基金数据及基金收益数据分析

热门文章

  1. ref和out的联系及区别(转)
  2. dedecms--需要注意的细节
  3. linux 关机命令总结
  4. 用字典给Model赋值
  5. 加载的图片还会有未来吗?
  6. 真实世界:使用WCF扩展记录服务调用时间
  7. 设计师应该尊重技术的限制
  8. 肿瘤坏死因子(TNF)阻断剂治疗幼年型银屑病关节炎: 有效吗
  9. RAC crs_stat unknown资源状态处理
  10. 代码不规范?985,211也不要!