zoukankan      html  css  js  c++  java
  • 接口自动化——面试题

    1.怎么分析bug是前端的还是后端的?

       先抓包看请求报文,对着接口文档,看请求报文有没问题,有问题就是前端发的数据不对。

      请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题。

    2.get和post的区别?

    1)传送方式:get通过地址栏传输,post通过报文传输

    2)传送长度:get参数有长度限制(受限于url长度),而post无限制

    3)get产生一个tcp数据包(对于get方式,浏览区会把header和data一并发送出去,服务器响应,返回数据)

      pos产生两个tcp数据包(对于post,浏览器先发送header。服务器响应100 continue,浏览器再发送data,服务器响应返回数据)

    4)get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留

    3.JSON的两种结构
    1) 对象:用大括号表示,对象由属性组成,属性由键值对组成,键和值对之间用冒号隔开,属性之间用逗号隔开,另外键必须用双引号。如:{"姓名":"Lara","年龄":18}

    2) 数组:用中括号表示。如:["小鸡","小鸭","小狗"]

    4.常见的http状态码分别代表什么?
    2XX--成功

    3XX--重定向(客户端浏览器必须采取更多操作来实现请求)

    4XX--客户端错误

    5XX--服务器错误

    具体:

      302:临时重定向到某一个页面,比如要登录之后才能进入的页面,他首先会临时重定向到登录界面

      401:用户发出的请求有错误,服务器没有进行新建或修改数据的操作【Unauthorized】

      403:表示用户得到授权,但访问被禁止【Forbidden】

      404:用户发出的请求得到是不存在的记录,服务器没有进行操作【NOT FOUND】

      503:服务端目前无法使用,过载或者维护中

      500:服务端发生错误,用户无法判断发出的请求是否成功

    5.post请求的四种参数形式是什么?
      application/x-www-form-urlencoded

      multipart/form-data

       application/json

       text/xml

    6.cookie与session的区别
    1)cookie数据存放在客户的浏览器上,session数据放在服务器上。

    2)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗考虑到安全应当使用session。

    3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用cookie。

    4)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie

    5)可以将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie

    7.JSON的两种结构
    1) 对象:用大括号表示,对象由属性组成,属性由键值对组成,键和值对之间用冒号隔开,属性之间用逗号隔开,另外键必须用双引号。如:{"姓名":"Lara","年龄":18}

    2) 数组:用中括号表示。如:["小鸡","小鸭","小狗"]

    8.requests 库响应消息体四种格式
      r.text:文本响应内容

      r.content:字节响应内容

      r.json():Json解码响应内容

      r.raw:原始响应内容

    9.当一个接口出现异常,你是如何分析异常的?
      用fiddler工具抓包或者浏览器上按F12调试。

      app上就用fiddler设置代理,去看请求报文和返回报文。查看后端日志,xshell连上服务器,查看日志。

    10.接口测试用例的编写要点有哪些?
    1)必填字段:请求参数必填项、可选项

    2)合法性:输入输出合法、非法参数

    3)边界:请求参数边界值等

    4)容错能力:大容量数据、频繁请求、重复请求(如:订单)、异常网络等的处理

    5)响应数据校验:断言、数据提取传递到下一级接口…

    6)逻辑校验:如两个请求的接口有严格的先后顺序,需要测试调转顺序的情况

    7)性能:对接口模拟并发测试,逐步加压,分析瓶颈点

    8)安全性:构造恶意的字符请求,如:SQL注入、XSS、敏感信息、业务逻辑(如:跳过某些关键步骤;未经验证操纵敏感数据)

     

    11.说说接口测试的流程和接口自动化流程,介绍一下request有哪些内容?

    1)流程:获取接口文档,依据文档设计接口参数,获取响应,解析响应,校验结果,判断测试是否通过。 

    2)request 内容:1,封装了get、post等;

            2、以关键字参数的方式,封装了各类请求参数,params、data、headers、token、cookie等;

    3)封装了响应内容,status_code、json()、cookies、url等

    12.json和字典dict的区别

    答:  json本质上还是字符串,只是按keyvalue这种键值对的格式来的字符串<br>而字典是{keyvalue}的一种数据类型

    13.测试的数据你放在哪?

      1.对于账号密码,这种管全局的参数,可以用命令行参数,单独抽出来,写的配置文件里(如ini

      2.   对于一些一次性消耗的数据,比如注册,每次注册不一样的数,可以用随机函数生成

      3.对于一个接口有多组测试的参数,可以参数化,数据放yaml,text,json,excel都可以

      4.对于可以反复使用的数据,比如订单的各种状态需要造数据的情况,可以放到数据库,每次数据初始化,用完后再清理

      5.对于邮箱配置的一些参数,可以用ini配置文件

      6.对于全部是独立的接口项目,可以用数据驱动方式,用excel/csv管理测试的接口数据

      7.对于少量的静态数据,比如一个接口的测试数据,也就2-3组,可以写到py脚本的开头

     

    14.在手工接口测试或者自动化接口测试过程中,上下游接口有数据依赖如何处理?

    用一个全局变量来处理依赖的数据

    15.自动化使用的测试框架是什么?

    测试框架:python+unittest+requests+ddt+openpyxl+pymysql+logging

    测试框架:python:入门简单,语法简洁

      unittest :定义一个测试用例类,具体的方法来维护测试用例的生命周期,测试场景行为,测试用例  前置场景,行为,期望结果,实际结果,断言方法,Setup teardown方法

      requests:接口调用 ,支持http请求的库,API 简洁,提供不同的http请求方法,支持sessioncookies

      ddt :数据驱动,ddt 类装饰器,data 测试方法装饰器  unpack解包可迭代的数据类型<br><br>普通用户,数据库,配置文件---(基础数据)

      openpyxl  数据管理 excel管理 数据,使用openpyxl模块来进行excel数据的读和写(exclecsv,  json,  yaml,  txt都可以管理测试数据)

      pymysql:数据库交互,数据校验<br><br> evaljson:数据格式的转换   Evalpython支持的格式转换成对应的格式

       logging:日志处理, 统一日志输出格式,渠道,级别,执行结果的记录,便于定位问题

       jenkins:持续集成

    16.依赖于登录的接口如何处理?

       登录接口依赖token的,可以先登录后,token存到一个yaml或者json或者ini的配置文件里面,后面所有的请求去拿这个数据就可以全局使用了

      如果是cookies的参数,可以用session自动关联

    17.接口产生的垃圾数据如何清理?

      造数据的数据清理,需用python连接数据库,做增删改查操作

      测试用例前置,setUp做数据准备后置操作,tearDown做数据清理

     

    17-2不可逆的操作,如何处理,比如删除一个订单这种接口如何测试 

     

     

    18.python如何连接数据库操作?

      首先导入模块(提前pip安装)  import pymysql     

      打开数据库连接   db = pymysql.connect("localhost", "username", "psw", "db_name")

      创建一个游标对象  cursor = db.cursor()

      sql查询语句   sql = "select * from emp"

      执行sql语句  cursor.execute(sql)

      获取所有记录列表   cursor.fetchall()  

      然后for循环遍历  

      关闭数据库连接  db.close()

    19.对pytest的理解程度?使用规范?参数化方法?说说常用装饰器?

       pytest是一个非常成熟的全功能的的Python测试框架,主要特点有以下几点:

      1,简单灵活,容易上手,文档丰富;

      2,支持参数化,可以细粒度地控制要测试的测试用例;

         3,能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/ appnium等自动化测试,接口自动化测试(pytest +请求);

      4,pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest - selenium(集成selenium),

         pytest-HTML(完美的HTML测试报告生成),pytest-rerunfailures(失败情况下重复执行),pytest -xdist(多CPU分发)等;

       5,测试用例的跳跃和xfail处理;使用规范:测试文件名必须以“test_”开头.测试类以Test开头,并且不能带有 init 方法

           测试方法必须以“test_”开头

           除了有setup/teardown,还能更自由的定义fixture装载测试用例

           参数化方法:

          pytest支持在多个完整测试参数化方法:

          pytest.fixture(): 在fixture级别的function处参数化

          @pytest.mark.parametrize:允许在function或class级别的参数化,为特定的测试函数或类提供了多个argument/fixture设置。

            pytest_generate_tests:可以实现自己的自定义动态参数化方案或扩展。

    20.自动化测试报告生成方式?如果是allure详述?

      @allure.severity(“critical”) # 优先级,包含blocker, critical, normal, minor, trivial 几个不同的等级

      @allure.feature(“测试模块_demo1”) # 功能块,feature功能分块时比story大,即同时存在feature和story时,feature为父节点

      @allure.story(“测试模块_demo2”) # 功能块,具有相同feature或story的用例将规整到相同模块下,执行时可用于筛选

      @allure.issue(“BUG号:123”) # 问题表识,关联标识已有的问题,可为一个url链接地址

      @allure.testcase(“用例名:测试字符串相等”) # 用例标识,关联标识用例,可为一个url链接地址

    21.举例说明pytest.mark标记的使用?

      1,无条件跳过测试pytest.mark.skip

      2,有条件跳过测试pytest.mark.skipif

      3,标记测试功能按预期失败pytest.mark.xfail

      4,将测试功能标记为使用给定的夹具名称pytest.mark.usefixtures

      5,向特定测试项添加警告过滤器,以便更好地控制应在测试,类甚至模块级别捕获哪些警告@pytest.mark.filterwarnings

      6,自定义标记:标记指定标签

     22.为什么要做接口测试? 

    • 比如这个输入框,平常拿到这个 web 页面,会对输入框做用例设计:
       输入一个负数(如:-100),点提交
       输入金额为 0(如:0),点提交
       输入金额为 0-100 的数(如:20),点提交
       输入金额为 100(如:100),点提交
       输入金额大于 100(如:108),点提交
       输入 1 位小数(如:10.1),点提交
       输入 2 位小数(如:10.12),点提交
       输入 3 位小数(如:10.123),点提交
      按照这个等价类,边界值用例测完,页面上不能输入负数和大于 3 位数小数点,
      然后就可以上线了。
      然而。。。突然有一天数据库里面插入了一个提现金额为负数(-100),于是整
      个部门炸锅了,首先找到测试(背锅)去复现问题,测试在页面上反复输入负数,
      无法提交,认为没问题啊!
      首先前端开发对输入框是做了限制的,前端的 web 开发肯定没问题,这个锅前端
      开发 MM 不背。那么如果别人用户不通过你的 web 页面,直接发请求提交了呢?
      纳尼!!!不通过页面也能提交。。。这就是我们接下来要提到的接口测试了。

    优势所在:

      1.可以发现很多在页面上操作发现不了的bug
      2.检查系统的异常处理能力
      3.检查系统的安全性、稳定性
      4.前端随便变,接口测好了,后端不用变
      5.可以测试并发情况,一个账号,同时(大于2个请求)对最后一个商品下单,或不同账号,对最后一个商品下单
      6.可以修改请求参数,突破前端页面输入限制(如金额)

     23.什么是 DNS? 

    “学习必须如蜜蜂一样,采过许多花,这才能酿出蜜来。”
  • 相关阅读:
    JSONObject处理java.util.Date
    JSON lib 里JsonConfig详解
    Android编程获取手机的IMEI
    Toast用法
    JMM内存管理
    Users is not mapped(Hibernate实体类采用注解)
    指针小结(不定期更新)
    这个博客几乎不用了,转到csdn
    2013暑期在家(1)
    用户空间与内核空间,进程上下文与中断上下文[总结]
  • 原文地址:https://www.cnblogs.com/Lara1798/p/12852224.html
Copyright © 2011-2022 走看看