软件测试面试题集锦

1.什么是Http协议
(HyperText Transfer Protocol。)
超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据
2.什么是HTTPS协议
HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立安全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
Secure Sockets Layer
3.总结HTTP和HTTPS区别如下

  1. https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
  2. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
  3. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  4. http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

4.HTTP的特点:
3.1无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作(通过Cookie/Session技术保持连接状态)
3.2无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
3.3基于请求和响应:基本的特性,由客户端发起请求,服务端响应简单快速、灵活
3.4通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性

5.HTTPS的特点:
基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护,数据不是明文传输
4.1内容加密:采用混合加密技术,中间者无法直接查看明文内容
4.2验证身份:通过证书认证客户端访问的是自己的服务器
4.3保护数据完整性:防止传输的内容被中间人冒充或者篡改

请求的过程
客户端输入URL回车,DNS解析域名得到服务器的IP地址,服务器监听客户端请求,端口通过TCP/IP协议(可以通过Socket实现)建立连接。HTTP属于TCP/IP模型中的运用层协议,所以通信的过程其实是对应数据的入栈和出栈。(发送请求-域名解析-建立连接—服务器响应请求返回数据)
6.https协议是啥?
https是在http协议基础上加入加密处理和认证机制以及数据完整性保护,即http+加密+认证+完整性保护=https
https并非应用层的一种新协议,只是http通信接口部分用ssl/tls协议代替而已。通常http直接和tcp通信,当使用ssl时则演变成先和ssl通信,再由ssl和tcp通信。
所谓https,其实就是身披ssl(secure socket layer)协议这层外壳的http

SSL 是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”

7.定位Bug属于前端还是后端
目前多数互联网项目都是前后端分离开发的,前端侧重于页面设计,后端侧重于服务开发。
比如要保存一个用户信息,前端把界面显示给用户,让用户按需填写,当用户点击“保存”按钮时,数据会通过网络被提交给后端服务,由后端服务处理是否需要进一步运算,并且把数据保存在哪一个数据库的哪一张表里。
所以,为了提高团队效率,测试人员尤其要做好BUG分类,如果不能明确这个BUG是谁造成的,容易提交给错误的开发人员,会大大降低BUG的解决效率。
8.前后端BUG各有什么样的特点?
• 前端BUG
o 界面相关
o 布局相关
o 兼容性相关
• 后端BUG
o 业务逻辑相关
o 性能相关
o 数据相关
o 安全性相关
• 通常可以利用抓包工具来进行分析。可以从三个方面进行分析:请求接口,传参,响应。
• 请求接口URL是否正确,如果请求接口URL不正确,为前端Bug
• http请求中的参数是否正确,如果http请求中的参数不正确,为前端Bug
• 如果接口URL和参数都正确,查看响应内容是否正确,如果这种情况下响应内容不正确,则为后端Bug
• 经验判断:
• • 出现样式的问题基本都是CSS的BUG
• • 出现文本的问题基本上都是html的BUG
• • 出现交互类的问题基本上都是Javascript的BUG


• 如果定位为后端的bug,应该如何精确定位是哪里出了bug呢
• 1.查看报错日志,通过日志分析问题点
• 2.查看数据库确认数据的正确性
9.接口测试的范围:

10.接口测试主要关注面:
1、基本功能测试:

由于是针对基本业务功能进行测试
2、边界分析测试:

在基本功能测试的基础上考虑输入输出的边界条件,前端的输入输出很多时候都是提供固守的值让用户选择(如下拉框),在这种情况下测试的边界范围就非常有限,但接口测试就不存在这方面的限制,相对来说接口可以覆盖的范围更广,同样的,接口出现问题的概率也更高。

3、性能测试:

接口性能主要关注接口响应时间、并发、服务端资源的使用情况等

接口测试工具:
jmeter
Python+requests+unittest

接口测试怎么做持续集成
11.性能测试的必要性评估
1.是否属于核心系统和业务
2.业务是否进行重大调整
3. 用户频繁使用,且存在大量用户使用的业务流程

12.什么是接口测试?

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。

13.为什么要做接口测试?

a) 如今的系统复杂度不断上升,传统的测试方法成本急剧增加且测试效率大幅下降,接口测试可以提供这种情况下的解决方案。

b) 接口测试相对容易实现自动化持续集成,且相对UI自动化也比较稳定,可以减少人工回归测试人力成本与时间,缩短测试周期,支持后端快速发版需求。接口持续集成是为什么能低成本高收益的根源。

c) 现在很多系统前后端架构是分离的,从安全层面来说:

1、只依赖前端进行限制已经完全不能满足系统的安全要求(绕过前面实在太容易), 需要后端同样进行控制,在这种情况下就需要从接口层面进行验证。

2、前后端传输、日志打印等信息是否加密传输也是需要验证的,特别是涉及到用户的隐私信息,如身份证,银行卡等。

3、接口测试持续集成:

对接口测试而言,持续集成自动化是核心内容,通过持自动化的手段我们才能做到低成本高收益。目前我们已经实现了接口自动化,主要应用于回归阶段,后续还需要加强自动化的程度,包括但不限于下面的内容:

