软件测试面试题(含答案)

Q:怎样写测试计划和测试用例
    A:简单点,测试计划里应有详细的测试策略和测试方法,合理详尽的资源安排等,至于测试用例,那是依赖于需求(包括功能与非功能需求)是否细化到功能点,是否可测试等。
 
Q:http和https区别,https在请求时额外的过程,https是如何保证数据安全的数据加密传输,是HTTP和HTTPS之间的本质性区别
    A:传统的HTTP协议通信:传统的HTTP报文是直接将报文信息传输到TCP然后TCP再通过TCP套接字发送给目的主机上。HTTPS协议通信:HTTPS是HTTP报文直接将报文信息传输给SSL套接字进行加密,SSL加密后将加密后的报文发送给TCP套接字,然后TCP套接字再将加密后的报文发送给目的主机,目的主机将通过TCP套接字获取加密后的报文给SSL套接字,SSL解密后交给对应进程。
 
Q:做好软件测试的一些关键点
    A:(参考)测试要有计划,而且测试方案要和整个项目计划协调好
 
Q:vim怎么退出
    A:q 不保存直接退出wq 保存后退出q! 强制退出
 
Q:如何查看进程状态?
    A:ps -ef | grep 进程名
 
Q:chown是什么?grep是什么?
    A:chown 改变文件的拥有者和组grep 查找文件里符合条件的字符串
 
Q:不可逆的操作,如何处理,比如删除一个订单这种接口如何测试
    A:关注接口的返回值是否正常关注数据库中的订单表的数据是否被删除关注是否有删除记录表存放相关删除的记录,方便日后可以追溯
 
Q:一条软件缺陷(或者叫Bug)记录都包含了哪些内容?
    A:一条Bug记录最基本应包含:bug编号;bug严重级别,优先级;bug产生的模块;首先要有bug摘要,阐述bug大体的内容;bug对应的版本;bug详细现象描述,包括一些截图、录像....等等;bug出现时的测试环境,产生的条件即对应操作步骤;
 
Q:目前主要的测试用例设计方法是什么?
     A:白盒测试:逻辑覆盖、循环覆盖、基本路径覆盖 黑盒测试:边界值分析法、等价类划分、错误猜测法、因果图法、状态图法、测试大纲法、随机测试、场景法
 
Q:一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?
    A:300个用户在一个客户端上,会占用客户机更多的资源,而影响测试的结果。线程之间可能发生干扰,而产生一些异常 300个用户在一个客户端上,需要更大的带宽。IP地址的问题,可能需要使用IP Spoof来绕过服务器对于单一IP地址最大连接数的限制。所有用户在一个客户端上,不必考虑分布式管理的问题;而用户分布在不同的客户端上,需要考虑使用控制器来整体调配不同客户机上的用户。同时,还需要给予相应的权限配置和防火墙设置。
 
 Q:自动化测试流程是怎么样的:
    A:1、制定测试计划2、分析测试需求3、设计测试用例4、搭建测试环境5、编写测试脚本6、分析测试结果、记录测试问题7、跟踪测试BUG8、自动化脚本的维护
 
Q:SQL的表连接方式有哪些? 
    A:SQL中连接按结果集分为:内连接,外连接,交叉连接内连接:inner join on,两表都满足的组合。内连接分为等值连接,不等连接,自然连接。等值连接:两表中相同的列都会出现在结果集中。自然连接:两表中具体相同列表的列会合并为同一列出现在结果集中。外连接:分为左(外)连接,右(外)连接,全连接左(外)连接:A left (outer) join B,以A表为基础,A表的全部数据,B表有的组合,没有的为。右(外)连接:A right(outer) join B,以B表为基础,B表的全部数据,A表有的组合,没有的位null。全连接:A full (outer) join 两表相同的组合在一起,A表有,B表没有的数据(显示为null),同样B表有,A表没有的显示为null。交叉连接:cross join,就是笛卡尔乘积。
 
Q:元组、列表、字典的区别?
    A:列表list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目。列表中的项目。列表中的项目应该包括在方括号中,这样python就知道你是在指明一个列表。一旦你创建了一个列表,你就可以添加,删除,或者是搜索列表中的项目。由于你可以增加或删除项目,我们说列表是可变的数据类型,即这种类型是可以被改变的。列表是可以嵌套的。元组元祖和列表十分相似,不过元组是不可变的。即你不能修改元组。元组通过圆括号中用逗号分隔的项目定义。元组通常用在使语句或用户定义的函数能够安全的采用一组值的时候,即被使用的元组的值不会改变。元组可以嵌套。字典字典类似于你通过联系人名称查找地址和联系人详细情况的地址簿,即,我们把键(名字)和值(详细情况)联系在一起。注意,键必须是唯一的,就像如果有两个人恰巧同名的话,你无法找到正确的信息。 
 
Q: SQL的查询优化
    A:(1)从表连接的角度优化:尽量使用内连接,因为内连接是两表都满足的行的组合,而外连接是以其中一个表的全部为基准。(2)尽量使用存储过程代替临时写SQL语句:因为存储过程是预先编译好的SQL语句的集合,这样可以减少编译时间。(3)从索引的角度优化:对那些常用的查询字段简历索引,这样查询时值进行索引扫描,不读取数据块。(4)还有一些常用的select优化技巧:(5)A、只查询那些需要访问的字段,来代替select*B、将过滤记录越多的where语句向前移:在一个SQL语句中,如果一个where条件过滤的数据库记录越多,定位越准确,则该where条件越应该前移。
 
Q:测试人员在软件开发过程中的任务是什么?
    A:1、尽可能早的找出系统中的Bug;2、避免软件开发过程中缺陷的出现;3、衡量软件的品质,保证系统的质量;4、关注用户的需求,并保证系统符合用户需求。总的目标是:确保软件的质量。
 
Q:如何测试一个纸杯?
    A:功能度:用水杯装水看漏不漏;水能不能被喝到安全性:杯子有没有毒或细菌可靠性:杯子从不同高度落下的损坏程度可移植性:杯子在不同的地方、温度等环境下是否都可以正常使用兼容性:杯子是否能够容纳果汁、白水、酒精、汽油等易用性:杯子是否烫手、是否有防滑措施、是否方便饮用用户文档:使用手册是否对杯子的用法、限制、使用条件等有详细描述疲劳测试:将杯子盛上水(案例一)放24小时检查泄漏时间和情况;盛上汽油(案例二)放24小时检查泄漏时间和情况等压力测试:用根针并在针上面不断加重量,看压强多大时会穿透
 
Q:在一个Web测试页面上,有一个输入框,一个计数器(count)按钮,用于计算一个文本字符串中字母a出现的个数。请设计一系列测试用例用以测试这个Web页面。
    A:答案链接:http://www.songqinnet.com/article/772
 
Q:如果让你测试一个完全不熟悉的系统,你会怎么办? 
    A:链接:http://www.songqinnet.com/article/1324
 
