【python面试题|python自动化测试面试题(二)(持续更新)】
接上一篇博文:https://blog.csdn.net/YZL40514131/article/details/125940126
21、selenium原理 a、当使用 Selenium 2.0 启动浏览器时,后台会同时启动基于 WebDriver Wire 协议的Remote Server,并与浏览器绑定。之后,Remote Server 就开始监听 Client 端的操作请求;
b、执行测试时,测试用例会作为 Client 端,将需要执行的页面操作请求以 Http Request 的方式发送给 Remote Server 。该 Http Request 的 body,是以 WebDriver Wire 协议规定的 JSON 格式来描述需要浏览器执行的具体操作;
c、Remote Server 接收到请求后,会对请求进行解析,并将解析结果发给 WebDriver,由WebDriver 实际执行浏览器的操作;
WebDriver 可以看做是直接操作浏览器的原生组件(Native Component),所以搭建测试环境时,通常都需要先下载浏览器对应的 WebDriver。
22、你的自动化用例的执行策略是什么?(重要) 1、自动化测试用例是用来监控的,再次目的下,我们就把自动化测试用例设置成定时执行的,每30分钟执行一次,在jenkins上创建一个定时任务即可
2、必须回归的用例。有些测试用例,在产品任何变动上线之前都需要回归测试
3、不需要经常执行的测试用例,我们没有必要一直回归执行,毕竟是有时间消耗的,有些时候非必要的业务不需要经常回归
4、不需要经常执行的测试用例就需要人工执行,在jenkins创建一个任务,需要执行的时候人工构建
23、Selenium有哪几种定位方式?用的最多的是哪种? tag_name:通过标签名称,找出来的元素太多了
name:用户输入input,不出意外总会有name属性
class_name
id:
1、同一个页面当中,某个id只能用一次,
2、如果元素有id,会优先使用id定位,
3、不好的消息,不是所有的元素都有id
link_text:连接的文本,只能用来定位连接
partial_link_text
css_selector
xpath:用的最多,具体的用法在博文https://blog.csdn.net/YZL40514131/article/details/123858970
24、UI自动化能发现多少Bug UI自动化的目的不是为了发现多少Bug,主要是为了减轻重复的基础操作和线上监控的作用
25、你们一般对什么case会进行自动化,自动化一般在哪个阶段进行 a、按照用户逻辑,从登录平台到操作一个完整的流程再到最后关闭浏览器这一套实现自动化,其中包括好多正向用例,
b、比较繁琐的操作,需要手工多次点点的对于这部分用例,也实现自动化测试
c、核心业务整个流程
a、项目后期进行回归测试、
b、其他项目上线会影响到该项目时,做回归测试
c、运维对数据库进行迁移时,做全量的回归测试
d、主要是主流程中比较容易实现的进行自动化,一般在集成阶段进行该版本的自动化监控,平常的话会一直跑线上监控的
26、你觉得自动化测试最大的缺陷是什么? 不可靠
不稳定
页面变化大,维护成本高
27、明明自己定位的元素是对的,执行自动化测试脚本时却报错,这时你有几种方法解决此问题?请写出你的解决方法(重要) 1、网络问题
2、环境问题
3、脚本稳定性问题(必要的时候加强制等待)
4、不在指定的frame
5、不在指定的窗口中
6、开发更新了代码,但是测试没有修改
28、简单说出如何用自动化测试脚本实现遍历复选框点击功能(要求全部勾上)。
xPathRadio = driver.find_element_by_xpath('//input[@type="radio"]')
# radiobox复选框对象我们必须使用find_elements方法去定位多个元素(复选框就是多元素)
radioboxes = driver.find_elements_by_xpath(xPathRadio)
# 使用循环遍历的方式,逐个点击这些定位到的元素
for radiobox in radioboxes:
radiobox.click()
29、 自动化测试用例如何编写?(重要) a.用例是自动化测试工程师自己设计的,一般刚开始已基本业务流程为主(登录–完成一个业务–退出)
b.从系统测试用例中进行筛选或由业务工程师提供
30、你觉得自动化测试的价值在哪里?你们公司为什么要做自动化测试?(重要) a、引用自动化测试之后,能代替大量繁琐的回归测试工作,把业务测试人员解放出来,既而让业务测试人员把精力集中在复杂的业务功能模块上,自动化测试一般是对稳定下来的功能进行自动化,保证不会因为产品的更新导致之前稳定下来的功能出现BUG
b、测试环境和线上环境监控
c、运维对数据库的迁移
31、如果一个元素无法定位,你一般会考虑哪些方面的原因?(重要) a.网络问题或者前端html和css加载过慢,导致页面加载元素过慢,加等待时间
b.页面有frame框架页,需要先跳转入frame框架再定位,不在指定的窗口中,
c.可能该元素是动态元素,定位方式要优化,可以使用部分元素定位或通过父节点或兄弟节点定位。
d.可能识别了元素,但是不能操作,比如元素不可用,不可写等。需要使用js先把前置的操作完成,
32、怎么验证元素是enable/disabled/checked状态? 定位元素后:分别通过isEnabled(),isSelected(),isDisplayed()三个方法进行判断。
33、自动化测试的时候是不是需要连接数据库做数据校验?
UI自动化不需要34、举例一下说明一下你遇到过那些异常
接口测试会需要
35、如何设计高质量自动化脚本(重要) 1、业务逻辑和测试逻辑分离。ElementNotSelectableException
:元素不能选择异常
ElementNotVisibleException
:元素不可见异常
NoSuchAttributeException
:没有这样属性异常
NoSuchElementException
:没有该元素异常
NoSuchFrameException
:没有该frame异常
TimeoutException
: 超时异常
Element not visible at this point
:在当前点元素不可见
2、业务中定义的方法和公共方法分离
3、测试数据和测试逻辑分离
4、元素表达式和页面方法分离
5、使用PO设计模式,将一个页面用到的元素和操作步骤封装在一个页面类中。如果一个元素定位发生了改变,我们只用修改这个页面的元素属性
6、对于页面类的方法,我们尽量从客户的正向逻辑去分析,方法中是一个独立场景,例如:登录到退出,而且不要想着把所有的步骤都封装在一个方法中。
7、测试用例设计中,减少测试用例之间的耦合度。
36、用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?(重要) 1.在经常检测失败的元素前尽量加上显式等待时间,等要操作的元素出现之后再执行下面的操作;
2.多线程的时候,减少测试用例耦合度,因为多线程的执行顺序是不受控制的;
3.多用 try 捕捉,处理异常;
4.尽量使用测试专用环境,避免其他类型的测试同时进行,对数据造成干扰。
37、webdriver可以用来做接口测试吗? 不可以,webdriver是专门做web的UI自动化参数
38、在python中进行数据驱动测试 在unittest中,没有自带的数据驱动,我们得借助第三方库ddt来实现,首先,我们得在python运行环境中安装ddt,用下列命令安装
pip install ddt
另外一个测试框架pytest,它自带数据驱动实现,是通过
@pytest.mark.parametrize(argnames,argvalues)
来实现参数化的。也可以根据自己需求用python实现数据的读取和驱动。
39、pytest 和 unittest 的区别? 1、pytest有自动收集用例的的功能
2、pytest有上千种插件,自己的插件系统
3、pytest有失败重新运行的功能
4、pytest有非常灵活的测试夹具、fixture、setUp、tearDown
5、pytest和unittest是完全兼容的
40、find_element() 和 find_elements() 有什么区别? find_element() :获取单个元素
el_list=driver.find_element_by_xpath(‘//div[@class=“name-box”]/a’)
find_elements() :获取一组元素
el_list=driver.find_elements_by_xpath(‘//div[@class=“name-box”]/a’)
例如:
from selenium import webdriver
import time
driver=webdriver.Chrome("C:\Program Files\Google\Chrome\Application\chromedriver.exe")
driver.get('https://qidian.com/rank/')#获取一组元素
el_list=driver.find_elements_by_xpath('//div[@class="name-box"]/a')
print(len(el_list))#遍历列表
for el in el_list:
print(el.text)
执行结果
捕星之执宰星河
7号基地
陈医生,别怂!
请公子斩妖
开局就较真,对面被我吓到报警!
做媒这一块,我谁都不服
曾经,我想做个好人
大明:我,调教木匠皇帝
身为超人弟弟的我却成了祖国人灵境行者
明克街13号
这游戏也太真实了
不科学御兽
家父汉高祖
深空彼岸
择日飞升
我的属性修行人生
我已不做大佬好多年择日飞升
夜的命名术
陈医生,别怂!
我的属性修行人生
我在修仙界长生不死
开局就较真,对面被我吓到报警!
宇宙职业选手
深空彼岸
什么叫六边形打野啊夜的命名术
家父汉高祖
择日飞升
明克街13号
这游戏也太真实了
道诡异仙
大乘期才有逆袭系统
我的属性修行人生
不科学御兽从洪荒逃到武侠
美漫:我的战锤模拟器
曹操穿越武大郎
捉诡二十年,我进入了惊悚游戏
什么叫Carry型上单啊
代价逆转:我在大周斩仙
从体术开始纵横诸天
从欢乐颂开始的影视人生
这个武者太危险
文章图片
文章图片
推荐阅读
- python|想去看演唱却总是抢不到票(教你用Python制作一个自动抢票脚本)
- python|python面试题——抽象基类和接口
- #|神经元的结构
- 计算机视觉|模板匹配与像素统计
- 字符串|7行代码让B站崩溃3小时,竟因“一个诡计多端的0”
- spring|spring,springboot,springmvc底层原理解析
- springboot|一文详解Spring、SpringBoot、Springcloud的关系与区别
- #|Servlet 架构思路(MVC)
- Python|Python 矩阵基本运算【numpy】