web自动化面试题
一、UI自动化篇
- 字符串的操作有哪些?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 判断字符串是否大小写 isupper() # 判断大写 islower() # 判断小写 # 判断是否是个整数 isdigit() # 切割 split() # 统计 count() # 查找下标 index() # 替换 replace('旧字符','新字符') # 填充 center(长度,'填充字符') rjust() # 右添加 ljust() # 左添加
-
列表的操作有哪些?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 创建一个空列表 b1=[] print(b1,type(b1)) b2=list() print(b2,type(b2)) # [] <class 'list'> --------b1结果 # [] <class 'list'> --------b2结果 # 增 b1.insert(1,'哈') # 下标+内容,可指定位置来添加内容 b1.append(12) # 直接在列表中末尾添加内容 b1.extend(b2) # 往列表中添加一个列表 # 删 b1.pop(1) # 通过下标删除 b1.remove('哈') # 通过列表值删除 # 改 b1[1]=21 # 直接对列表指定下标进行重新赋值就是修改 # 查 b1.index('哈') # 通过内容定位列表下标 print(b1.count('哈')) # 查看列表内元素的个数
-
字典的操作有哪些?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 创建一个空字典 d1={} d2=dict() # {} <class 'dict'> # {} <class 'dict'> # 增 d1['中国']='china' # 对不存在的key值进行赋值,就是增加 # 删(三个方法,pop ,del , popitem) d1.pop("日本") # 根据key值删除 del d1["美国"] d1.popitem() # 随机删除 # 改 d1['中国']='zhongguo' # 通过key值修改对应的value值 # 读取 通过key 读取到对应的value (两个方法读取 字典值) d1=d["中国"] # 如果key不存在,则报错 print(d1) d3=d1.get("美国") # 如果key不存在,则报none print(d3)
-
异常处理语句
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
try: # 优先执行try中正确的代码 except: # 当try中代码错误时才执行except中的代码
-
元素的属性值是动态变化的,怎么定位这个元素?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 通过定位该元素的上一级元素的属性或者上上级元素属性,通过属性+层级的方法定位该元素
-
webdriver的原理是什么?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# webdriver的运行原理就相当于浏览器驱动的运行原理,通过接收客户端发来的指令(我们所写的脚本),驱使浏览器工作。
-
常见的定位方式有哪些?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# name,id,class,标签,文本,部分文本,xpath,css # d.find_element(By.NAME,'name名') # d.find_element(By.ID,'kw').clear() # d.find_element(By.CLASS_NAME,'s_ipt').send_keys('python自动化') # xpath相对路径定位,语法 //标签名[@属性名=’属性值‘] # d.find_element(By.LINK_TEXT,'新闻').click() # 超文本链接定位法 # d.find_element(By.PARTIAL_LINK_TEXT,'123').click() # 部分超文本链接定位法 # d.find_element(By.XPATH,'//div[@id="s-top-left"]/a[2]').click() # d.find_element(By.CSS_SELECTOR,'#kw').send_keys("111") # css-id定位
-
find_element()与find_elements()的区别
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# find_element定位的是一个元素,返回的也是一个元素 # find_elements定位的是一组元素,通过列表的的方式返回这一组元素
-
xpath和CSS定位方式的区别:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# css定位比较稳定,便捷,比如用.表示class,#表示class # 语法不一样,xpath定位属性的时候多了//@
-
用哪个方法判断元素是否显示
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# isdisplayed(),显示返回true,隐藏返回false
-
display:none 、 type= hidden 的隐藏元素怎么操作?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 隐藏元素是可以直接定位的,但是不能操作 # 可以通过调用js去除隐藏属性,就可以操作了,只读元素也是一样,去除只读(readonly)的属性就行了
-
有些元素,在谷歌浏览器上能定位,在火狐浏览器上定位失败,是什么原因呢?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 因为浏览器内核不同,他们的css样式也不同
- 如何提高selenium脚本的执行速度?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 提高网速,提高电脑配置 # 少用sleep强制等待 # 多用无条件的隐式等待和有条件的显示等待
-
如何提高selenium脚本的成功率?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 提高网速,提高电脑配置 # 在容易出错的地方,可以增加sleep等待时间 # 使用多种方法同时定位,如下 try: d.find_element(By.CSS_SELECTOR,'[name="wd"]') except: d.find_element(By.XPATH,'//@[name="wd"]')
-
如何切换iframe/frame
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
switch_to.frame() # 切换到指定窗口 switch_to.default.content() # 跳转至最外层表单 switch_to.parent_frame() # 跳转至上一层表单
-
如何切换窗口
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 通过windows_handles获取所有窗口,然后通过switch_to_window()定位当前窗口,()中填当前窗口的下标值
-
鼠标悬停的方法是什么
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 通过导入ActionChinas类,通过它提供的move_to_element()方法实现
-
如何定位下拉框
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 通过导入Select模块,通过select_by()方法定位,通过下标,文本,value值等方法获取内容
-
如何获取操作警告框alert
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# switch_to.alert.dismiss() # 关闭警告框 # switch_to.alert.accept() # 确定警告框
-
python如何读取 Json、Yaml、excel文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# json(内置模块),yaml,excel是pycharm的第三模块,先pip list查询是否已经安装 # json文件读取,json模块提供的load()方法读取json文件,dump()方法写入 # yaml文件读取,pyyaml模块提供的yaml.load()方法读取yaml文件,dump()方法写入 # excel文件读取,openpyxl模块提供的load_workbook('文件路径')打开文件,workshe[下标值]选择第几张表,excel不需要关闭,通过for循环查看文件内容,通过append([以列表的方法添加到excel文件中])
-
python3 的数据类型有哪些?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 整型int,浮点型float,字符串str,元组tuple,列表list,集合set,字典dict # 不可变:int,float,str,tuple # 可变:set,list,dict
-
元素定位失败的原因
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 页面元素未加载完成 # 页面元素不是唯一的 # 页面元素是动态变化的 # 元素不是在同一个表单内 # 元素不是在同一个页面
-
Selenium脚本能够在不同的浏览器跨平台执行吗?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# selenium脚本可以跨平台执行,只要更换不同的浏览器以及驱动,并且在脚本中打开不同的浏览器就行了。
-
什么样的项目适合做自动化?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 页面元素稳定,项目周期长,测试人员技术高
-
python怎么定义一个函数,怎么定义一个类?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# def 函数名: # 函数体 # class 类名: # 属性 # 方法
- 脚本一会运行成功,一会运行失败,会是什么原因导致的,要怎么解决?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 这大多是网络问题,网络延迟导致页面元素未加载完成,可以在脚本前面加个隐式等待,等待时间写长一点。
- UI自动化是什么,主要用于?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# UI自动化主要是用于回归测试/冒烟测试,页面元素稳定的项目才会去做自动化。
- 举例来说一下你的UI自动化测试是怎么做的?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 一般我们做UI自动化之前会进行测试小组的组内评估,看该系统是否可以进# 行UI自动化,如果可以,我们会优先将优先级高的转化为自动化脚本,比如# 将冒烟测试用例转化为自动化脚本。 # 我们主要使用python+selenium实现,采用unintest自动化框架去执行的。 # 比如,下单这个功能,我们会先创建一个测试工程project,测试工程里面包# 含testcase和report,testcase主要用于存放测试用例,report用来存放测试报告。 # 然后我们会将用例中复用性高的代码,封装到public文件中,比如(打开浏 # 览器,登录,数据库等操作)如果用例需要某个操作,直接调用就可以了。 # 除此之外,测试用例用的到的数据会存放在data目录中,并且中用例中采用# ddt模块实现数据驱动,脚本调试完成之后,我们会编写一个mian主程序, # 组织运行我们的测试用例,最会使用Jenkins持续集成CI工具,设置定时任务 # 执行测试用例,跑完后会生成html格式的测试报告并发给相应的自动化测试工程师。
- 你们的自动化分层分为几层?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 一般分为用例层,报告层,数据层,公共层。
- 自动化脚本失败的原因?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 网络问题,测试环境不稳定 # 开发修改了代码没用告知测试人员修改脚本 # 开发引入了新的问题
- 测试脚本用到了哪些技术?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 元素定位,表单切换,页面切换,模块调用,连接数据库等技术。web脚本主 # 要采用python+selenium实现,通过python自带的unittest自动化测试框# 架实现,采用模块化方式编写,把复用性高的操作封装到公共模块中,如果 # 脚本需要用某个操作,直接调用就可以了。如果元素发生了变化,只需要调整元素封装的代码就行了,提高了代码的可维护性。
- 如何管理你的测试用例并执行?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 一般来说脚本调试执行完成后,会存放到svn服务器中,通过Jenkins持续集成CI工具,设置定时任务,每天定时执行测试用例。
- 脚本怎么组织的?(编写自动化脚本,你的思路是什么?)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 我们主要用python+selenium实现,采用unittest框架进行用例的编写,比如,下单这个功能,我们会优先创建一个测试工程,测试工程包含testcase和 # report,testcase包含测试用例,report包含测试报告。然后会将用例中公共的操作封装到在public中去(比如打开浏览器,登录,数据库等操作) # 除此之外用例用的到数据,会存放到data目录中,通过ddt模块实现数据驱动,脚本调试完成后,我们会编写一个mian主程序,组织调用测试用例。 # 最后会用Jenkins持续化集成CI工具,设置定时任务,定时完成每天测试用例的执行,并发送测试报告给对应的测试人员
- 自动化率多少(转化率)?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 一般来说是30%-40%,我们主要将测试优先级高的用例优先转化为自动化脚本,比如冒烟测试,后面有时间的话再进行补充,能写多少就写多少
- 你们自动化脚本的通过率是多少?(注意这个题目的意思)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 只要没有异常情况,自动化脚本的通过率都是100%通过,如果出现异常情况比如测试环境异常,开发修改了代码没有告知测试人员,开发引入新的问题 # 这种情况的话测试脚本的通过率就相对较低
- 你曾经都写过多少自动化测试用例?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 没有具体记过多少条,但是只要有时间,模块稳定的功能都会写 # 比如上一个项目,编写的自动化测试用例有将近150条。
- unittes框架了解吗?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 了解,首先unittest框架是python自带的单元测试框架 # 其次它是由初始化方法,测试用例,扫尾方法组成 # 其中初始化和扫尾方法有setup,setupclass,teardown,teardownclass等方法组成 # 测试用例是必须以test开头的方法 # 此外unittest框架还提供了丰富的断言方法,比如assertin,assertequal self.assertin(期望结果,实际结果) self.assertequal(实际结果,期望结果,如果出错错误处理) # self.assertequal(result_add,6,'答案不等于6,所以答案是错误的!')
- unittest单元测试怎么安装的?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# unittest单元测试框架是python自带的模块,不需要安装,直接import+关键字引用就行了
- 你的python水平很一般啊?(遇到这种否定你的问题,一定不能虚)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 我觉得目前我所掌握的python技术,做ui层的自动化测试是可以的,代码的封装,模块的调用,数据库的连接这些我的可以 # 只是我不太会用文字表达出来,而且我已经注意到了我自己的不足之处,现在正在提示自己这方面的总结能力。
- 为什么会生成HTML报告?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 使用了html test runner第三方包来实现的
- 脚本运行出错,应该怎么定位错误,说出分析过程?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 首先通过运行结果查看一下出错的原因,看是测试脚本的代码问题还是项目的问题 # 如果是脚本的问题,unittest框架就会返回E,表示脚本问题,那我们测试人员就需要修改测试脚本代码,然后继续执行脚本 # 如果是项目问题,unittest框架就会返回F,也就是断言不通过,那么就要提问题清单发给开发改
- 如果系统有验证码,怎么做自动化/性能/接口测试?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 因为涉及到代码的底层逻辑这时候需要寻求开发的协助 # 让开发关闭验证码 # 或者设置一个万能验证码
- setUp(),tearDown()和setUpClass(),tearDownClass()的区别:/用例夹具与类夹具的区别:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 测试用例有多少条,setup,teardown用例夹具就执行多少次 # 不管用例有多少条,setupclass,teardownclass都只执行一次
- python的第三方模块/标准库有哪些?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
webdiver
selenium
time
random
openpyxl
pyyaml
json
pymysql
htmltestrunner
- python的pass语句的作用是什么?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 占位符,防止类和方法没有内容时,出现语法错误
- 自动化写过哪些模块的脚本?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 主要是将冒烟测试转化为自动化测试,比如,我的这个跨境海淘dsmall商城项目 # 做自动化测试模块的有下单,后台的商品上架,订单查询,添加团购活动等。
- 你们是怎么检查自动化的结果是不是正确的?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 我们会用unittest框架提供的断言方式来判断实际结果和预期结果是否一致。 # 提供的断言方法有assertin,assertequal方法,还有一些其他方法,不太常用忘记了。
- 如何加载测试用例/如何执行测试用例?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 加载测试用例: # 1、创建测试用例账套,通过addtest方法增加测试方法 # 2、使用discover()方法,指定目录路径或匹配规则,也可以匹配更多的测试用例 # 执行测试用例: # 1、可以使用run()方法执行测试账套的用例或者discover组织的用例 # 2、使用unittest.main()方法执行当前脚本的测试用例。
- unittest单元测试框架里面的测试用例有什么规则?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# unittest的测试用例必须以test开头,如果不需要执行某一条测试用例, # 可以将其注释掉,或者改为非test开头的测试方法名 # 可以在测试用例的方法名后面加一个阿拉伯数字,设置测试执行顺序
- UI自动化,你们是怎么样做参数化的?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 我们会将用得到的测试用例以JSON/yaml的形式存放到data目录中 # 然后再需要用的到的测试用例中,先使用ddt封装测试类,然后使用 # file_data方法引入数据文件,然后使用UNpack解析数据文件,把数据文件 当做参数传递给测试用例
- 自动化报告中怎么判断是脚本问题还是断言问题?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 看报告执行结果 # 如果是.则表示用例执行通过 # 如果是E则表示测试代码问题 # 如果是F则表示测试实际结果与预期结果不服
- 其他内容,写了多少条自动化用例,跑了多久,自动化报告里面有什么内容?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 优先将冒烟测试转化为自动化脚本,150条 # 半个小时 # 执行了多少个测试用例,通过了多少,失败了多少,出错了多少
- po(page object:页面对象) 设计模式了解吗?/pom的设计模式
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# po设计模式是web自动化测试目前最佳的一种实践方法,简单来说就是类和类之间的封装和调用 # 包含基础类,页面类,用例层等部分,最大的好处就是实现了数据和脚本分离,目前正在往这方面进阶脚本
作者:×不知该怎么√ 收藏一直进行,学习从未开始!地址https://www.cnblogs.com/hqh2021/p/16552752.html