Q:TCP与UDP的区别?
    A:1、在连接上,TCP是基于连接的,是面向连接的运输层协议,如打电话之前要拨号建立连接,UDP是无连接的,即发送数据之前不需要建立连接。2、在对于系统资源的要求上,TCP较多,UDP较少。3、结构程序方面,TCP的结构较为复杂,而UDP结构较为简单。4、在模式上TCP为流模式,而UDP则是数据报模式。5、TCP能保证数据的正确性和顺序性,而UDP可能丢失且不能保证数据的顺序不改变。
 
Q:访问一个网址会经历哪些流程?
    A:域名解析成IP地址;与目的主机进行TCP连接(三次握手);发送与收取数据(浏览器与目的主机开始HTTP访问过程);与目的主机断开TCP连接(四次挥手);
 
Q:索引的作用,聚集索引与非聚集索引的区别
    A:索引是一个数据库对象,使用索引,可以是数据库程序无须对整个数据进行扫描,就可以在其中找到目标数据,从而提高查找效率。索引的底层采用的是B树。聚集索引:根据记录的key再表中排序数据行。非聚集索引:独立于记录的结构,非聚集所以包含的key,且每个键值项都有指向该简直的数据行的指针。聚集索引与非聚集索引的区别:(1)聚集索引的物理存储按索引排序,非聚集所以的物理存储不按索引排序。(2) 聚集索引插入,更新数据的速度比非聚集索引慢,单查询速度更快。(3) 聚集索引的叶级结点保存的是时间的数据项,而非聚集结点的叶级结点保存的是指向数据项的指针。(4)一个表只能有一个聚集索引(因为只有一种排序方式),但可以有多个非聚集索引。
 
Q:怎样一页一页地查看一个大文件的内容呢?
    A:cat filename.txt | more 通过管道命令和more实现
 
Q:如果完美执行黑盒测试,还需要进行白盒测试吗?
    A:软件的黑盒此时意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试 又叫功能测试或数据驱动测试。黑盒测试主要是为了发现以下几类错误:a. 是否有不正确或遗漏的功能?b. 在接口上,输入是否能正确的接收?能否输出正确的结果?c. 是否有数据结构错误或外部信息(例如数据文件)访问错误?d. 性能上是否能够满足要求?e.是否有初始化或终止性错误?软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期状态一直,因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试主要是相对程序模块进行如下检查:a. 对程序模块的所有独立的执行路径至少测试一遍。b. 对所有的逻辑判定,取‘真’与取‘假’的两种情况都能至少测一遍。c. 在循环的边界和运行的界限内执行循环体。d. 测试内部数据结构的有效性,等等。
 
Q:软件测试各个阶段通常完成什么工作?各个阶段的结果文件是什么?包括什么内容?
    A:单元测试阶段:各独立单元模块在与系统地其他部分相隔离的情况下进行测试,单元测试针对每一个程序模块进行正确性校验,检查各个程序模块是否正确地实现了规定的功能。生成单元测试报告,提交缺陷报告。集成测试阶段:集成测试是在单元测试的基础上,测试在将所有的软件单元按照概要设计规格说明的要求组装成模块、子系统或系统的过程中各部分工作是否达到或实现相应技术指标及要求的活动。该阶段生成集成测试报告,提交缺陷报告。系统测试阶段:将通过确认测试的软件,作为整个给予计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行环境下,对计算机系统进行全面的功能覆盖。该阶段需要提交测试总结和缺陷报告
 
Q:哪些方法可以提高数据库查询效率?
    A:1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num=10 or num=20 可以这样查询: select id from t where num=10 union all select id from t where num=20 5.in 和 not in 也要慎用,否则会导致全表扫描,如: select id from t where num in(1,2,3) 对于连续的数值,能用 between 就不要用 in 了: select id from t where num between 1 and 3 6.下面的查询也将导致全表扫描: select id from t where name like '%abc%' 若要提高效率,可以考虑全文检索
 
Q:你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决?
    A:首先,将问题提交到缺陷管理库里面进行备案。然后,要获取判断的依据和标准:根据需求说明书、产品说明、原型图、设计文档等,确认实际结果是否与计划有不一致的地方,提供缺陷是否确认的直接依据;如果没有文档依据,1)可以根据同行或类似软件的一般特性来说明是否存在不一致的地方,来确认是否是缺陷;2)根据用户的一般使用习惯,来确认是否是缺陷;3)与设计人员、开发人员和客户代表等相关人员探讨,确认是否是缺陷;合理的论述,向测试经理说明自己的判断的理由,等待测试经理做出最终决定,如果仍然存在争议,可以通过公司政策所提供的渠道,向上级反映,并有上级做出决定。
 
Q:1、在搜索引擎中输入汉字就可以解析到对应的域名,请问如何用LoadRunner进行测试?
    A:建立测试计划,确定测试标准和测试范围设计典型场景的测试用例,覆盖常用业务流程和不常用的业务流程等。根据测试用例,开发自动测试脚本和场景:录制测试脚本:新建一个脚本(Web/HTML协议);点击录制按钮,在弹出的对话框的URL中输入”about:blank”;在打开的浏览器中进行正常操作流程后,结束录制;调试脚本并保存,可能要注意到字符集的关联。设置测试场景:针对性能设置测试场景,主要判断在正常情况下,系统的平均事务响应时间是否达标;针对压力负载设置测试场景,主要判断在长时间处于满负荷或者超出系统承载能力的条件下,系统是否会崩溃;执行测试,获取测试结果,分析测试结果。
 
Q:查看当前使用的是哪个数据库
    A:mysql> select database();另外,在下面2个语句的输出里也能看出当前库是哪一个mysql> show tables;mysql> status;
 
Q:应用的闪退通常是什么原因造成的?如果应用闪退,Android 和 iOS 上是分别怎么抓取日志的?
    A:一般闪退原因如下:1.内存超载2.后端服务或动态链接库未找到3.应用初始化时无法正确读取到用户数据。4.系统兼容问题。日志抓取的话,iOS:1.通过iTunes Connect(Manage Your Applications - View Details - Crash Reports)获取用户的crash日志2.通过Xcode从你的设备上获得崩溃日志3.自己在程序中添加崩溃捕捉代码,如果应用集成第三方SDK,如百度统计Android:1.通过集成第三方SDK,如百度统计、友盟统计等2、发版时使用加固工具,他们也会收集错误日志,如360加固3、在程序中添加程序异常崩溃的捕捉代码,保存到本地文件中
 
Q:什么时候会用到使用Fiddler
    A:  1)做安全测试,检测敏感信息是否加密,拦截篡改数据;  2)当测试时发现缺陷,用fiddler抓包,定位该问题是前端还是后台的问题;  3)模拟弱网环境。
 
