【测试面试题】

判断题
1.软件测试就是为了验证软件功能实现的是否正确,是否完成既定目标的活动,所以软件测试在软件工程的后期才开始具体的工作( × )
2.功能测试是系统测试的主要内容,检查系统的功能、性能是否与需求规格说明相同。( √ )
3.软件测试只能发现错误,但不能保证测试后的软件没有错误。(√)
4.测试只要做到语句覆盖和分支覆盖,就可以发现程序中的所有错误。(X)
5.接口的请求方式中,get是向服务器提交数据,post是向服务器获取数据 。(X)
6.单元测试通常应该先进行“人工走查”,再以白盒法为主,辅以黑盒法进行动态测试。
( √ )
7.I18N测试是指对产品做出具有国际性的规划,而L10N测试则是指对软件做出符合本地需求更改工作。(√)

选择题
1.软件测试应当从什么阶段开始介入? ( D )
A、单元测试阶段 B、集成测试阶段
C、系统测试阶段 D、需求分析阶段
2.OSI协议体系结构的层级划分正确顺序是 ( D )
A、物理层-数据链路层-网络层-会话层-传输层-表示层-应用层
B、物理层-数据链路层-传输层-网络层-会话层-表示层-应用层
C、物理层-数据链路层-会话层-网络层-传输层-表示层-应用层
D、物理层-数据链路层-网络层-传输层-会话层-表示层-应用层
3.一个输入框要求输入10-20个字符,边界值的测试用例,应该是什么样的? ( D )
A、10/20/11/19/9/21 B、10/20/15/11/19
C、9/10/20/21 D、9/10/15/20/21
4.接口测试的目的是? (多选题)( AD )
A、减少缺陷修复成本 B、提升软件安全性
C、发现比系统测试更多的错误 D、提高测试效率
5.接口测试可以测试哪些范围? (多选题)( ACDF )
A、性能 B、兼容性 C、业务逻辑
D、自动化 E、UI测试 F、输入框
6、以测试的形态分测试可以分为?(多选题)(ABC)
A、建构性测试 B、系统测试 C、专项测试
D、单元测试 E、组件测试 F、集成测试
7、依存关系有4种分别是?(多选题)(ABCD)
A、开始-结束 B、开始-开始 C、结束-开始
D、结束-结束 E、开始-实施-结束 F、结束-审核-开始
8、典型的瀑布模型的四个阶段是?(多选题)(ABCD)
A、分析 B、设计 C、编码
D、测试 E、需求调研 F、实施

问答题
基础知识

1、软件测试包含几个基本流程,依次是什么?
答:软件测试包含5个基本流程,需求分析–编写测试计划–编写测试用例–执行测试–编写测试总结报告

2、软件测试分为哪几个阶段?
答:软件测试分为4个阶段,单元测试、集成测试、系统测试、验收测试

3、测试用例设计方法有哪些?
答:等价类划分法、边界值分析法、错误推断法、因果图方法、正交表分析法、场景分析法

4、测试用例设计包含哪些要素?
答:用例所属项目、用例所属模块、用例类型、适应阶段、用例标题、优先级、前置条件、用例步骤、预期结果

5、bug的生命周期?
答:发现bug–新建bug–验证bug–关闭bug

6、软件测试提交bug时包含哪些内容?
答:bug标题、所属模块、重新步骤、预期结果、实际结果、发现版本、优先级、指派人、附件(截 图、日志)等

7、缺陷严重程度分别是什么,并将每个严重程度进行简单的描述
答:P1:致命;P2:严重;P3:一般;P4:轻微、建议
致命:阻碍测试工作的问题,造成系统崩溃、死循环、主要功能丧失等问题
严重:功能未实现、逻辑错误、影响用户使用正常操作、与需求不符等
一般:功能没有完全实现但不影响使用
轻微:不影响使用的小瑕疵,建议类

8、Linux常用20个命令?
答:随便说20个比较常用的

9、URL有哪些部分组成?
答:协议类型、域名、端口、路径、参数