a) 流程方面:在回归阶段加强接口异常场景的覆盖度,并逐步向系统测试,冒烟测试阶段延伸,最终达到全流程自动化。

b) 结果展示:更加丰富的结果展示、趋势分析,质量统计和分析等

c) 问题定位:报错信息、日志更精准,方便问题复现与定位。

d) 结果校验:加强自动化校验能力,如数据库信息校验。

e) 代码覆盖率:不断尝试由目前的黑盒向白盒下探,提高代码覆盖率。

f) 性能需求:完善性能测试体系,通过自动化的手段监控接口性能指标是否正常。

4、接口测试质量评估标准:

a) 业务功能覆盖是否完整

b) 业务规则覆盖是否完整

c) 参数验证是否达到要求(边界、业务规则)

d) 接口异常场景覆盖是否完整

e) 接口覆盖率是否达到要求

f) 代码覆盖率是否达到要求

g) 性能指标是否满足要求

h) 安全指标是否满足要求

对更后端的数据库、缓存系统、中间件、文件系统等进行测试。
除了接口测试之外,在我们公司,异常测试、稳定性测试、性能测试也是服务端测试必备的测试类型。
14.异常测试
会模拟各种异常情况,比如硬件异常-机器挂掉的情况下能否启动备机、硬盘挂掉的情况下是否会丢失数据;网络异常-网络忽然断掉、或者网络流量变小的情况;系统异常-操作系统忽然挂掉的情况。这些极端的情况出现的时候,我们需要验证数据有没有丢、能不能尽快启动备机对外提供服务、系统状态有没有异常等。我们会采用各种方式或者工具来模拟这些异常,比如用TrafficControl工具来控制网络流量。
15.稳定性测试
就是模拟系统在7*24的运行下会不会出问题,一般会用接口测试或者性能测试用例不断地跑,在运行期间,我们会模拟各种情况,比如说负载的变化、系统的各种干扰等。可以用ChaosMonkey等工具来进行这类测试。
1.对软件多次测试,长时间运行,是否正常运行
2.长时间对软件开启关闭软件和系统是否正常
3.软件长时间执行某个业务后切换到别的不同的业务操作是否受影响
4.软件长时间开启但是不执行任何操作,然后检查能否正常执行业务操作
5.软件长时间对日常的用户数进行操作运行,观察系统内存占用率是否越来越大,可用内存是否减少,内存是否溢出,饱和运算内存是否占用过大、是否溢出
6.软件长时间开启正常运行,观察系统CPU是否使用率是否越来越高,在饱和运算时,观察系统cup使用率,饱和运算结束时,CPU使用率能否回到正常值
7.在系统运行过程中,对系统饱和施压,观察系统的各种性能指标,以及服务器的指标、观察服务器电源电压是否降低、机箱、内存、硬盘、CPU等硬件指标来观察系统的稳定性
8.模拟平常的压力,模拟实际中日常的用户数进行操作。要存、取、建、查数据,验证数据库是否正常读写
9.模拟饱和压力测试,模拟实际中日常最大用户数进行操作。要存、取、建、查数据,验证数据库是否正常读写,系统运行是否受影响
10.多个关联软件,存在接口访问数据交流,关闭其中的一个软件,检查软件是否稳定运行
11.多对不同功能模块软件同时操作是否能够正常响应,数据库运行是否正常
12.对依靠网络运行的软件,使用网络工具将软件的带宽限制到最低,检查系统处理是否正常
13.对依靠网络运行的软件,在执行业务时断网,检查系统处理是否正常,软件能够正常运行
14.有数据库操作的软件,如果数据库停止运行,检查程序是否能正常处理
15.对不同功能模块软件同时操作是否能够正常响应
16.对不同的操作系统主要是windows系列操作,比如XP,WIN7等,检查不同操作系统能否稳定运行、报错
17.系统断电后此软件是否能够正常启动、正常运行,或者给出异常提示
18.多个关联软件,存在接口访问数据交流,关闭其中的一个软件,检查软件是否稳定运行
19.版本升级后对原有功能稳定性是否受到影响,对原有数据操作是否存在异常
20.软件某单元模块异常后是否影响整个软件正常运行
21.当系统出现崩溃时,重起系统软件能否正常运行
22.分析系统操作中,哪些业务或功能存在大数据量的处理,如果存在,要将这些功能或业务反复处理,检查系统是否能正常运行,并观察系统的性能和资源使用情况
23.分析系统操作中,哪些业务或功能存在大数据量的输出或生成,如果存在,要将这些功能或业务反复处理,检查系统是否能正常运行,并观察系统的性能和硬盘占用情况
24.如果系统同时允许多个不同的客户端版本同时访问服务器,要构造尽量多的不同版本的客户端,进行大量的访问服务器的操作,看是否会产生数据冲突或异常
25.与开发或设计人员确认,系统的哪些业务或功能在处理过程中,会占用大量的内存,(例如批量生成大容量文件,批量实例化对象,批量产生连接等),要对这些操作进行大量重复,检查系统是否存在内存泄漏问题
26.若系统结构中使用了负载均衡,则要考虑负载均衡的策略,要模拟大量用户进行各种不同的并发操作,检查负载均衡是否发生有效地作用
16.性能测试
其实细分起来会有各种类型,比如负载测试、压力测试、配置测试、甚至还有线上压测、容量规划等。最常规的性能测试,一般是先规定一个系统需要承受的压力,比如说,某一个系统,1个小时之内会有1W单的单子,那基于这个需求我们分析服务器后端需要承受的压力,分析出来以后,就写性能测试脚本,然后逐渐增加压测的力度,直到超过这个预定的压力。通常在这个测试过程中会发现各种问题,比如数据库索引没有建、线程池太小、系统异常等。需要解决了之后再加大压力测试。也是用Grinder/JMeter等工具来进行性能测试,不过难的不是这些工具的使用,而是发现问题以后的定位。
对于这种后端服务的测试人员来说,技术上的要求是挺高的,需要有较好的编程能力,需要对数据库、操作系统等机制有很好的了解才行。

