软件测试面试题

学习记录笔记,更新中.......

一、测试基础

1、简述黑盒测试和白盒测试的优缺点

黑盒测试的优点:

  • 简单。不需要了解程序内部的代码及实现

  • 与软件的内部实现无关

  • 从用户角度出发,能很容易知道用户会用到哪些功能,会遇到哪些问题

  • 基于软件开发文档,所以也可以更直观的知道软件实现了需求文档中的哪些功能

  • 适用于功能测试、可用性测试及可接受性测试

黑盒缺点:

  • 不可能覆盖所有的代码,代码测试覆盖率低,约总代码量的30%,有些bug检测不出来

  • 自动化测试复用率低

  • 直接依赖于需求规格说明书,如果需求规格说明书不全面,得到的测试结果也不会很完善

白盒优点:

  • 帮助软件测试人员增大代码的覆盖率,提高代码的质量,发现代码中隐藏的问题

白盒缺点:

  • 程序运行会有很多不同的路径,不可能测试所有的运行路径

  • 测试基于代码,只能测试开发人员做的对不对,而不能知道设计的正确与否,可能会漏掉一些功能需求

  • 系统庞大时。测试开销会很大

2.测试结束的标准?

  • 测试超过预定时间

  • 执行了所以测试用例,无bug

  • 使用特定对测试用例设计方案做为判断测试停止的基础

  • 定义停止测试的标准

  • 根据单位时间内查出bug的数量决定是否停止测试

3.登录功能怎么设计测试用例?

  • 了解需求:

    • 登录界面是弹出窗口式的,还是直接在网页里面(知道这东西有啥用啊)

    • 账号长度和密码的强度(如:需要多少位,大小写区分,特殊字符混搭等)

    • 界面美观是否有特殊要求(即是否要进行UI测试)

  • 用例设计

    • 输入正确的用户名和密码,验证是否登录成功

    • 输入错误的账号或者密码,验证登录会失败,并且提示相应的错误信息。(错误校验)

    • 登录成功后能否跳转到正确的页面(低)

    • 4、账号和密码,如果太短或者太长,应该怎处理(安全性,密码太短时是否有提示)

    • 5、账号和密码,中有特殊字符(比如空格),和其他非英文的情况(是否做了过滤)

    • 6、记住账号的功能

    • 7、登录失败后,不能记录密码的功能

    • 8、账号和密码前后有空格的处理

    • 9、密码是否加密显示(星号圆点等)

    • 10、牵扯到验证码的,还要考虑文字是否扭曲度导致辨认难度大,考虑颜色(色盲使用者)刷新或换一个按钮是否好用

    • 11、登录页面中的注册、忘记密码,登出用另一账号登录等链接是否正确

    • 12、输入密码的时候,大写键盘开启的时候要有提示信息。

    • 13、什么都不输入,点击提交按钮,看提示信息。(非空检查)

  • 界面测试(UI Test)

    • 1、布局是否合理,2 个Testbox 和一个按钮;对齐

    • 2、Testbox和按钮的长度,高度是否复合要求3、界面的设计风格是否与 UI 的设计风格统一4、界面中的文字简洁易懂,没有错别字。

  • 性能测试(Performance Test)

    1、打开登录页面,需要几秒

        2、输入正确的账号和密码后,登录成功跳转到新页面,不超过 5 秒安全性测试(Security Test 1、登录成功后生成的Cookie 是否有HttpOnly 低脚本盗取风险)

        3、账号和密码是否通过加密的方式,发送给Web 服务器

        4、账号和密码的验证,应该是用服务器端验证,而不能单单是在客户端用javaScript 验证4、账号和密码的输入框,应该屏蔽SQL 注入攻

        5、账号和密码的的输入框,应该禁止输入脚本(防止 XSS 攻击)

        6、错误登录的次数限制(防止暴力破解)

        7、考虑是否支持多用户在同一机器上登录;

        8、考虑一用户在多台机器上登录

  • 可用性测试(UsabilityTest)

    1、是否可以全用键盘操作,是否有快捷键

         2、输入账号,密码后按回车,是否可以登录

        3、输入框是否可以以 Tab 键切换

  • 兼容性测试(Compatibility Test)

    1、主流的浏览器下能否显示正常已经功能下R (IE6~11, FireFox, Chrome, Safari等) 2、不同的平台是否能正常工作,比如 Windows,Mac

    3、移动设备上是否正常工作,比如iPhone,Android

    4、不同的分辨率

  • 本地化测试 (Localization Test) 1、不同语言环境下,页面的显示是否正确。件助性测试 (Accessibility Test) 2、软件辅助功能测试是指测试软件是否向残疾用户提供足够的辅助功能

    • 高对比度下能否显示正常(视力不好的人使用)