10、工作中发现的最有价值的bug?
答:无标准答案

11、测试结束的标准是什么?
答:用例全部执行、覆盖率达到标准、缺陷修复率达到标准,其他指标达到质量标准

12、软件测试从什么时候开始,为什么?
答:软件测试越早展开越好,一般从需要阶段就要进行软件测试。软件测试不仅是测试功能,对于需求文档一类的也要进行测试。越早找出bug,就会减少后续开发人员修改程序的次数,并且可以降低成本,如果等整个软件开发的差不多了发现一个致命的错误的话,那就需要花费很多时间和人力进行重新修改,而在一开始就发现的话,就不会出现这种情况了

13、一个测试工程师应该具备哪些素质和技能?
答:①、掌握基本的测试基础理论
②、本着找出软件存在的问题的态度进行测试,不要以挑刺的形象出现
③、可熟练阅读需求规格说明书等文档
④、以用户的观点看问题
⑤、有强烈的质量意识
⑥、细心和责任心
⑦、良好的有效的沟通方式(与开发人员及客户)8.具有以往的测试经验能够及时准确的判断出高危险区在何处

14、测试计划编写包含几要素,分别是什么?
答:测试计划编写6要素(5W1H):
why——为什么要进行这些测试;
what—测试哪些方面,不同阶段的工作内容;
when—测试不同阶段的起止时间;
where—相应文档,缺陷的存放位置,测试环境等;
who—项目有关人员组成,安排哪些测试人员进行测试;
how—如何去做,使用哪些测试工具以及测试方法进行测试

15、什么是回归测试?
答:回归测试: (regression testing): 回归测试有两类:用例回归和错误回归;用例回归是过一段时间以后再回头对以前使用过的用例在重新进行测试,看看会重新发现问题。错误回归,就是在新版本中,对以前版本中出现并修复的缺陷进行再次验证,并以缺陷为核心,对相关修改的部分进行测试的方法。

16、单元测试、集成测试、系统测试的侧重点是什么?
答:单元测试针对的是软件设计的最小单元–程序模块(面向过程中是函数、过程;面向对象中是类。),进行正确性检验的测试工作,在于发现每个程序模块内部可能存在的差错.一般有两个步骤:人工静态检查\动态执行跟踪
集成测试针对的是通过了单元测试的各个模块所集成起来的组件进行检验,其主要内容是各个单元模块之间的接口,以及各个模块集成后所实现的功能.
系统测试针对的是集成好的软件系统,作为整个计算机系统的一个元素,与计算机硬件\外设\某些支持软件\数据和人员等其他系统元素结合在一起,要在实际的运行环境中,对计算机系统进行一系列的集成测试和确认测试.

17、随便说出五个常用ADB命令:
答:adb start-server //启动ADB
adb kill-server //停止ADB
adb devices //查看已经连接的设备
adb pull <手机路径> <本机路径> //从手机拉取信息放到本地电脑
adb push <本机路径> <手机路径> //从本地推送信息到手机上去
adb uninstall 包名 //卸载
adb install xxx.apk //安装
adb logcat //查看日志
adb shell pm list packages //查看所有应用

18.测试过程中用到哪些工具?
需求,用例阶段:SVN,测试阶段:bug工具禅道,linux,Xftp6,Xshell 6,mysql数据库,vncviewer,接口测试:postman,soapui,jmeter,中间件:tomcat,jobss,抓包:F12,花瓶,fidder,性能测试:jmeter,loadrunner,badboy

测试技术相关
1、删除安装和覆盖安装的区别?(针对有APP测试经验)
答:覆盖安装只是对现有版本的更新项进行更新安装,不清除用户数据(如果有些升级动作指定要清 除用户数据另当别论),而且覆盖安装是绝大部分用户升级应用的方式,删除
安装相当于是全新的,用户的数据缓存都会被清空。

