web自动化面试题

一、UI自动化篇

  • 字符串的操作有哪些?
# 判断字符串是否大小写
isupper() # 判断大写
islower()  # 判断小写
# 判断是否是个整数
isdigit() 
# 切割
split()
# 统计
count()
# 查找下标
index()
# 替换
replace('旧字符''新字符') 
# 填充
center(长度,'填充字符')
rjust() # 右添加
ljust() # 左添加
View Code
  • 列表的操作有哪些?

# 创建一个空列表
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('')) # 查看列表内元素的个数
View Code
  • 字典的操作有哪些?

# 创建一个空字典
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)
View Code
  • 异常处理语句

try:
    # 优先执行try中正确的代码
except:
    # 当try中代码错误时才执行except中的代码
View Code
  • 元素的属性值是动态变化的,怎么定位这个元素? 

# 通过定位该元素的上一级元素的属性或者上上级元素属性,通过属性+层级的方法定位该元素
View Code
  • webdriver的原理是什么?

# webdriver的运行原理就相当于浏览器驱动的运行原理,通过接收客户端发来的指令(我们所写的脚本),驱使浏览器工作。
View Code
  • 常见的定位方式有哪些? 

# 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定位
View Code
  • find_element()与find_elements()的区别 

# find_element定位的是一个元素,返回的也是一个元素
# find_elements定位的是一组元素,通过列表的的方式返回这一组元素
View Code
  • xpath和CSS定位方式的区别: 

# css定位比较稳定,便捷,比如用.表示class,#表示class
# 语法不一样,xpath定位属性的时候多了//@
View Code
  • 用哪个方法判断元素是否显示 

# isdisplayed(),显示返回true,隐藏返回false
View Code
  • display:none 、 type= hidden 的隐藏元素怎么操作? 

# 隐藏元素是可以直接定位的,但是不能操作
# 可以通过调用js去除隐藏属性,就可以操作了,只读元素也是一样,去除只读(readonly)的属性就行了
View Code
  • 有些元素,在谷歌浏览器上能定位,在火狐浏览器上定位失败,是什么原因呢? 

# 因为浏览器内核不同,他们的css样式也不同
View Code
  • 如何提高selenium脚本的执行速度? 
# 提高网速,提高电脑配置
# 少用sleep强制等待
# 多用无条件的隐式等待和有条件的显示等待
View Code
  • 如何提高selenium脚本的成功率? 

# 提高网速,提高电脑配置
# 在容易出错的地方,可以增加sleep等待时间
# 使用多种方法同时定位,如下
try:
   d.find_element(By.CSS_SELECTOR,'[name="wd"]')
except:
    d.find_element(By.XPATH,'//@[name="wd"]')
View Code
  • 如何切换iframe/frame 

switch_to.frame() # 切换到指定窗口
switch_to.default.content() # 跳转至最外层表单
switch_to.parent_frame() # 跳转至上一层表单
View Code
  • 如何切换窗口 

# 通过windows_handles获取所有窗口,然后通过switch_to_window()定位当前窗口,()中填当前窗口的下标值
View Code
  • 鼠标悬停的方法是什么

# 通过导入ActionChinas类,通过它提供的move_to_element()方法实现
View Code
  • 如何定位下拉框

# 通过导入Select模块,通过select_by()方法定位,通过下标,文本,value值等方法获取内容
View Code
  • 如何获取操作警告框alert

# switch_to.alert.dismiss() # 关闭警告框
# switch_to.alert.accept() # 确定警告框
View Code
  • python如何读取 Json、Yaml、excel文件

# 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文件中])
View Code
  • python3 的数据类型有哪些?

# 整型int,浮点型float,字符串str,元组tuple,列表list,集合set,字典dict
# 不可变:int,float,str,tuple
# 可变:set,list,dict
View Code
  • 元素定位失败的原因

# 页面元素未加载完成
# 页面元素不是唯一的
# 页面元素是动态变化的
# 元素不是在同一个表单内
# 元素不是在同一个页面
View Code
  • Selenium脚本能够在不同的浏览器跨平台执行吗?

# selenium脚本可以跨平台执行,只要更换不同的浏览器以及驱动,并且在脚本中打开不同的浏览器就行了。
View Code
  • 什么样的项目适合做自动化?

# 页面元素稳定,项目周期长,测试人员技术高
View Code
  • python怎么定义一个函数,怎么定义一个类?

# def 函数名:
#        函数体
#  class 类名:
#        属性
#        方法            
View Code
  • 脚本一会运行成功,一会运行失败,会是什么原因导致的,要怎么解决?
