测试基础/python自动化面试题

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? 

 

posted @ 2020-05-08 18:56  胡七七  阅读(1506)  评论(5编辑  收藏  举报