17.服务端测试可从以下几点开展:
功能测试:
测试被测对象的接口,输入和输出(请求和响应)、内部接口逻辑调用的测试、数据有效性及各功能逻辑准确性。测试用例设计方法是通用的,这里不在介绍。
服务端的测试不能纯靠黑盒测试,稍微深入或复杂的逻辑测后的业务代码,需进行code review,观察该功能的逻辑实现部分,并开展内部单元逻辑测试(举个简单例子,一个C接口的内部函数调用了TCP协议的服务,该服务后是另一套复杂的数据系统,这种情况测试人员须看其内部代码才会清楚后面具体都执行了什么,怎么调用的)、可结合详细设计文档、关键节点加Log日志进行检查,或者代码中Mock数据在进行一些内部逻辑单元的功能测试。
性能测试:
接口性能Jemeter、Loadrunner、Ab等工具、如工具无法满足,需要结合自身业务开发压测脚本。
异常测试:
数据异常处理,可通过接口传参进行模拟(C/C++程序接口,如代码不严谨会经常出Core),另外Fuzzing工具可以了解下(随机构造测试输入,对被测软件进行大量测试来发现软件中的漏洞的一种模糊测试方法)。
数据测试:
Redis、Hive、Hdfs、Kafka、Memcahe、Sql数据库等。
算法测试:
了解算法模型、规则、对于该模型的数据效果开展测试,测试结果需符合算法规则预期。
自动化测试:
服务端自动化小文认为有两种:环境自动化、自动化测试(自动化测试一般都会和环境自动化、单元测试相结合使用)
环境:自动化环境搭建、持续集成(Jenkins等)
接口:基于自身业务开发的单元测试自动化(Junit、Python Unittest等)、第三方工具Test NG、Pytest、开源测试平台等。
单元测试:
单元测试注重内部代码逻辑的测试。
安全测试:同移动端篇

联调测试:
一般指后端各个测试环境、服务、模块间的联调测试,首先将所有测试环境链通,进行各模块间的联调测试,测试通过后,再和前端(Web、H5、客户端Android、iOS)联调测试、保证后端数据在前端正常展现。

接口自动化框架的介绍:
主要包含:
1,Requests模块发送给予http的网络请求,主要包含了post,get,PUT, DELETE, HEAD
2,python+unittest单元测试框架,构建测试框架,包括测试脚本构成,测试脚本的运行,测试脚本集成,测试报告生成(HTMLTestRunner)
3,xlrd数据驱动的读取,作用于excel文档,smtplib用于测试邮件的发送

18.接口自动化测试:
Python+unittest+requests+HTMLTestRunner
import unittest
from datetime import datetime
from HTMLTestRunner_pie import HTMLTestRunner
import ddt

import os

申明测试类中使用ddt模块装饰

@ddt.ddt
class TestInterfaceRun(unittest.TestCase):

@classmethod
def setUpClass(cls):
    print('这是所有case的前置条件01')

@classmethod
def tearDownClass(cls):
    print('这是所有case的后置条件01')

def setUp(self):
    print('这是每条case的前置条件01')

def tearDown(self):
    print('这是每条case的后置条件01')
    # 关闭打开的文件

def test_03(self):  # 测试用例的命名必须以test开头,否则不予执行
    print('04: 第三条case')

@ddt.data([''], [''])  #
def test_01(self, first):
    print('01: 第一条case')

@unittest.skip('不执行这条case')  # 跳过这条case
def test_02(self):
    print('02: 第二条case')

@unittest.skipIf(3 < 2, '条件为真,跳过该用例')
def test_04(self):
    print('04: 第四条case')

if name == ‘main’:
# test_dir = os.path.join(os.getcwd()) # os.getcwd()获取当前目录,os.path.join()组成新目录
# 自动搜索指定目录下的case,构造测试集, 执行顺序是命名顺序:先执行test_add,再执行test_sub
# discover = unittest.defaultTestLoader.discover(test_dir, pattern=‘test_*.py’)
case_suite = [TestInterfaceRun(‘test_03’), TestInterfaceRun(‘test_02’), TestInterfaceRun(‘test_01’)]
print(case_suite)
report = datetime.now().date().isoformat() + ‘report.html’
with open(report, mode=‘wb’) as fp:
runner = HTMLTestRunner(stream=fp, title=‘接口测试报告’, description=‘详细描述’)
for case in case_suite:
runner.run(case)
print(case)
runner.run(discover)