2、APP测试和web测试有什么区别?
答:流程和功能测试区别不大,主要区别在与:
(1)兼容性测试,web兼容浏览器,APP兼容性测试相对较多:需要兼容不同手机品牌、不同分辨率、不同版本甚至不同操作系统,
(2)APP还需要专项测试:网络测试,中断测试(来电话、来短信、通知类信息、电量不足提醒等)
(3)更新,web测试只要更新服务器端,客户端就会同步更新。而且客户端是可以保证每个用户完全一致;但APP端是不能保证完全一致,除非用户更新客户端如果是APP下更新了服务器端,则需对用户使用的版本进行回归测试。
(4)APP端还需要做升级、卸载测试。
(5)APP还需要考虑界面操作,手势、横竖屏、多点触碰

3、APP常见崩溃原因有哪些?
答:设备原因,APP在不同设备可能表现不一样;宽带限制、网络变化、内存溢出、用户过多、代码错误、第三方应用影响等

4、当开发人员说你提出的缺陷不是bug时,你如何应付?
答:无标准答案,大致方向为:开发认为不是bug原因大致有两种情况,第一需求不明确,这个时候可以需要和产品确认,三方评估是否需要修改,第二种开发认为正常情况不会出现,所以可以忽略,这个时候首先说出是bug的依据,其次说明这个bug用户发现可能带来的不良后果,如果还是说服不了开发再找产品经理和测试负责人一起评估。

5、Web测试中吗,如何判断是前端的bug还是后端的bug?
答:通常利用查看请求进行分析,一般三个方面入手:请求接口、传参、响应
(1)请求接口URL是否正确,如果URL错误,前端bug
(2)传参是否正确,传参错误,前端bug
(3)URL和传参都正确,查看响应是否正确,响应错误,后端bug
(4)根据错误码也可以定位前后端bug

6、H5界面是怎么测试的?
答:主要测试UI、功能、网络、兼容性、易用性、安全性测试

7、Web功能测试关注点有哪些?
答:链接测试、表单测试、搜索测试、cookie和session测试、数据库测试、文件上传测试、浏览器回退、前进按钮、刷新操作等

8、web可用性怎么测试?
答:主要包含两点:
(1)站点整体布局
(2)页面导航直观:站在用户的角度是使用软件,要求操作简单、易理解、简单高效

9、网页突然加载不出来,可能导致的原因有哪些?
答:1.网络断开了;
2.后端页面无法加载;
3.网页被劫持了;
4.DNS无法解析网址;
5.服务器负载过大;
6.代理设置问题;
7.电脑配置太低;
9.CPU,内存被占满;
10.SQL查询数据太多,加载不出来

10、打开浏览器输入网址到页面渲染,响应时间通常可以细分为哪些?
答:从客户端到服务端的请求时间(请求网络传输时间Request);
从服务端返回数据到客户端的时间(响应网络传输时间Response);
页面渲染时间(客户端浏览器加载页面的时间);
处理器的处理时间(应用服务器+数据库服务器处理时间);
在这里插入图片描述
11、从浏览器输入URL到将页面渲染出来,发生了什么?
答:1.首先,在浏览器地址栏中输入URL,先解析URL,检测URL地址是否合法;
2.浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。 若没有,则跳到第3步操作。
浏览器缓存:浏览器会记录DNS一段时间,因此,只是第一个地方解析DNS请求;操作系统缓存:如果在浏览器缓存中不包含这个记录,则会使系统调用操作系统,获取操作系统的记录(保存最近的DNS查询缓存);
路由器缓存:如果上述两个步骤均不能成功获取DNS记录,继续搜索路由器缓存;
ISP缓存:若上述均失败,继续向ISP搜索。
3.在发送http请求前,需要域名解析(DNS解析),解析获取相应的IP地址。
4.浏览器向服务器发起TCP连接,与浏览器建立TCP三次握手。
5.握手成功后,浏览器向服务器发送HTTP请求,请求数据包。
6.服务器处理收到的请求,将数据返回至浏览器。
7.浏览器收到HTTP响应。
8.浏览器解码响应,如果响应可以缓存,则存入缓存。
9.浏览器发送请求获取嵌入在HTML中的资源(HTML,CSS,JavaScript,图片,音乐······),对于未知类型,会弹出对话框。
10.浏览器发送异步请求。
11.页面全部渲染结束。
在这里插入图片描述
12、服务器中一般要监控哪些数据,如何监控的,怎么从监控数据中发现问题?
答:基础监控和应用监控。
基础监控包括机器是否死机,cpu,内存,磁盘使用率等;应用监控包括日志监控、端口监控、进程数监控等。

