自动化测试常见问题(UI向 语言无关)
1、Selenium提供哪几种等待方式,各有什么优缺点。
答 :
a、线程等待 等待时间固定
优点:无视任何条件必定会执行
缺点:页面实际响应时间不确定,设置太长影响执行效率,设置太短可能无法获得需要的结果
b、隐式等待
优点:一次设置 全局可用,并且只要能找到元素就会继续执行不影响效率
缺点:等待条件单一,无法根据实际需要进行个性化定制
c、显式等待
优点:等待条件可以自定义,并且Selenium框架本身也提供了多种预置条件。符合大多数场景
例如需要等待页面上某个元素(如进度条)消失,则必须使用显示等待指定等待条件
缺点:代码量较多,每次定位元素时都需要调用一次。可以通过重新封装定位方法的方式解决。
1.1 、实际工作中一般使用哪种
答:实际工作中使用显式等待与线程等待相结合的方式。对于页面操作逻辑简单的页面 也可以使用隐式+线程。为提高操作的稳定性,除显示或隐式等待定位元素之外,每个步骤之间可以适当的添加一小段固定等待操作(如0.2~05秒)
切记不可将显式和隐式等待一起使用,等待时长会比设置的阀值更长
2、selenium是如何操作浏览器的
答:
selenium(webdriver)是一个中转,它提供了各种开发语言的API,使用时将API转换为json报文,向Driver(如ChromeDriver)发送请求,由Driver来创建新的session执行浏览器操作,
3、如何提高定位的成功率与稳定性
答: 元素有id尽量使用id定位
3.1 如果没有id或者id是随机的无法使用,该如何处理
答:可以考虑使用xpath或css选择器来定位。直接从页面复制的xpath兼容性很差,需要配合xpath的函数和轴来进行定位。
3.2 是否使用过xpath定位,介绍自己熟悉的xpath函数和轴
答:函数 - contains、text、not、start-with etc.
轴 - ancestor、following-sibling、preceding-sibling etc.
4、一个定位方法(比如多个元素有相同的id)能定位到多个元素时,如何指定操作哪个元素
答:使用 driver.findElements方法,此方法返回一个元素列表,使用时指定列表中的索引即可。
5、如何判定脚本中某一个用例执行时是通过还是失败?
答:通过设置检查点(断言)的方式实现。类似于人工操作,在一些步骤之后需要添加一个检查点来判定页面是否达到了期望的结果。
5.1 用过哪些类型的检查点
答:a 、 断言页面上指定元素的文本信息(text或value)
b、断言页面元素的属性。比如hidden、readonly等
c、连接数据库直接通过SQL获取数据进行断言
5.2 如何对数据表格进行断言
答:可以获取表格中所有元素的文本信息,拼成二维列表,排序后与期望的数据进行一一比较。也可以转换为json对象后再用第三方库比较
6、测试执行时如何尽量减少因环境问题等客观因素对测试结果造成的影响?
答:引入重试机制,对于测试失败的案例可以重新进行一次或多次测试。
6.1、某些特定的案例需要即使有异常抛出也不会影响后续步骤的执行,但需要记录此问题。该如何实现?
答:用 try catch块将其包含 如出现异常或断言失败则只是将异常信息记录在某个公共变量中,不抛出即可
7、如何实现同时对多种浏览器或浏览器的多个版本执行测试?
答:可以用过selenium grid 部署分布式的测试 启动hub之后 分别在不同的node中启动不同的浏览器driver
8、ui自动化如何处理验证码?
答:验证码设计的初衷本身就是为了自动化,所以在条件允许的情况下测试时尽量不要使用验证码。也可以几种方法应对
a、测试环境关闭验证码、或者通过在系统代码中添加钩子来避免在执行自动化测试时使用验证码
b、使用万能验证码
c、使用ocr之类的软件进行识别
9、如何处理文件的上传与下载?
答:上传文件一般是使用执行autoit脚本方式执行。但如果执行环境是linux时该工具无法使用。也可以使用pyautogui之类的跨平台工具执行上传。
下载操作,可以直接点击页面上的下载按钮执行。但Driver无法获得下载进度。所以对其校验比较麻烦。
9.1、如何校验下载的文件正确?
答:a、对于预期时间较短的下载操作,可以设置一个固定等待时间。之后对下载目录中的文件名及关键内容进行校验。
b、对于预期时间长的下载,建议从页面获取下载链接后通过httpclient之类的请求库执行下载操作。
10、如何看待测试用例依赖?
答:理想的自动化用例应该都是可以独立执行的,不依赖于任何其他案例。但这样往往对测试前置数据的要求非常高,实际工作中来看开发效率远不如一些简单的依赖关系。比如页面的增删改查功能 往往都是有关联的。所以还是需要根据实际情况来具体分析,原则还是尽量减少依赖,增强案例的独立性。
11、一个优秀的自动化测试框架(平台)应该具备哪些特点?
答:a、便于理解学习 - 使脚本开发人员能够快速上手。
b、便于维护与扩展 - 对于新的功能需求能够快速进行开发
c、移植性好 - 能适用各类不同系统的需求,框架中不应有任何业务相关的内容
12、什么是PO设计模式,有什么特点?
答:页面对象与脚本分离,优点是降低了业务操作与元素之间的耦合,使元素可以复用。
没有严格的标准,设计因人因项目而异。有些框架在页面中会定义其操作,有些就只是用来定义元素定位信息,而将操作进行了另一层的隔离。
个人更倾向于使用单独隔离操作的方式,开发脚本时可以将【元素+操作】进行任意的组合 自由度更高