Q:给你一个网站,你如何测试? 
    A:首先,查找需求说明、网站设计等相关文档,分析测试需求。制定测试计划,确定测试范围和测试策略,一般包括以下几个部分:功能性测试;界面测试;性能测试;数据库测试;安全性测试;兼容性测试设计测试用例: 功能性测试可以包括,但不限于以下几个方面:链接测试。链接是否正确跳转,是否存在空页面和无效页面,是否有不正确的出错信息返回。提交功能的测试。多媒体元素是否可以正确加载和显示。多语言支持是否能够正确显示选择的语言等。 界面测试可以包括但不限于一下几个方面:页面是否风格统一,美观页面布局是否合理,重点内容和热点内容是否突出控件是否正常使用对于必须但未安装的控件,是否提供自动下载并安装的功能文字检查性能测试一般从以下两个方面考虑:压力测试;负载测试;强度测试数据库测试要具体决定是否需要开展。数据库一般需要考虑连结性,对数据的存取操作,数据内容的验证等方面。安全性测试:基本的登录功能的检查是否存在溢出错误,导致系统崩溃或者权限泄露相关开发语言的常见安全性问题检查,例如SQL注入等如果需要高级的安全性测试,确定获得专业安全公司的帮助,外包测试,或者获取支持兼容性测试,根据需求说明的内容,确定支持的平台组合:浏览器的兼容性;操作系统的兼容性;软件平台的兼容性;数据库的兼容性开展测试,并记录缺陷。合理的安排调整测试进度,提前获取测试所需的资源,建立管理体系(例如,需求变更、风险、配置、测试文档、缺陷报告、人力资源等内容)。定期评审,对测试进行评估和总结,调整测试的内容。
 
Q:软件测试各个阶段通常完成什么工作?各个阶段的结果文件是什么?包括什么内容?
    A:单元测试阶段:各独立单元模块在与系统地其他部分相隔离的情况下进行测试,单元测试针对每一个程序模块进行正确性校验,检查各个程序模块是否正确地实现了规定的功能。生成单元测试报告,提交缺陷报告。集成测试阶段:集成测试是在单元测试的基础上,测试在将所有的软件单元按照概要设计规格说明的要求组装成模块、子系统或系统的过程中各部分工作是否达到或实现相应技术指标及要求的活动。该阶段生成集成测试报告,提交缺陷报告。系统测试阶段:将通过确认测试的软件,作为整个给予计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行环境下,对计算机系统进行全面的功能覆盖。该阶段需要提交测试总结和缺陷报告。
 
Q:测试人员在软件开发过程中的任务是什么?
    A:a. 参与需求分析;b. 编写测试用例;c. 寻找Bug;d. 避免软件开发过程中的缺陷;e. 衡量软件的品质;f. 关注用户的需求。总的目标:确保软件质量。
 
Q:软件配置管理的作用?软件配置包括什么?
    A:软件配置管理(Software Configuration Management,SCM)是一种标识、组织和控制修改的技术。软件配置管理应用于整个软件工程过程。在软件建立时变更是不可避免的,而变更加剧了项目中软件开发者之间的混乱。SCM活动的目标就是为了标识变更、控制变更、确保变更正确实现并向其他有关人员报告变更。从某种角度讲,SCM是一种标识、组织和控制修改的技术,目的是使错误降为最小并最有效地提高生产效率。软件配置包括如下内容:配置项识别、工作空间管理、版本控制、变更控制、状态报告、配置审计
 
Q:软件测试各个阶段通常完成什么工作?各个阶段的结果文件是什么?包括什么内容?
    A:单元测试阶段:各独立单元模块在与系统地其他部分相隔离的情况下进行测试,单元测试针对每一个程序模块进行正确性校验,检查各个程序模块是否正确地实现了规定的功能。生成单元测试报告,提交缺陷报告。集成测试阶段:集成测试是在单元测试的基础上,测试在将所有的软件单元按照概要设计规格说明的要求组装成模块、子系统或系统的过程中各部分工作是否达到或实现相应技术指标及要求的活动。该阶段生成集成测试报告,提交缺陷报告。系统测试阶段:将通过确认测试的软件,作为整个给予计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行环境下,对计算机系统进行全面的功能覆盖。该阶段需要提交测试总结和缺陷报告。
 
Q:开发人员修复缺陷后,如何保证不影响其他功能 
    A: Bug的修复以及新功能的添加都有可能对版本造成一些影响,为了避免,在新版本发布以后,首先会对新版本做一个基础的流程测试也叫做冒烟测试,如果测试基本流程都顺利通过没有任何问题,那么测试人员可以继续进行详细的测试,否则就将冒烟测试中出现 的问题以及问题有可能出现的原因反馈给开发人员,由开发人员修正后再次发版,进行测试。这 是一个迭代的过程。
 
Q:发现问题后你是如何判断其是否是BUG,你是如何提交的、
    A: 测试用例是经过评审组严格的评审,完全按照客户的需求规格说明书作为最终依据来评审的,如果测试过程中,测试结果与实际结果不符就很可能是Bug,如果一些比较明显的问题就直接录入缺陷管理系统,如果是一些边界问题不容易确定的,可以通过和开发人员甚至是设计人员等进行沟通最后得出一个结果究竟是否是Bug,如果是Bug就录入,如果是一个需要增加的新功能等,可以录入缺陷管理系统,类型为新需求
 
Q:软件的安全性应从哪几个方面去测试?
    A:软件安全性测试包括程序、数据库安全性测试。根据系统安全指标不同测试策略也不同。 用户认证安全的测试要考虑问题: 明确区分系统中不同用户权限 、系统中会不会出现用户冲突 、系统会不会因用户的权限的改变造成混乱 、用户登陆密码是否是可见、可复制 、是否可以通过绝对途径登陆系统(拷贝用户登陆后的链接直接进入系统)、用户退出系统后是否删除了所有鉴权标记,是否可以使用后退键而不通过输入口令进入 系统 、系统网络安全的测试要考虑问题 、测试采取的防护措施是否正确装配好,有关系统的补丁是否打上 、模拟非授权攻击,看防护系统是否坚固 、采用成熟的网络漏洞检查工具检查系统相关漏洞(即用最专业的黑客攻击工具攻击试一下,现在最常用的是 NBSI 系列和 IPhacker IP ) 、采用各种木马检查工具检查系统木马情况 、采用各种防外挂工具检查系统各组程序的外挂漏洞数据库安全考虑问题: 系统数据是否机密(比如对银行系统,这一点就特别重要,一般的网站就没有太高要求)、系统数据的完整性(我刚刚结束的企业实名核查服务系统中就曾存在数据 的不完整,对于这个系统的功能实现有了障碍) 、系统数据可管理性 、系统数据的独立性 、系统数据可备份和恢复能力(数据备份是否完整,可否恢复,恢复是否可以完整)
 
Q:什么是测试用例 什么是测试脚本 两者的关系是什么?
    A:用例:未实施测试而编制的一组测试输入、执行条件、各种环境设置以及预期结果以及期望结果的一个特定的集合。脚本:测试脚本是为了进行自动化测试而编写的脚本。测试脚本的编写必须对应相应的测试用例
 