13、双十一活动当天服务端挂了大概30分钟,工程师抢修之后,马上上线,之后又挂了,请问有哪些原因会造成这个情况?
答:服务器内存不够、服务器超出负载、并发量太大、遇到恶意攻击。

14、你平常会看日志吗, 一般会出现哪些异常(Exception)?
答:常见的几种如下:
NullPointerException - 空指针引用异常
ClassCastException - 类型强制转换异常。
IllegalArgumentException - 传递非法参数异常。
ArithmeticException - 算术运算异常
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException - 下标越界异常
NegativeArraySizeException - 创建一个大小为负数的数组错误异常
NumberFormatException - 数字格式异常
SecurityException - 安全异常
UnsupportedOperationException - 不支持的操作异常

15、说说你对集成测试中自顶向下集成和自底向上集成两个策略的理解,要谈出它们各自的优缺点和主要适应于哪种类型测试?
答:1.自顶向下集成
优点:较早地验证了主要控制和判断点;按深度优先可以首先实现和验证一个完整的软件功能;功能较早证实,带来信心;只需一个驱动,减少驱动器开发的费用;支持故障隔离。
缺点:柱的开发量大;底层验证被推迟;底层组件测试不充分。
适应于产品控制结构比较清晰和稳定;高层接口变化较小;底层接口未定义或经常可能被修改;产口控制组件具有较大的技术风险,需要尽早被验证;希望尽早能看到产品的系统功能行为。
2、自底向上集成
优点:对底层组件行为较早验证;工作最初可以并行集成,比自顶向下效率高;减少了桩的工作量;支持故障隔离。
缺点:驱动的开发工作量大;对高层的验证被推迟,设计上的错误不能被及时发现。
适应于底层接口比较稳定;高层接口变化比较频繁;底层组件较早被完成。

接口&性能&自动化
1.测试接口使用的工具(jimeter,postman,soapui)有哪些区别
Postman,soapui只能用来测试接口,jmeter既可以测接口,也可以测性能

2.get请求和post请求的区别?
答:
(1)get是从服务器上获取的数据,post则是下个服务器传送数据
(2)get的参数在URL中可以看到,post的参数用户看不到
(3)get传送的数据较小,post传送数据量较大
(4)get安全性相对比post低
(5)一般查询类的选择get方式,表单的新增、删除、修改选择使用post(根据以往测试总结)

3.接口测试如何验证返回结果?
答:使用jmeter进行接口测试时,对接口响应的结果进行校验,需要使用的到jmeter的断言功能。断言一个接口的响应结果会根据响应状态码或响应结果汇总的关键字段的值进行判断,校验预期值与实际值是否相同
(1)预期值等于实际值,则测试通过
(2)预期值不等于实际值,则测试不通过

4.请求接口中常见的返回状态码有哪些?
答:
(1)1XX——信息提示:
(2)2XX——成功
(3)3XX——重定向
(4)4XX——客户端错误
(5)5XX——服务器错误

5.请简单说一下你了解的端口及对应的服务?
答: 21:FTP(文件传输协议)
22:SSH
23 :Talnet(远程)服务
25 :SMTP(简单邮件传输协议)
53 :DNS域名服务器
80 :HTTP超文本传输协议
110 :POP3邮件协议3
443:HTTPS
1080:Sockets
1521:Oracle数据库默认端口
3306 :Mysql服务