4.返回数据有问题,怎么排查问题?

  • 首先抓包看下前后台的数据交互情况,确认下是不是前端请求发送,有问题导致返回数据有问题。

  • 如果是请求有问题,那提Bug给前端,让前端修复

  • 如果请求没有问题,与接口文档对比,查看下返回数据具体是哪里出问题了,这里还得,首先查看下数据库,看是不是数据库中本身数据就有问题,如果数据库数据没有问题,那可能是后台代码问题,这个时候可以查看下后台的日志文件,通过分析日志文件的错误信息排查具体什么原因导致问题出现

5.产品上线评判的标准?

  • 测试用例执行率100%,通过率95%

  • 1-2级bug修复率达到100%,3-4级bug修复率达到95%

6.你们的开发语言是什么?

  • Java后台开发:

    • SSM:Spring+SpringMVC+Mybatis

    • SSH:Spring+Struts+Hibernate

    • springboot

    • maven项目

    • python后台开发框架:Django flask

  • 前端开发语言:

    • JavaScript+CSS+html

    • bootstrap框架

    • php:ThinkPHP框架

二、MySQL

1.mysql中in和exists区别

  • MySQL中的in语句是把外表和内表做hash连接,而exists语句是对外表做loop循环,每次loop循环再对内表进行查询

  • 如果查询的两个表一个较小,一个较大,则子查询表大用exists,子查询表小用in

  • IN不对NULL进行处理,而exists对null处理

  • 如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not exists 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。

2. sql约束有哪几种

约束类型(六种):

  1. 主键约束(PRIMARY KEY)Primary Key Constraint

    确定表中的标识列(主键字段不能为空,必须唯一)

    标识:确定一个对象的唯一表现

  2. 外键约束(FOREIGN KEY)Foreign Key Constraint

    确定表与表之间的联系方式,一般情况下通过主表的标识列进行确定

    主表:给哪张表添加约束哪张表就是主表,辅助表为从表

  3. 唯一约束(UNIQUE)Unique Constraint 确定这个字段中的数据必须是唯一存在的ALTER TABLE 数据表名称

  4. 非空约束(NOT NULL) 确定这个字段中的数据必须不能为空

  5. 检查约束(CHECK)Check Constraint 设置这个字段中的数据特性

  6. 默认约束(DEFAULT )Default Constraint 若在表中定义了默认值约束,用户在插入新的数据行时,如果该行没有指定数据,那么系统将默认值赋给该列,如果我们不设置默认值,系统默认为NULL。

三、app测试

1.adb的作用

  • ADB 全称为 Android Debug Bridge,安卓调试桥,是一个客户端-服务器端程序

  • 主要用来监控手机设备,实现手机端与电脑端的通信,通过adb实现对手机的管控

  • 如:通过Abd安装软件拆卸软件,查看手机资源使用情况,CPU内存等

  • 通过adb实现手机端与电脑文件传输,查看手机端app运行日志,通过日志分析具体问题

四、python

1.python保留字?

python保留字即关键字,我们不能把他们用作任何标识符名称,python的标准库提供了一个keyword模块,可以输出当前版本的所有关键字。

 import keyword
 keylist = keyword.kwlist
 print(keylist)
 #['False', 'None', 'True', '__peg_parser__', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

2.python有哪些标准数据类型?

  • 数字型(Number)

    • 整型

    • 浮点型

    • 布尔型

    • 复数类型

  • 字符串(String)

  • 列表(List)

  • 元祖(Tuple)

  • 集合(Set)

  • 字典(Dictionary)

3.什么是python的命名空间?

  • 命名空间指的是变量存储的位置,每一个变量都需要存储到指定的命名空间当中

  • 命名空间提供了在项目中避免名字冲突的一种方法。各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响。

