# 自动化测试篇
[TOC]
> ### 举例来说一下你的自动化测试是怎么做的?
参考答案:就拿简历上的xxx项目来说吧,在编写脚本前,我们会对系统进行评估,确认这个系统可不可以实现UI自动化,如果可以的话,就筛选出能实现自动化测试的用例,一般优先把冒烟测试用例的转为成脚本。我们是用selenium工具来实现自动化,采用python脚本语言,基于unittest框架进行用例的编写。比如,下单这个功能的脚本,我们是这样做的:首先,我们会构建一个测试工程,测试工程包含testcase,主要用来存放测试用例,report用来存放测试报告,其次我们会把用例中公共的部分封装到public中,最后用runAllCase的python文件运行项目自动化用例,脚本调试完后,我们会用jenkins持续集成工具,设置脚本每天晚上10点跑一遍脚本,跑完后生成html格式的自动化测试报告。
----------------**说法二**----------------------
***就拿简历上的前进链项目来说,在编写脚本前,我会先对系统进行评估,确认这个系统可不可以实现UI自动化,如果可以,就筛选出能实现自动化测试的用例,一般优先把冒烟测试用例转化为脚本。
我是用selenium工具来实现自动化,采用python脚本语言,基于pytest框架进行用例编写。首先,构建一个测试工程,测试工程包好testcase,用来存放测试用例,report用来存放测试报告,
其次会利用PO模式,将业务逻辑和测试逻辑相分离,再引入allure测试报告,在测试期间收集测试数据。***
> ### 自动化脚本失败的原因:
1. 可能是测试环境的网络不稳定;
2. 开发修改了代码没通知到测试人员修改脚本;
3. 开发引入了新的问题。
> ### 测试脚本用到了哪些技术?
参考答案:元素定位,表单切换,模块调用,JS定位等等,脚本是基于python自带的unittest单元测试框架,采用了模块化方式编写,把复用性高的操作封装到公共模块中,如果脚本需要用到对应的操作,直接调用就可以了,如果元素发生变化,只需要调整元素封装的代码就可以了,提高测试用例的可维护性。
> ### xpath和CSS定位方式的区别:
1、语法不一样;
2、CSS定位比较稳定、快速。
> ### 脚本怎么组织的?(编写自动化脚本,你的思路是什么?)
参考答案:构建一个测试工程,测试工程包含testcase,主要用来存放测试用例,report用来存放测试报告,其次我们会把用例中公共的部分封装到public中,最后用runAllCase的python文件运行项目自动化用例。测试脚本使用的是python的unittest单元测试框架组织管理,将所有测试脚本通过单元测试框架组织起来运行,这样做的好处是,维护起来方便,可以生成测试html格式的测试报告,报告包括:测试用例,通过数,失败数。
> ### 自动化率多少?
一般是30%到40%,这个没有固定的,我们是优先将优先级高的测试用例,比如,冒烟测试的测试用例转换成自动化脚本的,后面有时间的时候再不断补充,能写多少写多少。
> ### 自动化脚本的通过率是多少?(注意这个题目的意思)
参考答案:这个说不准,如果没有什么异常情况,自动化脚本都是100%运行通过;如果异常情况比较多,比如出现测试环境不稳定,或者开发修改了代码没通知到测试人员及时修改脚本,又或者开发引入了新的问题等等,自动化脚本通过率可能80%都不到。
> ### 用那个方法判断元素是否显示
is\_displayed()
> ### 你曾经都写过多少自动化测试用例?
这个具体没有算过。但是只要有时间,模块稳定的功能都会写。就拿上个项目来说,自动化测试用例大概写了将近有100-120条这样子吧。
> ### python3 的数据类型有哪些?
int (整型)
float (浮点型)
str(字符串)
List(列表)
Tuple(元组)
Set(集合)
Dictionary(字典)
不可变数据(四个):int (整型)、float (浮点型)、str(字符串)、Tuple(元组)、Set(集合);
可变数据(两个):List(列表)、Dictionary(字典)。
> ### 面:unittest框架了解吗?
参考答案:unittest框架,由setUp()--环境预置,testCase()--- 测试用例 tearDown()----环境恢复,三大部分组成,unittest框架可组织执行测试用例,并且提供丰富的断言方法,判断测试用例是否通过,最终生成测试结果。
> ### 怎样用python连接mysql数据。
参考答案:我们之前主要是用python语言来写web端的自动化测试脚本,没有连过mysql数据库,到时候工作需要的话,学一下很快就能上手了。
> ### 用python做过接口测试自动化测试吗?
参考答案:我们之前主要是用python语言来写web端的自动化测试脚,接口是用Jmeter来做的,用python写接口的脚本也在网上学习过,但是工作中没用用过,到时候工作需要的话,再学一下应该没问题。
> ### 元素定位失败的原因
1. 页面的元素未加载完成
2. 元素的属性值不唯一
3. 元素的属性值是动态值
4. 元素在另外一个表单
5. 元素在另外一个页面
> ### 自动化脚本,如何切换不同的浏览器
参考答案:使用对应的浏览器驱动,然后在脚本中更换不同的浏览器。
> ### 你的python水平很一般啊?(遇到这种否定你的问题,一定不能虚!)
参考答案:我现在掌握的python知识,做ui层的自动化测试是可以的,代码的封装,调用这些都没问题;我一般是会做,但不是很会用文字描述出来,我以注意到这点,现在也在加强提升自己的总结能力。
PS---重点强调:凡是遇到被面试官否定的,都要想办法怼回去,输也要输得精彩些,但是,怼回去的时候,要注意语气,要有礼有节,不卑不亢。
> ### python怎么定义一个函数,怎么定义一个类
~~~
def 函数名:
函数体
class 类名:
属性
方法
~~~
> ### 有些元素,在谷歌浏览器上能定位,在火狐浏览器上定位失败,是什么原因呢?
参考答案:因为不同浏览器的内核不一样,他们的CSS样式不一样。
> ### 如何提高selenium脚本的执行速度?
1. 提高网速;
2. 少用sleep,多用隐式等待或显式等待。
3. 提升电脑配置
> ### 元素定位的方式有哪些
~~~
d.find_element_by_id('id的值')
d.find_element_by_name('name的值')
d.find_element_by_class_name('class的值')
d.find_element_by_tag_name('标签名')
d.find_element_by_link_text('完整的文本链接')
d.find_element_by_partial_link_text('部分的文本链接')
d.find_element_by_css_selector('css表达式')
d.find_element_by_xpath('xpath表达式')
js定位
~~~
> ### 如何切换iframe
`switch_to.frame()`
> ### 如何切换窗口
`switch_to.window()`
> ### 鼠标悬停的方法是什么
鼠标悬停用到`ActionChains`类提供的`move_to_element`方法
> ### 如何定位下拉框
需要导入`Select`类,可以使用下标、值和文本定位
> ### 如何获取弹出警告框的text
`switch_to.alert.text`
> ### 什么样的项目适合做自动化
项目周期长,版本多,界面元素稳定的项目
> ### selenium如何做兼容性测试
使用对应的浏览器驱动,然后在脚本中更换不同的浏览器。
> ### 为什么会生成HTML报告
使用了HTMLTestRunner第三方工具包来实现的
> ### 脚本运行出错,应该怎样定位,说出分析过程
运行结束之后我们会得到一个测试报告,我们根据测试报告先定位一下是脚本的原因还是程序的原因,一般来说脚本的原因在报告中都会显示出哪一行代码出错了,如果是程序的原因通常来说都是断言的问题。
> ### 如果系统有验证码,怎么做自动化?
1. 去掉验证码。
2. 设置万能验证码。
3. 用python调用OCR模块,自己写代码来识别。这种方法可以识别出简单的验证码。
4. 调用第三方平台提供的接口进行识别。比如:斐斐打码,尖叫数据这些平台接口。
> ### setUp(),tearDown()和setUpClass(),tearDownClass()的区别:
参考答案:当测试用例有多个,setUp()和tearDown()就会被执行多次;不管测试用例有多少个,setUpClass()和tearDownClass()只会被执行一次。
> ### python的第三方模块/标准库有哪些?
time,random,unittest,selenium,HTMLTestRunner
> ### python的pass语句的作用是什么?
参考答案:占位符,当方法没有内容时,防止出现语法错误。
> ### 自动化写过哪些模块的脚本?
参考答案:主要是把冒烟测试的用例转化为脚本,比如,我这个xx商城系统,做自动化的模块有后台的上架商品,订单查询,添加团购活动,促销活动,前台的搜索商品,添加商品到购物车,下单等等。
> ### 元素的属性值是动态变化的,怎么定位这个元素?
参考答案:如果元素有属性值是动态变化的,我们就不要使用这个属性进行定位;我们可以使用这个元素的非动态变化,并且是唯一的值属性进行定位;也可以使用xpath或者css,使用层次+属性的方式定位。
> ### webdriver的原理是什么?
参考答案:浏览器的驱动,接收客户端发过来的指令(指令就是我们的脚本),浏览器的驱动根据接收到的指令,驱动浏览器工作。
> ### 你们是怎么检查自动化的结果是不是正确的?
参考答案:我们会用unittest单元测试框架提供的断言方式来检查实际结果和预期结果是否一致,常用的断言方式有assertEqual(),assertIn(),还有一些其他的,不常用就没记了。
> ### 怎么样提升自动化脚本成功率
1. 在容易失败的地方,加上sleep
2. 尽量定位一些稳定的元素
3. 使用try..except多中方式定位
> ### unittest单元测试怎么安装的?
参考答案:不需要安装,是python自带的,直接通过import 关键字引用就可以了。
> ### pytest了解吗?
参考答案:也是python的一个单元测试框架,它的用法比unittest框架复杂些。自动化测试我们一般是基于unittest框架来做的,pytest用的少,以后工作需要,我业余时间学习一下,很快上手。
> ### po(page object:页面对象)设计模式了解吗?
参考答案:po还是了解的。po是web自动化测试目前最佳的一种实践方式,简单来说就是类和类之间的封装和调用。
包括基础类、页面类、用例层等部分。目前正在往这个方面进阶脚本。
- 总章
- Oracle数据库
- 常见的Linux命令
- 理论内容整理
- 给你如下功能怎么测试
- 支付怎么测试
- 购物车怎么测试?
- 搜索功能怎么测试?
- 文件上传功能怎么测试?
- 登录功能怎么测试?
- 还款功能怎么测试?
- 订单功能怎么测试?
- 自动化测试篇
- 必记代码
- 接口测试篇
- 性能测试篇
- app测试篇
- 面试篇
- 项目篇
- 职业素养篇
- 真实案列分析
- 如何预防冷场
- redis
- 琪琪
- 禅道搭建手册
- 禅道搭建手册1
- 禅道的基本使用
- 基于Python3_Selenium的自动化
- Python3安装
- Python3基础
- 列表_元组_集合
- 函数_模块_类
- Python代码
- selenium环境
- selenium定位方式
- Selenium常见操作
- toast读取代码
- 添加用户代码
- 隐式等待与显式等待
- 循环添加用户
- 测试用例练习
- 测试用例优化
- Fiddler抓包工具
- 安装
- Fiddler使用
- 接口测试
- Jmeter的安装
- Jmeter使用
- jmeter+ant+jenkins接口自动化测试框架
- 接口安全测试
- 性能测试
- Nmon监控LInux系统
- Jmeter分布式
- 性能测试-具体案例
- Monkey
- 安装1
- Monkey使用
- appium自动化
- appium的安装
- appium基本使用
- 真机USB连接
- 问题排查
- Jenkins持续集成
- Jenkins安装
- Jenkins配置任务
- Python扩展内容
- Python连接数据库
- Python进行接口测试
- 开启服务