Q:测试结束的标准?
    A:(1)模块测试用例执行完毕,覆盖了全部软件需求(2)缺陷收敛趋势符合质量要求(3)缺陷修复率达到产品设计人员的需求(4)达到预先的缺陷度量原则(缺陷密度值达到客户的要求)
 
Q:软件质量保证体系是什么 国家标准中与质量保证管理相关的几个标准是什么?他们的编号和全称是什么?
    A:SQA由一套软件工程过程和方法组成,以保证(软件的)质量。SQA贯穿整个软件开发过程,(它)应包括需求文档评审、代码控制、代码评审、变更管理、配置管理、版本管理和软件测试。软件质量保证(SQA-Software Quality Assurance)是建立一套有计划,有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。软件质量保证的目的是使软件过程对于管理人员来说是可见的。它通过对软件产品和活动进行评审和审计来验证软件是合乎标准的。软件质量保证组在项目开始时就一起参与建立计划、标准和过程。这些将使软件项目满足机构方针的要求。
 
Q:软件产品质量特性是什么?
    A:功能性:适应性、准确性、互操作性、依从性、安全性。可靠性:成熟性、容错性、易恢复性。可使用性:易理解性、易学习性、易操作性。效率:时间特性、资源特性。可维护性:易分析性、易变更性、稳定性、易测试性。可移植性: 适应性、易安装性、遵循性、易替换性
 
Q:软件测试的目的是什么
    A:测试是程序的执行过程,目的在于发现错误一个成功的测试用例在于发现至今未发现的错误一个成功的测试是发现了至今未发现的错误的测试确保产品完成了它所承诺或公布的功能,并且用户可以访问到的功能都有明确的书面说明。确保产品满足性能和效率的要求确保产品是健壮的和适应用户环境的
 
Q:什么时候会用到使用Fiddler
    A: 1)做安全测试,检测敏感信息是否加密,拦截篡改数据; 2)当测试时发现缺陷,用fiddler抓包,定位该问题是前端还是后台的问题; 3)模拟弱网环境。
 
Q:接口测试用了哪些工具?
    A:http 抓包工具 fiddler charles postmanhttp接口功能测试工具 postmanhttp接口性能测试工具 jemterwebsevice接口 soapui
 
Q:接口文档包含哪些内容?
    A:1. 接口的协议(http https),协议的版本2. 接口的功能3. 请求方法:请求方法,get和post4. 请求参数和参数的说明5. 响应状态码,数据和格式6. 接口的请求地址(服务器IP+端口+绝对路径)
 
Q:web service和http接口的区别在于:
    A:1.接口中实现的方法和要求参数一目了然。2.不用担心大小写问题。3.不用担心中文编码 问题。4.代码中不用多次声明认证(账号,密码)参数。5.传递参数可以为数组,对象等
 
Q:如何提高selenium脚本的执行速度?
    A:减少操作步骤,如经过三四步才能打开我们要测试的页面的话,我们就可以直接通过网址来打开,减少不必要的操作。中断页面加载,如果页面加载的内容过多,我们可以查看一下加载慢的原因,如果加载的内容不影响我们测试,就设置超时时间,中断页面加载。在设置等待时间的时候,可以sleep固定的时间,也可以检测某个元素出现后中断等待也可以提高速度。配置testNG实现多线程。在编写测试用例的时候,一定要实现松耦合,然后在服务器允许的情况下,尽量设置多线程运行,提高执行速度。
 
Q: 用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?
    A:代码层面ltime.sleep( )ldriver.implicitly_wait(30)l多用 try 捕捉,处理异常分析不稳定的原因,然后有针对性的去解决问题l网速问题:有的时候网页加载的比较慢,在程序执行的时候要操作的元素没有显示出来。这种情况比较常见,运行一次网速好的时候通过了,再运行一次,页面没有打开,就不通过了。为了提高稳定性,我们只能牺牲运行时间了,在经常检测失败的元素前加上等待时间,等要操作的元素出现之后再执行下面的操作lSelelnium的原因:Selenium1.0和2.0还是有区别的,有些儿函数在2.0下运行确实有时而有效,时面无效多线程的时候,测试用例间相互影响。虽然多线程的时候运行速度比较快,但是如果用例之间的耦合性没有设计好,也会影响的,如果用例A先于用例B执行的时候,就会影响到用例B;反之则没有问题。这种情况,如果你的自动化测试工程打算多线程的时候,提前就要把测试用例测试的耦合度比较松,尽量没有任何关系,因为多线程的执行顺序是不受控制的
 
Q:什么是page object设计模式?
    A:相似功能地方,代码基本都是一样的,界面元素换个查找方式,把原来的使用 xpath方式,改为使用 id 查找,需要对每个用例脚本都要改,虽然几个用例看不出什么工作量,但是重复findElement的代码,已经让我们感到了代码的笨重。如果某些定位发生了改变,我们就得贯穿整个测试代码进行调整元素定位,这样就会导致我们的脚本在后期,难以维护。因此通过Page Object Model我们可以创建更加健壮代码,并减少或者消除重复的测试代码,从而也能够提高代码的可读性,减少编写脚本的工作量。Page Object Model的实现,就是通过分离测试对象和测试脚本的抽象来实现的。
 
Q:cookies 机制和 session 机制的区别
    A:cookies 数据保存在客户端,session 数据保存在服务器端;cookies 可以减轻服务器压力,但是不安全,容易进行 cookies 欺骗;session 较安全,但占用服务器资源
 
Q:HTTP 请求报文与响应报文格式
    A:请求报文包含三部分:a、请求行:包含请求方法、URI、HTTP 版本信息b、请求头部(headers)字段c、请求内容实体(body)响应报文包含三部分:a、状态行:包含 HTTP 版本、状态码、状态码的原因短语b、响应头部(headers)字段c、响应内容(body)实体
 
Q:HTTPS 和 HTTP 的区别主要如下:
    A:总的来说: HTTPS=SSL+HTTP1、https 协议需要到 ca 申请证书,一般免费证书较少,因而需要一定费用。2、http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl 加密传输协议。3、http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。(这个只是默认端口不一样,实际上端口是可以改的)4、http 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。
 
Q:HTTP 状态码 2xx,3xx,4xx,5xx 分别是什么意思?
    A: 200 请求已成功,请求所希望的响应头或数据体将随此响应返回。·  201 请求已经被实现,而且有一个新的资源已经依据请求的需要而建立,且其 URI 已经随 Location 头信息返回·  202 服务器已接受请求,但尚未处理·  301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。·  302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。·  303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。·  304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。·  305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。·  307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。·  401 当前请求需要用户验证。如果当前请求已经包含了 Authorization证书,那么 401 响应代表着服务器验证已经拒绝了那些证书·  403 服务器已经理解请求,但是拒绝执行它。与 401 响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交·  404 请求失败,请求所希望得到的资源未被在服务器上发现·  500 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。·  501 服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。·  502 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。·  503 由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。
 
