zoukankan      html  css  js  c++  java
  • 多测师讲解接口测试 _面试题003_高级讲师肖sir

    接口测试

    一、你对HTTP有没有了解过?具体讲一下对http的了解。
    (答题思路: 定义、常见请求类型、状态码、请求头请求体、响应头和响应体、三次握手和四次挥手。)
    答:了解,我们做接口的时候基本上都是基于http接口来做的。
    HTTP是超文本传输协议,超文本是指数据传输时,可以进行文本传输之外的数据,比如图像、音频等,http默认端口是80。
    http的工作原理是,客户端通过URL向http服务器发送请求,服务器接收请求后,向客户端发送响应信息。
    HTTP常见的请求类型有post(增)、get(查)、put(改)、delete(删)。
    HTTP常见的状态码
    1开头的是指示信息—表示请求已经接受,继续处理。
    比如说100 Continue表示初始请求已经接受,客户应当继续发送请求的其余部分
    2开头表示请求已被成功接受、理解、接受
    比如200,表示请求成功
    3开头的是重定向问题——要完成请求必须进行更进一步的操作
    比如300表示客户请求的文档可以在多个位置找到,301表示请求的资源已被永久的移动到新的URL,302表示请求的资源被临时移动到新的url
    4开头的是客户端错误——请求有语法错误或者请求无法实现
    比如400表示请求的语法错误,404表示无法找到指定位置的资源
    5开头的是服务器错误——服务器未能实现合法的请求
    比如500表示服务器内部错误,不能完成客户的请求,501表示服务器不支持实现请求所需要的功能,503表示服务器由于维护或者负载过重未能应答。



    二、http和https的区别?端口号分别是什么?
    HTTPS和HTTP的区别主要如下:
      1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
      2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
      3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
      4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
      HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性

    三、post和get的区别?
    1、post请求入参是放在body中,get请求入参是放在URL地址中,所以post请求会相对比较安全些。
    2、post请求的数据量比较大,get请求的数据量比较小
    3、post请求效率低,get的请求效率高。

    四、TCP和UDP的区别?(冷门)
    TCP协议和UDP协议都是传输协议。
    TCP,传输控制协议,他提供的是面向链接、可靠的字节流服务。既客服端与服务器交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。并且提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
    UDP,用户数据协议,是一个简单的面向数据的传输协议,它只是把应用程序传给IP层的数据报发送出去,但是不能保证它们能到达目的地。由于UDP在传输数据报前不用再客户和服务器之间建立一个连接,且没有超时重发等机制,所以传输速度很快。

    五、三次握手和四次挥手
    三次握手:
    TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。
    (1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。
    (2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。
    (3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。



    四次挥手:
    1)第一次挥手:客户端发送一个FIN文,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
    2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
    3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
    4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手

    六、cookie和session、token的区别?
    都是做身份认证的。
    cookie一般是由服务器生成返回给浏览器客户端的,存放在客户端,是以键值对的形式存在的。安全性相对较低。
    session一般由服务器的web创建,保存在服务器端。以键值对的形式存在。相对cookie比较安全一些,因为服务器是面向所有客户端的,所以多了会影响服务器的性能。
    token,用户想服务器发起一个请求时,服务器会响应回来一个token信息,一般都是返回的一串唯一的标志符。访问时,可以避免重复繁琐的访问服务器,只要识别这个令牌token。


    七、请求头、响应头、请求体、响应体分别有哪些内容?
    1、请求头
    post: 请求方法
    HTTP/1.1 表示超文本传输协议 版本为1.1
    Host : 域名 请求的服务器网址
    Connection:Keep-Alive(持久连接) Connection 表示客户端与服务器连接类型
    User-Agent: 浏览器身份表示字符串。告诉网站服务器,访问者是通过什么工具来请求的
    Content-Type:设置请求体的MIME类型
    Cookie:用于解决记录客户端的用户信息。下次访问时,可在cookie中读取用户访问的记录

    2、响应头包括:
    Server:服务器名称
    Set-Cookie:设置HTTP Cookie
    Content-Type:设置响应体的MIME类型 text/html;charset=utf-8
    Transfer-Encoding:设置传输实体的编码格式。支持的格式有chunked、compress、deflate、gzip、identity
    Date:设置消息发送的日期和时间

    3、请求体
    入参数信息

    4、响应体
    状态行、响应头、响应的证文

    八、数据交互
    大部分项目都包含这三个板块:前台——后台—— 数据库服务器
    (了解一条数据从前台H5提交到后台存储,并将结果反馈给到前台用户的一个过程)
    页面是基于H5实现的,假如页面搜集了一条信息 ,提交到后台,是基于http传输的post 或者get请求 传输到后台过去的。后台开发有一定的代码逻辑,根据请求结果进行处理,需要存入数据库的,将结果存入数据库,同时把响应结果反馈给前台用户。

    九、接口做过吗?如何去构建一个接口测试,怎么去测试的?(python和jmeter分开讲)
    做过,我们公司用python做的接口测试。
    Python:
    1、我们开发会给我们接口文档
    2、然后根据接口文档在python里面写代码,将请求地址url、请求头信息、数据信息data赋值给变量(如果是get请求,则用params入参)
    3、然后通过requests+post/get 来构建请求
    4、拉通接口后,查看返回结果。
    5、断言判断结果
    jmeter:
    1、首先在jmeter里面的测试计划中创建一个线程组。
    2、在线程组里面创建一个HTTP请求
    3、然后填入服务器ip、端口号,路径,参数等信息
    4、添加一个查看结果树,查看运行结果
    5、添加一个响应断言、和断言结果,查看断言结果。



    十、你测过哪些接口? 你负责过哪些接口测试?
    先说大模块http://www.lianjintai.com/handbook/2.3/10_repayment_plan_query.html
    答:我主要做过金融项目里面的贷前、贷中、贷后、用户管理模块的一些接口,
    比如贷前里面的借款申请创建接口,申请状态查询接口等
    贷中里面的授信额度查询接口、贷款发放申请接口等
    贷后里面的交易流水查询接口、贷款信息查询接口等
    用户管理模块里面的添加用户接口、查询用户接口等。


    十一、怎么设计接口用例?接口用例设计思路 ?
    1、首先要拉通接口,实现该接口的基本功能
    2、输入(value值)的设计,可以考虑输入数值的有效类、边界值以及字符串的长度范围输入。对输入的合法的、不合法的 以及已经存在的数组的考虑,还有输入空值。
    3、输出的设计,错误前端处理不足,导致前端异常;接口超时没有返回,导致整个流程阻塞;
    4、逻辑的设计,对限制条件的分析,如一些数值限制,状态限制,权限限制等
    5、业务规则来设计接口。相互制约的关系,第二个接口依赖第一个接口
    6、安全性角度。前后端一些敏感信息的数据传输是否加密。不加密是否能成功,没有cookie值是否能接通。
    7、性能的角度。考虑到并发,响应时间的快慢问题等。


    十二、接口的关联处理
    1、通过cookie值处理。
    python中将cookie值设置为变量,在处理下一个接口的时候可以直接调用该变量
    2、用session()的方法,可以实现跨请求保持参数,保持会话
    3、正则匹配上一个接口的返回值中的部分数据作为下一个接口的入参。findall

    jmeter可以添加一个cookie管理器。
    jmeter的关联接口 正则表达式
    1、前面接口请求返回的值(动态变化的)定义一个变量
    2、在后置处理器里再添加一个正则表达式提取器
    3、输入一个变量名,表达式、模板、匹配数字
    4、下面一个接口引用这个变量就行了

    十三、参数化
    Python+requests参数化:
    1、定义变量,url=、data=、headers/json=、 如果是get请求params=
    2、将上一个接口的返回值,设置成变量,作为下一个接口的入参
    3、将接口的cookie值作为下一个接口的入参
    4、通过导入xlrd模块,将存储在excel表中的参数,作为请求的入参

    jmeter参数化:
    1、用户参数
    a、在前置处理器中添加一个用户参数,在里面去添加变量给参数
    b、http请求入参引用变量,${}

    2、函数助手
    ①选择CSVRead函数
    ②输入本地参数文件路径,索引值,运行
    ③把运行结果复制就是变量,粘贴到请求参数里就行

    3、利用配置原件CSV Data Set Config/CSV
    a、添加一个配置原件CSV Data Set Config
    b、引用本地配置文件路径(本地txt或cvs文档里添加参数)
    c、添加变量名

    4、用户自定义变量
    配置原件里添加用户自定义的变量,在里面添加变量给参数

    十四、断言
    1、可以通过python将json反序列化,即在python中导入json模块,用json.loads转换成字典格式,然后方便Python断言
    1)、接收返回值:r=resp.text
    2)、将接收的值反序列化为字典:import json
    d=json.loads(r)
    3)、取值断言:if d['msg']==u‘登录成功’


    2、我们可以将返回值转换成json串,js=json.rep() 然后通过assertEqul() 去断言

    断言
    #coding=utf-8
    import unittest
    import json
    import requests
    class cmtest(unittest.TestCase):
    def setUp(self):
    self.r='http://localhost:8080/cms/manage/loginJump.do'
    # def test_get(self):
    # self.content = {"userAccount":"admin",
    # "loginPwd":"123456"}
    # self.q=requests.request("get",self.r,params=self.content)
    # print self.q.text
    def test_post(self):
    self.content = {"userAccount": "admin",
    "loginPwd": "123456"}
    self.q = requests.request("post", self.r, data=self.content)
    result=self.q.text
    # print type(result)#查看对象类型
    result1=json.loads(result)#将用loads方法即可将json字符串转换成
    # python对象中的字典
    #print type(result1)#查看对象类型
    #print result1['msg']#通过字典中键取对应的值
    #self.assertEqual(result1['msg'],u'登录成功!')#断言
    #断言
    if not (result1['msg'] == u'登录成功!'):#中文前面加‘u’
    print "接口拉通失败"
    assert False
    else:
    print "接口拉通成功"

    十五、当接口比较多的时候如何处理? (封装)
    答:我先创建几个层配置层、构建层、用例层、运行层、报告层
    用xlrd模块里面的方法可以获取Excel表格中保存的测接口的需要用到的参数,这里需要注意的Excel表格中的数据我们会在表格第一行做一个数据分类然后写入对应的数据,我们在Python中获取数据时,就可以单独获取第一行的内容做为键和后面获取的值来一一对应,将获取到的值赋值给变量data。
    Ddt数据驱动,将我的数据全部放置到一个表格里面,然后通过xlrd的方法读取本地表格的数据形成对应的一个键值对数据,配置一个变量接收,传入到接口请求中去,形成报告HTML

    十六、第三方支付接口测试:
    1、第三方接口支付的流程
    答:用户提交业务订单后跳转到支付网关,然后向支付系统发起支付请求,然后支付系统展示一个支付方式,用户选择余额方式并输入支付密码后,支付系统发起扣款请求,这时候就会调用记账接口进行记账,然后返回一个支付结果给我们的支付系统,支付系统也会讲这个结果返回给支付网关,展示给用户。

    2、第三方支付如何去测:
    1、功能上,从输入的角度去考虑输入的有效类和边界类,以及一些特殊字符空值。
    2、逻辑上,考虑账户处于异常状态、账户余额不足、支付金额超过交易限额、转账支付撤销等异常情况。
    3、输出方面,在支付完成后,返回的支付订单在数据库中存储是否完整和正确进行校验,接口超时没有返回结果是否能完成订单支付等。

    3、第三方支付接口的测试点:
    1、订单是否可以正常提交
    2、同一订单是否可以重复提交
    3、提交的订单能否取消
    5、支付接口收到订单信息是否和提交订单信息一致
    7、返回的订单页面,是否有订单信息
    10、点击确认支付,能否选择第三方支付
    11、输入错误的密码能否支付成功
    12、不输入密码能否支付成功
    14、连续多次输入错误密码,是否还能继续支付
    15、无网络状态下,能否扣款成功
    16、弱网状态下,能否扣款成功
    17、点击多次提交支付,能否多次扣款
    18、余额不足情况下
    19、扣款金额是否和订单金额一致
    20、后台商家能否收到支付成功消息
    21、支付成功后,页面是否跳转至指定页面
    22、支付成功后,订单状态是否更新为已付款


    十七、接口自动化和UI自动化的区别在哪里?哪个的价值高一些?哪个更重要一些?你更倾向用哪一种?为什么?
    1、接口比ui自动化价值更高,因为第一UI自动化的维护成本高,只要页面稍微变动,自动化的脚本就需要进行调整,投入大于产出,接口的成本跟产出是成正比的。
    2、 接口的执行效率要比UI的执行效率要高,UI自动化受电脑、网络的影响。
    3、接口的覆盖率要比UI的要高。接口的覆盖率可以到达100%,UI的覆盖率只能到达50~60%。
    4、接口低维护,高收益,高产出。UI高维护,低收益,低产出
    5、UI自动化更贴近真实情况,默认人的操作。
    6、UI自动化节省人力成本。

    十八、抓包工具fiddler
    怎么抓包?
    1、首先打开fiddler抓包工具
    2、把里面的数据清空
    3、点击要抓包的页面
    4、fiddler里面就会记录相关接口信息

    fiddler的定义、原理以及有哪些功能? (jmeter也同样去查询整理一下)
    Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件)。

    3、如何去抓https的包
    1、下载支持https抓包证书
    2、配置浏览器

    测试桩:
    还没在真实环境上测试时,在测试环境上为了模拟异常场景测试,所以用测试桩。为被测模块编制一些模拟其下级模块功能的“替身”模块,以代替被测模块的接口来接收或是传递被测模块的数据,这些专供测试用的“假”模块就是“测试桩”。

    十九、提交BUG需要提交哪些信息?
    提BUG的页面 带*号的要记住
    BUG标题、BUG的重现步骤、BUG的严重程度、优先级、所属版本
    BUG所属的模块及项目
    BUG对应的截图,和日志信息。

    二十、你们公司的提缺陷流程是什么?
    答:我们提交BUG后,指派给对应的开发,开发修改BUG后,会指派回给我,我接着验证BUG,如果通过了,我会关闭BUG,如果验证不通过,我会激活BUG,让开发继续去修改,直到BUG修复通过后,就关闭BUG。

    二十一、你提的BUG 开发不认可,怎么办?
    答:在我工作过程当中基本上没出现过这种情况,假如万一出现这种情况的话,我会对BUG进行二次验证,在其他环境上测试,看是不是BUG,把确认过的BUG截图,以及对应的错误日志截图保存,然后再加上自己的操作步骤以及用到的数据,一并提交给开发同事,我也会听一下开发同事的解释,如果开发同事的解释,并不符合需求,我会继续坚持我的意见,认定为BUG,如果开发还不认的话,就把情况反馈给我们领导,让他们来处理。如果开发同事的解释后,我结合需求分析后,如果是他所说的,我会关闭BUG,并想他道歉。

    二十二、你印象比较深刻的BUG是哪个?
    答:有,有一次我在测试一个提交订单的时候,我提交了15个订单,提交完后,在我的订单里面只显示了10条订单,我通过查看日志,查看数据库中,发现后台确实生成了15条订单,并且服务器向客户端发送了15条订单数据,可以判断这个不是后台的原因,应该属于前端的原因,后面检查前端代码发现,前端没有做分页显示,也就是说1页最多显示10条订单数据,超过10条后就飞分页,前端开发没有做分页显示的话,超过10条的数据部分就显示不出来了。

    做宜农贷项目的时候,在进行注册账号时,输入完账号和密码,在点击接收验证码信息时,手机上收不到验证码信息,从而无法进行下一步注册,而后跟对应的开发反应,定位bug/后台接收不到前台数据请求


    财务后台系统查询时,查看订单区间大于一年时间会显示查询超时,比如查看2019年1月~2020年2月的所有借款订单,会显示超时。bug原因是查询数据量太大,表关联过多,解决方案:开发定时将数据统计到一张表,之后查询。


    二十三、如何去定位BUG?
    首先分析是前段还是后端的问题
    (1)检查接口,前端和后台之间是通过接口文件相互联系的,需要查看接口文件
    (2)检查请求的数据是什么,反馈的数据又是什么
    (3)根据接口文件,检查数据是否正确。如果发送的数据是正确的,但是后台反馈的数据是不符合需求的,那就是后台的问题;如果前端没有请求接口或请求的时候发送数据与需求不符,那这个时候就是前端的问题了。
    (先抓包看请求报文,对着接口文档,看请求报文有没问题,有问题就是前端发的数据不对
    请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题)
    然后通过查看日志具体信息,查看是哪里的具体问题。
    二十四、json格式的优点
    1、json格式易读,它展示出来的内容方便人阅读
    2、他支持多语言多平台的运行、就是支持跨语言和跨平台的相互
    3、json所产生的数据包比较小,占用内存比较小

    二十五、关联接口的测试
    主要是把上一个接口的内容提取出来作为第二个接口的入参,把上一个接口返回的结果转为Pyhton能操作的格式,再通过正则re匹配,的findall方法提取自己想要的内容,通过索引提取一个值赋给你一个变量,把这个变量作为下一个接口的入参,就可以构成两个接口的关联。

  • 相关阅读:
    Asp.net 在VS下发布失败
    Delphi XE安装提示 Item Not Found
    使用VS时,有个提醒如下:"驗證 (XHTML 1.0 Transitional): 系統將 'font' 視為過期舊式的項目。建議使用較新的建構."
    安装DELPHI7后出现的问题 1,一运行DELPHI7就出现一对话框 can't load package ...borland\delphi7\bin\dclite.bpl.Access
    Unidac手工安装
    一个非常好的框架
    英文帮助翻译
    arcgis javascript api学习5
    Dojo学习要点(转载)
    vba 生成点的矩形buffer
  • 原文地址:https://www.cnblogs.com/xiaolehua/p/13799429.html
Copyright © 2011-2022 走看看