19.APP测试范围:

  1. 黑盒测试和白盒测试的直观图

从图中可以直接看出来,黑盒测试就当整个程序是个黑盒子,我们看不到它里面做了些什么事情,只能通过输入输出看是否能得到我们所需的来测试。而白盒测试可以当盒子是透明的,里面的一切我们都看的清楚,从而我们可以通过去测内部结构来测试。  
20. 黑盒测试 (Black-Box Testing)
  黑盒测试又称为功能测试、数据驱动测试或基于规格说明书的测试,是一种从用户观点出发的测试。测试人员一般把被测程序当作一个黑盒子。
  黑盒测试主要测到的错误类型有:不正确或遗漏的功能;接口、界面错误;性能错误;数据结构或外部数据访问错误;初始化或终止条件错误等等。
  常用的黑盒测试方法有:等价类划分法;边界值分析法;因果图法;场景法;正交实验设计法;判定表驱动分析法;错误推测法;功能图分析法。
  • 等价类划分法
    等价类分为有效等价类和无效等价类,其中,有效等价类是指对于程序的规格说明来说是合理的,有意义的输入数据构成的集合;而无效等价类是指对于程序的规格说明来说是不合理的,没有意义的输入数据构成的集合。
    确定等价类的原则是:a. 在输入条件规定了取值范围或值的个数的情况下,则可以确定一个有效等价类和两个无效等价类,比如若规定的输入范围是1<x<10的所有数,则有效的是1~10内的任意数,而无效的是 -∞~0.9999 和10.00001~+∞; b. 在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,则可以确立一个有效等价类和一个无效等价类;c.在输入条件是一个布尔量的情况下,可以确定一个有效的等价类和一个无效的等价类;d. 在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可以确立n个有效等价类和一个无效等价类;e. 在规定了输入数据必须遵守的规则的情况下,可以确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则);f.在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将改等价类进一步的划分为更小的等价类。
  • 边界值分析法
    根据经验法则,大量的错误是发生在输入或输出范围的边界上的,而不是发生在输入输出范围的内部。因此针对各种边界情况涉及测试用例,可以查出更多的错误。而使用边界值的分析方法涉及测试用例,首先应确定边界情况。通常输入和输出等价类的边界,应当选取正好等于,刚刚大于或者刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。
    边界值选择的原则: a. 如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围的边界的值作为测试输入数据。 例如,如果程序的规格说明中规定:“重量在10公斤至50公斤范围内的邮件,其邮费计算公式为……”。作为测试用例,我们应取10及50,还应取10.01,49.99,9.99及50.01等;b. 如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数小一,和比最大个数大一的数作为测试数据。例如,一个输入文件应包括1~255个记录,则测试用例可取1和255,还应取0及256等。c. 将前面两个原则应用于输出条件,即涉及测试用例使输出值达到边界值及其左右的值。d.如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。e. 如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例数据;f. 分析规格说明,找出其他可能的边界条件。
  • 因果图法
    因果图是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。
    利用因果图生成测试用例的基本步骤有:1. 分析软件规格说明描述中哪些是原因(输入,包括前提条件,操作过程),哪些是结果(输出),并给每个原因和结果赋予一个标识符;2. 分析软件规格说明描述的语义,找出原因和结果之间,原因和原因之间的关系,根据这些关系,画出因果图;3. 在因果图上用一些记号表明约束或限制条件;4. 把因果图转换为判定表;5. 把判定表的每一列拿出来作为依据,设计测试用例。
    因果图的基本符号和约束符号:
    
  • 场景法
    场景法一般包含基本流和备用流,从一个流程开始,通过描述经过的路径来确定的过程,经过遍历所有的基本流和备用流来完成整个场景。其中,基本流就是正常的,正确场景;备选流一般指中断操作的。

