自动化测试之接口面试题

题目汇集:

  1. json和字典的区别? -对基础数据类型的考察
  2. 测试的数据你放在哪? -数据与脚本分离
  3. 参数化 - 数据驱动模式
  4. 下个接口请求参数依赖上个接口的返回数据 - 参数关联
  5. 依赖于登录的接口如何处理 -token和session的管理
  6. 依赖第三方的接口如何处理 -mock模拟数据返回
  7. 不可逆的操作,如何处理,比如删除一个订单这种接口如何测试 -造数据
  8. 接口产生的垃圾数据如何清理 - 数据清理
  9. 一个订单的几种状态如何全部测到,如:未处理,处理中,处理失败,处理成功 - 造数据,改数据库订单状态
  10. python如何连接数据库操作?-数据库的连接操作
  11. 其它的就是运行出报告、代码管理(git)、运行策略和持续集成jenkins相关了

题目解答:

  1. json和字典的区别?
    json() 本质是字符串 str类型,是一种按照key:value键值对格式的字符串
    字典:是python语言中的一种数据类型(int str,float,bool,dict,tuple,list)
  2. 测试的数据你放在哪?
    1对于账号密码,这种管全局的参数,可以用命令行参数,单独抽出来,写的配置文件里(如ini)
    2对于一些一次性消耗的数据,比如注册,每次注册不一样的数,可以用随机函数生成
    3.对于一个接口有多组测试的参数,可以参数化,数据放yaml,text,json,excel都可以
    4.对于可以反复使用的数据,比如订单的各种状态需要造数据的情况,可以放到数据库,每次数据初始化,用完后再清理
    5.对于邮箱配置的一些参数,可以用ini配置文件
    6.对于全部是独立的接口项目,可以用数据驱动方式,用excel/csv管理测试的接口数据
    7.对于少量的静态数据,比如一个接口的测试数据,也就2-3组,可以写到py脚本的开头,十年八年都不会变更的
    总之不同的测试数据,可以用不同的文件管理
  3. 什么是数据驱动,如何做参数化?
    使用装饰器,ddt,data,unpack ddt装饰测试类,data装饰测试方法,unpack 拆包,将需要修改的数据进行参数化,方便后期数据的操作
    参数化的思想是代码用例写好了后,不需要改代码,只需维护测试数据就可以了,并且根据不同的测试数据生成多个用例
  4. 下个接口请求参数依赖上个接口的返回数据?
    1.不同的接口封装成不同的函数或方法,需要的数据return出来,用一中间变量a去接受,后面的接口传a就可以了
    2.使用反射机制,将上一个接口返回的数据 作为一个入参 传到下一个接口中。setattr,将返回的数据存到一个变量中
  5. 依赖于登录的接口如何处理?
    1.登录接口依赖token的,可以先登录后,token存到一个yaml或者json,或者ini的配置文件里面,后面所有的请求去拿这个数据就可以全局使用了
    2.如果是cookies的参数,可以用session自动关联 s=requires.session() 然后根据get/post方法,进行调用(s.get())自动关联session
  6. 依赖第三方的接口如何处理?
    使用mock机制,去搭建一个mock服务,模拟接口返回数据
  7. 不可逆的操作,如何处理,比如删除一个订单这种接口如何测试?
    考查造数据的能力,接口的请求数据,很多都是需要依赖前面一个状态的。
    比如工作流这种,流向不同的人状态不一样,操作权限不一样,测试的时候,每种状态都要测到,就需要自己会造数据了。
    平常手工测试造数据,直接在数据库改字段状态。那么自动化也是一样,造数据可以用python连数据库了,做增删改查的操作
    测试用例前置操作,setUp做数据准备
    后置操作,tearDown做数据清理
  8. 接口产生的垃圾数据如何清理?
    造数据和数据清理,需用python连数据库了,做增删改查的操作
    测试用例前置操作,setUp做数据准备
    后置操作,tearDown做数据清理
  9. 一个订单的几种状态如何全部测到,如:未处理,处理中,处理失败,处理成功
    创造数据,修改数据的类型
  10. python如何连接数据库操作?
    import pymysql(根据公司的数据库的类型进行连接) db=pymysql.connect(user=’’,password=’’,host=’’,db_name=’’,port=’’)
    使用cursor()方法获取操作游标 cursor=db.cursor() SQL 查询语句:sql=’’ 执行SQL语句:cursor.execute(sql) 获取结果:result=cursor.fetchone()
    cursor.close() db.close()
    1.新建连接,数据库的连接信息
    2.新建查询界面
    3.编写SQL语句
    4.执行SQL语句
    5.查看结果
    6.关闭查询
    7.关闭数据库的连接
  11. git 将代码上传到github上 git add –all git commit ‘注释’ git push
    git 将github上的代码拉下来 git clone ‘github的项目地址’
    jenkin持续集成,发生邮件等