# 这大多是网络问题,网络延迟导致页面元素未加载完成,可以在脚本前面加个隐式等待,等待时间写长一点。
View Code
  • UI自动化是什么,主要用于?
# UI自动化主要是用于回归测试/冒烟测试,页面元素稳定的项目才会去做自动化。
View Code
  • 举例来说一下你的UI自动化测试是怎么做的?
# 一般我们做UI自动化之前会进行测试小组的组内评估,看该系统是否可以进# 行UI自动化,如果可以,我们会优先将优先级高的转化为自动化脚本,比如# 将冒烟测试用例转化为自动化脚本。
# 我们主要使用python+selenium实现,采用unintest自动化框架去执行的。
# 比如,下单这个功能,我们会先创建一个测试工程project,测试工程里面包# 含testcase和report,testcase主要用于存放测试用例,report用来存放测试报告。
# 然后我们会将用例中复用性高的代码,封装到public文件中,比如(打开浏 
# 览器,登录,数据库等操作)如果用例需要某个操作,直接调用就可以了。
# 除此之外,测试用例用的到的数据会存放在data目录中,并且中用例中采用# ddt模块实现数据驱动,脚本调试完成之后,我们会编写一个mian主程序,
# 组织运行我们的测试用例,最会使用Jenkins持续集成CI工具,设置定时任务
# 执行测试用例,跑完后会生成html格式的测试报告并发给相应的自动化测试工程师。
View Code
  • 你们的自动化分层分为几层?
# 一般分为用例层,报告层,数据层,公共层。
View Code
  • 自动化脚本失败的原因?
# 网络问题,测试环境不稳定
# 开发修改了代码没用告知测试人员修改脚本
# 开发引入了新的问题
View Code
  • 测试脚本用到了哪些技术?
# 元素定位,表单切换,页面切换,模块调用,连接数据库等技术。web脚本主
# 要采用python+selenium实现,通过python自带的unittest自动化测试框# 架实现,采用模块化方式编写,把复用性高的操作封装到公共模块中,如果 
# 脚本需要用某个操作,直接调用就可以了。如果元素发生了变化,只需要调整元素封装的代码就行了,提高了代码的可维护性。
View Code
  • 如何管理你的测试用例并执行?
# 一般来说脚本调试执行完成后,会存放到svn服务器中,通过Jenkins持续集成CI工具,设置定时任务,每天定时执行测试用例。
View Code
  • 脚本怎么组织的?(编写自动化脚本,你的思路是什么?)
# 我们主要用python+selenium实现,采用unittest框架进行用例的编写,比如,下单这个功能,我们会优先创建一个测试工程,测试工程包含testcase和 
# report,testcase包含测试用例,report包含测试报告。然后会将用例中公共的操作封装到在public中去(比如打开浏览器,登录,数据库等操作)
# 除此之外用例用的到数据,会存放到data目录中,通过ddt模块实现数据驱动,脚本调试完成后,我们会编写一个mian主程序,组织调用测试用例。
# 最后会用Jenkins持续化集成CI工具,设置定时任务,定时完成每天测试用例的执行,并发送测试报告给对应的测试人员
View Code
  • 自动化率多少(转化率)?
# 一般来说是30%-40%,我们主要将测试优先级高的用例优先转化为自动化脚本,比如冒烟测试,后面有时间的话再进行补充,能写多少就写多少
View Code
  • 你们自动化脚本的通过率是多少?(注意这个题目的意思)
# 只要没有异常情况,自动化脚本的通过率都是100%通过,如果出现异常情况比如测试环境异常,开发修改了代码没有告知测试人员,开发引入新的问题
# 这种情况的话测试脚本的通过率就相对较低
View Code
  • 你曾经都写过多少自动化测试用例?
# 没有具体记过多少条,但是只要有时间,模块稳定的功能都会写
# 比如上一个项目,编写的自动化测试用例有将近150条。
View Code
  • unittes框架了解吗?
# 了解,首先unittest框架是python自带的单元测试框架
# 其次它是由初始化方法,测试用例,扫尾方法组成
# 其中初始化和扫尾方法有setup,setupclass,teardown,teardownclass等方法组成
# 测试用例是必须以test开头的方法
# 此外unittest框架还提供了丰富的断言方法,比如assertin,assertequal
self.assertin(期望结果,实际结果)
self.assertequal(实际结果,期望结果,如果出错错误处理)
# self.assertequal(result_add,6,'答案不等于6,所以答案是错误的!')
View Code
  • unittest单元测试怎么安装的?