4.解释一下*args和**kwargs?

不定长传参

单个*号的参数:args是默认的名称,可以随意修改 -- 元组类型

两个*号: kwargs是默认的名称,可以随意修改 -- 字典类型

5.打印从1689年到2019年所有闰年

 for i in range(1689,2020)
 if i % 4 == 0 and (i % 100 != 0 or i % 400 == 0):
     print(i)

6.文件操作open()方法

open()函数是Python内置的用于打开文件的函数,它接受一个文件路径和打开模式作为参数,并返回一个文件对象。下面是一个示例:

 file = open("example.txt", "r")
 #格式:file("文件名","模式")

7.控制循环

break :直接终止整个循环,不去判断条件,直接结束循环

continue:遇到continue这个关键字,这个时候不去执行循环内部往下的代码(循环内部),直接重新去判断条件

区别:

continue:中断当前循环,直接执行判断条件。如果条件为True,继续执行,如果条件为False,就停止循环

break:直接中断整个循环,不去判断条件,直接循环结束

8.解释python中的身份运算符

is和not is 运算符可以判断两个对象是否相同

9.元祖(Tuple)

tuple是一个 有序不可变 序列,它的元素可以是任何类型,并且可以重复。tuple使用 小括号() 括起来,例如:(1, 2, ‘a’, ‘b’)。相比于list,tuple的操作比较受限,但它更加轻巧,因此可以提高代码的效率。

10.你遵循的代码规范是什么?请举例说明其要求?