Q:请分别说明Int和Integer的区别
    A:Integer是int提供的封装类,而int是Java的基本数据类型;Integer默认值是null,而int默认值是0;声明为Integer的变量需要实例化,而声明为int的变量不需要实例化;Integer是对象,用一个引用指向这个对象,而int是基本类型,直接存储数值。
 
Q:selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?
    A:1. 添加元素智能等待时间 driver.implicitly_wait(30)2. try方式进行id,name,clas,xpath,css selector不同方式进行定位,如果第一种失败可以自动尝试第二种
 
Q:http协议中,说说协议的具体组成?json库的使用,json字符串和json对象的转换?
    A:http请求由3部分构成:请求方法 和 URI及使用的协议 请求头 请求正文,请求方法常见的有GET和POSTHTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文转化有几种方法:使用最原始的for循环自己拼装组合使用浏览器自带的JSON对象,缺点是兼容性不好,对于ie8以下的版本不支持。var userinfo = { name: "张三", age: 1, classname: "一年级",friends:["N1","N2","N3"] }; //Json 对象转换为json字符串 var s =JSON.stringify(userinfo)引用json2.js ,使用JSON对象转换,兼容所有浏览器var userinfo = { name: "张三", age: 1, classname: "一年级",friends:["N1","N2","N3"] }; //Json 对象转换为json字符串 var s =JSON.stringify(userinfo)
 
Q:请你说一下深copy浅copy
    A:浅拷贝是增加了一个指针,指向原来已经存在的内存。而深拷贝是增加了一个指针,并新开辟了一块空间让指针指向这块新开辟的空间。浅拷贝在多个对象指向一块空间的时候,释放一个空间会导致其他对象所使用的空间也被释放了,再次释放便会出现错误。
 
Q:请你说一下动态内存分配
    A:在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。
 
Q:接口测试和单元测试用什么区别
    A:接口测试不同于单元测试。单元测试是整个系统的代码逻辑进行测试,而接口测试时站在客户的角度进行全面的检查,金子塔模型中,接口测试位于单元测试之上。接口测试可以理解为一种灰盒测试
 
Q:接口测试和UI功能测试有什么区别,你觉得两者如何保证一个软件的质量
    A:接口测试和UI测试这两块其实是有一部分是重叠的,UI测试是通过前端写的界面,来调用接口,而接口测试是直接调接口。所以排除前端的处理的逻辑和调用的正确性,在理论上接口测试是可以覆盖所有的UI测试。但实际过程中,如果只是在接口层覆盖所有的业务流,在UI上只测试前端的逻辑,最终的结果可能会是忽视很多原有的功能点,导致了UI测试的不充分。所以存在多人分工且时间充分的时候可以尝试接口去做业务流的全覆盖,否则不要轻易尝试。
 
Q:依赖于第三方数据的接口如何进行测试
    A:可以使用SoapUI等工具直接调用第三方数据接口的webservice,通过返回值来查看第三方数据的接口是否调用正常。也可以利用一些MOCK的工具来模拟第三方的数据返回,最大限度的降低对第三方数据接口的依赖
 
Q:TCP/UDO有什么区别
    A:TCP:可靠,面向连接,发送大量数据UDP:不要靠,非连接,发送小量数据
 
Q:你怎么调用支付接口的
    A:以调用微信支付接口为例:微信支付需要先配置好,我们是配置好了appid和key和密钥等(项目经理已经申请好了)测试时一般把商品价格修改为0.1,测试的时候主要是联调,测试我们对微信支付接口返回的情况是否正确处理
 
Q:接口的性能怎么测试?
    A:我们用Jmeter进行接口的性能测试,性能测试主要测试的接口有(登录发帖加入房间等自己的项目接口),首先分析接口的性能需求,并转为性能指标值,用Jmeter工具模拟HTTP请求,然后用线程组模拟用户并发,收集性能指标值(性能指标值:TPS响应时间并发用户数事务成功率),找出性能拐点,验证后台接口是否稳定
 
Q:进程和线程关系及区别
    A:cpu是以进程处理的,多核是在处理多个进程或者线程。进程在资源管理器里是1个独立的内存单位,但线程是共享内存的,线程不能单独执行,需要依赖于进程,应用进程可以包含多个线程进程是CPU进行工作的基本单位,而线程则是进程组成的基本单元,一个进程中至少包含一个线程,而同一时间段一个CPU只能对一个进程进行操作性能测试中,使用进程模拟负载的资源开销相对较大,每个虚拟用户会使用一个单独的mmdrv.exe来完成负载的实现,这样做用户之间会相互独立,不互相影响。使用线程方式,那么所有用户都是在一个mmdrv.exe上模拟,因此使用线程会存在不稳定的情况,导致用户脚本执行错误
 
Q:元素的定位用的是什么方法?
    A:Css/xpath
 
Q:App测试中ios和Android有哪些区别呢?
    A:1.Android长按home键呼出应用列表和切换应用,然后右滑则终止应用;2.多分辨率测试,Android端20多种,ios较少;3.手机操作系统,Android较多,ios较少且不能降级,只能单向升级;新的ios系统中的资源库不能完全兼容低版本中的ios系统中的应用,低版本ios系统中的应用调用了新的资源库,会直接导致闪退(Crash);4.操作习惯:Android,Back键是否被重写,测试点击Back键后的反馈是否正确;应用数据从内存移动到SD卡后能否正常运行等;5.push 测试:Android:点击home键,程序后台运行时,此时接收到push,点击后唤醒应用,此时是否可以正确跳转;ios,点击home键关闭程序和屏幕锁屏的情况(红点的显示);6.安装卸载测试:Android的下载和安装的平台和工具和渠道比较多,ios主要有 app store,iTunes和testflight下载;7.升级测试:可以被升级的必要条件:新旧版本具有相同的签名;新旧版本具有相同的包名;有一个标示符区分新旧版本(如版本号),对于Android若有内置的应用需检查升级之后内置文件是否匹配(如内置的输入法)
 
Q:瀑布模型和螺旋模型的主要区别是什么
    A:瀑布模型有六个阶段:计划,需求分析,设计,编码,测试,运行维护.同时测试阶段比较集中,是一种线性组织形式螺旋模型有四个阶段:计划,风险分析,实施工程,评审.它将瀑布模型和原型模型结合起来,呈螺旋周期性组织形式 
 
