数据库最基本的增,删,改,查, 假设表结构为: create table student( sid number, sname varchar2(50) ) |
1.增加:insert into student values(1,'张三') 2.删除:delete from student 3.修改:update student set sname='李四' where sname='张三' 4.查询:select * from student 5.简单的两个表的内连接inner join。 |
你们什么时候用到数据库(Oracle)? |
1、查看数据库中的数据,用于判断当前操作是否准确。 2、查询数据和修改数据。结合项目举例:(比如:测试短信的失效时间,修改逾期时间等) 3、测试接口和报表时查询返回数据以及报表的数据是否准确。 |
数据库(Oracle)都会哪些? |
基本的增删改查,子查询和多表查询,还有各种函数等和测试相关的操作都没什么问题, |
Oracle客户端如何连接服务器? |
1、安装Oracle客户端和PL/SQL远程连接工具。 2、把服务器目录:app/administartor/product/11g/network/admin/tnsname.ora这个文件中拷贝到客户端相同的位置并多加一组连接服务器的字符串。 |
数据库怎么查中间数据,怎么处理 |
Oracle:使用rownum伪列, Mysql:使用Limit Sqlserver:使用top Oracle语句如下: select * from (select s.*,rownum r from student s) t where t.r>=10 and r.r<=20 Mysql语句如下: select * from student limit 5,10 |
1. 你们什么时候用到Linux? 2. Linux使用的是什么版本? 3. 服务器是什么品牌? |
1. 主要就是查看日志,2. 版本是用的:CentOS7 3. 品牌是用的是"惠普" |
Linux你都会哪些命令? |
1. 查看日志:tail -f catalina.2018.11.6.log,主要是查看里面的SQL语句和Exception信息 2. 修改权限:chmod 3. 解压缩命令:tar -zcvf压缩和tar -zxv解压f命令 4. 查看进程和查看端口命令:ps -ef | grep java 和 netstat -anp | grep 8080 5. 其他命令:vi(编辑),操作文件命令,ifconfig(查看IP),free -m(查看内存)等 |
特别注意:数据库面试题和Linux面试题口头上最常问的就是以上这些,但是往往更多的是出现在笔试题里面,特别是最经典的的面试题! 表架构如下: Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 常见笔试题如下:
1、查询“001”课程比“002”课程成绩高的所有学生的学号;
select a.S# from (select s#,score from SC where C#='001') a,(select s#,score
from SC where C#='002') b
where a.score>b.score and a.s#=b.s#;
2、查询平均成绩大于60分的同学的学号和平均成绩;
select S#,avg(score)
from sc
group by S# having avg(score) >60;
3、查询所有同学的学号、姓名、选课数、总成绩;
select Student.S#,Student.Sname,count(SC.C#),sum(score)
from Student left Outer join SC on Student.S#=SC.S#
group by Student.S#,Sname
4、查询姓“李”的老师的个数;
select count(distinct(Tname))
from Teacher
where Tname like '李%';
5、查询没学过“叶平”老师课的同学的学号、姓名;
select Student.S#,Student.Sname
from Student
where S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平');
6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;
select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');
7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;
select S#,Sname
from Student
where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T#=Course.T# and Tname='叶平'));
8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;
Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2
from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2 9、查询所有课程成绩小于60分的同学的学号、姓名;
select S#,Sname
from Student
where S# not in (select S.S# from Student AS S,SC where S.S#=SC.S# and score>60);
10、查询没有学全所有课的同学的学号、姓名;
select Student.S#,Student.Sname
from Student,SC
where Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);
三、功能测试以及项目相关的常见面试题(重点)
|
这个项目的流程是怎样的?(必问) |
项目流程必须画出来死记硬背。包括细节,以及流程怎么测试都必须很流畅的说出来。 |
你们这个项目做了多久? |
项目:4-8个月,App:3-5个月,产品:可以长一点(1-2年甚至更长) |
你们这个项目有多少开发人员,多少测试人员 |
如果开发7-10个人,那么测试2-3个人。如果开发3-5个人,那么测试1个人。 |
你们一般多久迭代一个版本? |
项目总共分三期(其中:每一期里面都是1-2周1个小版本,我们一般是周三下午上线,周三下午交接下一个版本的需求,周四周五了解需求,下周的周一至周三完成用例的编写和评审,下周的周四,周五和下下周的周一,周二,周三都是测试找BUG,包括交叉和发散测试以及测试报告) |
你们这个项目用例写了多久?写了多少条用例? 你们这个项目找Bug找了多久?找了多少个BUG? 举几个Bug例子(或者是你难忘或严重的Bug)? |
1. 每个小版本用例设计和评审的时间大概是3天左右,用例大概在150~300条左右。 2. 我们每次小版本的迭代找Bug的时间大概1周。每个小版本50-100多个BUG的样子 3. 准备严重的Bug2-3个,说流程Bug,不容易发现的Bug,自己去项目中发掘。 |
你们的项目什么时候转测? 你们项目组什么时候结束测试? |
转测标准:当前版本基本完成,测试环境搭建成功,冒烟测试通过。 结束标准:用例和需求覆盖基本达到95%以上,并且没有遗留下影响用户使用的Bug. |
你们这个项目上线了吗? |
已经上线了,从第一期开始就上线了!总共分三期。 |
1.你们公司的测试流程是什么样的(测试流程) 1.给你一个项目,你会如何开展测试工作(测试流程) 1.你们如何设计测试用例的(测试流程) 1.如何保证测试用例的完备性(测试流程) 2.你们公司Bug流程是什么样的(Bug流程) |
1、测试流程:需求分析,测试计划(方案),测试用例,执行用例提交BUG,测试报告。 2、Bug流程:新建news--指派给开发-->开发确认给解决方案(已解决,基于设计,挂起,不是BUG等)-->打回给测试回归-->没问题close(有问题reopen重新打开) |
测试计划包含哪些内容? 测试方案包括哪些内容? 测试用例包含哪些内容? 测试报告包含哪些内容? Bug包含哪些内容? |
1、计划包含:人员和时间的安排,软硬件环境,里程碑,交付件,测试风险等 2、方案包括:包括UI,功能,性能等方案,其中每个方案中主要包括:测试范围,测试目的,测试工具以及测试方法。 3、用例包含:用例编号,用例标题,优先级,预置条件,操作步骤,预期结果,备注 4、报告包含:用例统计,Bug分类统计,遗留Bug情况,测试风险,测试对象评估等 5、BugID,Bug标题,附件,复现步骤,指派给/抄送给,状态,严重程度,优先级,注释 |
Web测试你有做过吗?主要做了哪些测试? |
我做的都是web项目,主要的关注系统的业务流程,功能,性能,兼容性,易用性, 其中:其中功能测试主要是关注业务流程,web的兼容性主要是测试IE,谷歌以及火狐浏览器这三种。IE主要测7,8,9,10,11(通过IETest工具),火狐和谷歌就测了一个版本。 |
给你一个三角形案例,登录案例,电梯案例或者系统中的任何一个功能或物品问你要怎么测? |
不管给你什么问你怎么测,思路都是一样的,首先考虑界面,其次主要是功能、然后才是性能、安全、兼容性、易用性、可靠性、稳定性等。 |
你提的Bug开发认为不是Bug怎么办 |
1、再次确认需求,如果确实是一个BUG那么和开发沟通,并重现这个BUG; 2、考虑是否环境、版本不一样或者是因为缓存的原因。 3、如果因为需求原因存在争议则把BUG丢到项目讨论群一起讨论。 |
如果没有需求或者需求模糊你怎么测试? |
1、首先看项目是否已经基本成型了:如果已经成型则不需要需求直接测项目就行。 2、如果没有成型则看看是否有旧的版本:如果有则先了解旧版本的需求。了解大概。 3、如果什么都没有的话:那么只能参考市场上同类型成熟的产品。并对项目提供建议。 |
用例有评审么?如何评审的 |
一般小公司:组内评审(说这个),大公司:由开发,测试,产品三方会审。 |
session、token,cookie你了解吗? |
1、session是服务端的缓存,cookie是客户端的缓存。 2、session默认登录后不访问项目的情况下半小时失效,我们可以在tomcat/conf/web.xml中修改成1分钟失效来测试session失效后是否有相应的提示并跳转到登录页。 3、cookie在浏览器中保存,在浏览器的"internet"选项中删除cookie来测试。 4、token是接口测试时的鉴权码 |
四、接口测试常见面试题 1、你们公司的接口测试流程是怎样的?(有没有感觉熟悉,貌似在哪里听过) 接口测试我们是在XX项目做的,主要有XX接口,XX接口,XX接口等。 1、首先是从开发那里拿到API接口文档,了解接口业务、包括接口地址、请求方式,入参、出参,token鉴权,返回格式等信息。 2、然后使用Postman或Jmeter工具执行接口测试,一般使用Jmeter的步骤是这样的: 1、首先新建一个线程组。 2、然后就是新建一个HTTP请求默认值。(输入接口服务器IP和端口) 3、再新建很多HTTP请求,一个请求一个用例。(输入接口路径,访问方式,参数等。) 4、然后创建断言和查看结果树。 3、最后调试并执行用例,最后编写接口测试报告 4、其实我们做接口的时候也碰到了蛮多的问题,都是自己独立解决的,比如返回值乱码(修改jmeter的配置文件为UTF-8编码方式),比如需要登录后才能取得token鉴权码并且这个鉴权码在下面的请求中需要用到(使用正则表达式提取器提取token的值等。 2、请简述一下cookie、session以及token的区别(有没有感觉整个是万年不变的面试题) (1)cookie数据存放在客户的浏览器上,session数据放在服务器上。而token是接口测试时的鉴权码,一般情况下登陆后才可以获取到token,然后在每次请求接口时需要带上token参数。 (2)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session,session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面应当使用cookie (3)可以将登陆信息等重要信息存放为session;其他信息需要保存,可以放在cookie 3、接口测试如何设计测试用例?(必问,有没有感觉答得整个人都不好了?) 接口测试一般考虑入参形式的变化和接口的业务逻辑,一般设计接口测试用例采用等价类、边界值、场景法居多! 接口测试设计测试用例的思路如下: 1.接口业务逻辑测试?(正例) 接口逻辑测试是指根据业务逻辑、输入参数、输出值的描述,对正常输入情况下所得的输出值 是否正确的测试,也就是测试对外提供的接口服务是否正常工作。 2.模块接口测试?(反例) 模块接口测试是为了保证数据的安全及程序在异常情况下的逻辑的正确性而进行的测试。? 模块接口测试的主要包括以下几个方面:? 1)鉴权码token异常(鉴权码为空<没有鉴权码>,错误的鉴权码,过期的鉴权码)。 2)其他参数异常。 1、必填项检查 2、参数的长度、类型、格式异常: 常规参数:(数字、字符串、日期) 参数长度:6-18位。或身份证、电话的长度。 参数类型:数字(精度),字母,中文,带空格的参数,特殊字符。 日期格式:日期:年月日,年月日时分秒,日期格式(包括/,-,:等)。 3)错误码异常覆盖。 4)接口测试其他的关注点 接口有翻页时,页码与页数的异常值测试 数据库的增删改查,比如一个post接口操作完成后,通过列表页接口看下新的数据是否和刚才的post一致 接口返回的图片地址能否打开,图片尺寸是否符合需求 当输出参数有联动性时,需要校验返回两参数的实际结果是否都符合需求。 所有列表页接口必须考虑排序值 所有功能都要考虑兼容旧版本 4、接口测试执行中比对数据库吗? 肯定啊,因为接口返回值的数据来源于数据库,接口对数据的操作还要进行深层次的数据库检查! 5、谈谈你对HTTP协议的了解? 超文本传输协议,端口为80,特点(无记忆功能、快速)是由请求和响应两部分组成请求由请求头、请求行、请求正文组成;响应是由响应头、响应行、响应正文组成,之前我们公司的接口是采用https协议的。 https http+ssl协议 端口443 面向安全的超文本传输协议 6、get和post请求有什么区别? get和post请求都是客户端向服务器提交的一种请求方式 get是明文传输参数、倾向于请求服务器资源。比如打开网站 post传输数据不可见,安全性高,倾向于向服务器提交数据,比如注册等 7、响应状态码有哪些? 1xx:指示信息--表示请求已接受,继续处理 2xx:成功--表示请求已被成功接收、理解、接受 3xx:重定向--要完成请求必须进行更进一步的操作 4xx:客户端错误--请求有语法错误或请求无法实现 5xx:服务器端错误--服务器未能实现合法的请求 8、在接口测试过程中发现的bug多不多?能举几个栗子? 这个问题其实回到起来很简单,只要做过接口测试的,总能发现几个BUG吧,把你平常发现的bug说2-3个就可以了。 面试官出这个题,主要是想知道你是不是真的做过接口测试,毕竟现在很多小伙伴简历都是写的假的(你要不写估计面试机会都没有,没办法,为了生存,能理解) 比如,提现输入框,在页面上输入负数,肯定是无法提交过去(前端页面会判断金额),如果我不走前端,直接用接口工具发请求,输入一个负数过去。 (假设服务端没做提现金额数据判断) 余额=当前余额(100)-提现金额(-100),那么提现-100,余额就变成200了,也就是越提现,余额越大了。 9、接口测试中有哪些要注意的测试点? 11.1)接口中返回了图片地址,要手工去进行图片的测试(大小、内容) 11.2)接口完成查询功能的时候,数据返回的排序显示 11.3)接口测试的时候,关注参数的默认值、必填项 10、接口执行测试后返回结果做对比,一般比对哪部分内容? 之前必须要对比的就是返回状态码,其次再去对比返回其它关键内容 11、为什么开展接口测试? 13.1)接口测试属于集成测试、测试介入越早、就越能在项目早期发现问题,其修复问题的成本越低 13.2)接口测试非常快速、UI自动化执行一个测试用例10S左右、接口测试用例执行的话,需要的时间是毫秒级的 12、之前在接口测试过程中,使用的工具是什么? postman或jmeter(5.1) 13、之前用过抓包工具没有?如何使用的? 之前在项目中用过fiddler抓包工具进行HTTP协议请求的抓取 打开fiddler之后,默认浏览器配置了127.0.0.1 8888端口的代理,在fiddler设置好过滤策略后,打开需要进行抓包的网站进行操作,就可以进行抓包 14、json数据是什么,你平时如何解析json数据? 一种开发常用的数据报文格式,由键值对和数组两种格式构成。可以通过工具bejson网站等 15、postman你在工作中使用流程是什么样的? 1) 编写好用例 2) 在postman先建好url环境变量 3) 根据接口用例所属的模块新建集合管理 4) 在集合中不同模块下录入测试用例 5) 录入测试用例的时候根据预期结果在tests页签中增加断言 6) 导出通过Newman去运行 16、postman中设置环境变量有什么用? 在之前项目中,接口测试测试的环境有开发环境,测试环境等,为了测试的时候方便,就在postman设置环境变量,到时所有接口都引用该环境变量,这样就不用为了切换环境导致每次都去修改被测系统接口的主机地址;点击右上角环境变量管理按钮-新建环境变量,在脚本中使用{ {变量名}}去调用 17、在接口测试中关联是什么含义?如何用postman设置关联? 关联就是把上一个接口返回值的部分截取出来,作为下一个接口的参数,能让接口串联运行 在postman中设置关联的步骤如下: 1) 先通过正则表达式提取的方式或json取值的方式把下一个接口需要的信息从上一个接口截取出来 2) 使用设置全局变量的代码把取出来的值保存到全局变量 3) 在下一个接口中,使用{ {全局变量}}代替要替换的静态值 18、postman支持什么类型的协议测试? http和https协议的 19、postman参数化有哪几种方式? 内建变量、pre-scripts编写js脚本、批量运行时导入csv或json格式的文件 20、Newman如何执行postman脚本? Newman run 脚本名称 也可以添加参数生成html报表等 21、jmeter之前用的是什么版本?如何安装的? jmeter用的是5.1.1版本,安装如下: 先在电脑上安装jdk1.8或以上的版本,然后从官网下载最新的安装包,解压后,进行环境变量的配置,配置好后即安装完成 22、在项目中如何用jmeter进行接口测试? 1) 把线程组数量设置为1,循环次数设置为1 2) 配置好全局变量URL通过配置元件---用户自定义的变量添加 3) 增加配置元件http请求默认值,放置在用户定义的变量之后 4) 添加事务控制器管理和组织测试用例 5) 在事务控制中添加http请求添加测试用例中的接口请求信息 6) 添加对应的断言元件进行断言 23、jmeter中如何设置断言? 右击请求---断言---响应断言---响应断言界面输入要检查比对的项,设置好断言后,执行接口测试如果是通过的,查看结果树不会有任何提示,如果断言失败,就会有红色报错。如果接口返回的数据是json数据,也可以添加json断言 24、jmeter中如何实现关联? 先从上一个接口中通过正则表达式提取器或jsonpath解析器截取下一个接口需要的参数值保存到变量,然后在写一个接口中通过${变量名}去获取 25、jmeter添加http请求默认值元件有什么作用? 添加并设置好后,相当于给所有的http请求取样器都设置了默认值,既不用填写取样器中的比如主机地址、端口、代理等,都可以使用http请求默认值设置的 26、jmeter参数化的方式有哪几种可以实现? 1) 配置元件---用户定义的变量元件可以设置全局变量 2) 函数助手对话框中可以选择比如随机字符串、随机日期、随机数字作为参数化 3) 可以使用csv文件作为参数化,通过配置元件中的csv data set config元件进行设置即可 五、Python以及自动化测试常见面试题(重点)
Python99乘法表 |
for a in range(1,10): for b in range(1,a+1): print a,"*",b,"=",a*b, print "" |
Python六种数据类型以及方法 |
number(int,long,float),string,tuple,list,set,dict,方法参考笔记 |
Python定义函数使用什么关键字? |
使用def定义函数,使用return返回,如何没有return则默认返回None |
自动化做过吗? 你们公司自动化测试的流程是什么样的? |
自动化我们是在XX项目做的!我们项目自动化这一块主要做的是核心流程(冒烟用例)。使python和selenium编写自动化脚本,其中也使用unittest框架做脚本调试和运行,并且使用的PageObject模式,最后通过HTMLTestRunner.py生成自动化测试报告。并给测试组每个人分别发送一份自动化的测试报告邮件。 |
自动化测试什么时候开始?什么时候执行?自动化率? |
我们项目是分三期来做,我们是在第一期功能测试之后开始编写自动化脚本。然后再每次需要做冒烟测试时执行自动化脚本来替换冒烟。自动化率大概30%左右。 |
python和selenium的版本分别是多少? |
python3.7,selenium3.4,自动化框架使用的是unittest |
元素的定位用的是什么方法?( 重点 ) |
通过“ID”定位: driver.find_element_by_id() 通过“名字”定位: driver.find_element_by_name() 通过“Xpath”定位: driver.find_element_by_xpath() 通过“Css”定位: driver.find_element_by_css_selector() 通过“链接文本”定位: driver.find_element_by_link_text() 除了常用的五种外还有By的方式定位,By方式主要是用于PageObject页面对象封装(POM) |
如果有元素总是定位不到,可能是什么原因? 你在做自动化时有碰到什么问题吗? |
1、首先查看此元素前后是否有空格、或特殊字符导致定位不到 2、然后查看此元素是否包含在frame或者iframe里面,如果有则需要先进入Frame再定位。 3、有时也可能是页面没有加载完成导致元素定位不到!这样就需要使用time.sleep() 4、如果所有方法都定位不到的话则和开发协调一下修改一下脚本。 |
用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性? |
time.sleep( ) 睡眠 driver.implicitly_wait(10) 智能等待 WebDriverWart 显式等待 |
自动化用例出错如何处理? |
1、首先肯定是先检查脚本,通过单元测试查看脚本的报错信息,根据错误信息修改脚本。 2、手动执行这个用例。找出问题,有问题再提交Bug。 |
11种页面元素如何处理:包括文本框,密码框,单选框,多选框,下拉框,文件上传等如何处理( 重点 ) |
下拉框处理方式如下:其他的参考pdf文件。 sel=Select(driver.find_element_by_name("sel")) sel.SelectByValue("3"); |
1.框架Frame如何处理,弹出窗口如何处理( 重点 ) 2.页面跳转如何处理,验证码如何处理( 重点 ) |
1、框架:driver.switch_to.frame("框架名"),弹窗:driver.switch_to_alert(); 2、页面跳转:使用handle页面句柄切换页面,验证码:让开发注销掉。 |
1、开发模式或者是封装模式是什么?( 重点 ) 2、增加功能,删除功能,修改功能,查询功能如何断言( 重点 ) |
1、使用的是POM模式,即页面对象模式。 2、增加功能和修改功能,处理后有一个"增加成功","修改成功"字样,通过这个字样来断言。 删除通过点击删除后的弹出窗口中的文字来断言或者是判断删除后的列表中是否包括删除的内容。查询:比如根据分类查询则判断列表中是否都是分类的名称。 |
更多自动化方面的面试题请参考: 1、你会封装自动化测试框架吗? 这个问得最多,甚至有很多公司直接写在招聘要求中! 当然可以,自动化框架主要的核心框架就是分层+PO模式:分别为:基础封装层BasePage,PO页面对象层,TestCase测试用例层。然后再加上日志处理模块,ini配置文件读取模块,unittest+ddt数据驱动模块,jenkins持续集成模式组成。 2、如何把自动化测试在公司中实施并推广起来的? 1.项目组调研选择自动化工具并开会演示demo案例,我们主要是演示selenium和robotframework两种。 2.搭建自动化测试框架,在项目中逐步开展自动化。 3.把该项目的自动化流程、框架固化成文档 4.推广到公司的其它项目组应用 3、请描述一下自动化测试流程? 1.编写自动化测试计划 2.设计自动化测试用例 3.编写自动化测试框架和脚本 4.调试并维护脚本 5.无人值守测试 6.后期脚本维护(添加用例、开发更新版本) 4、自动化测试用例如何编写?以下答案二选一即可: 1.用例是自动化测试工程师自己设计的,一般刚开始已基本业务流程为主(登录--完成一个业务--退出) 2.从系统测试用例中进行筛选或由业务工程师提供 5、上一个项目中自动化测试的执行策略? 上一个项目中是定时执行的,设置的执行时间是晚上12点,执行完毕后会自动发送邮件通知 6、自动化测试发现BUG多吗? 不多,因为之前项目组是把已经测试通过的基本功能再进行自动化脚本编写和在后续版本执行自动化测试,它主要是保证已经测试通过的功能在新版本更新后没有问题。 7、你觉得自动化测试的价值在哪里?你们公司为什么要做自动化测试? 引用自动化测试之后,能代替大量繁琐的回归测试工作,把业务测试人员解放出来,既而让业务测试人员把精力集中在复杂的业务功能模块上,自动化测试一般是对稳定下来的功能进行自动化,保证不会因为产品的更新导致之前稳定下来的功能出现BUG 8、自动化测试有误报过bug吗?产生误报怎么办? 有误报过,有时候自动化测试报告中显示发现了bug,实际去通过手工测试去确认又不存在该bug。 误报原因一般是: 1.元素定位不稳定,需要尽量提高脚本的稳定性; 2.开发更新了页面但是测试没有及时更新维护! 9、自动化测试过程中,你遇到了哪些问题,是如何解决的? 1.频繁地变更页面,经常要修改页面对象类里面的代码 2.自动化测试偶尔出现过误报 3.自动化测试结果出现覆盖的情况:Jenkins根据时间建立文件夹 4.自动化测试代码维护比较麻烦 5.自动化测试进行数据库对比数据 10、在上一家公司做自动化测试用的什么框架? 可以说出以下自己擅长的一种: 1.python+selenium+unittest+htmltestrunner 2.python+selenium+pytest+allure 3. robotframework+Selenium2Library 12、在selenium自动化测试中,你一般完成什么类型的测试?自动化覆盖率? 主要是冒烟测试和回归测试。回归测试主要写一些功能稳定的场景,通过自动化手段去实现,节约测试时间。因为自动化测试用例也是在不断的更新和迭代,没有刻意去统计,大概在30%-40%左右! 13、在执行脚本过程,如何实现当前元素高亮显示? 这个其实就是利用javaScript去修改当前元素的边框样式来到达高亮显示的效果, 14、如果一个元素无法定位,你一般会考虑哪些方面的原因? 1.页面加载元素过慢,加等待时间 2.页面有frame框架页,需要先跳转入frame框架再定位 3.可能该元素是动态元素,定位方式要优化,可以使用部分元素定位或通过父节点或兄弟节点定位。 4.可能识别了元素,但是不能操作,比如元素不可用,不可写等。需要使用js先把前置的操作完成, 15、元素定位方法你熟悉的有哪些? id name classname link_text css xpath 16、遇到frame框架页面怎么处理? 先用driver.switch_to.frame()跳转进去frame, 然后再操作页面元素, 操作完后使用driver.swith_to.default_content()跳转出来 17、遇到alert弹出窗如何处理? 使用driver.switch_to.alert方法先跳转到alert弹出窗口 然后再通过accept点击确定按钮,通过dismiss点击取消难,通过text()获得弹出窗口的文本。 18、如何处理多窗口? 这个多窗口之间跳转处理,我们在项目中也经常遇到。就是,当你点击一个链接,这个链接会在一个新的tab打开,然后你接下来要在新tab打开的页面查找元素, 1.我们在点击链接前使用driver.current_window_handle获得当前窗口句柄。 2.再点击链接。点击后通过driver.window_handles获得所有窗口的句柄, 3.然后再循环找到新窗口的句柄,然后再通过driver.switch_to.window()方法跳转到新的窗口。 19、怎么验证元素是enable/disabled/checked状态? 定位元素后:分别通过isEnabled(),isSelected(),isDisplayed()三个方法进行判断。 20、 如何处理下拉菜单? 在Selenium中有一个叫Select的类,这个类支持对下拉菜单进行操作。使用方法如下: 1.定位元素 2.把定位的元素转化成Select对象。 sel = Select(定位的元素对象) 3.通过下标或者值或者文本选中下拉框。 sel.select_by_index(index); sel.select_by_value(value); sel.select_by_visible_text(text); 21、在日历这种web 表单你是如何处理的? 首先要分析当前网页试用日历插件的前端代码,看看能不能通过元素定位,点击日期实现,如果不能,可能需要借助javascript。还有些日历控件一个文本输入框,可以直接sendKeys()方法来实现传入一个时间的数据。 22、举例一下说明一下你遇到过那些异常 常见的selenium异常有这些: NoSuchElementException:没有该元素异常 TimeoutException : 超时异常 ElementNotVisibleException :元素不可见异常 NoSuchAttributeException :没有这样属性异常 NoSuchFrameException :没有该frame异常 23、关闭浏览器中quit和close的区别 简单来说,两个都可以实现退出浏览器session功能,close是关闭你当前聚焦的tab页面,而quit是关闭全部浏览器tab页面,并退出浏览器session。知道这两个区别,我们就知道quit一般用在结束测试之前的操作,close用在执行用例过程中关闭某一个页面的操作。 24、在Selenium中如何实现截图,如何实现用例执行失败才截图 在Selenium中提供了一个get_screenshot_as_file()的方法来截图的,一般结合try/except捕获异常时使用,进行错误截图。 25、如何实现文件上传? 定位元素后,直接使用send_keys()方法设置就行,参数为需要上传的文件的路径。 26、自动化中有哪三类等待?他们有什么特点? 1.线程等待(强制等待)如time.sleep(2):线程强制休眠2秒钟,2秒过后,再执行后续的代码。建议少用。 2.imlicitlyWait(隐式等待)会在指定的时间范围内不断的查找元素,直到找到元素或超时,特点是必须等待整个页面加载完成。 3.WebDriverWait(显式等待)通常是我们自定义的一个函数代码,这段代码用来等待某个元素加载完成,再继续执行后续的代码 27、你写的测试脚本能在不同浏览器上运行吗 当然可以,我写的用例可以在在IE,火狐和谷歌这三种浏览器上运行。实现的思路是封装一个方法,分别传入一个浏览器的字符串,如果传入IE就使用IE,如果传入FireFox就使用FireFox,如果传入Chrome就使用Chrome浏览器,并且使用什么浏览器可以在总的ini配置文件中进行配置。需要注意的是每个浏览器使用的驱动不一样。 28、什么是PO模式,为什么要使用它 PO是Page Object 模式的简称,它是一种设计思想,意思是,把一个页面,当做一个对象,页面的元素和元素之间操作方法就是页面对象的属性和行为,PO模式一般使用三层架构,分别为:基础封装层BasePage,PO页面对象层,TestCase测试用例层。 六、性能测试常见面试题
性能测试做过吗? 你们公司的性能测试流程是怎样的? |
性能测试我们是在XX项目里面做的性能,主要通过LoadRunner11对XX功能做的并发测试,并发了XX个用户。我们是这样来做的: 1、首先就是分析并确定性能需求:包括性能指标的确定:并发数的评估,响应时间,cpu和内存,事务成功率,TPS,吞吐量等。) 2、然后就是搭建性能测试环境,环境必须要纯净。 3、然后就是录制脚本以及调试脚本(包括:插入事务、检查点、关联、参数化、集合点等) 4、然后使用控制器对脚本增压、持续以及减压并执行脚本。增加对服务器的监控。 5、最后通过分析器分析性能测试结果。 |
分析结果是怎么做的? |
1、在Analysis里面把所有的图表都显示出来 2、查看响应时间,CPU和内存,事务成功率等指标值。 3、把虚拟用户图表和tps以及吞吐量的图标合并,主要看随着虚拟用户的增加,tps和吞吐量的变化。如果是上升的趋势,并且波动不大则表示性能正常,如果出现拐点,则需要看资源利用率和响应时间的图表,如果资源利用率和响应时间都没有问题,则是程序和数据库的性能有瓶颈,再考虑是程序还是数据库的问题(通过执行SQL语句判断) |
你做性能测试有没有遇到什么问题?怎么处理的? |
1.如:测搜索功能的时候如果数据库中数据量达到100万以上,响应时间超出预期值5秒(5秒内是合理的,最多超出1-5秒)!(处理方案:建议在数据库加索引,这个开发人员处理) 2.服务器压力测试200个并发的时候,运行不到半个小时,服务器就挂掉了。 |
写脚本的过程当中经常用的函数有哪些? |
1) 检查点函数:web_reg_find() (作用:检查某个操作是否成功完成) 2) 关联函数:web_reg_save_param()(作用:让服务器返回的sessionID和请求关联) 3) 集合点函数:lr_rendezvous() (作用:为了做并发,让虚拟用户集合,然后一起释放) 4) 输出函数:lr_message() |
七、App常见面试题
APP测试你会么?和Web测试有什么区别? 你们是用的真机还是模拟器? |
1、App和Web的功能测试其实差不多,但是有一些特殊的关注点:比如:弱网,弱电,中断测试,兼容性测试等。 2、除了公司的几台测试机外,其他的都是用的同事的手机在测试。模拟器我们一般只用来测试屏幕的兼容性。 |
APP弱网怎么测? |
使用Fiddler限制流量模拟2G,3G,4G流量来测试都可以。 |
APP的MONKEY测试怎么测? MONKEY测试如何让两次执行的顺序一样? |
1、MONKEY是Android系统自带的一个压力测试工具,主要是模拟用户的操作行为来检测APP包的稳定性和健壮性。首先是安装MONKEY的测试环境,包括JDK和SDK的环境,然后就是获取APK的包名,然后输入ADB命令执行测试,执行了10000次,最后查看执行的日志结果,主要包括崩溃日志(CRASH),内存泄露日志(GC),异常日志(Exception)等。 2、设置-s后面的参数数字一致就可以了。 |
APP的性能测试怎么测? |
我们使用的也是LoadRunner,LR首先需要安装一个补丁包LR_03105_Patch4.exe,然后再录制的时候选择:Mobile App(HTTP/HTML)协议,然后使用160wifi创建热点,然后手机连接到热点,然后在手机上操作需要录制的功能,LoadRunner就可以捕获并且录制到App操作的脚本。录制到脚本后,后面的施压和Web差不多了。 |
APP的兼容性怎么测? |
适配测试主要是屏幕分辨率的兼容性和版本的兼容。这一块我们就是使用测试机和项目的手机(一起10多台)来测的,主要测了:华为,三星,OPPO,小米,苹果这几个机型。 |
|