技术标签: 测试面试题 servlet 软件测试 服务器 ajax
目录
7. 你们公司是如何做接口测试的?(包括︰接口测试流程,方案以及用例设计)
15、请详细阐述接口测试和UI测试在测试活动中是如何协同测试的?
28、一个接口用例中有多个API接口,前后两个 API 之间如何进行参数传递的?
29、你在实施接口自动化测试的过程中,如果某些接口第一次调用长时间没有返回,如何保证流程顺利进行又可以记录错误信息?
http协议:超文本传输协议,信息是明文传输;
https协议:是由SSL+ http协议构建的加密传输协议。。
两者使用的端口不一样,http:80,https:443
四种:取决于Content-Type请求头
Content-Type:application/x-www-form-urlencoded
特点:数据类型是字典,相当于通过表单方式去提交数据,数据的格式:a=1&b=2
Content-Type:multipart/form-data
特点:报文包含有文件上传。
Content-Type:application/json
特点:报文都是字符串类型
Content-Type:binary
特点:报文类型是以二进制的方式上传文件。
Accept:客户端接收的数据格式。
X-Requested-With:异步请求。Ajax异步请求。无刷新。
User-Agent:发送请求的客户端的类型。
Content-Type:请求的内容的报文格式。
Cookie:Cookie信息。
都可以向服务器提交数据,并且会从服务器获取数据。
区别:
① 传参方式不同:get通过地址栏的方式传参,post通过表单报文方式传参。
② 传参长度不同:get的参数有长度限制,post没有。
③ 一般情况下,get是获取数据,比如查询,post提交数据,比如:增删改。
④ Get只发送一个tcp数据报文(包含请求头和data),post发送两个报文(1.请求头,返回·100,2.data,返回200)
1XX:信息提示。
2XX:成功。
3XX:重定向。(发送一个请求时,这个请求多次请求了服务器的多个资源)
4XX:客户端错误。
5XX:服务器错误。
相同点:都是用于鉴权并且都是服务器生成的。
不同点:
① cookie保存在客户端的浏览器上,cookie不安全,可以去分析存在在本地的cookie进行cookie欺骗。
② session保存在服务器的内存,默认保存30分钟,比cookie安全,缺点就是当登录的用户越多,比较占用服务器的资源。session一般会生成一个sesionid(名称自定义),sessionid可以通过cookie传输。
③ token存储在服务器的数据库里面,通过一个接口或通过登录获取,然后后续所有的接口都必须要传token才可以请求成功。token也可以通过cookie传输。
① 获取接口文档,熟悉单接口以及链路接口(接口业务流程)的业务,包括接口地址,鉴权方式,入参,出参,错误码等。
② 编写接口测试用例并评审
正例(1-2个)︰单接口返回成功场景,链路接口业务流程实现。(功能业务流程);
反例:
鉴权异常∶空,错误,过期......
参数异常:空,类型异常,长度异常
错误码异常:
其它异常∶接口黑名单,接口调用次数限制。分页(少于0,0,中间页,最大页,超过最大页);
③ 使用接口测试工具或代码的方式执行接口测试;
重要考虑以下情况:
接口关联,接口参数加密,是否动态参数,接口参数是否签名,是否需要带请求头。
④ 实现持续集成并输出接口测试报告,有Bug提bug。
方式①:可以使用Fiddler 抓包工具抓取接口数据之后整理成接口文档,如果有不清楚的字段,找时间集中找开发验证,然后在进行接口测试。
方式②∶可以通过Jmeter的代理录制功能,先把接口请求录制下来形成接口文档,然后再逐一的进行接口测试。
依赖登录的接口本质上是每次发送请求的时候需要带上cookie和session才能够发送成功。在请求时需要添加上cookle和sessionid。
① 如果是通过Postman来测试,Postman会自动去管理
② 如果是通过Jmeter来测试,需要增加Cookie管理器组件。
③ 如果是通过代码来实现接口测试,那么需要生成sesion对象,然后通过sesion对象来发送请求。|
① 常规Bug ∶接口没实现,没有按接口文档返回结果,输入异常值(空值,特殊字符),接口报错,没有返回合理的错误提示。
如:购买商品接口,其中有价格参数,我去测试时把商品的价格改成-3,购买成功。
② 权限Bug :
如∶测试修改商品信息接口,接口文档要求只有商家和超级管理员才有权限修改,我传入一个普通用户的ID或者是传入其他商家的ID,修改成功。
注意:接口测试就是为了避免绕过前端验证,直接访问后端接口的BUG。
① 状态码检验,验证返回的状态码为200.
② 业务校验:
a. 错误码为0
b. 当接口响应报文比较短,比较固定的情况下,校验完全一致。
c. 当接口响应报文比较长,比较多的情况下,校验最核心的业务信息。
d. 当接口响应报文为非常复杂的多层级XML格式或JSON格式,通过Xpath,JSONpath,正则表达式的匹配方式获取到最关键字的业务节点,然后再校验。
e. 查询数据库校验或者是通过其他接口校验。
通过抓包工具抓包,然后查看请求报文,如果请求报文对比接口文档有问题,那么就是前端的问题,如果请求报文没有问题,那就看返回报文,返回的数据不对,那就是后端开发的问题。
接口关联〔依赖)是项目中的接口依赖于本项目的接口。
可以通过Postman搭建Mock服务,但是Postman的Mock服务有访问次数限制,一天只能访问1000次。也可以通过Servlet ,Flask等技术来实现接口Mock服务。
加密接口:在调用接口的时候,首先要弄清楚接口的加密方式什么什么?
如∶
① 对称式的加密方式(私钥加密)∶不常用的有DESAES,常用是Base64加密方式。
② 非对称的加密方式(双钥加密): RSA加密方式。
③ 只加密不解密(MD5加密)
④ 自定义加密规则。混合加密方式。
了解加密规则(签名规则)之后,在请求接口之前先要对参数做对应的加密(签合)之后在发送请求。单一加密方式,postman和Jmeter有些是支持的,postman使用javascript脚本实现,Jmeter使用beansheI中的java代码实现。
UI与接口测试的协同可以从下面的方向考虑:
假如一个事务需要顺序调用2个接口:A和B接口, B依赖A接口的响应数据,这时候在执行B接口之前必须完成A接口,并通过某些手段获得A接口的特定数据给B接口使用。
上下游接口的数据依赖无非就是准备测试数据,数据一般有三种方式获得:
webService接口有一套完整的协议标准,主要为soap协议,用来进行消息的传递,返回结果需要包装在一个soap协议指定的语法格式中。即使你只需要简单的返回字符1,也需要包装在协议种返回,协议描述了成功失败否,结果值等,可以通过soapUI测试工具去进行接口的模拟及测试。
web service接口的特点:
设计接口测试用例时,涉及的是电商系统,其中包括很多修改,如商品、商家、店铺等等,针对这些数据的修改,会涉及到很多参数。如商品的名称,商品的尺码,商品的颜色等等。
那在设计实现“修改”接⼝口时,如何确定要传哪些参数?是只需要传我要修改的参数,还是全部参数都要传?
方式一、关键还是看后台逻辑实现
举例:User有两个属性username,password
后台逻辑实现:update User set username=? where id=xxx;
那么,如果你只想更新username的时候,可以不传password,其值是保持不变的。
后台逻辑实现:udpate User set username=?,password=? where id=xxx;
这种情况下,即使你只想更新username,也需要传password的值给后台,不然password就会被更新为空。
此外,还有一些数据如id等,如果sql中没有写,那即使传递了本字段的参数,数据库也不会更新。因此,在写关于“修改”的接口时,需要考虑一下,后台的逻辑是怎么实现的,然后确认要传递哪些参数。
方式二、抓包工具直接抓取接口情况分析
如果系统已经实现了,并且已经确定了接口逻辑,那么我们通过Fiddler等抓包工具,抓取到对应业务的请求报文,分析其中传递参数信息即可。
接口是获取和操作资源的方式,而大部分系统和产品中,资源一般都是产品的核心,比如微信核心资源就是通讯录关系链和聊天记录等,因此资源是必测的。
另外接口中大部分的内容是数据,通过数据的对比我们能推测到系统和产品的逻辑,测接口就是测逻辑。
最后接口中的返回相对单纯,不像web页面,html代码中有太多ui的东西,ui最不稳定,变化太快,接口相对稳定一点点,但是里面的干扰信息更少,断言相对容易很多。
Get方式是从服务器上获取数据;在做数据查询时,建议用Get方式;如:商品信息接口、搜索接口、博客访客接口等。
Post方式是向服务器传送数据 ;在做数据添加、修改或删除时,建议用Post方式 ;如:微博图片上传图片接口、登录注册接口等。
接口测试是测试系统组件间接口的一种测试。
接口测试的重点是检查数据的交换,传递的正确性,以及接口间逻辑依赖关系。
提交接口测试的重要意义:实现开发期并行测试,减少页面层测试的深度,缩短整个项目的测试周期。
大多数的接口指的是HTTP接口,通常是指 B/S架构,由客户端(浏览器)调用,或模拟客户端(浏览器)调用服务器提供的API接口,由接口完成处理并返回一个应答的过程。
常见接口类型还有:Webservice接口,http接口,jms接口,hessian接口、REST接口。
1)获取请求报文数据
通过fiddler工具或者API接口文档获得请求报文参数,其中就包括请求方式(get、post、put等)、URL地址、请求的query string parameter以及请求的body数据。
2)借助工具模拟请求报文并发送
把第一步中获得的参数,整理到jmeter、postman、soapui等接口参数工具中,模拟接口请求并发送该请求。
3)获得响应结果
使用接口测试工具发送请求后,会返回响应报文,分析响应报文中的数据是否是符合要求的。
4)断言:判断实际结果是否与预期相同
在工具中也可以添加预设的断言,在运行接口测试后,会自动返回接口是否实现正确。我们可以使用响应报文的响应状态码、响应的headers头部或者响应的正文数据(html、json格式等)进行断言。
1)HTTP是无连接
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
2)HTTP是媒体独立的
这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
3)HTTP是无状态
HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:
HTTP响应由四个部分组成,分别是:
也就是上下游接口的依赖,A接口的响应结果a,是B接口的请求入参。
一种方法是:动态获取a的值。
另一种方法:比如在接口测试工具Postman、Jmeter中设置参数变量。也就是说A接口运行完毕后,将结果提取出来放在全局变量中。这样一来,其余接口就可以获取到这个值了。如果这个变量不想放在全局中共享,也可以只提供给当前测试套件使用。
如果一个接口长时间没有返回,会影响整体测试的执行时间以及执行结果。
所以我们要为每个接口设置一个超时时间,比如3秒。一个接口超过3秒还没有返回,就可以定位为异常。
当然也不是一个接口一次调用超时了,就一定是异常了,要设置失败重试(一般为3次),如果执行了3次还是超时,就可以认为是一个异常。在Python中很多单元测试框架都可以添加用例失败重跑机质。另外也可以使用while循环实现用例的重复执行。
当一个接口用例,最终重试了三次依然失败或超时,我们就需要将该问题记录到系统日志中并最终显示在测试报告中。但是该用例执行完毕后,还要保证剩下的用例继续执行。如果在不使用单元测试框架的情况下,我们就需要捕获接口调用超时或错误的异常,以保证测试任务不会中断。
总结一下,要保证每个接口用例执行不会时间过长,不会单次失败就误报,又能成功记录错误信息,保证测试任务不中断。我们需要做到三点:设置超时、添加失败重跑机质、记录错误日志,有必要时要捕获异常对象。
在自动化实施过程中,除了要保证正常流程之外,还要对异常场景做合理的处置。
接口测试一般考虑入参形式的变化和接口的业务逻辑,一般设计接口测试用例采用等价类、边界值、场景法居多。
接口测试设计测试用例的思路如下:
1.正常用例,验证接口逻辑是否正确。根据业务逻辑、输入参数、输出值的描述,对正常输入情况下所得的输出值
2.异常用例,为了保证数据的安全及程序在异常情况下的逻辑的正确性而进行的测试。
模块接口测试的主要包括以下几个方面:
1)鉴权码token异常(鉴权码为空<没有鉴权码>,错误的鉴权码,过期的鉴权码)。
2)请求参数正常/异常。
3)返回结果校验,数据库比对
1)配置元件---用户定义的变量元件可以设置全局变量。
2)函数助手对话框中可以选择比如随机字符串、随机日期、随机数字作为参数化。
3)可以使用 csv 文件作为参数化,通过配置元件中的 csv data set config 元件进行设置即可。
可以发现很多在页面上操作发现不了的bug。可以修改请求参数,突破前端页面输入限制。
举例说明:
1、比如一个订单支付时,我们页面上是无法改变订单金额的,但我们可以通过抓包工具捕获订单支付请求,然后修改订单金额后提交,然后出现了一个原价100元的订单我们用1分钱完成了支付。
2、比如一个转账的页面,前端做了限制导致我们无法在转账金额的输入框输入负数,但我们可以通过抓包工具修改,然后出现了一个转账金额为负数的bug。
文章浏览阅读364次。1.WebMagicWebMagic是一个简单灵活的Java爬虫框架。基于WebMagic,你可以快速开发出一个高效、易维护的爬虫。2.在Eclipse中配置WebMagic1.首先需要下载WebMagic的压缩包官网地址为:WebMagic官网最新版本为:WebMagic-0.7.3,找到对应版本,打开下载界面,注意,下载要选择Source code(zip)版本,随便下载到哪里都可以;2.下载好的压缩包需要解压,此时解压到的位置即为后续新建的Eclipse的project位置,比如我的Ecli_使用eclipse搭建webmagic工程
文章浏览阅读1.9k次。mysql数据库是一种开放源代码的关系型数据库管理系统,有很多朋友都在使用。一些在linux系统上安装了mysql数据库的朋友,却不知道该如何对mysql数据库进行配置。那么linux该如何启动mysql服务呢?接下来小编就给大家带来linux启动mysql服务的命令教程。具体步骤如下:1、首先,我们需要修改mysql的配置文件,一般文件存放在/etc下面,文件名为my.cnf。2、对于mysql..._linux中 mysql 启动服务命令
文章浏览阅读537次。详解OJ(Online Judge)中PHP代码的提交方法及要点Introduction of How to submit PHP code to Online Judge SystemsIntroduction of How to commit submission in PHP to Online Judge Systems在目前常用的在线oj中,codeforces、spoj、uva、zoj..._while(fscanf(stdin, "%d %d", $a, $b) == 2)
文章浏览阅读534次。一、设置MyEclipse编码(1)修改工作空间的编码方式:Window-->Preferences-->General-->Workspace-->Text file encoding(2)修改一类文件的编码方式:Window-->Preferences-->General-->content Types-->修改default Encoding(..._java修改快捷缩写内容
文章浏览阅读1.4w次,点赞19次,收藏76次。1.前言市面上关于Android的技术书籍很多,几乎每本书也都会涉及到蓝牙开发,但均是上层应用级别的,而且篇幅也普遍短小。对于手机行业的开发者,要进行蓝牙模块的维护,就必须从Android系统底层,至少框架层开始,了解蓝牙的结构和代码实现原理。这方面的文档、网上的各个论坛的相关资料却少之又少。分析原因,大概因为虽然蓝牙协议是完整的,但是并没有具体的实现。蓝牙芯片公司只负责提供最底层的API_蓝牙原理图详解
文章浏览阅读7.7k次。图/源于网络文/曲尚菇凉1.今天早上出门去逛街,在那家冰雪融城店里等待冰淇淋的时候,听到旁边两个女生在讨论很久之前的一期《奇葩说》。那期节目主持人给的辩论题是“从未在一起和最终没有在一起哪个更遗憾”,旁边其中一个女生说,她记得当时印象最深的是有个女孩子说了这样一句话。她说:“如果我喜欢一个人呢,我就从第一眼到最后一眼,把这个人爱够,把我的感觉用光,我只希望那些年让我成长的人是他,之后的那些年他喝过..._从未在一起更遗憾
文章浏览阅读175次。Spring Cloud Alibaba 介绍Sping体系Spring 以 Bean(对象) 为中心,提供 IOC、AOP 等功能。Spring Boot 以 Application(应用) 为中心,提供自动配置、监控等功能。Spring Cloud 以 Service(服务) 为中心,提供服务的注册与发现、服务的调用与负载均衡等功能。Sping Cloud介绍官方介绍 Tools for building common patterns in distributed systems_sprngcloud alba
文章浏览阅读3.2k次,点赞4次,收藏21次。我这里是根据之前在测试数据类项目过程中的一些总结经验和掉过个坑,记录一下,可以给其他人做个参考,没什么高深的东西,但是如果不注意这些细节点,后期也许会陷入无尽的扯皮当中。1 需求实现的准确度根据产品需求文档描述发现不明确不详细的或者存在歧义的地方一定要确认,例如数据表中的一些字段,与开发和产品确认一遍,如有第三方相关的,要和第三方确认,数据类项目需要的是细心,哪怕数据库中的一个字段如果没有提前对清楚,后期再重新补充,会投入更大的精力。2 数据的合理性根据业务场景/常识推理,提..._基础字段的测试点
文章浏览阅读491次。大家好,我是爱学习的小xiong熊妹。在工作和面试中,很多小伙伴会遇到“对XX行业进行分析”的要求。一听“行业分析”四个字,好多人会觉得特别高大上,不知道该怎么做。今天给大家一个懒人攻略,小伙伴们可以快速上手哦。一、什么是行业?在做数据分析的时候,“行业”两个字,一般指的是:围绕一个商品,从生产到销售相关的全部企业。以化妆品为例,站在消费者角度,就是简简单单的从商店里买了一支唇膏回去。可站在行业角度,从生产到销售,有相当多的企业在参与工作(如下图)在行业中,每个企业常常扮._码工小熊
文章浏览阅读1.6w次,点赞2次,收藏2次。还需要做更多的研究来解决大型语言模型中的偏见、有毒评论和幻觉的风险。我们在数万亿个令牌上训练我们的模型,并表明可以仅使用公开可用的数据集来训练最先进的模型,而无需诉诸专有和不可访问的数据集。在大型语言模型空间中训练像 LLaMA 这样的小型基础模型是可取的,因为它需要更少的计算能力和资源来测试新方法、验证他人的工作和探索新的用例。作为 Meta 对开放科学承诺的一部分,今天我们公开发布 LLaMA(大型语言模型元 AI),这是一种最先进的基础大型语言模型,旨在帮助研究人员推进他们在 AI 子领域的工作。_llma
文章浏览阅读223次,点赞3次,收藏5次。1.背景介绍制造业是国家经济发展的重要引擎,其产能和质量对于国家经济的稳定和发展具有重要意义。随着工业技术的不断发展,制造业的生产方式也不断发生变化。传统的制造业通常依赖于人工操作和手工艺,这种方式的缺点是低效率、低产量和不稳定的质量。随着信息化、智能化和网络化等新技术的出现,制造业开始向智能制造迈出了第一步。智能制造的核心是通过大数据、人工智能、计算机视觉等技术,实现制造过程的智能化、自动化...
文章浏览阅读938次。系列文章目录文章目录系列文章目录 前言 一、ansible是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言菜鸟一只,刚开始使用,仅作以后参考使用。边学习,边记录,介绍一下最基础的使用,可能会有理解不到位的地方,可以共同交流,废话不多说,走起。一、ansible 简介?ansible是自动化运维工具的一种,基于Python开发,可以实现批量系统配置,批量程序部署,批量运行命令,ansible是基于模块工作的,它本身没有批量部署的能力,真正.._pip安装ansible