• 正交实验设计法
    使用正交试验设计法首先要知道正交表,正交表是研究多因素多水平的一种设计方法,它是格局正交性从全面试验中挑选出部分有代表性的点进行试验,这些有代表性的点具备了“均匀分散,齐整可比”的特点,正交试验设计是一种基于正交表的、高效率、快速、经济的试验设计方法。正交表由三个成分构成,Runs:正交表的行数,即实验的次数;Factors:正交表的列数,即因素数;Levels:水平数,任何单个因素能够取得的值的最大个数。 正交表的表现形式是: L行数 (水平数因素数) L runs(levels^factors )。
    用正交表设计测试用例的步骤: 1. 有哪些因素(变量); 2.每个因素有那几个水平(变量的取值):用等价类划分出来的;3. 选择一个合适的正交表;4. 把变量的值映射到表中;5. 把每一行的各因素水平的组合作为一个测试用例;6. 加上你认为可以且没有在表中出现的组合。
    如何选择正交表呢?取行数最少的一个,情况分三种:1.因素数(变量)、水平数(变量值)相符;2. 因素数不相同: 取因素数最接近但略大的实际值的表;3. 水平数不相同: 有五个因素(变量)A、B、C、D和E。两个因素有两个水平(变量的取值)、两个因素有三个水平,一个因素有六个水平。行数取最少的一个( 行数取最少的一个(L49(78)、 L18(3661)
  • 判定表驱动分析法
    判定表是分析和表达多逻辑条件下执行不同操作的情况的工具。判定表由以下部分构成: 1. 条件桩(Condition Stub):列出了问题的所有条件。通常认为列出的条件的次序无关紧要; 2. 动作桩(Action Stub):列出了问题规定可能采取的操作。这些操作的排列顺序没有约束;3. 条件项(Condition Entry):列出针对它左列条件的取值在所有可能情况下的真假值; 4. 动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作。

• 错误推测法
    错误推测法是基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法。错误推测方法的基本思想: 列举出程序中所有可能有的错误和容易发生错误的特殊情况, 根据它们选择测试用例。
    最后,对于黑盒测试的综合策略是:首先,考虑边界值分析法,边界值分析法是在任何情况下都必须使用的方法,因为经验表明这种方法设计的测试用例发现程序错误的能力最强。必要时用等价类划分方法补充一些测试用例。其次,可以用错误推测法再追加一些测试用例。这时,可以对照程序逻辑,检查已设计出的测试用例的逻辑覆盖率,如果没有达到要求的覆盖标准,应当再补充足够的测试用例;如果程序的功能说明中含有输入条件的组合情况,则一开始就可以选用因果图法。
21. 白盒测试 (White-Box Testing)
  为什么要考虑白盒测试呢?举个栗子说明,设x=0,y=5, 程序设计z=y/x, 如果只考虑输入输出的黑盒测试,我们看不出程序内部的逻辑错误(分母不能为零),即使我们使用黑盒测试的测试用例覆盖的再全也发现不了这个问题,这个时候就要考虑使用白盒测试了。
  而什么是白盒测试呢?白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。白盒测试法检查程序内部逻辑结构,对所有的逻辑路径进行测试,是一种穷举路径的测试方法,但即使每条路径都测试过了,但仍然有可能存在错误。因为:穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序;穷举路径测试不可能检查出程序因为遗漏路径而出错;穷举路径测试发现不了一些与数据相关的错误。
  白盒测试需要遵循的原则有: 1. 保证一个模块中的所有独立路径至少被测试一次;2. 所有逻辑值均需要测试真(true)和假(false);两种情况;3. 检查程序的内部数据结构,保证其结构的有效性;4. 在上下边界及可操作范围内运行所有循环。
  白盒测试方法有:
  • 静态测试&动态测试
  静态测试是不用运行程序的测试,包括代码检查、静态结构分析、代码质量度量、文档测试等等,它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具(Fxcop)自动进行。动态测试则需要执行代码,也是我们用的最多的一种测试,通过运行程序找到问题,包括功能确认与接口测试、覆盖率分析、性能分析、内存分析等。
  • 单元测试
  • 代码检查
  • 同行评审
  • 技术评审
  要检验测试的效果,就要去看测试的覆盖率,当覆盖率越大,说明测试成效越好,软件的缺陷越少。但覆盖率不是目标(质量才是目标)而只是一种手段。测试覆盖率包括功能点覆盖率和结构覆盖率,其中,功能点覆盖率大致用于表示软件已经实现的功能与软件需要实现的功能之间的比例关系;而结构覆盖率包括语句覆盖率、分支覆盖率、循环覆盖率和路径覆盖率等等。
  而逻辑覆盖法中根据覆盖目标的不同和覆盖源程序语句的详尽程度,逻辑覆盖又可分为:语句覆盖; 判定覆盖;条件覆盖;判定/条件覆盖;组合覆盖;路径覆盖,且这些覆盖程度越往后越全。
22. 灰盒测试 (Gray-Box Testing)
  灰盒测试更像是白盒测试和黑盒测试的混合测试,现阶段对灰盒测试没有更明确的定义,但更多的时候,我们的测试做的就是灰盒测试,即既会做黑盒测试又会做白盒测试。

23.数据库索引
是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库中表的数据.索引的实现通常使用B树和变种的B+树(mysql常用的索引就是B+树)

创建索引的好处

①通过创建索引,可以在查询的过程中,提高系统的性能

②通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性

③在使用分组和排序子句进行数据检索时,可以减少查询中分组和排序的时间
创建索引的坏处

①创建索引和维护索引要耗费时间,而且时间随着数据量的增加而增大

②索引需要占用物理空间,如果要建立聚簇索引,所需要的空间会更大

③在对表中的数据进行增加删除和修改时需要耗费较多的时间,因为索引也要动态地维护
应该在哪些列上创建索引呢

①经常需要搜索的列上

②作为主键的列上

③经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度

④经常需要根据范围进行搜索的列上

⑤经常需要排序的列上

⑥经常使用在where子句上面的列上
不应该在哪些列上创建索引

①查询中很少用到的列

②对于那些具有很少数据值的列.比如人事表的性别列,bit数据类型的列

③对于那些定义为text,image的列.因为这些列的数据量相当大

④当对修改性能的要求远远大于搜索性能时.因为当增加索引时,会提高搜索性能,但是会降低修改性能
索引的分类和使用

按物理存储角度分:

聚集索引

表记录的排列顺序和索引的排列顺序一致,所以查询效率快,只要找到第一个索引值记录,其余连续性的记录在物理上一样连续存放.聚集索引的缺点就是修改慢,因为为了使表记录和索引的排列顺序一致,在插入记录的时候,会对数据页重新排序

非聚集索引

表记录和索引的排列顺序不一定一致,两种索引都采用B+树的结构,非聚集索引的叶子层并不和实际数据页相重叠,而采用叶子层包含一个指向表记录的指针.非聚集索引层次多,不会造成数据重排

按逻辑角度分

2)普通索引,最基本的索引,它没有任何的限制

4)复合索引(又叫做多列索引,联合索引):多个字段上建立的索引,提高复合条件查询的速度