Q:软件的安全性应从哪几个方面去测试
    A:安全性测试,这里的安全性主要包括了两部分:数据的安全性和操作的安全性。核实只有规格规定的数据才可以访问系统,其他不符合规格的数据不能够访问系统;核实只有规格规定的操作权限才可以访问系统,其他不符合规格的操作权限不能够访问系统用户认证安全的测试要考虑问题:1. 明确区分系统中不同用户权限2. 系统中会不会出现用户冲突3. 系统会不会因用户的权限的改变造成混乱4. 用户登陆密码是否是可见、可复制5. 是否可以通过绝对途径登陆系统(拷贝用户登陆后的链接直接进入系统)6. 用户推出系统后是否删除了所有鉴权标记,是否可以使用后退键而不通过输入口令进入系统系统网络安全的测试要考虑问题1. 测试采取的防护措施是否正确装配好,有关系统的补丁是否打上2. 模拟非授权攻击,看防护系统是否坚固3. 采用成熟的网络漏洞检查工具检查系统相关漏洞(即用最专业的黑客攻击工具攻击试一下,现在最常用的是 NBSI 系列和 IPhackerIP )4. 采用各种木马检查工具检查系统木马情况5. 采用各种防外挂工具检查系统各组程序的客外挂漏洞数据库安全考虑问题:1. 系统数据是否机密(比如对银行系统,这一点就特别重要,一般的网站就没有太高要求)2. 系统数据的完整性(我刚刚结束的企业实名核查服务系统中就曾存在数据的不完整,对于这个系统的功能实现有了障碍)3. 系统数据可管理性4. 系统数据的独立性5. 系统数据可备份和恢复能力(数据备份是否完整,可否恢复,恢复是否可以完整)
 
Q:面向对象的测试用例设计有几种方法如何实现
    A:面向对象的开发模型突破了传统的瀑布模型,将开发分为面向对象分析(OOA)面向对象设计(OOD)和面向对象编程(OOP)三个阶段。针对这种开发模型,结合传统的测试步骤的划分,我们把面向对象的软件测试分为:面向对象分析的测试、面向对象设计的测试、面向对象编程的测试、面向对象单元测试、面向对象集成测试、面向对象确认和系统测试。建议是一种整个软件开发过程中不断测试的测试模型,使开发阶段的测试与编码完成后的单元测试、集成测试、系统测试成为一个整体。
 
Q:接口测试中,假如开发提供的文档不全你怎么测?
    A:1.接口测试需要根据接口文档进行测试,如果开发文档不全,我会要求开发提供完整的开发文档;当然时间如果不够,我会拉开发一起讨论接口的内容和参数传递,然后设计接口测试点和测试用例,给开发评审,最后依据评审后的用例执行;2.可以用fiddler和charles等抓包工具抓包,把参数值拿到以后进行测试用例设计,再跟开发评审通过后执行3.直接看开发的源代码,了解参数传递后进行接口测试。
 
Q:结构化系统测试和功能性系统测试分别采用了哪些方法和技术
    A:结构化系统测试技术:用于验证所开发的系统及程序的运行情况。目标是要确保产品设计在结构.上合理,功能上正确。为确定实现的配置及其各功能共同作用以完成特定任务提供了一种机制。结构化测试技术由以下几种:压力测试:确定系统以期望的容量执行。执行测试:系统能达到期望的熟练性。恢复测试:系统失效之后可以恢复到可操作状态。操作测试:系统以正常操作状态执行。一致性测试:系统的开发与标准和规程相一致。安全性测试:根据组织的重要性对系统进行保护。功能性系统测试用于确保系统需求与定义都得到了满足。该过程通常包含创建用于评价应用程序正确性的测试条件。用于执行功能测试的几种测试技术包括:需求测试:系统按制定方式执行。回归测试:验证系统中没有改变的部分仍能正确运行。错误处理测试:错误可以得到防止或检测,并被修复。人工支持测试:人机交互有效。系统间测试:数据可以正确地在系统间传递。控制测试:将系统风险控制降低到可以接受的级别。平行测试:发现原系统与新系统之间的意外差异。
 
Q:测试用例设计的原则是什么
    A:充分注意测试中的群集现象。经验表明,测试后程序中残存的错误数目与该程序中已发现的错误数目成正比。严格执行测试计划,排除测试的随意性。应当对每一个测试结果做全面检查。妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。
 
Q:测试问题的严重性分为几级 如何区分
    A:( 1 )致命错误包括:由于程序所引起的死机, 非法退出、死循环、数据库发生死锁、因错误操作导致的程序中断、功能错误、与数据库连接错误、数据通讯错误( 2 )严重错误包括:规定的功能没有实现或不完整或产生错误结果;设计不合理造成性能低下,影响系统的运营;是系统不稳定或破坏数据。( 3 )一般错误包括:通常指不影响业务的功能使用。如操作界面错误;打印内容、格式错误;简单的输入限制未放在前台进行控制;删除错作为给出提示;数据库表中有过多的空字段等。( 4 )轻微错误包括:通常指界面的拼写错误或用户使用不方便等小问题或需要完善的问题。如耗比较长的操作为给出提示;可输入和只读区没有明显区分。( 5 )改进建议改进建议一般只软件中值得改良的地方。
 
Q:简述什么是静态测试、动态测试
    A:静态测试是不运行程序本身而寻找程序代码中可能存在的错误或评估程序代码的过程。  动态测试是实际运行被测程序,输入相应的测试实例,检查运行结果与预期结果的差异,判定执行结果是否符合要求,从而检验程序的正确性、可靠性和有效性,并分析系统运行效率和健壮性等性能。
 
Q:软件测试分为黑盒和白盒,分别适合什么情况? 
    A:软件测试方法一般分为两种:白盒测试与黑盒测试。白盒测试又称为结构测试、逻辑驱动测试或基于程序本身的测试,它着重于程序的内部结构及算法,通常不关心功能与性能指标;黑盒测试又被称为功能测试、数据驱动测试或基于规格说明的测试,它实际上是站在最终用户的立场,检验输入输出信息及系统性能指标是否符合规格说明书中有关功能需求及性能需求的规定。
 
Q:多个 API 连续调用的测试用例设计难点是什么?你是如何解决的?
单个 API 测试并不难,难的是多个 API 的连续调用,并且后一个 API 的参数值使用的是前一个 API 调用的返回结果,这就要求多个 API 调用之间可以方便地进行参数传递。一个最典型的场景就是,前一个 API 调用会返回一个有效的 token,后一个 API 调用需要带着这个 token 才能调用成功。
为了解决这个问题,一般来讲有三种处理方法:
第一种方法是,手工复制前一个 API 返回结果中的某个值,然后粘贴给后一个 API 作为输入参数。当然,这是最基本的方法,但是效率太低,而且无法实现自动化。
第二种方法是,使用基于代码的 API 测试框架。由于此时所有的测试逻辑都是通过代码来实现的,因此可以很容易地实现 API 之间的参数传递。
第三种方法是,借助于类似 HttpRunner 之类的已有 API 测试框架。此类框架可以通过关键字,很方便地将前一个 API 的返回值中的某个值传递给下一个 API 作为输入参数。
 
