当前位置: 首页 > news >正文

接口测试那些事儿

什么是接口?

首先,在讲接口测试之前,我们先要搞清楚接口类型的概念。
接口:可能是系统与系统(包括服务与服务)之间的调用,像A系统(服务)给B系统(服务)提供的服务,通过比如常见的dubbo接口来实现;也有可能是上层服务对下层服务的调用,比如service层会调用DAO层的接口。目前在我司,主流的接口自动化测试涵盖rpc和http两个协议类型。

测试接口的原则是什么?

  1. 自动化测试脚本互不影响的,隔离的(解耦)
  2. 自动化测试中被测功能是互不影响的
  3. 自动化测试能够快速定位bug位置
  4. 自动化测试脚本是易于阅读的,能帮助我们理解产品的
  5. 自动化测试脚本是易于编写的,易于维护的以及易于扩展的
  6. 脚本间没有联系,保持原子性
  7. 数据与脚本尽量分离,脚本执行不影响基础数据(还原数据)
  8. 脚本可重复执行,不依赖执行顺序

测试接口的策略有哪些?

  • 接口功能测试:接口测试本质上也是为了实现业务功能,所以最核心的当然是是否符合业务的需求,因此需要测试接口的功能是否满足业务要求,这是最重要的。
  • 接口异常测试:你无法保证入参的正确性,所以需要对所有可能的入参进行测试校验,比如入参为null等异常情况,接口的异常是否有处理等。另外接口的健壮性也是需要考虑的,在高并发下是否有性能问题,内存泄漏问题等等。
  • 接口白盒测试:你在测试接口的同时,通常需要review开发的代码实现,这个时候其实已经在做接口的白盒测试。

测试接口的工具有哪些?

  • Jmter
  • HttpClient
  • postman
  • 公司内部网关的中间件测试工具
  • 等等

接口测试的效率怎么衡量?

测试覆盖率:现在市面上主流公司都会有自研的代码覆盖率统计工具,其原理基本都是基于JaCoCo的二次开发来实现代码的行覆盖率、方法覆盖率、类覆盖率统计。有了覆盖率的数据支撑,我们对脚本就可以进行查漏补缺,心里也有了底。
在这里插入图片描述
测试回归时间上:如果脚本数量比较多(数千以上),那么每次如果都是全量回归的话时间持续比较久,那么我们就要考虑一方面脚本是否需要多线程执行(testng可以提供这样的功能,parallel+thread-count),另一方面我们就要考虑精准回归。(对脚本用例进行分层执行)

接口的流量回放

接口测试因为各种问题,其实并不能100%覆盖线上。因此,诞生了一种更加全面的测试手段,就是流量回放。
核心:基于阿里开源工具——jvm-sandbox-repeater (github 地址)
原理在这里就不多做解释了,可以参考:流量回放框架 jvm-sandbox-repeater 的实践

总结

最后说一句,最重要的,衡量脚本回归是否有效的指标,就是通过持续集成,在平时最终能发现多少问题,这才是接口测试持续集成的价值。

相关文章:

mysql重置Root密码

方法一: 在my.ini的[mysqld]字段加入: skip-grant-tables 重启mysql服务,这时的mysql不需要密码即可登录数据库 然后进入mysql mysql>use mysql; mysql>更新 user set passwordpassword(新密码) WHERE Userroot; mysql>flush privileges; 运…...

JfreeChart柱状图饼图

JfreeChart画出柱状图饼图的代码片段及详细的注释,附件为JfreeChart中文API一览表,和生成的柱状图,饼图图片 import java.awt.Font; import java.io.FileOutputStream; import java.io.IOException; import org.jfree.chart.C…...

自动装配的底层实现