创建联合索引:create index idx_name_age on student(name,age);
–查看某表的index
select * from user_indexes where table_name=upper(‘ins_test_record’)
–查看索引控制的列
select * from user_ind_columns where index_name=(‘RECORD_IND’
大型动态应用系统又可分为几个子系统:
(1) Web前端系统
(2) 负载均衡系统
(3) 数据库集群系统
(4) 缓存系统
(5) 分布式存储系统
(6) 分布式服务器管理系统
(7) 代码分发系统

24.性能测试指标

24.1资源指标
CPU使用率:指用户进程与系统进程消耗的CPU时间百分比,长时间情况下,一般可接受上限不超过85%。
内存利用率:内存利用率=(1-空闲内存/总内存大小)*100%,一般至少有10%可用内存,内存使用率可接受上限为85%。
磁盘I/O: 磁盘主要用于存取数据,因此当说到IO操作的时候,就会存在两种相对应的操作,存数据的时候对应的是写IO操作,取数据的时候对应的是是读IO操作,一般使用% Disk Time(磁盘用于读写操作所占用的时间百分比)度量磁盘读写性能。
网络带宽:一般使用计数器Bytes Total/sec来度量,Bytes Total/sec表示为发送和接收字节的速率,包括帧字符在内。判断网络连接速度是否是瓶颈,可以用该计数器的值和目前网络的带宽比较。
24.2系统指标:
并发用户数:某一物理时刻同时向系统提交请求的用户数。
在线用户数:某段时间内访问系统的用户数,这些用户并不一定同时向系统提交请求。
平均响应时间:系统处理事务的响应时间的平均值。事务的响应时间是从客户端提交访问请求到客户端接收到服务器响应所消耗的时间。对于系统快速响应类页面,一般响应时间为3秒左右。
事务成功率:性能测试中,定义事务用于度量一个或者多个业务流程的性能指标,如用户登录、保存订单、提交订单操作均可定义为事务,如下图所示:
单位时间内系统可以成功完成多少个定义的事务,在一定程度上反应了系统的处理能力,一般以事务成功率来度量,计算公式如下所示:
超时错误率:主要指事务由于超时或系统内部其它错误导致失败占总事务的比率。
24.3性能问题排查的过程
当观测到系统资源异常时,比如响应时间长,事物成功率低,超时错误率高等情况时。应该先查应用相关信息,比如日志,应用监控、数据库等等信息,如果这些信息没有问题,再对资源信息进行分析。资源信息分析如下。
CPU问题分析:一般情况下CPU满负荷工作,有时候并不能判定为CPU出现瓶颈,比如Linux总是试图要CPU尽可能的繁忙,使得任务的吞吐量最大化,即CPU尽可能最大化使用。因此,一般判断CPU为瓶颈,主要从两方面:一是CPU空闲持续为0,二是运行队列大于CPU核数(经验值3-4倍),即可判定存在瓶颈,对于CPU高消耗主要由什么引起的,可能是应用程序不合理造成,也可能是硬件资源不足,需要具体问题具体分析,比如问题SQL语句引起,则需要跟踪并优化引起CPU使用过高的SQL语句。
内存问题分析:一般至少有10%可用内存,内存使用率可接受上限为85%。当空闲内存变小时,系统开始频繁地调动磁盘页面文件,空闲内存过小可能是内存不足或内存泄漏引起,需要根据系统实际情况监控分析。
磁盘I/O问题分析:磁盘I/O对于数据库服务器、文件服务器、流媒体服务器系统来说,更容易成为瓶颈,一般从以下几个方面对磁盘I/O进行分析判断:
每磁盘I/O数可用来与磁盘的I/O能力进行对比,如果经过计算得到的每磁盘I/O数超过了磁盘标称的I/O能力,则说明确实存在磁盘的性能瓶颈。
监控磁盘读写,如果磁盘长时间进行大数据量读写操作,且cpu等待超过20%,则说明磁盘I/O存在问题,考虑提高磁盘I/O读写性能。
网络带宽问题分析:判断网络带宽是否是系统运行性能瓶颈的首要条件是网络带宽是否会影响系统交易执行性能。例如:减小网络带宽,并发用户数、响应时间与事务通过率等性能指标是否不能接受;或者增加网络带宽,并发用户数、响应时间与事务通过率等性能指标会得到明显提高。
在实际性能测试中,如果发现始终报连接超时,而实际手工访问可以正常访问,可以通过ping应用服务器IP或网关IP,如果出现网络严重延迟或丢包,则说明网络不稳定,需要检查网络。
通过对资源指标的分析,实际上各个方面都是互相依赖的,不能孤立的单从某个方面进行排查。当一个方面出现性能问题时,往往会引发其他方面的性能问题,例如,大量的磁盘读写势必消耗CPU和IO资源,而内存的不足会导致频繁地进行内存页写入磁盘、磁盘写到内存的操作,造成磁盘IO瓶颈,同时,大量的网络流量也会造成CPU过载,所以,在分析性能问题时,需要从各个方面进行考虑。

25.容错性测试包括两个方面
• 输入异常数据或进行异常操作,以检验系统的保护性。如果系统的容错性好,系统只给出提示或内部消化掉,而不会导致系统出错甚至崩溃。
• 灾难恢复性测试。通过各种手段,让软件强制性地发生故障,然后验证系统已保存的用户数据是否丢失,系统和数据是否能尽快恢复。
26.容错性测试点
(1)数据边界性测试
• 1.数字类型超出应用设定最大值
• 2.数字类型超出类型最大值
• 3.数据类型填写非数据类型
• 4.时间类型超出引用设定限制
• 5.时间类型填写其他类型数据
• 6.文本类型超出应用设定长度
• 7.数据不符合实际规则(例如输入不存在的日期,或货币内容可以输入小数点后多于2位以上等)
• 8.是否对输入内容的大小写进行自动转换,以防止用户对于大小写敏感内容出现输入错误
• 9.是否对输入内容的前后空格进行自动去除,以防止用户输入不该存在的前后空格
(2)校验性测试
• 10.填写不符合校验的数据,例如不能以数字开头的输入,输入数字开头的数据
• 11.验证码,填写错误的验证码
• 12.需重复一致填写时,填写不一致数据
• 13.对于文本框输入类型内容有要求是否进行了键盘输入检测
• 14.上传不符合类型的文件
(3)代码级测试
• 15.非法调用函数
• 16.使用非法参数(类型错误)调用函数
• 17.使用非法参数(数据不符合规范)调用函数
• 18.参数个数不符合函数要求
• 19.使用不同情况,使程序进入错误处理
• 20.测试是否有可能产生死循环
• 21.对全局数据结构未设置初始值
• 22.对全局数据结构引用过程中进行了数据内容的重新赋值,有可能会导致后续使用全局数据结构的模块导致错误
• 23.接口或函数之间的调用是否会产生循环调用
(4)界面级测试
• 24.不按正常流程操作
• 25.使用非正常手段访问(例如直接使用内部链接地址访问,直接使用访问协议访问)
• 26.对于不应该进行的操作或违法操作是否进行了相关的屏蔽
• 27.对于一些存在限定条件的输入参数,在界面或页面上是否有输入要求提示
• 28.若只能对于某些固定的输入的内容进行处理时,应该使用下拉框或选择框控件,以防止用户输入错误
• 29.对于一些操作较复杂或较容易造成错误的界面,系统是否有明确的说明或向导提示,以减少用户输入或操作错误
(5)安全性测试
• 30.sql 注入
• 31.越权访问
(6)数据级测试
• 33.数据填写不完整时,是否产生错误
• 34.流程未完成,强制关闭,是否会产生错误
• 35.多人操作同一数据时,是否产生错误
• 36.当系统出现异常时,是否能自动进行数据备份,以最大程度减少错误带来的损失
(7)灾难恢复性测试
• 37.强制使应用系统发生,检查数据是否会错误丢失
• 38.强制使硬件发生故障,检查数据是否出错
• 并发容错测试
• 39.对于C/S或B/S系统,要考虑当多个客户端同时新增、修改、删除时是否会造成数据的冲突或不一致等错误
• 40.对于C/S或B/S系统,要考虑当多个客户端同时请求系统资源(例如硬盘、内存、CPU等),是否对资源会产生死锁问题
• 41.是否允许同一个用户在不同的机器上同时登录
• 42.是否允许不同或相同的用户在不同机器上同时进行上传、下载、收发邮件等操作
(8)环境容错测试
• 43.在网络出现故障时,是否有其他网络进行自动的切换和连接
• 44.在系统断电时,是否有其他的供电系统是否能进行自动切换
• 45.在系统服务器出现问题时,是否有其他的备用服务器是否能进行自动切换

27.兼容性测试
a、浏览器兼容性测试:检查要测试的软件在不同浏览器上Web页面的样式和元素的展示效果以及交互是否正常;主流浏览器:windows下,IE 9以上、FireFox、Chrome。Mac下,Safari、Chrome、Firefox。
浏览器兼容性问题也可以被称为网页兼容性或网站兼容性问题,指网页在各种浏览器上的显示效果可能不一致而产生浏览器和网页间的兼容问题。
你可能遇到过功能明明是正常的,换一个浏览器就不正常的情况。这是因为不同浏览器使用内核及所支持的HTML(标准通用标记语言下的一个应用)等网页语言标准不同;以及用户客户端的环境不同(如分辨率不同)造成的显示效果不能达到理想效果,功能不正常等。(浏览器内核:)
b、屏幕尺寸和分辨率兼容性测试:检查要测试的软件在不同分辨率下能否正常显示;
c、操作系统兼容性测试:检查要测试的软件在不同的操作系统下功能是否正常,显示是否正确等;主流操作系统:windows系列、Mac OS X系列、UNIX/Linux系列、Android系列、IOS系列。
d、不同设备型号兼容性测试:针对于APP,由于移动设备型号众多,则需要测试要测试的APP在主流设备上能否正常运行,会不会出现崩溃的现象。

28.视频流媒体测试点?
1.在线:播放、暂停、继续、停止、退出,定位播放(即快进、后退),音量控制和静音,全屏,不同比例大小,播放记忆功能,弹幕,倍速播放,分享,清晰度切换
2.下载到本地:播放、暂停、继续、停止、退出,定位播放(即快进、后退),音量控制和静音,全屏,不同比例大小,播放记忆功能
3.不同网速下播放,低网速时,若当前速率不能满足流媒体播放时,终端应自动暂停播放并对流媒体内容进行缓存,在收到足够信息后继续播放
4.异常情况下的表现:关机,程序出错,浏览器卡死崩溃,网络异常断开
5.兼容性:不同浏览器,不同视频播放软件,不同分辨率屏幕,不同系统,
29.文件流测试点?
测试上传文件最大值
测试上传文件是否支持中文名称
测试删除上传成功的文件
测试文件名称的最大值、最小值
测试文件名称是否支持特殊字符(包括空格)
测试上传过程断网,等网络恢复后,是否支持断点续传
测试上传时网速很慢
测试上传文件支持的格式

  1. 浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求, 服务器根据接收到的请求后,向客户端发送响应信息

  2. 一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。
    一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。
    HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。

  3. HTTP有哪些请求方法
    GET, POST 和 HEAD OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
    Get post的区别
    A:请求参数的处理方式不同 get 请求数据附加在url后面,post请求数据放在请求包的body数据中
    B:Get URL有长度限制,Post不是通过URL传递参数,理论上大小不受限制
    C:Post安全性高于Get,get将请求数据暴露在URL,Post需要抓包才能获取数据
    Fiddler功能:

  4. 通过fiddler可以抓取接口请求的request和response,通过对参数进行分析,可以定位是前端问题还是后台问题,直接找到对应的开发人员,可以快速解决问题。

  5. APP抓包 设置代理 同一局域网

  6. 断点篡改请求参数 :对服务端的安全性进行校验 场景 充值金额 支付金额需改 密码修改 验证码修改(设置请求前断点,修改值后再完成请求)

  7. Android的app性能测试包括的测试项比如:
    1、资源消耗
    2、内存泄露
    3、电量功耗
    4、耗时
    5、网络流量消耗
    6、移动终端相关资源利用率
    7、帧率
    8、渲染等等…
    内存测试中的测试子项:
    1)空闲状态下的应用内存消耗情况
    2)中等规格状态下的应用内存消耗情况
    3)满规格状态下的应用内存消耗情况
    4)应用内存峰值情况
    5)应用内存泄露情况
    6)应用是否常驻内存
    7)压力测试后的内存使用情况
    内存问题现象:
    1)内存抖动
    2)大内存对象被分配
    3)内存不断增长
    4)频繁GC
    内存数据获取:
    1、各种linux命令(top、free、meminfo…)
    2、通过dumpsys
    adb shell dumpsys meminfo [pakagename | pid]
    3、通过/system/xbin/procrank工具

  8. Py2 py3的区别
    1 默认编码不同
    Py2 的默认编码为ascii 因而不能识别中文,要在文件头部加上 #-- encoding:utf-8 – 指定编码方式
    py3的默认编码为utf-8
    具体实例如下:

2 xrange与range
都是区间取值,且为左开右闭区间
但xrange返回的为一个生成器,不需要开辟新的存储空间,而range返回的则为listc,故二者使用时根据是否需要会产生性能差异
3 print
Py2中的print不加括号即可打印,而py3必须加括号
4 input
Py2为raw_input()
Py3为input()
5类
Py3中都为新式类
Py2中经典类与新式类混合
新式类使用广度优先,经典类使用深度优先
Tip:深度优先的原理是一条路一条路走,广度优先则是一层一层走

Http请求:请求地址, 消息报头,请求正文
Http响应:状态码,消息报头,响应正文

Session的实现机制:浏览器第一次发送请求时,服务器自动生成了一HashTable和一Session ID来唯一标识这个HashTable,并将其通过响应发送到浏览器。浏览器第二次发送请求会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的HashTable。

HTTP状态返回码
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误

Session和cookie
会话cookie 关闭浏览器则cookie失效
当网页要发http请求时,浏览器会先检查是否有相应的cookie,有则自动添加在request header中的cookie字段

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

猜你喜欢

转载自blog.csdn.net/weixin_42166361/article/details/104768834
今日推荐