# unittest单元测试框架是python自带的模块,不需要安装,直接import+关键字引用就行了
View Code
  • 你的python水平很一般啊?(遇到这种否定你的问题,一定不能虚)
# 我觉得目前我所掌握的python技术,做ui层的自动化测试是可以的,代码的封装,模块的调用,数据库的连接这些我的可以
# 只是我不太会用文字表达出来,而且我已经注意到了我自己的不足之处,现在正在提示自己这方面的总结能力。
View Code
  • 为什么会生成HTML报告?
# 使用了html test runner第三方包来实现的
View Code
  • 脚本运行出错,应该怎么定位错误,说出分析过程?
# 首先通过运行结果查看一下出错的原因,看是测试脚本的代码问题还是项目的问题
# 如果是脚本的问题,unittest框架就会返回E,表示脚本问题,那我们测试人员就需要修改测试脚本代码,然后继续执行脚本
# 如果是项目问题,unittest框架就会返回F,也就是断言不通过,那么就要提问题清单发给开发改
View Code
  • 如果系统有验证码,怎么做自动化/性能/接口测试?
# 因为涉及到代码的底层逻辑这时候需要寻求开发的协助
# 让开发关闭验证码
# 或者设置一个万能验证码
View Code
  • setUp(),tearDown()和setUpClass(),tearDownClass()的区别:/用例夹具与类夹具的区别:
# 测试用例有多少条,setup,teardown用例夹具就执行多少次
# 不管用例有多少条,setupclass,teardownclass都只执行一次
View Code
  • python的第三方模块/标准库有哪些?
webdiver
selenium
time
random
openpyxl
pyyaml
json
pymysql
htmltestrunner
View Code
  • python的pass语句的作用是什么?
# 占位符,防止类和方法没有内容时,出现语法错误
View Code
  • 自动化写过哪些模块的脚本?
# 主要是将冒烟测试转化为自动化测试,比如,我的这个跨境海淘dsmall商城项目
# 做自动化测试模块的有下单,后台的商品上架,订单查询,添加团购活动等。
View Code
  • 你们是怎么检查自动化的结果是不是正确的?
# 我们会用unittest框架提供的断言方式来判断实际结果和预期结果是否一致。
# 提供的断言方法有assertin,assertequal方法,还有一些其他方法,不太常用忘记了。
View Code
  • 如何加载测试用例/如何执行测试用例?
# 加载测试用例:
# 1、创建测试用例账套,通过addtest方法增加测试方法
# 2、使用discover()方法,指定目录路径或匹配规则,也可以匹配更多的测试用例
# 执行测试用例:
# 1、可以使用run()方法执行测试账套的用例或者discover组织的用例
# 2、使用unittest.main()方法执行当前脚本的测试用例。
View Code
  • unittest单元测试框架里面的测试用例有什么规则?
# unittest的测试用例必须以test开头,如果不需要执行某一条测试用例,
# 可以将其注释掉,或者改为非test开头的测试方法名
# 可以在测试用例的方法名后面加一个阿拉伯数字,设置测试执行顺序
View Code
  • UI自动化,你们是怎么样做参数化的?
# 我们会将用得到的测试用例以JSON/yaml的形式存放到data目录中
# 然后再需要用的到的测试用例中,先使用ddt封装测试类,然后使用 
# file_data方法引入数据文件,然后使用UNpack解析数据文件,把数据文件
当做参数传递给测试用例
View Code
  • 自动化报告中怎么判断是脚本问题还是断言问题?
# 看报告执行结果
# 如果是.则表示用例执行通过
# 如果是E则表示测试代码问题
# 如果是F则表示测试实际结果与预期结果不服
View Code
  • 其他内容,写了多少条自动化用例,跑了多久,自动化报告里面有什么内容?
# 优先将冒烟测试转化为自动化脚本,150条
# 半个小时
# 执行了多少个测试用例,通过了多少,失败了多少,出错了多少
View Code
  • po(page object:页面对象) 设计模式了解吗?/pom的设计模式
# po设计模式是web自动化测试目前最佳的一种实践方法,简单来说就是类和类之间的封装和调用
# 包含基础类,页面类,用例层等部分,最大的好处就是实现了数据和脚本分离,目前正在往这方面进阶脚本
View Code

posted on 2022-08-08 20:11  ×不知该怎么√  阅读(125)  评论(0编辑  收藏  举报

导航