• python自动化测试面试题(三)(持续更新)


    在这里插入图片描述

    41、怎么设计接口测试用例?(非常重要)

    通常,设计接口测试用例需要考虑以下几个方面:

    ①是否满足前提条件

    有些接口需要满足前提,才可成功获取数据。常见的,需要登录Token
    逆向用例:针对是否满足前置条件(假设为n个条件),设计1~n条用例

    ②是否携带默认值参数

    正向用例:带默认值的参数都不填写、不传参,必填参数都填写正确,设计1条用例

    ③业务规则、功能需求

    结合接口参数说明,可能需要设计N条正向用例和逆向用例

    ④参数是否必填

    逆向用例:针对每个必填参数,都设计1条参数值为空的逆向用例

    ⑤参数之间是否存在关联

    有些参数彼此之间存在相互制约的关系

    ⑥参数数据类型限制

    逆向用例:针对每个参数都设计1条参数值类型不符的逆向用例

    ⑦参数数据类型自身的数据范围值限制

    正向用例:针对所有参数,设计1条每个参数的参数值在数据范围内为最大值的正向用例

    42、你做接口测试,测什么?(非常重要)

    可用性测试

    根据约定的协议、方法、格式内容,传输数据到接口经处理后返回期望的结果:
    1、根据响应结果判断接口功能是否正确实现;
    2、返回值测试 - 返回值除了内容要正确,类型也要正确,保证调用方和前端能够正确地解析,
    3、返回值测试 - 判断返回值中的字段是否有缺少或者多余
    4、参数值边界值、等价类测试;

    错误和异常处理测试

    1、输入异常值(空值、特殊字符等),接口能正确处理,且按预期响应;
    2、输入超长数据或者超大或者超小数据,接口能正确处理,且按预期响应;
    3、输入错误的参数,接口能正确处理,并按预期响应;
    4、多输入、少输入参数,接口能正确处理,且按预期响应;
    5、错误传输数据格式(如json格式写成form格式)测试;

    安全性测试,主要指传输数据的安全性:

    1、敏感数据(如密码、秘钥)等是否加密传输;
    2、返回数据是否含有敏感数据,如用户密码、完整的用户银行账号信息等;
    3、接口是否对传入的数据做安全校验,如身份ID加token类似校验;
    4、接口是否防止恶意请求(如大量伪造请求接口致使服务器崩溃)

    性能测试,如接口的响应时间、并发处理能力、压测处理情况:

    1、并发请求相同的接口(特别为POST请求),接口的处理情况(如插入了相同的记录导致数据出错,引发系统故障);
    2、接口响应时长在用户可忍受的范围内;
    3、对于请求量大的接口做压测,确定最大的瓶颈点是否满足当前业务需要;

    43、没有接口文档,如果做接口测试?(非常重要)

    没有接口文档,那就需要先跟开发沟通,然后整理接口文档
    没有接口文档,可以抓包看接口请求参数,然后不懂的跟开发沟通

    44、你平常做接口测试的过程中发现过哪些bug?(非常重要)

    面试官出这个题,主要是想知道你是不是真的做过接口测试,
    常规错误,接口没实现,没按约定返回结果,边界值处理出错等。
    输入异常值(空值、特殊字符、超过约定长度等),接口抛错,没做封装处理;
    输入错误的参数、多输入、少输入参数,接口可能出现的错误;
    安全性问题,如明文传输、返回结果含有敏感信息,没对用户身份信息做校验,没做恶意请求拦截等;
    性能问题,如接口并发插入多条相同操作,响应时间过长,接口压测出现瓶颈等;

    45、你的项目是什么阶段介入接口自动化测试的(非常重要)?

    项目前期:编写测试用例、搭建测试框架、调试脚本代码;
    项目中期:执行测试,报告bug,维护框架,调整测试用例
    项目后期:代码改进,框架优化,结果输出,分析报告,回归测试
    项目上线:监控项目,维护框架

    46、Python 什么是命名元组?

    from collections import namedtuple
    
    User=namedtuple('User',('name','age','city'))
    user1=User('kobe','18','洛杉矶')
    print(user1)				#User(name='kobe', age='18', city='洛杉矶')
    
    print(user1.name)
    
    print(user1.age)
    
    print(user1.city)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    执行结果:

    python
    User(name='kobe', age='18', city='洛杉矶')
    kobe
    18
    洛杉矶
    
    • 1
    • 2
    • 3
    • 4
    • 5

    47、Python 如何去操作 MySQL 数据库?

    # 1、导入mysql
    from pymysql import *
    # 2、创建数据库lianjie
    conn = connect(host='localhost',
                   port=3306,
                   user='root',
                   password='xxxx',
                   db='mytestdb',
                   charset='utf8')
    print(conn)
    # 3、打开游标
    cur=conn.cursor()
    # 4、执行sql语句
    # 编写sql语句
    # 查询数据时为了节约内存,不要用*,而要指定具体的字段,另外要指定查询条件,现在查询条数
    sql="select sno,sname,sex,age,enterdate,classname,email from t_student1 where age>%s"
    params=(30)
    # 执行sql语句
    cur.execute(sql,params)
    
    # todo 获取1条数据,每次执行cur.fetchone()语句,游标都会向下走,获取到新的数据
    result=cur.fetchone()
    print(result)
    # result=cur.fetchone()
    # print(result)
    # result=cur.fetchone()
    # print(result)
    # todo 获取所有的数据
    result1=cur.fetchall()
    print(result1)
    # todo 获取多条数据
    result1=cur.fetchmany(2)  #取指定条数据
    print(result1)
    
    # 5、关闭游标
    cur.close()
    # 6、关闭连接
    conn.close()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    48、解决手动造数据问题(重要)

    参数化
    手机号:
    excel里边存放初始手机号 每次执行完,回写新的手机号(原来号码+1)
    每次从数据库里查询最大手机号,在这个基础上加1
    变量替换: 数据库依赖关系 ${mobile} ${regtime} ${memberid} ${loanid}
    最关键:用例设计、用例参数之间依赖关系

    49、为什么做接口测试(重要)?

    a、可以发现很多在页面上发现不了的bug。
    b、检查系统的异常处理能力。
    c、检查系统的安全性,稳定性。
    d、前端随便变,接口测好了,后端就可以不用变了。
    e、接口测试是一个完整的体系,也包括功能刻试、性能则试和安全性测试。

    50、登录按钮除了用click方法进行点击以外还有其他方式吗?

    还可以使用 submit() 方法,前提是input元素的type为submit

    51、怎么验证复选按钮是不是被选中

    可以使用元素的 isSelected() 方法,如果返回的是 true 则说明被选中,否则表明未被选中

    52、需求:给定一个只包含正整数且非空的数组,返回该数组中重复次数最多的前N个数字(返回结果按重复次数从多到少降序), 请用熟悉的语言实现该需求。10分钟内写出来

    a=[2,3,5,7,2,2,7,8,5,5,5]
    
    def fun(s):
        d={}
        for item in s:
            if item not in d:
                d[item]=1
            else:
                d[item]+=1
        print(d)
        return d
    
    
    def fun_sort():
        res = fun(a)
        dd = sorted(res.items(), key=lambda x: x, reverse=True)
        print(dd)
        N = int(input("请输入一个数:"))
        for i in range(0,N):
            print("出现次数排第%d的数字是%d,共出现了%d次" % (i+1,dd[i][0],dd[i][1]))
    
    
    fun_sort()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    53、在制定自动化测试计划的时候一般要考虑哪些点?(重要)

    1、分析当前的工具是否适合新项目
    2、选择合适的自动化测试框架
    3、确定要做自动化测试的范围和不做自动化测试的范围
    4、测试环境的准备
    5、制定一个粗略的脚本开发的时间表
    6、制定脚本执行的一些策略,如冒烟测试的频率,回归测试的时间点及频率等
    7、定义自动化测试的输出,比如脚本,测试数据,发现的缺陷,测试报告等

    54、编写自动化脚本时的一些规范?

    1、统一的命名约定,如用例名,方法名等
    2、良好的脚本注释
    3、遵循代码规范,使用适当的缩进
    4、对异常进行处理

    55、做自动化测试时关注的一些指标?

    1、自动化测试用例的覆盖率=自动化测试用例数/所用用例总数,这个比例越高测试反馈越快,成本节约越多
    2、节省的时间成本=手工测试所花的时间-自动化测试所花的时间
    3、自动化测试的投入=开发脚本的投入+脚本维护的投入+工具价格
    4、自动化测试发现的缺陷数,每次回归测试时自动化测试发现的缺陷数及漏测数,反应了自动化用例的有效性
    5、自动化测试投入产出比
    ROI=(手工测试的成本-自动化测试成本)/自动化测试成本
    ROI如果是负值说明自动化测试的成本未收回,ROI为正值说明自动化测试成本已回收,且值越大说明回报越好

    56、Selenium可以处理Windows弹窗吗?

    Selenium本身是不可以处理Windows弹窗的,但是Selenium可以借助Autolt小工具来完成对Windows弹窗的操作。

    57、如何判断一个元素在页面上是显示出来的?

    webelement类中的is_displayed()方法

    本身这个函数用于判断某个元素是否存在页面上(这里的存在不是肉眼看到的存在,而是html代码的存在。某些情况元素的visibility为hidden或者display属性为none,我们在页面看不到但是实际是存在页面的一些元素。)

    58、Selenium中如何判断元素是否存在?

    from selenium.common.exceptions import NoSuchElementException 
    # 判断元素是否存在
    def isElementPresent(self, by, value):
        try:
            element =self.driver.find_element(by=by, value=value)
        except NoSuchElementException as e:
            # 发生了NoSuchElementException异常,说明页面中未找到该元素,返回False
            return False
        else:
            # 没有发生异常,表示在页面中找到了该元素,返回True
            return True
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

    此题考的是造数据的能力,接口的请求数据,很多都是需要依赖前面一个状态的
    比如工作流这种,流向不同的人状态不一样,操作权限不一样,测试的时候,每种状态都要测到,就需要自己会造数据了。
    平常手工测试造数据,直接在数据库改字段状态。那么自动化也是一样,造数据可以用python连数据库了,做增删改查的操作
    测试用例前置操作,setUp做数据准备
    后置操作,tearDown做数据清理

    60、接口产生的垃圾数据如何清理

    跟上面一样,造数据和数据清理,需用python连数据库了,做增删改查的操作
    测试用例前置操作,setUp做数据准备
    后置操作,tearDown做数据清理

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    【JVM 系列】JVM 调优
    YOLO-World: Real-Time Open-Vocabulary Object Detection
    MySQL数据类型
    vscode 搜索界面的files to include files to exclude 是什么功能?
    Windows配置JAVA_HOME但是未生效问题
    jmh测试实践(针对不同准备数据测试)
    VS2017下第一个C#控制台程序helloworld
    【剑指Offer】29.顺时针打印矩阵
    (附源码)springboot金融新闻信息服务系统 毕业设计651450
    displaty:none与visibility:hidden的区别
  • 原文地址:https://blog.csdn.net/YZL40514131/article/details/125940552