• 经典测试工程师面试题(一)


    经典测试工程师面试题(一)

     

    白盒和黑盒的区别,你是怎么运用的?

    黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。利用其检查功能是否符合需求说明书,能够正常使用,
    白盒测试:已知产品的内部工作过程,可以进行测试证明每种内部操作是否符合设计规格要求,所有内部成分是否经过检查
    利用其检查程序模块的内部逻辑走向,主要覆盖程序内的逻辑。

    如何设计测试用例?什么样子的测试用例是好用例?

    掌握边界值分析、等价类划分、错误推测等方法来设计测试用例
    是一个完备的集合,它能够覆盖所有等价类以及各种边界值;需要从软件功能需求出发,全面地,无遗漏地识别出测试需求;最好是代码覆盖测试也全面的测试

    功能测试在 beta 版本对外的上线标准是什么?

    测试用例全部跑完并且bug都已经关闭,然后业务验收后可以上线

    请描述下你公司的测试流程?

    需求分析讨论-确定测试策略-设计测试用例-测试用例评审-beta测试-uat测试-测试报告

    请描述下bug的几个要素?

    1.没有实现需求说明书列出的功能
    2.出现了需要说明书提到不应出现的事情
    3.实现了需求说明书未提到的功能
    4.没有实现说明书中没有提到但应该实现的功能
    5.难于使用,运转速度很慢,用户认为没有达到预期

    请问你们公司是如何做接口测试的?

    swagger 、 接口自动化脚本

    接口测试质量评估标准是什么?

    接口表现与接口文档的一致性
    请求参数:必选和非必选、长度、字符类型、为空、缺失、组合、重复
    返回数据:正常和异常

    请问你们公司是如何做性能测试的?请讲诉性能测试的相关指标?

    1.做性能需求分析,挑选了用户使用最频繁的功能来做性能测试,比如:登陆,搜索,提交订单,确定性能指标,比如:事务通过率为100%,90%的事务响应时间不超过5秒,并发用户为1000人,CPU和内存的使用率为70%以下
    2.性能测试计划,明确测试时间(通常在功能稳定后,如第一轮测试后进行)和测试环境和测试工具的选择
    3.编写性能测试用例
    4.搭建性能测试环境,准备好性能测试数据
    5.通过性能测试用例,编写性能测试脚本
    6.性能测试脚本进行调优,设置检查点、参数化、关联、集合点、事务,调整思考时间,删除冗余的脚本等
    7.设计性能测试场景,使用nmon工具监控服务器,运行测试场景
    8.分析性能测试结果,如果有问题(性能瓶颈),收集相关的日志提单给开发修改
    9.开发修改好后,回归性能测试
    10.编写性能测试报告
    相关指标:响应时间、并发数、吞吐率、资源利用率、TPS

    压力测试和负载测试的区别

    负载测试是模拟实际软件系统所承受的负载条件的系统负荷,通过不断加载(如逐渐增加模拟用户的数量)或其它加载方式来观察不同负载下系统的响应时间和数据吞吐量、系统占用的资源(如CPU、内存)等,以检验系统的行为和特性,以发现系统可能存在的性能瓶颈、内存泄漏、不能实时同步等问题
    压力测试是在高负载情况下对系统的稳定性进行测试。是在高负载(大数据量、大量并发用户等)下的测试,观察系统在峰值使用情况下的表现,从而发现系统的功能隐患
    负载测试:多用户,用户数渐增,持续同时发同一业务请求,产出最大TPS
    压力测试:多用户,资源使用饱和,持续同时发同一业务请求,产出系统瓶颈或使用极限

    服务器中一般要监控哪些数据,如何监控的,怎么从监控数据中发现问题?

    基础监控和应用监控。
    基础监控包括机器是否死机,cpu,内存,磁盘使用率等;应用监控包括日志监控、端口监控、进程数监控等。

    假设系统A调用系统B,我把B的接口都mock了,进行性能测试,这样有什么好处和坏处?

    好处:防止系统B出错引起测试错误;不会因系统B的开发进度影响测试;mock后可以快速返回结果,提高测试效率
    坏处:很多情况下无法完全模拟出服务器的所有可能的返回情况,另外,mock掉了关联方之后,整个环境的连通性可能测试的不到位。

    有一天早上打车高峰,滴滴服务端挂了大概30分钟,工程师抢修之后,马上上线,之后又挂了,请问有哪些原因会造成这个情况?

    服务器内存不够、服务器超出负载、并发量太大、遇到恶意攻击

    如何看待自动化和手动测试?怎样的一个比例才是健康的?

    自动化适合做为回归测试的主要方式,新上线的功能一般都是用手动测试方式,一些极端和用户习惯操作还是手动测试比较方便。尽可能线上稳定的功能模块都做成自动化,提供效率

    你们公司的自动化投入产出比怎样?效益怎样?

    自动化主要作为回归测试,减少测试时间。UI自动化么有弄,基本找不到bug 。

    完整运行一次自动化用例需要多久时间?

    主要跑的是业务流,所以跑一次需要半个小时左右

    什么是分层自动化?

    金字塔结构, 最底层UnitTest,往上接口API/集成起来的service, 最上面UI自动化

    你的测试数据是怎么准备的?

    提前准备好,在代码里的yaml文件

    测试脚本的维护成本是怎么样的?

    业务不变的情况下,一般脚本都是不坏不动的

    请写出冒泡排序。

     1 #冒泡排序:n*n
     2 def bubbleSort(array):
     3   maxindex = len(array)-1
     4   maxValue = array[maxindex]
     5   k=0
     6   while maxindex:
     7       for i in range(1,maxindex):
     8           if array[i-1]>array[i]:
     9               temp = array[i]
    10               array[i] = array[i-1]
    11               array[i-1] = temp
    12           k+=1
    13       maxindex -=1
    14   print(k)
    15   return array

    1~9999数列中数字3出现的次数。用递推方法解出。

    def count_digit(number):
        return len(str(number))
    
    def countThree(digit):
        if not isinstance(digit,int):
            raise TypeError('number is not int')
        # digit = len(str(number))
        if(digit <=0):
            return 0
        if(digit ==1):
            return 1
        return 10*countThree(digit-1) + 10 **(digit-1)
    
    print(countThree(count_digit(9999)))

    从一个数组中找出前4个最大的数,用最优解。

    #快速排序:最快的n*logN
    def qiuckSort(list):
        if len(list)<2:
            return list
        mid = list[0]
        left = [i for i in list[1:] if i <= mid]
        right = [i for i in list[1:] if i > mid]
        finallyList = qiuckSort(left)+[mid] + qiuckSort(right)
        return finallyList
    array = [3, 0, 1, 832,23,45, 5, 5, 6,46, 9, 56, 897]
    print(qiuckSort(array)[-4:])

    写一段程序,删除字符串a中包含的字符串b,举例 输入a = "asdw",b = "sd" 返回 字符串 “aw”,并且测试这个程序。

    def delBString(a,b):
        if not isinstance(a,str):
            raise TypeError("a is not str")
        if not isinstance(b,str):
            raise TypeError("b is not str")
        if len(a) < len(b):
            raise Exception('a length must large to b length')
        result = []
        flag = False
        i=0
        la = len(a)
        lb = len(b)
        while i <la:
            j = 0
            while j < lb:
                if i+j < la and a[i+j] == b[j]:
                    j += 1
                else :
                    j += 1
                    flag = False
                    break
                flag = True
            if flag:
                i += lb
            else:
                result.append(a[i])
                i += 1
        return "".join(result)
    测试用例:
    
    class TestdelInnerStringFunctions():
        def setUp(self):
            pass
        def tearDown(self):
            pass
        def test_nomorl1(self):
            assert delBString('asdqwe','we') == 'asdq'
        def test_nomorl2(self):
            assert delBString('asdqwe','0') == 'asdqwe'
        def test_nomorl3(self):
            assert delBString('测试asdqwe','we') == '测试asdq'
        def test_nomorl4(self):
            assert delBString('测试asdqwe','测试') == 'asdqwe'
        def test_nomorl5(self):
            assert delBString('asdqwe','') == 'asdqwe'
        def test_nomorl6(self):
            with pytest.raises(TypeError):
                delBString('', 0)
        def test_nomorl7(self):
            with pytest.raises(TypeError):
                delBString(0, 'as')
        def test_nomorl8(self):
            with pytest.raises(TypeError):
                delBString(True)
        def test_nomorl9(self):
           with pytest.raises(Exception) as excinfo:
               delBString('acd','acde')
           assert "a length must large to b length" in str(excinfo.value)
           assert excinfo.type == Exception

    写一个方法,把字符串转为数字,比如 str="1234",变成 int 1234。并且测试这个程序。

    def StrToInt(a):
        res ,mult,flag = 0,1,1
        if not isinstance(a,str):
            raise TypeError("a is not str")
        if a[0] =='-' or a[0] == '+':
            if a[0] == '-':
                flag = -1
            a = a[1:]
        for i in range(len(a)-1,-1,-1):
            if '9' >=a[i] >= '0':
                res +=(ord(a[i]) -48) * mult
                mult = mult *10
            else :
                return 0
        return res * flag
    
    def test_strToInt2(self):
        with pytest.raises(TypeError):
            StrToInt(34)
    测试用例:
    
    def test_strToInt3(self):
        assert StrToInt('测试赛') == 0
    
    def test_strToInt4(self):
        assert StrToInt('+2147689') == 2147689
    
    def test_strToInt5(self):
        assert StrToInt('45') == 45
    
    def test_strToInt6(self):
        assert StrToInt('1a33') == 0
    
    def test_strToInt7(self):
        assert StrToInt('-5') == -5

    什么是面向对象编程?

    面向对象编程 就是把具有共性的事务抽象成属性和方法来进行编程

    Thread 类中的start() 和 run() 方法有什么区别?

    start()方法可以用来启动线程,调用该方法,会创建一个新的线程,然后内部执行run()方法;不能多次调用,否则会抛异常
    直接调用run()方法,不会创建新的线程;可以进行多次调用

    说下左连接和右连接

    比如有两张表 A,B。左连接是把符合条件的所有A表的内容列出来,B表如果没有内容匹配用NULL代替。
    右连接是符合条件的所有B表的内容列出来,A表如果没有内容匹配用NULL代替

    介绍下什么是索引

    索引是由表或者视图中的一列或多列生成的键,可以加快在表或者视图中检索行的速度



    【转】龚十一
  • 相关阅读:
    multipart/form-data
    Java面试之SE基础基本数据类型
    数据库中的悲观锁和乐观锁详解
    j2SE基回顾(一)
    Hibernate 检索查询的几种方式(HQL,QBC,本地SQL,集成Spring等)
    消防(bzoj 2282)
    YY的GCD(bzoj 2820)
    Problem b(bzoj 2301)
    完全平方数(bzoj 2440)
    The Luckiest number(hdu 2462)
  • 原文地址:https://www.cnblogs.com/vickyx/p/13813103.html
Copyright © 2020-2023  润新知