6.jmeter或者postman接口测试步骤?(我这里以jmeter举例)
答:打开jmeter添加线程组——添加取样器(HTTP请求)——HTTP请求里填写协议、服务器IP、端口号、请求方式、路径、参数——添加监听器(察看结果树)——启动——执行完成后打开察看结果树,在响应数据里可以看到服务器返回结果

7.接口测试中关联是什么含义,如何设置关联?(我这里以jmeter举例)
答:关联就是把上一个接口返回值的部分作为下一个接口的参数,能让接口串联运行
在jmeter中设置关联:
(1)先通过正则表达式或者JSON Extractor把下一个接口需要的信息从上一个接口提取出
(2)添加后置处理器-BeanShell PostProcessor;输入脚本{_setProperty(变量名new,KaTeX parse error: Expected 'EOF', got '}' at position 12: {变量名},true)}̲ (3)设置完成后,其它接口都…{_property(变量名new)}

8.压力测试关注哪些指标?
答:平均响应时间、90%响应时间、吞吐量、错误率、CPU、Memory

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

10.什么是系统瓶颈?
答:系统瓶颈就是软件在一定的并发量、访问量下无法达到用户的需求。
比如说用户需要在10s内完成一个访问,但是每一次都要12s才能完成,这个就是性能瓶颈,有可能是程序本身的问题,也有可能和操作系统、软件相关。

11.你如何识别性能瓶颈?
答:1.硬件上的性能瓶颈:如CPU、内存、磁盘读写等的瓶颈,为服务器硬件瓶颈;
2.应用软件上的性能瓶颈:如服务器操作系统瓶颈(参数配置)、数据库瓶颈(参数配置)、web服务器瓶颈(参数配置)、中间件瓶颈(参数配置)等;
3.应用程序上的性能瓶颈:应用程序上的性能瓶颈,如SQL语句、数据库设计、业务逻辑、算法等等;
4.操作系统上的性能瓶颈:一般指的是Windows、linux等操作系统,如出现物理内存不足时,或虚拟内存设置不合理(虚拟内存设置不合理,会导致虚拟内存的交换率大大降低,从而导致行为的响应时间大大增加,可以认为在操作系统上出现了性能瓶颈);
5.网络设备上的性能瓶颈:一般是防火墙、动态负载均衡器、交换机等设备导致;

12一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?
答:300个用户在一个客户端上,会占用客户机更多的资源,而影响测试的结果。线程之间可能发生干扰,而产生一些异常;300个用户在一个客户端上,需要更大的带宽;IP地址的问题,可能需要使用IP Spoof来绕过服务器对于单一IP地址最大连接数的限制。所有用户在一个客户端上,不必考虑分布式管理的问题。
而用户分布在不同的客户端上,需要考虑使用控制器来整体调配不同客户机上的用户。同时,还需要给予相应的权限配置和防火墙设置。

13.什么是内存泄漏、Http错误率、吞吐率。响应时间分别在web端和移动端是多少?哪些场景可以证明响应超时?
答:内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
HTTP错误率(HTTP error rate) 在选定时间段内,HTTP错误数量与请求数量的比率。
吞吐率(Throughput) 是场景运行过程中服务器每秒的吞吐量。其度量单位是字节,表示每个请求连接在任何给定的每一秒从服务器获得的数据量。
web端
当用户在2秒以内得到响应时,会感觉系统的响应很快;
当用户在2-5秒之间得到响应时,会感觉系统的响应速度还可以;
而当用户在超过8秒后仍然无法得到响应时,会感觉系统糟透了,或者认为系统已经失去响应。
场景:请求超时、页面加载失败

14.常用的元素定位方法?
答:常见的有8种
id值一般是唯一的;
name:根据元素的name属性定位;
tagName:根据元素的标签名定位;
className:根据元素的样式class值定位;
linkText:根据超链接的文本值定位;
partialLinkText:根据超链接的部分文本值定位;
cssSelector:css选择器定位;
xpath:通过元素的路径来定位;

