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

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

 

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

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

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

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

功能测试在 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代替

介绍下什么是索引

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



【转】龚十一
原文地址:https://www.cnblogs.com/vickyx/p/13813103.html