public void autowire(Object o, Map<String, String> map) throws Exception { // 获得map 所有key Set<String> keys map.keySet(); // 获得Object中所有属性 // 获得Class对象 Class c o.getClass(); // 获得…...

webservice学习记录笔记(一)

一、先理解什么是服务 现在的应用程序变得越来越复杂&#xff0c;甚至只靠单一的应用程序无法完成全部的工作。更别说只使用一种语言了。 写应用程序查询数据库时&#xff0c;并没有考虑过为什么可以将查询结果返回给上层的应用程序&#xff0c;甚至认为&#xff0c;这就是数…...

flex获得指定时间段一共多少天

/** * 获得某个时间段 共有多少天 * param start 开始时间 * param end 结束时间 * return * */ public static function getTimeDays( start:Date , end:Date , type:int0):Number { var _re:int 0 ; if(start && end) { var _str:Numbe…...

互联网产品与需求二 评估需求

需求分析之评估需求 一.KANO模型 五个用户需求类型1.必备型需求必备型需求是用户认为产品“必须有”的属性或者功能当其特性不充足&#xff08;不满足用户需求&#xff09;时&#xff0c;用户很不满意当其特性充足&#xff08;满足用户需求&#xff09;时&#xff0c;无所谓满意…...

flex勾选,自动刷新

mxml: <s:CheckBox label"刷新" buttonMode"true" id "frc" selected "{model.autoFresh}" change "{model.startAutoQuery(frc.selected)}"/> <s:Label text"间隔"/> &…...

flex 下拉框验证组件

//继承验证 public class ObjectNullValidator extends Validator { public function ObjectNullValidator() { super(); requiredFieldError "必须填写" ; } private var _invalidCode:String "222"; public static function validateS…...

flex 事件机制详解

事件机制的工作流程 1&#xff1a;关于事件流 当一个事件发生&#xff0c;必然存在一个派发事件的对象&#xff0c;这里称之为目标对象。 当事件发生后flashPlayer生成一个携带数据的对象&#xff0c;然后检查目标对象是否处于显示层中&#xff0c;如果是则遍历从根容器一直到目…...

到底什么是互联网思维

本文转字http://www.managershare.com/2014/04/28/internet-thinking-magic-power/课前秀&#xff1a;三个段子 第一个段子&#xff1a;有一个毫无餐饮行业经验的人&#xff0c;他开了一家餐馆&#xff0c;菜品只有12道&#xff0c;在北京只有两家分店&#xff1b;仅两个月时间…...

面向对象编程的弊端

英文原文&#xff1a;What’s Wrong with OOP and FP 我不理解为什么人们会对面向对象编程和函数式编程做无休无止的争论。就好象这类问题已经超越了人类智力极限&#xff0c;所以你可以几个世纪的这样讨论下去。经过这些年对编程语言的研究&#xff0c;我已经清楚的看到了问题…...

互联网产品与需求三 需求优先级定义

需求优先级定义即便是已经少选评估出来的需求&#xff0c;很多时候量也是非常大的&#xff0c;而哪些该做&#xff0c;哪些不该做&#xff0c;很多时候我们会遇到&#xff1a;Boss拍脑袋要这么做自己拍脑袋要这么做顾此失彼&#xff0c;左顾右盼其实&#xff0c;在产品不同阶段…...

Hibernate 主键生成策略

<generator>:主键生成策略 increment:递增,hibernate自动产生主键.max(id) ,采用带走1算法,多进程/集群环境下不推荐使用. identity:设置表主键是自增字段,映射文件采用该策略,依赖底层库, auto_increment identity 适用于MySQL、DB2、MS SQL Server&#xff0c;…...

javaSE之反射

什么是反射&#xff1f; 简单的说&#xff1a;剖析java类中的各个组成部分&#xff0c;映射成一个个java对象。 在java.lang.reflect中。 反射用在哪&#xff1f; 多用于框架和组件&#xff0c;利用反射技术写出复用性高的通用程序 我只列出了反射中几个常用的API 类 Class 构…...

产品之增删查改显算传

原文&#xff1a;http://qingsong.sinaapp.com/?p422 不知道大家在做产品设计时有时候会不会和我一样&#xff0c;一个很简单的功能却给忽略了&#xff0c;或者一个很常规的应用点视而不见&#xff0c;等提交技术开发后才发现少了一点给开发带来了很多困扰&#xff0c;于是不得…...

myeclipse的一些使用技巧

一直都是看别人的博客&#xff0c;学习别人的心得&#xff0c; 但是软件行业涉及的技术太多&#xff0c;学过的很多东西都忘了&#xff0c;今天我也弄个博客玩玩&#xff0c; 把我所学的&#xff0c;工作中遇到的问题也做做记录&#xff0c;方便自己&#xff0c;也方便他人&…...

java基础需要强化之关键

多线程 进程和线程的区别 ProccessBuilder 和 Runtime.getRuntime().exec java中两种线程的创建方式 extends Thread和 implements Runnable 线程的生命周期&#xff1a;线程创建、Runnable、Running、Blocked、dead sleep、yield、join 等方法 线程打断 interrupt 什么是守护线…...

MD5加密算法详解

注&#xff1a;MD5不是绝对的安全&#xff0c;有俩md5解决 /******************************************************************************* * keyBean 类实现了RSA Data Security, Inc.在提交给IETF 的RFC1321中的keyBean message-digest * 算法。 *****************…...

HTTP协议详解

HTTP是一个属于应用层的面向对象的协议&#xff0c;由于其简捷、快速的方式&#xff0c;适用于分布式超媒体信息系统。它于1990年提出&#xff0c;经过几年的使用与发展&#xff0c;得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版&#xff0c;HTTP/1.1的规范化工作…...

互联网产品与需求一 获取需求的方法

一、行业调研分析报告​ 1中国移动互联网用户调查数据2列举一些常用的行业数据分析艾瑞网:http://www.iresearch.cn/199IT数据&#xff08;中文互联网数据咨询中心&#xff09;:http://www.199it.com/量子恒定(电商数据分析):http://www.lianezing.com/网站分析在中国:http://w…...

flex blaze+java通信的例子

步骤&#xff1a; 1&#xff1a;建立java web程序 2&#xff1a; 下载blazeDS包&#xff0c;解压后将WEB-INF下的 flex&#xff0c;lib&#xff0c;web.xml复制到java程序的WEB-INF下 3&#xff1a;打开web.xml文件将以下代码的注释去掉&#xff0c;并修改 <param-value>…...

flex验证座机,手机的框架

import mx.utils.StringUtil; import mx.validators.ValidationResult; import mx.validators.Validator; public class PhoneValidator extends Validator { public function PhoneValidator() { super(); } private var _phoneInvalid:String"正确格式(010-865…...

java的几种对象(PO,VO,DAO,BO,POJO)解释

一、PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录&#xff0c;多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。 二、VO:value object值对象。通常用于业务层之间的数据传递&#xff0…...

产品战略与战术之行业分析

产品的战略和战术之行业分析1确定行业规模行业的规模大小某种程度上讲他决定了产品能够有多少的盈利价值和体量​​互联网是一个强者通吃的行业第一名很舒服第二名能混第三名就很悲催了这一点和传统行业区别相当大&#xff0c;所以在做行业规模预测的时候需要我们仔细评估行业里…...

javaSE之类加载器

类加载器&#xff0c;说白了就是加载类的呵呵 .类加载器负责将.class文件&#xff08;可能在磁盘上&#xff0c;也可能在网络上&#xff09;加载到内存中&#xff0c;并为之生成对应的java.lang.Class对象 .当JVM启动时&#xff0c;会形成由三个类加载器组成的初始类加载器层次…...

flex 计算指定日期是本年度第几周

/** * 计算指定日期是本年度第几周 *传日年月日&#xff0c;返回number */ private function weekOfYear(yyyy:Number,mm:Number,dd:Number):Number{ var myDate:Date new Date(yyyy, mm - 1, dd); var startDate:Date new Date(yyyy,0,1); v…...

flex计算某一日期的周开始和结束日期

/** * 计算 某个日期所在周的开始日期和结束日期 * param value * param isZero 0 当前时间 , 1 日期时间设置为0 &#xff0c; * return Array[0] 周一的日期 Array[1] 周日的日期 * */ public static function getCurrentDayFE(value:Date, isZero:int1):Array…...

flex时间便秒,秒变时间

/** * 秒变时间 * return * */ public static function secondToTime(second:int):Array { var hh:intint(second / 3600); var mm:intint((second % 3600) / 60); var ss:intsecond % 60; return [hh, mm, ss]; } /** * 时间变秒 * param hh 小时 * …...

flex dataGrid组件全选,反选,并获取选中值,代码详解

//1 组建重写 package hxht.comps.datagrid{ import flash.display.DisplayObject; import flash.events.Event; import flash.events.MouseEvent; import mx.collections.ArrayCollection; import mx.collections.IList; import mx.events.DynamicEvent; import spark.comp…...

javaSE之动态代理

动态代理技术&#xff1a; 使程序更加灵活&#xff0c;可以在代理java类的时候加入一些功能。 很类似过滤器&#xff0c;区别&#xff1a; 过滤器是自己编写西横须实现的功能 动态代理是JVM内部机制 实现步骤&#xff1a; 1.真是业务对象&#xff08;被代理对象&#xff09; 2…...

flex data services

本文来自&#xff1a;http://www.blogjava.net/wldandan/archive/2007/12/06/165856.html 一 FDS相关概念 FDS全称Flex Data Services(现在Adobe将其改名为LiveCycle Data Services),是运行在服务器端的 java程序.它能够运行在大部分的java应用服务器上,包括JRun, JBos…...

actionScript 数组去重

public function unique(array:Array):Array { for (var i:int0; i < array.length; i) { for (var j:inti 1; j < array.length; j) { //注意 if (array[i] array[j]) { array.splice(j, 1); j--; } } } return array…...

Java中堆内存和栈内存详解

Java把内存分成两种&#xff0c;一种叫做栈内存&#xff0c;一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时&#xff0c;java就在栈中为这个变量分配内存空间&#xff0c;当超过变量的作用域后&am…...

产品战略战术之预测行业发展趋势

1、根据行业历史预测行业发展趋势移动互联网发展之路从基础性服务面向用户&#xff08;工具类&#xff0c;单体服务类&#xff09;面向应用&#xff08;统计学&#xff0c;关高分享&#xff0c;渠道投送&#xff0c;流量导入&#xff09;到媒体社区类传统互联网迁移&#xff08…...