15.简述你所知道的延时等待方式?
答:强制等待:也叫线程等待, 通过线程休眠的方式完成的等待,如等待5秒: Thread sleep(5000),一般情况下不太使用强制等待,主要应用的场景在于不同系统交互的地方。
隐式等待:通过implicitly Wait完成的延时等待,注意这种是针对全局设置的等待,如设置超时时间为10秒,使用了implicitlyWait后,如果第一次没有找到元素,会在10秒之内不断循环去找元素,如果超过10秒还没有找到,则抛出异常,硬式等待比较智能,它可以通过全局配置,但是只能用于元素定位。
显式等待:也称为智能等待,针对指定元素定位指定等待时间,在指定时间范围内进行元素查找,找到元素则直接返回,如果在超时还没有找到元素,则抛出异常,显示等待是 selenium 当中比较灵活的一种等待方式,他的实现原理其实是通过 while 循环不停的尝试需要进行的操作。

16.你所知道的常见接口类型有哪些?
答:HTTP接口:基于超文本传输协议(HyperText Transfer Protocol HTTP)开发的接口,是应用最广泛的网络协议之一,但并不排除没有使用其他协议。基于浏览器/服务器(Brower/Server)的软件系统大多数为HTTP接口;
Web Service接口:系统对外的接口,根据提供的方法引用提供的接口,从而获取数据;
RESTful接口:简称REST,描述了一个架构式的网络系统;