Q:软件测试的目的与原则
软件测试的目的与原则
软件测试的目的: 
(1) 测试是为了发现程序中的错误而执行程序的过程;
(2) 好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;
(3) 成功的测试是发现了至今为止尚未发现的错误的
软件测试的原则: 
1)所有的测试都应追溯到用户需求。2)应尽早地和不断地进行软件测试 
3)在有限的时间和资源下进行测试 5)充分关注测试中的集群现象。
6)程序员应避免检查自己的程序。 7)尽量避免测试的随意性
 
 
Q:如何处理下拉菜单?
如何处理下拉菜单?在Selenium中有一个叫Select的类,这个类支持对下拉菜单进行操作。使用方法如下: 1.定位元素 2.把定位的元素转化成Select对象。 sel = Select(定位的元素对象) 3.通过下标或者值或者文本选中下拉框。 sel.select_by_index(index); sel.select_by_value(value); sel.select_by_visible_text(text);
 
 
Q:试述软件的概念和特点?软件复用的含义?构件包括哪些?软件是计算机系统中与硬件相互依存的另一部分,与计算机系统操作有关的计算机程序、规程、规则,以及可能有的文件、文档及数据。 软件复用(SoftWareReuse)是将已有软件的各种有关知识用于建立新的软件,以缩减软件开发和维护的花费。软件复用是提高软件生产力和质量的一种重要技术。早期的软件复用主要是代码级复用,被复用的知识专指程序,后来扩大到包括领域知识、开发经验、设计决定、体系结构、需求、设计、代码和文档等一切有关方面。 可以被复用的软件成分一般称作可复用构件 构件是系统中实际存在的可更换部分,它实现特定的功能,符合一套接口标准并实现一组接口。构件代表系统中的一部分物理实施,包括软件代码(源代码、二进制代码或可执行代码)或其等价物(如脚本或命令文件)。
 
Q:自动化中有哪三类等待?他们有什么特点?1.线程等待(强制等待)如time.sleep(2):线程强制休眠2秒钟,2秒过后,再执行后续的代码。建议少用。 2.imlicitlyWait(隐式等待)会在指定的时间范围内不断的查找元素,直到找到元素或超时,特点是必须等待整个页面加载完成。 3.WebDriverWait(显式等待)通常是我们自定义的一个函数代码,这段代码用来等待某个元素加载完成,再继续执行后续的代码
 
 
Q:关闭浏览器中quit和close的区别简单来说,两个都可以实现退出浏览器session功能,close是关闭你当前聚焦的tab页面,而quit是关闭全部浏览器tab页面,并退出浏览器session。知道这两个区别,我们就知道quit一般用在结束测试之前的操作,close用在执行用例过程中关闭某一个页面的操作。
 
 
Q:回归测试的含义是指对软件的新版本进行测试时,重复执行上一个版本测试时的用例,比如在 1.0 版本中,有一个 bug,到了 2.0 版本中,再重新测试 1.0 中这个 bug
 
 
Q:常见的安全性测试:⑴用户验证:登录密码验证、IP 地址访问限制等 用户超时:登录超过 30 分钟,重新登录(安全设置,cookie 过期时间 30 分钟) ⑵用户权限管理:验证低级别用户是否具有了高级别用户的权限,各级别用户权限都得到了实现。 ⑶系统数据的保护:对例如系统文件、用户密码文件等进行隐藏、密码验证、内容加密、备份。
 
 
Q:你会封装自动化测试框架吗?
可以,自动化框架主要的核心框架就是分层+PO模式:分别为:基础封装层BasePage,PO页面对象层,TestCase测试用例层。然后再加上日志处理模块,ini配置文件读取模块,unittest+ddt数据驱动模块,jenkins持续集成模式组成。
 
Q:如果一个元素无法定位,你一般会考虑哪些方面的原因?1.页面加载元素过慢,加等待时间 2.页面有frame框架页,需要先跳转入frame框架再定位 3.可能该元素是动态元素,定位方式要优化,可以使用部分元素定位或通过父节点或兄弟节点定位。 4.可能识别了元素,但是不能操作,比如元素不可用,不可写等。需要使用js先把前置的操作完成
 
 
Q:什么是PO模式,为什么要使用它PO是Page Object 模式的简称,它是一种设计思想,意思是,把一个页面,当做一个对象,页面的元素和元素之间操作方法就是页面对象的属性和行为,PO模式一般使用三层架构,分别为:基础封装层BasePage,PO页面对象层,TestCase测试用例层。
 
 
Q:测试 v 模型优缺点
优点:包含了底层测试(单元测试)和高层测试(系统测试);清楚的标识了开发和测试的各个  阶段:自上而下逐步求精,每个阶段分工明确,便于整体项目的把控。
缺点:自上而下的顺序导致了,测试工作在编码之后,就导致错误不能及时的进行修改;实际工作中,需求经常变化,导致v模型步骤,反复执行,返工量很大,灵活度较低。改良:每个步骤都可以进行小的选代工作。
 
 
Q:如何处理多窗口?这个多窗口之间跳转处理,我们在项目中也经常遇到。就是,当你点击一个链接,这个链接会在一个新的tab打开,然后你接下来要在新tab打开的页面查找元素, 1.我们在点击链接前使用driver.current_window_handle获得当前窗口句柄。 2.再点击链接。点击后通过driver.window_handles获得所有窗口的句柄, 3.然后再循环找到新窗口的句柄,然后再通过driver.switch_to.window()方法跳转到新的窗口。
 
Q:需求的标准是什么?标准的需求应该包含以下信息: 文档版本信息:包含文档版本、作者、完成日期,如果是修订版需要加上修订记录(包括版本号、修订者、修订日期、修订内容) 目录:目录结构要清晰,不同级别的标题要区分开字号。  产品架构:一般包括功能架构和信息架构。可根据项目性质来确定 角色定义:产品角色描述,如电商类平台包含的角色有:游客、注册供应商、注册采购商、认证供应商、认证采购商、普通管理员、超级管理员等 功能摘要:通过列出一级功能->二级功能,不需要细分 详细功能描述(产品特性):即产品特性,包括功能列表、原型界面、详细设计(细分页面  元素及约束)等 其它产品需求:依据公司产品要求来定,一般包含系统兼容性要求、产品运营要求、性能要求等.
 
Q:在日历这种web 表单你是如何处理的?
首先要分析当前网页试用日历插件的前端代码,看看能不能通过元素定位,点击日期实现,如果不能,可能需要借助javascript。还有些日历控件一个文本输入框,可以直接sendKeys()方法来实现传入一个时间的数据。
 
Q:遇到alert弹出窗如何处理?使用driver.switch_to.alert方法先跳转到alert弹出窗口 然后再通过accept点击确定按钮,通过dismiss点击取消难,通过text()获得弹出窗口的文本。
 
