软件测试面试题目
软件测试常见面试题目
-
-
- 简要介绍最近一项工作的业务流程
-
- 二、数据库
-
问题一:请问在实际应用中常见的数据表结构之间通常采用哪些连接方式进行交互?
问题二:SQL语言与MySQL具体有哪些区别?
问题三:请列举常用的数据库连接所使用的IP端口及其对应的数值范围。
问题四:常见的数据处理场景中有哪些聚合函数被广泛应用?
问题五:在数据去重过程中通常会采用哪些具体的技术手段?
问题六:对于使用MySQL进行数据分组通常会选择哪种语法结构?
**
在MySQL中如何对查询结果进行排序?
* 四、Linux
* * 题目一、常用的linux命令:
-
第五章 UI 自动化
-
第一题 常用的方式进行定位元素的操作
-
第二题 浏览器的close()方法与quit()命令的主要作用是什么?
-
第三题 自动化脚本中如何实现等待功能?主要有哪些方法?
-
第三题 自动化测试过程中为何有时无法捕获到目标元素?主要有哪些原因?
-
第四题 断言操作与验证操作在功能上存在哪些方面的差异?
-
第五题 自动化测试的主要优势以及可能存在的不足之处是什么?
-
第六题 在UI自动化操作中常见的鼠标操作有哪些?
-
第七题 在UI自动化操作中常见的输入操作有哪些?
-
六、接口测试
-
- 常用的接口状态码
-
- 用于接口测试的主要工具
-
- JMeter中常用的监听器有哪些
-
- 采用的主要接口请求方式有哪些
-
- GET与POST请求方式的区别
-
- HTTP与HTTPS协议的主要区别是什么?
-
- Cookie与Session之间的主要区别是什么?
-
测试理论的核心内容
-
- 课题一:黑盒测试中的用例设计常用策略
- 课题二:探讨怎样的测试用例才算优秀
- 课题三:Bug构成要素分析:
找工作之前浏览一遍,有助于面试成功
一、 介绍一下最近一份工作的业务流程
二、数据库
题目一:数据库有几种表结构的连接方式?
内联表单连接(inner join)。外部联接(outer join)。左边外部联接(left outer join)。右边外部联接(right outer join)。全面外部联接(full outer join)。它们之间的主要区别在于:
- 外连接操作中使用的"OUTER"关键字并非必要。
- 内连接操作返回所有满足条件的记录;外接点作为其延伸,在结果中不仅包含这些符合条件的记录,并且还包括不满足条件的部分。
- 当未指定任何外键链接时,默认执行的是内联表操作。
- 左接点不仅涵盖了符合要求的数据行,并且还包含了左侧表中不符合条件但仍有相关数据的部分。
- 右接点则整合了所有符合条件以及部分不符合但存在于右侧表中的数据。
- 全接点综合了所有符合关联关系的数据以及那些虽未完全匹配但仍具有潜在关联性的数据。
题目二:SQL和MySQL有什么区别:
- 核心区别在于它们基于的基本原则
- 性能指标显示其为高性能MySQL数据库系统
- 虽然MySQL并非完全免费, 但其成本相对较低
- 安全防护措施全面且严格
题目三:常用的IP端口是多少
以下是按照要求对原文文本进行同义改写的版本
题目三:数据库使用索引有什么优缺点
优点:
第一:通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
缺点:
增加索引也有许多不利的一个方面。第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
题目四:数据库中常用的聚合函数:
用于计算总和的求和操作
题目五:数据库中去重用哪个函数
Distinct
题目六:数据库查询语句分组用哪个:
Group by 按条件分组;按照所需条件应用HAVING子句;示例:列举满足工资总额超过9000的部门编号及其工资总和
SELECT deptno, SUM(sal) FROM emp GROUP BY deptno
HAVING SUM(sal) > 9000;
题目六:数据库查询排序用ORDER BY
在数据库查询中采用WHERE子句配合LIKE语句筛选出相关数据。特别提示:在处理时应当首先应用WHERE子句配合LIKE语句筛选出相关数据,并随后对结果进行排列顺序管理。
SELECT deptno FROM emp where name like '安'
order by deptno;
四、Linux
题目一、常用的linux命令:
cd 进入目录或退出至主目录;例:“cd /home” 表示进入home目录下
cd … 退出至上一级目录
ifconfig 查看linuxIP的命令;注:ipconfig是查询windowsIP的
修改IP即时生效:ifconfig eth0 192.168.1.155 netmask 255.255.255.0
rm -rf 强制删除目录或文件;r代表删除目录,f代表强制删除
mv 移动文件或改名;例:“mv test /home” 表示将test移动至home目录下;“mv test test1”表示将test改名为test1
mkdir 创建文件夹;例:“mkdir dodo”表示创建dodo文件夹
ps -ef 查看进程信息;ps -ef |grep ssh :查看ssh进程的信息
top 进程管理器;top -M
df 查看磁盘使用状况 df -m
kill -9 结束进程;kill -9 +进程号;kill -15
clear 清屏操作
cat 查看文件内容
chmod 给文件以权限;2:写;4:读;1:运行;例:chmod 461 test;表示:给文件拥有用户写的权限,所在组读写权限,其它组用户运行权限。
useradd useradd dotest:创建dotest用户
tail 滚动查看日志;tail + 数量 + 文件名
tail -f log【滚动查看日志】
tail -n 5 logs 【查看最后5行】
head 匹配前几行;head -n 4 log
重启系统 reboot
关机 shutdown 0
查看主机名 hostname
修改主机名 vi /etc/hosts或者hostname + 主机名
软件包 --version 查看版本信息;
svnserve --version
java –version
五、UI自动化
题目一:常用的定位元素的方法
1、id定位
`find_element_by_id("") #通过id来定位元素
在HTML中使用唯一标识符(ID),但并非所有元素都有固定的唯一标识符或采用随机生成的方式赋予标识符
`find_element_by_name("") #通过name来定位元素`
3、class定位
find_element_by_class_name("") #通过class来定位元素
4、tag定位
find_element_by_tag_name("") #通过tag来定位元素
5、link定位
find_element_by_link_text("") #通过link来定位元素
6、partial link定位
find_element_by_partial_link_text("") #通过元素标签对之间的部分文字进行元素定位
7、XPath定位(UI自动化应用最普遍的)
下面列出了最有用的路径表达式:
| 表达式 | 描述 |
|---|---|
| nodeName | 选取此节点的所有子节点 |
| / | 从根节点选取 |
| // | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置 |
| . | 选取当前节点 |
| … | 选取当前节点的父节点 |
| @ | 选取属性 |
| 下面XPath的几种元素定位方法 | |
| 1.绝对路径定位 |
find_element_by_xpath("/html/body/div[2]/div[2]/div[5]/div[1]/div/form/span[2]/input")
2.利用元素定位(与前六种方法类似)
#利用元素属性进行定位
find_element_by_xpath("//input[@id='**']")
find_element_by_xpath("//input[@name='**']")
find_element_by_xpath("//input[@class='**']")
find_element_by_xpath("//input[@type='**']")
。。。。。。
#利用元素层级属性进行定位,相对路径 #根据class属性唯一值,一层一层定位到元素
find_element_by_xpath("//div[@class='**'])/table/tbody/tr/td/div")
#利用逻辑运算符进行定位
find_element_by_xpath("//input[@id='**' and @name='**']")
find_element_by_xpath("//input[@id='**' or @name='**']")
#利用contains包含方法进行定位,查找classname属性下,classname中包含name的元素
find_element_by_xpath("//classname[contains(@classname,'name')]")
#利用starts-with,使用开始位置元素进行定位
find_element_by_xpath("//input[starts-with(@name,'vaule')]")
#利用ends-with,使用结束位置元素进行定位
find_element_by_xpath("//input[ends-with(@name,'vaule')]")
#利用text()进行元素定位
find_element_by_xpath("//input[text(),'百度']")
#其它方法 #string-length()、substring、substring-before()、substring-after()
基于CSS的选择器能够实现对空间中任意属性的灵活选择 同时该技术的速度明显快于XPath定位技术
find_element_by_css_selector(".**") #通过class定位,CSS中class选择器以"."来定义
find_element_by_css_selector("#**") #通过id定位,CSS中id选择器以"#"来定义
find_element_by_css_selector("div") #通过标签名定位 find_element_by_css_selector("[name='**']") #通过name进行定位 find_element_by_css_selector("td > div") #通过父标签,查找子元素中标签名为div的所有元素
问题二:关闭浏览器close()与quit() 的区别
window.close(而非用于退出超链接新打开的窗口)。
通过exit函数退出相关驱动程序并关闭所有窗口。
通常在自动化脚本完成后进行清理以释放内存空间。
推荐使用driver.exit()来直接终止浏览器进程。
问题三:自动化脚本等待有几种方式
- 隐形等待
当找不到元素的时候, 会等待一段时间,超过了就报 exception
driver.implicitly_wait(10) #在setUp 设置 达到全局等待的效果.
WebDriver 支持 WebdriverWait 和 expected_conditions 用于实现显示功能
WebDriverWat(self.driver,10).unitl(expected_conditions.element_to_be_clickable((By.name,“name”)))
#查找元素可见并可操作,超过十秒 报exception.
WebDriverWait(self.driver,10).until(expected_conditions.element_to_be_presence_of_element_located((By.ID,"id)))
#查看元素是否存在
WebDriverWait(self.driver,10).until(expected_conditions.title_contains(“I Love you”))
#直到标题包含I love you
Alert=WebDriverWait(self.driver,10).until(expected_conditions.is_alert_presence())
Alert_text=Alert.text
#获取 alert 对象 , 并保存text.
3.强制执行等待
think.time(10)
- 显示与隐形等待的本质区别体现在其执行机制上:前者在执行过程中必须进行判断才能启动操作;而后者采用全局等待的方式可能导致资源利用率的下降。
- 避免将显示与隐形等待策略同时应用于同一个系统中
问题三:自动化测试中元素定位不到有哪几种原因
- 检查元素是否填对了(尽管看似简单但也相信有些人可能会误操作)
- ID是自动生成的且随机指定的如果使用自动生成的ID则无法通过它来精确定位
- 所选的方法可能对应多个属性因此整个页面上会存在多个选项
- 必须注意如果有多个iframe标签需要切换iframe标签后再进行定位操作
- 避免选择包含空格的属性因为在前端开发过程中可能会频繁增删标签导致绝对路径出现错误因此建议采用相对路径
- 在检查是否存在多个iframe标签时请确保已经选择了正确的路径否则可能导致定位失败
- 如果没有添加等待时间可能会导致在未完全加载页面元素时就触发定位操作从而出现找不到元素的情况
- 建议不要仅依赖等待时间而忽略页面加载状态因为有些情况下即使设置了较短的时间也可能无法捕捉到目标元素的变化
- 检查所选元素是否可见有时设置好的不可见状态可能被其他因素遮挡导致无法正常显示
问题四:断言和验证有什么区别:
断言,能够验证应用程序的状态是否同所期望的一致,提供了测试结果是True还是False,所有的断言方法都有一个msg参数,如果指定msg参数的值,则将该信息作为失败的错误信息返回。
断言的方法很多,下面只介绍几种常用的断言方法:
assertEqual
assertNotEqual
assertTrue
assertFalse
assertIsNone
assertIsNotNone
1、assert
语法:
assert u’预期内容’ in driver.page_source,u’assert message’
#一般应用于目标值可以在当前页面中能够找到
例子
assert u'百度' in driver.page_source,u'#当前页面是否含有关键词,百度'
2、assertEqual
assertEqual(arg1, arg2, msg=None)
#验证arg1=arg2,相等则pass,不等则fail
例子
arg1 = "name"
arg2 = "Name"
#结果是不相等,断言失败
assertEqual(arg1, arg2, msg="判断arg1和arg2是否相等")
对应于该方法,则有
assertNotEqual(arg1, arg2, msg=None)
#用来验证两个参数是否不相等;若相等则会失败
3、assertIn
语法:
assertIn(arg1, arg2, msg=None)
#验证arg1是arg2的子串,不是则fail`
例子
arg1 = "hello"
arg2 = "hello world"
#'hello'是'hello world'的子串,断言成功
assertIn(arg1,arg2, msg="判断‘hello’是否是‘hello world’的子串")
4、assertTrue
语法:
assertTrue(expr, msg=None)
#验证expr是true,如果为false,则fail
例子
#4>3为true,所以断言成功
assertTrue(4>3, msg="4是否大于3")
题目五:自动化测试有什么优势和不足:
优势
(1) 自动化测试具备高度一致性和重复性特点,在保证测试结果稳定性的同时实现更加客观的评估方式,在提高软件产品质量方面表现出显著优势:准确度、精确度和可信任度均较人工测试有着明显提升效果。
(2) 自动化测试通过实现了人机协作模式将繁重的自动化工作负载转移至计算机系统之上从而为企业释放更多的人力资源去做更具战略意义的工作项目安排资源以实现更高的工作效率与效益最大化。
(3) 自动化测试能够通过预先配置好相应的运行环境如高并发访问场景大海量数据交互动态响应请求等复杂业务场景使得在无人值守情况下即可自动执行相关功能并实时采集反馈数据为后续优化提供有力依据;相比而言手工操作难以应对这些高度复杂的业务交互情形因此存在较大的局限性与不足之处。
(4) 自动化测试系统能够精准模拟真实业务环境下的各种极端情况如高负载压力运行等传统手工环境下难以完成的功能在一定程度上填补了现有技术体系中的空白并且显著提升了开发效率与质量水平:这不仅有利于缩短产品上线周期也有助于降低上线过程中的风险因素数量从而保障最终产品的稳定性和可靠性表现更好满足企业对高质量软件产品的需求需求。
(5) 软件系统迭代更新后往往会产生新的功能模块或改进现有功能模块因此需要及时进行回归测试以确保新增或变更的功能不会对原有功能造成影响;而采用自动化测试手段则能快速搭建新的测试环境并在第一时间完成全部必要的回归检验工作从而保障了软件系统的稳定性和可靠性运行状态不受影响:这不仅大大提升了开发效率还为企业节省了大量的人力物力资源提供了更为高效的开发管理方案选择支持企业持续稳健发展的同时也为企业创造更大的经济效益和发展空间打下了坚实基础
- 劣势
(1)相比手工测试而言,自动化的测试对测试团队的技术水平要求更高.
(2)自动化的测试无法完全替代人工测试以发现缺陷,也不能实现100%覆盖率.
(3)开发自动化测试脚本需要投入较大的时间和资源,出现错误的测试用例会导致浪费时间和资源.
(4)由于产品的快速迭代,自动化测试脚本需要频繁更新,导致较高的维护成本.
(5)虽然自动化测试能显著提升效率,但无法保证其有效性和准确性.即使用例覆盖率较高,也无法保证软件质量会得到提升.
问题六:UI自动化常用的鼠标事件:
perform(): 执行操作流程
context_click(): 题目右侧的操作
double_click(): 双键点击动作
drag_and_drop(): 实现拖放交互行为
move_to_element(): 实现鼠标悬停状态
问题七:UI自动化常用的键盘事件
send_keys(Keys.BACK_SPACE) 执行删除功能所需的快捷键是BackSpace。
send_keys(Keys.SPACE) 空格功能对应的快捷键是Space。
send_keys(Keys.TAB) 表格或制表功能所需的快捷键是Tab。
send_keys(Keys.ESCAPE) 回退功能对应的快捷键是Esc。
send_keys(Keys.ENTER) 回车操作可由Enter完成。
send_keys.Keys.CONTROL,‘a’ 全选操作可由Ctrl+A执行。
send_keys.Keys.CONTROL,‘c’ 复制操作可由Ctrl+C执行。
send_keys.Keys.CONTROL,‘x’ 剪切操作可由Ctrl+X完成。
send_keys.Keys.CONTROL,‘v’ 粘贴操作可由Ctrl+V执行。
send_keys.Keys.F1 通过F1快捷键可切换至特定视图或功能选项。
send_keys.Keys.F12 F12快捷键通常用于切换屏幕内容或窗口布局设置。
六、接口测试
题目一:常见的接口状态码:
2开头 (请求成功)表示成功处理了请求的状态代码
200 OK(成功),一般用于GET和POST请求
201 (已创建)请求成功并且服务器创建了新的资源
202 (已接受)服务器已接受请求但尚未处理
203 (非授权信息)
204 (无内容)
205 (重置内容 )
206 (部分内容)
以3开头(请求被重导)意味着要处理请求并执行进一步的操作。一般情况下,这些状态代码用于指示重定向。
300 (多种选择)
301 (永久移动)
302 (临时移动)
303 (查看其他位置)
304 (未修改)
305 (使用代理)
307 (临时重定向)
4开头 (请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理

5开头的状态码(server 错误)表明 servers 在处理 requests 时出现 internal issues. 这些问题可能源于 server 的内部问题, 而不是 request 出错.

题目二:接口测试使用的测试工具
Jmeter:
主流的取样器:
- DebugSampler负责将我们自定义变量显示在response data中
- HttpSampler是JMeter中最常用的工具
- JDBC Sampler这个工具可以通过SQL语句向数据库发送一个JDBC请求,并对获取返回的数据进行处理
- DummySampler(模拟请求)用于模拟接口请求,在没有开发完成时帮助调试脚本;通过后置处理器可以获取其信息供后续业务使用
- JavaSampler Jmeter中的Java请求功能与DummySampler类似;可以用来模拟接口请求及其返回结果
- FTPSampler在JMeter中支持FTP请求功能,默认分为两种类型:从FTP下载文件和上传文件;配置FTP sampler即可实现上传或下载操作;确保FTP客户端能够正常连接到目标服务器即可完成相关操作
- BeanShellScripting sampler是Jmeter中用于执行脚本的一个重要工具
题目三:Jmeter常用监听器有哪些
察看结果树
通过查看结果树来展示所有取样器的请求信息与响应信息,并有助于快速定位接口问题
聚合报告
聚合报告为测试中的每个取样器创建一行。对于每一个取样器,计算响应信息,并提供请求计数,最小,最大,平均,错误率,近似吞吐量(请求/秒)和千字节每秒的吞吐量。测试完成后,吞吐量就是整个测试期间的实际吞吐量。
• 标签 -样品的标签。如果选择“ 在标签中包括组名? ”,则线程组的名称将作为前缀添加。这样,可以根据需要分别整理来自不同线程组的相同标签。
• #样本 -具有相同标签的样本数
• 平均 -一组结果的平均时间
• 中位数 - 中位数是一组结果中间的时间。50%的样品不超过此时间。其余的至少要花时间。
• 90%的生产线 -90%的样品不超过此时间。剩余的样本至少要花这么长时间。(90 个 百分位数)
• 95%的生产线 -95%的样品不超过此时间。剩余的样本至少要花这么长时间。(95 个 百分位数)
• 99%的样本行 -99%的样本所花费的时间不超过这次。剩余的样本至少要花这么长时间。(99 个 百分位数)
• 最小 -具有相同标签的样品的最短时间
• 最长-具有相同标签的样品的最长时间
• 错误% - 错误的请求百分比
• 吞吐量 - 吞吐量以每秒/分钟/小时的请求数衡量。选择时间单位,以使显示的速率至少为1.0。将吞吐量保存到CSV文件时,以请求/秒表示,即30.0请求/分钟另存为0.5。
• 接收的KB /秒 -吞吐量,以每秒接收的千字节为单位
• 已发送KB /秒 -吞吐量以每秒发送的千字节为单位
时间以毫秒为单位。
用表格查看结果
该可视化器会生成一个对应每个结果的行。类似于“查看结果树”的功能,“该可视化工具占用较多内存。”
默认情况下,默认只展示主要样本(parent samples)。它不显示子样本(child samples)。JMeter提供一个“子样本?(child samples?)”选项框。如果选择此选项,则会显示子样本而不是主要样本。
响应时间图
响应时间曲线图生成了一条折线图,在测试期间实时追踪每个标记请求的表现情况
图形结果
该图形将呈现所有采样时间点,并以毫秒为单位标注当前样本(黑色)。图表底部还将显示每分钟处理的请求数(蓝色),以及基于所有样本计算的标准偏差(红色)和吞吐率(绿色)。
此计算方法综合考虑了您测试中引入的各种延迟因素,并包含JMeter自身的处理时延。
本报告将展示以下关键指标:
- 显示实际采集到的数据点
- 绘制数据分布曲线
- 标注平均值数值
- 显示中位数位置
- 绘制波动范围大小(标准偏差)
题目四:常用的接口请求方式有哪些:
- Get
向特定资源发出请求(请求指定页面信息,并返回实体主体)
Post通过指定资源发送数据请求(表单提交和文件上传),可能导致创建新的资源或更新现有资源
Upload its latest version to the designated resource location, replacing the contents of the specified document with newly received data from the client.
该方法采用与GET方法对应的方式处理请求,在无返回内容的情况下实现对传输层报头信息的读取;类似于GET方法,在相应头部字段中获取原始数据而不包含具体数据
- Delete
请求服务器删除request-URL所标示的资源(请求服务器删除页面)
options 返回 server 为特定资源提供的 HTTP 请求方法 并且 web server 提供测试接口 以便客户端评估 server 性能
题目五:请求方式GET和POST的区别:
一、功能不同
1、get是从服务器上获取数据。
2、post是向服务器传送数据。
二、过程不同
GET操作会将参数数据队列添加至提交表单所在表单页面的ACTION属性指定的URL路径,在URL路径中可以看到值与表单各个字段之间的对应关系
- post是利用HTTP POST机制将表单中的各项字段及其内容经由HTML HEADER部分一并传输至指向该动作属性URL地址的位置。
三、获取值的不同
1、对于get方式,服务器端用Request.QueryString获取变量的值。
2、对于post方式,服务器端用Request.Form获取提交的数据。
四、传送数据量不同
1、get传送的数据量较小,不能大于2KB。
2、post传输的数据规模较大,默认情况下并未设置上限。然而,在理论上,IIS4系统允许的最大数据容量为80KB,IIS5系统则提升至100KB的上限。
五、安全性不同
1、get安全性非常低。
2、post安全性较高。
未采用加密技术的情况下, 他们处于相同的安全等级; 任何一种类型的监听器都能够实现对所有数据的监控.
题目六:请求方式http和https的区别:
HTTP通过明码形式发送数据,并未采取任何数据加密措施。
HTTP由于缺乏安全性,在传输敏感信息时存在明显缺陷。
采用SSL技术实现数据加密的安全通信方式被称为HTTPS。
HTTP与HTTPS采用不同的连接机制以及端口号:HTTP使用80端口,默认状态;HTTPS则采用443端口,并需开启SSL/TLS连接状态。
HTTPS不仅依赖于SSL/TLS技术还需要CA颁发的有效证书来确保通信的安全性。
由SSL与HTTP组合而成的一种支持加密通信和身份认证的网络协议比传统的HTTP更加安全可靠。
题目七:cookie和session的区别:
对象不同;
Cookie :专为每个网站定制信息服务, 每个网站只能拥有一个独立的 Cookie, 其他网站无法访问该 Cookie, 该文件仅存于客户端设备, 每次访问对应网站时, 浏览器都会自动调用该网站的 Cookie 文件, 如果存在则发送到客户端设备。Cookie 文件大致包含了诸如用户名、密码等基础信息设置项。
Session :专为每位用户维护单独的访问记录, 只有客户端设备才能访问并管理该 Session 对象。Session 中主要记录用户的登录状态、操作记录等关键信息内容。此 Session 对象会在用户退出后自动失效(如果采用超时机制)。
Cookie :单个 Cookie 的存储容量限制在3千字节以内(约10位字符)。
Session : session 数据采用持久化技术存于服务器端资源库中, 并且支持任意大小的数据量积累。当 session 数据量超出规定阈值时, 服务器系统将主动执行清理策略以释放资源占用空间。
Cookie :自 Cookie 创建那一刻起就开始计算生存时间, 当存活期满后 Cookie 就会自动失效(如按30分钟计)。
Session : session 对象的时间生存期采用分段式管理机制, 自创建时刻开始计算存活周期长度(例如:30分钟)。如果在指定时间段内未进行任何操作行为,则 Session 自动终止存活并被系统移除出内存空间范围。
对于 Session 对象而言, 存储位置位于服务器端资源库中; 而 Cookie 对象的数据仅限于客户端设备本地缓存空间内处理使用场景特点定位与区别特征描述如下: Cookie 类型的数据结构较为简单单一; Session 类型的数据结构则更为复杂丰富得多。
测试理论
题目一:黑盒测试测试用例设计的常用方法
在黑盒测试中进行用例设计时,则会包含多种具体的方法, 包括基于划分等价类的方法, 分析边界值的技术, 根据错误推测而产生的用例, 基于因果关系的分析, 以及基于判定表的设计策略, 最后还有采用正交试验的方式.
题目二:什么是好的测试用例:
使用情况 没有疑问 这一点必须考虑的因素 最大化覆盖率 是一套测试用例的关键指标 如果遗漏了某些测试用例 就失去了其核心价值
在确保用例能够全面覆盖需求的前提下,在保证工作量最小化的同时进行优化是必要的策略。这些方面的优化方法有很多种选择:包括但不限于条件覆盖法、分支覆盖率评估法以及正交测试等策略。针对不同的系统架构和需求特点,在实际应用中选择合适的优化方案至关重要:对于运行于Web界面的PHP后端系统来说,在功能实现阶段即可借助工具如xdebug来分析并计算代码覆盖率;而对于需要对外提供API服务的系统,则应基于暴露在外的接口设计进行用例规划,并通过分析接口参数的变化情况来估算可能的分支判断逻辑。
在测试过程中确保各步骤之间的衔接更加顺畅,
即在同一个步骤内部各分项之间要有逻辑上的连贯性,
避免出现前后环节脱节的情况。
例如:
在实现业务逻辑的时候,
需要先处理数据获取,
然后进行数据处理,
最后再输出结果。
每个环节都需要有明确的操作流程,
以确保整个流程能够顺利运行。
用例是否明确了使用场景
是否有必要详细说明使用场景会对文档的理解与协作产生重大影响?通常情况下会有多个开发人员协作完成项目, 人员变动不可避免地会影响项目进度, 因此, 在实现过程中需要确保留下足够的技术文档以便后续团队能够快速上手, 这样才能有效提升后续工作的效率。
- 测试脚本或说明对其易维护性的关注
当目标系统升级时,请关注其测试脚本或说明对其易维护性的关注是否合理。例如,在基于状态机的设计中,默认情况下各测试脚本之间可能存在严格的执行顺序要求;这使得被依赖的测试脚本在发生更改时无需同步更新即可生效。若各测试脚本间不存在相互依赖关系,则可能需要同时更新两个相关脚本才能保持一致性(比如各脚本分别处理不同的数据源)。当然,在实际应用中这两种情况的选择应根据具体场景权衡取舍
题目三:bug的要素:
1、所属的系统(产品)
2、发现的版本(轮次)
3、发现bug所属的模块
4、bug提交人
5、错误分类:包括代码层面的问题、界面优化方面的挑战、设计上的缺陷、配置相关的困难、安装和部署过程中的问题以及安全层面的问题等(默认)
6、bug的重现概率: 必现 大概率重现 小概率重现 极小概率重现
7、bug的严重级别:致命 严重 一般 提示 (影响范围越大,严重级别越高)
8、bug的优先级:高 中 低
9、bug的标题 言简意赅说明是什么bug, 而不是把测试用例名字复制一遍
10、bug单号 一般系统自动生成
bug内容:涉及的开发环境要素(如操作系统版本、软件库等)、预先配置的要求(如依赖项安装情况)、完整的操作流程(包括输入参数与预期输出)、预期输出(如错误提示信息),观察到的实际现象(如异常日志信息),相关截图证明(用于确认问题存在性),问题描述中的技术细节(如错误日志内容)。
注:编写时应确保描述清晰易懂。
12:附件:测试用的数据或者出错的日志, 如果需要添加上日志