PEP8 规范。

  1. 变量 常量:大写加下划线 USER_CONSTANT。 私有变量:小写和一个前导下划线_private_valuc. Python 中不存在私有变量一说,着是温到需要保护的变量,使用小写和一个前导下划线。但这只是程序员之间的一个约定,用于警告说明这是一个私有变量,外部类不要去访问它。但实际上,外部类还是可以访问到这个变量。内置变量:小写,两个前导下划线和两个后置下划线 cless 两个前导下划线会导致变量在解释期间被更名。这是为了避免内置变量和其他变量产生冲突。用户定义的变量要严格避免这种风格。以免导致混乱。

  2. 函数和方法 总体而言应该使用,小写和下划线。但有些比较老的库使用的是混合大小写,即首单词小写,之后每个单词第一个字母大写,其余小写。但现在,小写和下划线已成为规范。私有方法:小写和一个前导下划线 这里和私有变量一样,并不是真正的私有访问权限。同时也应该注意一般函数不要使用两个前导下划线(当遇到两个前导下划线时,Python 的名称改编特性将发挥作用)。 特殊方法:小写和两个前导下划线,两个后置下划线这种风格只应用于特殊函数,比如操作符重载等。函数参数:小写和下划统,缺省值等号两边无空格

  3. 类 类总是用驼峰格式命名,即所有单词首字母大写其余字母小写。类名应该简明,精确,并足以从中理解类所完成的工作。常见的一个方法是使用表示其类型或者特性的后缀,例如:SQLEngine,MimeTypes 对于基类而言,可以使用一个 Base 或者 Abstract 前 缀BaseCookie,AbstractGroup

  4. 模块和包 除特殊模块 init 之外,模块名称都使用不带下划线的小写字母。若是它们实现一个协议,那么通常使用 lb 为后缀,例如:import smtplib import os import sys

  5. 关于参数 不要用言来态型检测。断言可以用于检查参数,但不应仅仅是进行静态类型检测。 Python 是动态类型语言,静态类型检测违背了其设计思想。言应该用于避免函数不被毫无意义的调用。 不要滥用 "args 和 kwargs、args 和*kwargs 参数可能会破坏函数的健壮性。它们使签名变得模糊,而且代码常常开始在不应该的地方构建小的参数解析器。

  6. 其他 使用 has 或 is 前缀命名布尔元素 is_connect=True has_member=False用复数形式命名序列members=['user_1','user_2']用显式名名字典 person_address={'user1':'10 road WD','user_2':'20 strect huaf1 sicsqnc 或者 element 这样的名称应该避免。避免现有名称诸如 os, sys 这种系统已经存在的名称应该避免通用名称。

  7. 一些数字 一行列数:PEP 8 规定为 79 列。根据自己的情况,比如不要超过满屏时编器的显示列数。一个函数:不要超过 30 行代码,即可显示在一个屏幕类,可以不使用垂直游标即可看到整个函数。一个类:不要超过 200 行代码,不要有超过10个方法。一个模块不要超过500行。

  8. 验证脚本可以安装一个 pep8 脚本用于验证你 的代码风格是否符合 PEP8

11.五个python标准库

  • os:提供了不少与操作系统相关联的函数

  • sys:通常用于命令行参数

  • re:正则匹配

  • math:数学运算

  • detetime:处理日期时间

12.生成器

yield(),迭代器

遇到yield时会暂停保存当前所有的运行信息,返回yield值,下次执行next()方法是从当前位置继续运行,调用一个生成器函数,返回一个迭代器对象。

五、接口测试

1.什么是JMeter中的断言?断言的类型有哪些?

断言用于验证接口请求后的响应结果是否与预期结果一致

  • 响应断言

  • 持续时间断言

  • json断言

  • 大小断言

2.JMeter测试元件的执行顺序?

测试计划——》线程组——》配置元件——》前置处理器——》定时器——》取样器——》后置处理器——》断言——》监听器

3.API测试中需要验证哪些内容

  • 数据准确性

  • HTTP或其他协议状态代码

  • 响应时间

  • API返回任何错误时的错误代码

  • 授权检查

  • 非功能测试,如性能测试,安全测试

4.常用的http请求方法?

常用到5个方法:GET、POST、PUT、PATCH、DELETE、HEAD

  • get:从服务器检索数据

  • post:将数据添加到服务器中的现有文件或者资源中

  • put:允许替换服务器中现有的文件或资源

  • delete:允许从服务器中删除数据

  • patch:用于对资源进行部分修改

  • head:要求响应与get请求相同,但没有响应正文

5.python接口自动化怎么去处理cookie、session?

对于 cookie,session的处理一般有三种方式:

  • 第一种就是先获取登录请求的 cookie值,然后发送其他请求的时候,在requests提供的两个方法get或post方法中有一个 cookies参数,我们可以通过这个参数来传递 cookies值

  • 第二种就是通过订制请求头,然后把获取到的coookies放在请求头中,通过请求头来进行传递

  • 第三种就是通过创建一个 session会话对象,后期所有的请求发送都通过调用这个 session会话对象来进行发请求,如果是登录请求,它会自动保存 cookies值,然后其他需要用到cookies值的请求,也通过 session对象来发送,它会自动把cookies发送出去。

    对于 cookies, session的处理,差不多都是通过以上三种方式来实现的

6.对于post请求,要求传递json格式数据,JMeter怎么做?

在http请求组件的消息体数据中把json数据写出body data中;然后在请求头中设置Content-Type为application/json: charset= utf-8。

7.接口怎么鉴权的?

  • 通过用户和密码,auth鉴权

  • 通过cookie和session

  • 通过token

  • 通过sign签名

现在app一般通过token鉴权,有些是通过把token放在请求头里面,有些是通过singn签名这个字段放在body里面去鉴权的,一般的web是通过session去鉴权的。

8.怎么去检查分析接口

根据入参情况,去看接口的返回值。是否满足接口需求文档的要求

  • 状态码

  • 提示信息

  • 返回数据的具体内容

  • 如果有检查数据库的,就需要连接数据库获取数据与返回的数据作对比

满足则通过,不满足则复测,如果还是有问题,提交bug给开发

9.什么是前置处理器元件,列出一些前置处理器元件?

前置处理器是在采样器执行之前发生的事情。为了在执行采样请求之前对其进行配置,或者用于更新未从响应文本中提取的变量,需要使用前置处理器元件。

10.JMeter中的正则表达式是什么?

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

11.下一个接口用到上一个接口的数据,但返回的数据加密了,如何提取?

比如:一次登录后做多个接口的操作然后登录后的id需要关联传递给其他接口发送请求的时候使用

  1. 首先得让开发写一个加解密的jar包,然后把jar包放入到jmeter的 jmeter的lib/ext目录下

  2. 然后在测试计划中中有一个 add Directory or jar to classpath在这里指定jar的路径,添加需要的jar包

  3. 然后在第一个接口中添加一个 bean shell postprocessor(后置处理器),在后置处理器 中编写java代码,具体就是:

  • 导入解密的jar包中的解密算法类

  • 导入用于解释json格式数据的类(假设返回的数据是json格式的)

  • 对数据进行处理器

  • 首先获取接口的返回数据,然后调用解密算法类中的函数进行解密,解密出来后就是一个json格式数据

  • 然后调用json库中的函数对json数据进行解释,提取截取响应信息中uid的值

  • 将 uid_str 数据存到变量中,这里用props.put,其他线程组可调用请该变量

12.JMeter用到哪些组件,具体作用?

六、Linux

1.怎么退出当前命令?

ctrl+c

2.复制文件用什么命令?

cp

3.绝对路径用什么符号表示

/ect/init.d

4.监控资源命令

  • 查看进程ps-ef

     ps -ef | grep <关键字>

    这里的 <关键字> 是您想要查找的进程名称或相关字符串。例如,如果您想要查找所有与 java 相关的进程,可以运行:

     ps -ef | grep java
  • 杀掉进程kill

  • 监控资源 top、vmstat

    top 更适合实时查看和交互式操作,而 vmstat 更适合脚本处理和系统级统计分析。

  • 磁盘 df -h

  • 内存 free -m

5.怎么查看当前用户id

 id

id命令用于显示用户的ID,以及所属群组的ID

  • id会显示用户以及所属群组的实际与有效ID。

  • 若两个ID相同,则仅显示实际ID

  • 若仅指定用户名称,则显示目前用户的ID

七、网络

1.对于网络协议了解多少

网络协议是计算机网络中进行数据交换而建立的规则、标准或约定的集合。

使用最多的是http、https和tcp协议

http和https都是超文本协议,浏览器发送数据请求基本用的都是他们。不同的是https在http的基础上增加了ssl加密协议,http的默认端口是80,http:默认的端口是443;https收费,http免费。

tcp协议作用在传输层,在发送请求前会有三次握手,是面向连接的协议,传输过程比较可靠;udp协议没有tcp可靠,用于传输大量数据。

2.了解操作系统有哪些?

windows、Unix、Linux、Mac

八、WEB

1.css定位的方法?

  • 样式 #id、.class

  • 元素属性

  • 样式属性结合

  • 父子元素定位

2.常用的浏览器,内核是什么

现在国内常见的浏览器有:IE、Firefox、QQ浏览器、Safari、Opera、GoogleChrome、百度浏览器、搜狗浏览器、猎豹浏览器、360浏览器、UC浏览器、遨游浏览器、世界之窗浏览器等。但目前最为主流浏览器有五大款,分别是IE、Firefox、GoogleChrome、Safari、Opera。

下面总结一下各常用浏览器所使用的内核。

1、IE浏览器内核:Trident内核,也是俗称的IE内核;

2、Chrome浏览器内核:统称为Chromium内核或Chrome内核,以前是Webkit内核,现在是Blink内核;

3、Firefox浏览器内核:Gecko内核,俗称Firefox内核;

4、Safari浏览器内核:Webkit内核;

5、Opera浏览器内核:最初是自己的Presto内核,后来是Webkit,现在是Blink内核;

6、360浏览器、猎豹浏览器内核:IE+Chrome双内核;

7、搜狗、遨游、QQ浏览器内核:Trident(兼容模式)+Webkit(高速模式);

8、百度浏览器、世界之窗内核:IE内核;

9、2345浏览器内核:以前是IE内核,现在也是IE+Chrome双内核;

3.web UI自动化都用过哪些库

  • Selenium库:里面封装了丰富的对浏览器,页面元素进行操作的方法。

  • Xlrd库:主要用来实现对excel表格数据进行读取的API

  • Pymysql库: 主要用来操作数据库的

  • Ddt库 :主要用来实现数据驱动的

  • Re库 :主要用来提取html页面数据的

  • Unittest库:主要用来编写用例,管理用例,执行用例的。

4.如何使用Selenium在文本框中键入文本?

sendKeys("要输入的字符串")用于在文本框中输入字符串

  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值