Q:在Selenium中如何实现拖拽滚动条?
在Selenium中通过元素定位会自动帮你拖拽到对应位置,所以是没有自带的scoll方法。但是这个是有限制,例如当前页面高度太长,默认是页上半部分,你定位的元素在页尾,这个时候可能就会报元素不可见的异常。我们就需要利用javaScript来实现拖拽页面滚动条。
我们一般可以两个方法去拖拽,一个是根据拖拽的坐标(像素单位),另外一个是根据拖拽到一个参考元素附件。
 
 
Q:Jmeter 分布式压力测试怎么测?在进行压测的时候,如果我们进行大并发的压测,往往一台测试机是达不到这么高的并发量的。那就可以 使用分布式压测方式,设置一台控制器,然后几台压力机,咱们通常叫“肉鸡”,进行压测,这种压测也并不复杂,只需要做一些简单配置。 比如在肉鸡身上配置连接的端口,配置启动jmeter-server,就可以被连接测试了。在控制机master上我们,关联上肉鸡的ip和端口,就可以控制肉鸡进行分布式压力测试了。
 
Q:xpath和css定位都比较强大,那他们之间有什么区别
①CSS locator比XPath locator速度快,因为css是配合html来工作,它实现的原理是匹配对象的原理,而
xpath是配合xml工作的,它实现的原理是遍历的原理,所以两者在设计上,css性能更优秀
②对余class属性Css能直接匹配部分,而Xpath对于class跟普通属性一致
③xpath可匹配祖先元素,css不可以
④查找兄弟元素, Css只能查找元素后面(弟弟妹妹)的元素,不能向前找(哥哥姐姐)
 
 
Q:集成测试是什么?集成测试是单元测试的下一个阶段,是指将通过测试单元模块组装成系统或者子系统,再进行测试,重点 测试不同模块的接口部分。 集成测试也是由白盒测试或者开发人员来完成。
 
Q:接口测试用例的编写要点有哪些?1)必填字段:请求参数必填项、可选项 2)合法性:输入输出合法、非法参数 3)边界:请求参数边界值等 4)容错能力:大容量数据、频繁请求、重复请求(如:订单)、异常网络等的处理 5)响应数据校验:断言、数据提取传递到下一级接口… 6)逻辑校验:如两个请求的接口有严格的先后顺序,需要测试调转顺序的情况 7)性能:对接口模拟并发测试,逐步加压,分析瓶颈点 8)安全性:构造恶意的字符请求,如:SQL注入、XSS、敏感信息、业务逻辑(如:跳过某些关键步骤;未经验证操纵敏感数据)
 
Q:启动 Fiddler 后Response是乱码,怎么办?有时候我们看到Response中的HTML是乱码的,这是因为HTML被压缩了,我们可以通过两种方法去解压缩。 1、点击 Response Raw 上方的"Response is encoded any may need to be decoded before inspection. click here to transform" 2、选中工具栏中的"Decode"。这样会自动解压缩,解压后重启就可以了
 
 
Q:POST和GET的区别1. GET提交的数据放在URL中,POST则不会。这是最显而易见的差别。这点意味着GET更不安全(POST也不安全,因为HTTP是明文传输抓包就能获取数据内容,要想安全还得加密) 2. GET回退浏览器无害,POST会再次提交请求(GET方法回退后浏览器再缓存中拿结果,POST每次都会创建新资源) 3. GET提交的数据大小有限制(是因为浏览器对URL的长度有限制,GET本身没有限制),POST没有 4. GET可以被保存为书签,POST不可以。这一点也能感受到。 5. GET能被缓存,POST不能 6. GET只允许ASCII字符,POST没有限制 7. GET会保存再浏览器历史记录中,POST不会。这点也能感受到。 总之,两者之间没有本质区别,区别就在于数据存储的位置。各自有适用环境,根据需求选择合适的方法即可。
 
 
Q:findElement()和findElements()方法有什么区别
两个都是查找元素的方式
findElement()查找一个页面元素,只会返回WebElement对象
findElements()查找页面是所有符合匹配的元素,返回元素集合
 
Q:http接口和web service接口测试区别是什么?
传统web service:有一套完整的协议标准,其中有soap协议,用来进行消息的传递。
soap请求是HTTP POST的一个专用版本,遵循一种特殊的xml消息格式  Content-type设置为:text/xml任何数据都可以xml化。
web service的好处是:
①不用担心大小写问题
②不用担心中文urlencode问题
③代码中不用多次申明认证(账号、密码)参数
④传递参数可以为数组、对象等
由于web service要进行xml解析,速度可能会有所降低。
 现在HTTP完全可以替代web service。
 
Q:post请求的四种参数形式是什么?
Application/x-www-form-urlencoded:将参数以一组键对值的方式发送
Multipart/form-data:支持单组和多组文件上传
Application/json:根据后端接口的定义支持数据类型
Text/xml
 
Q:怎么设计接口测试用例通常,设计接口测试用例需要考虑以下几个方面:
 (1)是否满足前提条件 有些接口需要满足前提,才可成功获取数据。常见的,需要登录Token 逆向用例:针对是否满足前置条件(假设为n个条件),设计0~n条用例 (2)是否携带默认值参数 正向用例:带默认值的参数都不填写、不传参,必填参数都填写正确且存在的“常规”值,其他不填写,设计1条用例 (3)业务规则、功能需求 这里根据时间情况,结合接口参数说明,可能需要设计N条正向用例和逆向用例 (4)参数是否必填 逆向用例:针对每个必填参数,都设计1条参数值为空的逆向用例 (5)参数之间是否存在关联 有些参数彼此之间存在相互制约的关系 (6)参数数据类型限制 逆向用例:针对每个参数都设计1条参数值类型不符的逆向用例 (7)参数数据类型自身的数据范围值限制 正向用例:针对所有参数,设计1条每个参数的参数值在数据范围内为最大值的正向用例
 
Q:你熟悉OSI协议吗?原理是什么OSI是一个开放性的通信系统互连参考模型,它是一个定义得非常好的协议规范。OSI模型有7层结构,每层都可以有几个子层。OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 ;其中高层(即7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端,点到点的数据流。
 
Q:http报文由什么组成?
请求报文包括:
(1)请求行:包含请求方法,URL、http版本协议
(2)请求首部字段
(3)请求内容实体
响应报文包括:
(1)状态行:包括http版本、状态码、状态码原因短语
(2)响应首部字段
(3)响应内容实体
 
Q:弱网测试是怎么开展的?模拟一个弱网环境。可以通过软硬件方式两种。软件方式利用模拟网络参数来配置弱网环境达到目的。也可以选择第三方软件,比如,Charles, Network link Conditioner, fiddler。在各类网络软件中,主要就是对带宽、丢包、延时等进行模拟弱网环境。但是方式是由一定的弊端的,不是非常接近弱网络环境,想要更接近弱网环境,例如大多数专项测试,会更倾向于通过硬件方式来协助测试,但这种方式又会变得很麻烦,都是通过「树莓派」网维协助搭建.如果出现有些无法模拟的情况,只能靠人工移动到电梯、地铁等信号比较弱的地方。
 
 
 
posted @ 2021-02-03 21:24  天生偏执  阅读(210)  评论(0编辑  收藏  举报