1、web自动化测试- UI自动化中定位不到元素的原因有哪些?
自动化定位不到元素的原因有:
1)定位器选择错误
2)定位字符串错误
3)元素嵌套在frame当中
4)页面元素没有及时加载
5)元素在新窗口中
6)脚本流程与实际不符
7)元素不在当前页
2、如何保证自动化测试的稳定性
自动化测试稳定性主要表现在两个方面:一个是元素定位的问题,一个是用例之间的依赖问题。
1)元素定位问题可以采用智能等待的方式尽可能的避免;
2)用例依赖可以解耦用例之间的关系,让每条用例都从一个共同的页面开始执行,比如首页,这就需要在测试框架中采用后置处理的方式使每条用例执行完成后都回到首页
3、web UI 自动化测试中显式等待、隐式等待的区别
相同点
都是智能等待,在一定时间范围内不断查找元素,一旦找到立刻结束查找继续执行代码,没找到才会一
直找到超时为止
不同点
隐式等待是全局性设置,并且可以随时更改,在更改后对之后的findxxx方法生效,对点击、输入之类的操作不起作用;
显式等待仅仅针对单一元素或一组生效,并且不仅仅是针对查找,也可以针对Alert、iframe、或者元素的某些属性进行自定义判断
4、在selenium中如何处理多窗口?
这个多窗口之间跳转处理,在实际selenium自动化测试经常遇到。点击一个链接,这个链接会在一个新
的tab打开,然后接下来要查找元素在新tab打开的页面,需要先将driver切换至window,然后再定位,
步骤如下:
- 先获取当前的windowhandle
- 操作打开新界面后,获取所有的windowhandles
- 遍历windowhandles,判断和当前的windowhandle不一样则切换至该windowhandle
4.window太多则可以按照title、url等其他信息进行判断切换
5、你是如何处理iframe里面元素定位的?
有时候我们写的元素定位表达式没有问题,但是脚本还是提示no such element,那么我们就需要考虑
这个元素是否在iframe中。通过f12查看元素HTML中是否有iframe标签,如果有iframe,需要先将
driver切换到iframe中,可以通过frame的name和id和索引三种方法来定位frame,或者先找到iframe
的元素,然后把这个元素传递进去也可以。
6、Webdriver中关闭浏览器的quit和close有什么区别
简单来说,这两个都可以实现退出浏览器session功能,
close是关闭你当前聚焦的tab页面,而quit是关闭全部浏览器tab页面,并退出浏览器session。
quit一般用在结束测试之前的操作,close用在执行用例过程中关闭某一个页面的操作
7、如何提高用例的覆盖率,减少漏测
1)要根据需求文档来编写用例,确保每条需求都被对应的用例覆盖
2)要充分理解业务,挖掘隐形需求,并编写对应的用例
3)除了正常的业务场景,多考虑一些异常的场景和数据
4)要从多个维度对软件进行测试,功能、性能、安全等各方面来考虑
5)多站在用户的角度去思考问题,模拟用户的使用场景
6)组织用例评审
8、App 做过哪些专项测试
- App 冷/热启动测试
2)App权限测试(设备权限、App权限设置)
3)App 安装/卸载/升级
4)App消息推送(App、短信、微信、QQ)
5)App 弱网
6)App 稳定性测试
9、介绍下你最近做过的一个项目
参考答案:
结合自己测过的业务细节,从以下几个方面来回答:
1) 项目名称
2) 项目平台(终端):app/web/pad
3) 主要业务针对****(用户群体,例如青少年群体、上班族)提供、、**
等功能的软件
4) 主要模块:
5) 我负责、、模块的测试,包括功能、接口、兼容性、界面(app 专项)
6) 项目的主流程:例如冒烟测试用例
7) 系统架构
8) 优势亮点:技术亮点(技术在*项目的应用,例如,使用 Fiddler 断点、mock),
管理亮点(例如,协调把控项目进度,分配测试任务,文档质量评审),其他
亮点(例如,沟通能力、工作态度、多角度换位思考)
10、你上一家公司***APP 项目里面开发和测试人员的比例分配是多少?
我上一家公司,加上我,一共是四个测试,一个测试的小组长加上三个组员,
前端开发大概是八九个人左右,后端开发大概是四五个人左右,产品是三个人。
11、遇到的印象最深的bug是?
(1)可以是体现 BUG 定位问题能力的 BUG
(2)可以是体现测试思维模式扩展的 BUG
(3)可以是体现相关技能提升的 BUG
(4)可以是业务逻辑复杂的 BUG
(5)可以是需求分析/评审阶段发现的用户体验类(易用性)的 BUG
(6)可以是需求分析/评审阶段发现的由于需求未明确而存在争议的 BUG
(7)可以是线上严重级别较低但用户体验效果非常差的 BUG
12、SQL 中常用的聚合函数都有哪些?
max(): 最大值
min(): 最大值
avg(): 最大值
sum(): 最大值
count(): 最大值
13、unittest 和 pytest 的区别
一、用例编写规则
1.unittest 提供了 test cases、test suites、test fixtures、test runner 相关的类,让测试更
加明确、方便、可控。使用 unittest 编写用例,必须遵守以下规则:
(1)测试文件必须先 import unittest
(2)测试类必须继承 unittest.TestCase
(3)测试方法必须以“test_”开头
(4)测试类必须要有 unittest.main()方法
2.pytest 是 python 的第三方测试框架,是基于 unittest 的扩展框架,比 unittest 更简洁,
更高效。使用 pytest 编写用例,必须遵守以下规则:
(1)测试文件名必须以“test_”开头或者"test"结尾(如:test_ab.py)
(2)测试方法必须以“test”开头。
(3)测试类命名以"Test"开头。
二、用例前置和后置
1.unittest 提供了 setUp/tearDown,每个用例运行前、结束后运行一次。setUpClass
和 tearDownClass,用例执行前、结束后,只运行一次
2.pytest 提供了模块级、函数级、类级、方法级的 setup/teardown,比 unittest 的
setUp/tearDown 更灵活。
三、断言
1.unittest 提供了 assertEqual、assertIn、assertTrue、assertFalse。
2.pytest 直接使用 assert 表达式。
四、报告
1.unittest 使用 HTMLTestRunnerNew 库。
2.pytest 有 pytest-HTML、allure 插件。
五、失败重跑
1.unittest 无此功能。
2.pytest 支持用例执行失败重跑,pytest-rerunfailures 插件。
六、参数化
1.unittest 需依赖 ddt 库,
2.pytest 直接使用@pytest.mark.parametrize 装饰器。
七、用例分类执行
1、unittest 默认执行全部用例,也可以通过加载 testsuit,执行部分用例。
2、pytest可以通过@pytest.mark来标记类和方法,pytest.main加入参数(“-m”)可以只运行标记的类和方法