17.常见的HTTP Header及其作用?
答:Accept:用于告诉服务器,客户机支持的数据类型 (例如:Accept:text/html,image/、image/webp,/*);
Accept-Encoding:用于告诉服务器,客户机支持的数据压缩格式;
Accept-Language:客户机语言环境;
Accept-Charset:用于告诉服务器,客户机采用的编码格式;
Connection:告诉服务器,请求完成后,是否保持连接;
Cookie:客户机通过这个头,将Cookie信息带给服务器;
Host:客户机通过这个服务器,想访问的主机名;
Referer:客户机通过这个头告诉服务器,它(客户端)是从哪个资源来访问服务器的(防盗链);
If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间;
User-Agent:客户机通过这个头告诉服务器,客户机的软件环境(操作系统,浏览器型号和版本等);
Date:告诉服务器,当前请求的时间;

18.若客户反馈系统慢,如何查找问题?
答:第一步:查询应用服务器,数据库服务器 CPU使用率,CPU负载,带宽,内存;
第二步:一般是 CPU 过高,且是mysql进程,则进入数据库,首先查询活跃线程数,查询正在执行的sql,顺便也去慢查询日志文件;
第三步:找到问题sql,分析sql,通过explain分析具体问题(一般都是数据库有大量计算操作,大量数据查询返回没有做分页处理);
第四步:检查是否为网络问题。

数据库知识
1、数据库的增、删、查、改操作?
答:增:insert into 表名(列名称)values(列对应的值)
删:delete from 表名 where 列名称=某值
改:update 表名 set 列名称=新值 where 列名称=某值
查:select *from 表明 where 列名称=某值

2、说下左连接和右连接?table1和table2
答:左连接是把符合条件的所有A表内容列出来,B表如果没有内容匹配的用null代替。右连接则相反是把符合条件的所有B表内容列出来,A表如果没有内容匹配用null代替
左连接:select 所需列名称from table1 left join table2 on table1.id=table2.pid
右连接:select所需列名称 from table1 right join table2 on table1.id=table2.pid

3、SQL语句查询销量前五的商品?
答:select top 5 商品名 ,SUM(数量) from 订单表 group by 商品名 order by SUM(数量) DESC

4、一个查询语句只查询到一条记录,但是总在扫描数据库,试分析原因?
答:1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷);
2、没有创建计算列导致查询不优化;
3、查询出的数据量过大(可以采用多次查询或其他方法降低数据量);
4、查询语句需要优化;

5、MySQL常见死锁场景有哪些?
答:2个事务交叉:同一个事务中出现delete,insert操作;
3个insert事务,一个回滚:三个事务的 insert 语句都是insert ignore into t1(a, b)values(“1”, “1”);
多个事务,间隙锁造成死锁:同一个事务中多个update操作导致锁升级(行锁升级为表锁),并发操作时会导致死锁;
解决方式:事务拆分,同一个事物中不要出现锁升级,如果业务需求确实导致有表锁的出现,直接使用悲观锁。

6、主键、外键的作用,索引的优点与不足?
答:主键:是表中的唯一标示键。作用:保证实体的完整性;加快数据库的操作速度;增加新的表记录时,数据库会自动检索新记录的主键值,不允许该值与其他表中记录的主键重复;数据库会按主键值的顺序显示记录,如果没有设定主键,则按输入的顺序显示记录。
外键:是主键的从属,表示了两个表之间的联系。作用:使用外键可以避免冗余。
索引的优点:
1、通过创建唯一性的索引,可以保证表中数据的唯一性;
2、加速数据的检索速度;
3、加快表与表之间的连接;
4、在使用分组与排序数据检索时,可以显著检索分组与排序的时间;
5、在查询的过程中使用优化隐藏器,提供系统性能。
缺点:
1、创建索引需要时间,且随着数据量的增加而增加;
2、索引需要占用物理空间;
3、当对表中数据进行修改时,索引也要动态维护,降低了数据的维护速度。

自动化相关
1.RobotFramework框架的特点:
1:编辑用例简单,可以以robot,txt,tsv或者html的格式编写用例
2:自动生成html格式的测试报告和日志(HtmlTestRunner.py,allure)
3:除了自带的类库外,还有很多的实用的类库
4:可以根据项目的需要自定义一些关键字
5:可以使用GUI的方式运行,可以和SVN或者GIT及Jenkins持续集成

2.pytest框架跟unittest框架的优势跟劣势:
一用例编写规则
使用unittest编写测试用例必须遵循以下规则:
1.必须首先 导入 import unittest
2.测试类必须要继承 unittest.TestCase
3.测试方法必须以test_kai开头
pyest是Python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁高效
使用pytest编写测试用例必须遵循以下规则:
1.测试文件必须以test开头或者_test结尾
2.测试方法需以test开头
3.测试类必须以Test开头
二、前置跟后置
1.unittest提供了setUp/tearDown,每个用例运行前、结束后运行一次。setUpClass和tearDownClass,用例执行前、结束后,只运行一次。
2.pyets 可以在函数前使用@pytest.fixture()装饰器,fixture使用范围可以是:function(函数级别)、class、module(模块级别)、package(包级别)、session(多个测试类可以共用一个session)
优势:
1.fixure命名更加灵活,局限性比较小
2.conftest.py 配置里可以实现数据共享,不需要import就能自动找到一些配置,可供多个py文件调用。
3.scope=“session” 以实现多个.py跨文件使用一个session来完成多个用例
三、断言
1.unittest提供了assertEqual、assertIn、assertTrue、assertFalse等
2.pytest直接在assert 后面接表达式
四、测试报告
1.unittest使用HTMLTestRunnerNew库
2.pytest有pytest-HTML、allure插件。
五、失败重跑
1.unittest无此功能
2.pytest支持
六、参数化
1.unittest需要依赖于ddt库
2.pytest直接使用@pytest.mark.parametrize装饰器

unittes总结
1、unittest是Python自带的单元测试框架,我们可以用其来作为我们自动化测试框架的用例组织执行框架。
2、unittest的流程:写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,我们通过命令行或者unittest.main()执行时,main会调用TextTestRunner中的run来执行,或者我们可以直接通过TextTestRunner来执行用例。
3、一个class继承unittest.TestCase即是一个TestCase,其中以 test 开头的方法在load时被加载为一个真正的TestCase。
4、verbosity参数可以控制执行结果的输出,0 是简单报告、1 是一般报告、2 是详细报告。
5、可以通过addTest和addTests向suite中添加case或suite,可以用TestLoader的loadTestsFrom__()方法。
6、用 setUp()、tearDown()、setUpClass()以及 tearDownClass()可以在用例执行前布置环境,以及在用例执行后清理环境
7、我们可以通过skip,skipIf,skipUnless装饰器跳过某个case,或者用TestCase.skipTest方法。
8、参数中加stream,可以将报告输出到文件:可以用TextTestRunner输出txt报告,

测试用例设计
1、给你一个模块,比如注册模块,你会怎么样设计与执行测试
答:数据——》从哪里来(入口)——》到哪里去(出口)——》数据库(检验数据的正确性)

2、给你一个网站,你如何进行测试?
答:①、查找需求说明、网站设计等相关文档,分析测试需求。
②、制定测试计划,确定测试范围和测试策略,一般包括以下几个部分:
功能性测试、界面测试、性能测试、数据库测试、安全性测试、兼容性测试。
③、设计测试用例:
功能性测试可以包括,但不限于以下几个方面:
a、链接测试。链接是否正确跳转,是否存在空页面和无效页面,是否有不正确的出错信息返回等。提交功能的测试。
b、多媒体元素是否可以正确加载和显示。多语言支持是否能够正确显示选择的语言等。
界面测试可以包括但不限于一下几个方面:
a、页面是否风格统一,美观
b、页面布局是否合理,重点内容和热点内容是否突出
c、控件是否正常使用
d、对于必须但为安装的空间,是否提供自动下载并安装的功能
e、文字检查

3、一个支付功能,设计一下测试用例,列出测试点就可以?(这个随意找个功能设计测试用例)
答:测试点(这里列出的不全,大致方向是这样)
(1)订单付款金额和实付金额验证是否一致
(2)同一支付方式,不同入口的覆盖
(3)支付流程测试(正常支付、调起支付后,取消订单、支付中断继续支付,支付中断结束支付、支付失败、单笔订单支付、购物车打包支付、支付按钮快速点击验证是否提交多次)
(4)支付金额测试(最大金额、最小金额、正常金额、无意义金额、银行卡当日限额、单笔限额、支付账户不足等)
(5)支付方式测试(覆盖所有支付方式、优惠券或折扣支付、正常支付)
(6)退款(使用优惠券退款,退款后优惠券是否回退并有效期内正常使用、正常退款等)
(7)回掉(异步同步同时开启、异步失效、同步失效、异步同步都失效,回掉重发机制时间内恢复、本地订单和第三方订单对比等)
(8)生成订单后,跳转到第三方时修改金额,无法支付成功
(9)通过接口伪造、金额篡改,验证是否可以支付成功

4、给你一个需求设计测试用例:
需求:618活动当天有两款商品需要做促销活动,为提高曝光率,需要弹窗引导
1、活动时间、产品后台可配置
2、每个用只有在首页才能收到弹窗,且只随机弹一个产品弹窗
3、每个产品弹窗只弹一次
4、点击弹窗跳转到商品详情页
5、弹窗只有活动当天才弹
6、产品A首次曝光率占比2/3,产品B首次曝光率占比1/3.
答、测试点(简单列了几个测点方向)
(1)活动开始前进入首页不弹弹窗、活动结束后进入首页不弹弹窗;活动开始时进入首页弹窗引导
(2)验证用户进入首页是否只弹其中一个产品弹窗
(3)验证用户每个产品弹窗是否只弹一次(如果首次弹A,那第二次则弹B,第三次则不弹)
(4)点击弹窗跳转连接是否正确(产品A跳转到A详情页、产品B跳转到B详情页)
(5)账号A已接收到两次弹窗,退出登录B,验证是否还能接收到弹窗,业务逻辑是否正确
(6)验证用户每次接收弹窗,数据库是否有记录生成,生成的数据是否正确
(7)占比需和开发沟通清楚实现逻辑,设置活动时间(设置时间可实施的),根据开发实现逻辑进行 测试,活动结束后SQL语句查询出占比是否正确

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr. G K

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值