当前位置: 首页 > article >正文

软件测试-自动化测试面试基础相关

 在上一家公司做自动化测试用的什么框架?

常见的自动化测试框架包括Selenium、Appium、Robot Framework、JUnit、TestNG等。

我在上家公司做自动化测试用的是:

接口:python+request+pytest+json数据驱动+jenkins

功能方面使用的是python+Selenium/Appium+数据驱动+Jenkins

请说一下手动测试与自动化测试的优缺点

手动测试和自动化测试都有其优缺点。

手动测试的优点:

1. 灵活性:手动测试可以根据测试人员的经验和判断进行测试,可以在测试过程中发现更多的问题。

2. 人性化:手动测试可以模拟真实用户的操作,在测试过程中更容易发现用户体验上的问题。

3. 适用性:手动测试适用于小规模、简单的应用程序,不需要太多的技术支持和测试工具。

手动测试的缺点:

1. 速度慢:手动测试需要人工进行测试,测试时间长,测试效率低。

2. 重复性差:手动测试容易出现遗漏和重复测试的问题,测试结果可能会受到测试人员个人因素的影响。

3. 无法自动化:手动测试无法进行自动化,测试人员需要反复进行测试,无法实现测试的自动化。

自动化测试的优点:

1. 速度快:自动化测试可以快速进行测试,测试效率高。

2. 重复性好:自动化测试可以避免遗漏和重复测试的问题,测试结果稳定可靠。

3. 可重复使用:自动化测试可以重复使用测试脚本,节省测试工作量。

4. 可以进行大规模测试:自动化测试可以进行大规模测试,测试范围广。

自动化测试的缺点:

1. 技术门槛高:自动化测试需要具备一定的编程技能和测试工具的使用经验。

2. 不适用于所有测试场景:某些测试场景,如UI测试等,无法完全自动化。

3. 无法完全取代手动测试:自动化测试无法完全取代手动测试,测试人员仍需要进行手动测试以确保测试结果的准确性。

综上所述,手动测试和自动化测试各有优缺点,测试人员需要根据具体的测试场景和测试需求选择合适的测试方式。

你可以这么回答:

手动测试优点:

测试人员具有经验和对错误的猜测能力。

测试人员具有审美能力和心理体验。

测试人员具有是非判断和逻辑推理能力。

缺点:

重复的手工回归测试,代价昂贵、容易出错。

依赖于软件测试人员的能力。

自动化测试优点:

节约成本、提高效率、在回归测试中节约大量时间、可以重复使用、做手工测试不能做的事

缺点:

1、不能取代手工测试。

2、手工测试比自动测试发现的缺陷更多。

3、测试自动化不能 提高有效性。

4、测试自动化可能会制约软件开发。由于自动测试比手动测试更脆弱,所以维护会受到限制,从而制约软件的开发。

5、工具本身并无想像力。

 

怎么实施自动化测试?

  1. 编写自动化测试方案,明确自动化测试范围、模块,自动化测试方法、环境,自动化框架测试策略
  2. 编写自动化测试用例
  3. 编写自动化测试代码
  4. 对自动化测试结果进行分析,发现缺陷并定位是否是BUG,提交BUG
  5. 编写自动化报告
  6. 对编写的自动化测试代码进行优化

你觉得自动化测试最大的缺陷是什么?

自动化测试的最大缺陷之一是它无法完全代替手动测试。虽然自动化测试可以减少测试时间和成本,但它不能完全取代人工测试。自动化测试只能执行预定义的测试脚本,而无法检测出新的、未知的问题。此外,自动化测试需要投入大量的时间和资源来编写和维护测试脚本,因此,如果测试需求发生变化,可能需要重新编写大部分测试脚本。

另一方面,自动化测试也会受到测试环境和工具的影响。由于测试环境和工具的复杂性,可能会出现测试结果不准确的情况。例如,当测试环境出现网络问题时,自动化测试可能会失败,而手动测试可以通过一些方法解决这个问题。

最后,自动化测试的质量也取决于测试脚本的编写质量。如果测试脚本编写不当,就会出现测试结果不准确的情况,这可能会导致测试结果不可靠。因此,需要花费大量时间和精力来编写高质量的测试脚本。

 自动化代码中,用到了哪些设计模式?

在自动化代码中,常用的设计模式包括:

1. 工厂模式:用于创建对象,根据不同的需求返回不同的实例。

2. 单例模式:确保一个类只有一个实例,并提供全局访问点,常用于共享资源的管理。

3. 装饰器模式:通过包装对象来扩展其功能,不改变原有对象的接口。

4. 策略模式:将一系列算法封装成独立的类,使它们可以相互替换,使得算法的变化不会影响到使用算法的客户端。

5. 观察者模式:定义了一种一对多的依赖关系,当一个对象状态改变时,它的所有依赖者都会收到通知并自动更新。

6. 模板方法模式:定义一个操作中的算法的骨架,将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义算法的某些特定步骤。

7. 适配器模式:将一个类的接口转换成客户端所期望的另一种接口,从而使原本不兼容的类可以协同工作。

8. 命令模式:将请求封装成对象,使得可以用不同的请求对客户进行参数化,同时支持命令的排队、记录日志、撤销等操作。

单例模式的常规应用

单例模式是一种常用的设计模式,其主要作用是保证一个类只有一个实例,并提供一个全局的访问点。在实际的应用中,单例模式可以用于很多场景,例如:

1. 日志收集器:在应用程序中,我们通常需要记录日志信息,以便后续的调试和分析。为了避免每个模块都创建一个日志对象,可以使用单例模式来创建一个全局的日志收集器,以便在整个应用程序中共享使用。

2. 数据库连接池:在多线程应用中,如果每个线程都创建一个数据库连接,会导致资源浪费和性能下降。因此,可以使用单例模式来创建一个数据库连接池,以便在多个线程中共享使用。

3. 配置管理器:在应用程序中,通常需要读取和管理配置信息。为了避免重复读取配置信息,可以使用单例模式来创建一个全局的配置管理器,以便在整个应用程序中共享使用。

4. 缓存管理器:在应用程序中,通常需要缓存一些数据以提高性能。为了避免每个模块都创建一个缓存对象,可以使用单例模式来创建一个全局的缓存管理器,以便在整个应用程序中共享使用。

总之,单例模式可以用于任何需要保证只有一个实例的场景,以提高应用程序的性能和可维护性。

上一个项目中自动化测试的执行策略?

自动化测试的执行策略通常包括以下几个步骤:

1. 选择合适的自动化测试工具:根据被测软件的类型和特点,选择合适的自动化测试工具,例如Selenium、Appium等。

2. 制定自动化测试计划:制定自动化测试计划,包括测试的范围、测试用例的编写和维护、测试环境的搭建、测试数据的准备等。

3. 编写测试脚本:根据测试计划和测试用例,编写自动化测试脚本,实现测试场景的模拟和测试数据的输入。

4. 执行自动化测试脚本:在搭建好的测试环境中,执行自动化测试脚本,记录测试结果和发现的缺陷。

5. 缺陷管理和跟踪:对发现的缺陷进行记录、分类、分析和跟踪,确保缺陷得到及时修复。

6. 定期更新自动化测试脚本:根据软件系统的更新和变化,定期更新自动化测试脚本,保证测试用例的完整性和正确性。

7. 提供自动化测试报告:根据执行的自动化测试结果,生成自动化测试报告,包括测试用例的执行情况、测试结果、发现的缺陷等信息,为软件开发人员提供改进软件系统的参考依据。

怎么对含有验证码的功能进行自动化测试?

对于含有验证码的功能进行自动化测试,可以考虑以下几种方法:

1. 人工输入验证码:在自动化测试脚本执行到需要输入验证码的步骤时,可以通过调用人工手动输入验证码的方法来模拟用户的操作。

2. 绕过验证码:如果验证码只是为了防止机器人攻击等安全原因而设置的,可以考虑通过其他方式绕过验证码,例如通过修改配置文件或在代码中直接设置验证码的值等。

3. 使用第三方工具:可以使用一些第三方工具来自动破解验证码,例如Tesseract OCR等开源免费的OCR识别库,或使用一些收费的验证码识别平台。

4. 后台开发人员提供万能验证码,或者设置指定号码验证码随机输入,这种方法属于不合规,不建议使用

5. 自己去编写脚本访问数据库拿到数据库日志里面手机短信验证码

如何优化和提高 Selenium 脚本的执行速度? 

以下是一些优化和提高 Selenium 脚本执行速度的方法:

1. 使用隐式等待(Implicit Wait):在代码中设置一个全局的等待时间,当执行操作时如果元素没有立即出现,Selenium 将等待该时间后再执行下一步操作,避免了不必要的等待时间。

2. 使用显式等待(Explicit Wait):在需要等待的特定操作中,使用显式等待,等待特定的元素、文本、属性等出现或改变,避免了不必要的等待时间。

3. 使用 CSS 选择器:使用 CSS 选择器来查找元素,比使用 XPath 或 ID 等方式更快速和精确。

4. 使用 headless 模式:在不需要可视化界面的情况下,使用 headless 模式可以大幅提高脚本执行速度。

5. 最小化浏览器窗口:最小化浏览器窗口可以减少渲染时间和资源占用,提高脚本执行速度。

6. 优化代码逻辑:优化脚本代码逻辑,尽量减少重复的操作和代码,避免不必要的等待和网络请求。

7. 优化测试环境:使用性能更好的硬件和网络环境,可以提高脚本执行速度。

需要注意的是,优化和提高 Selenium 脚本执行速度并不是一件简单的事情,需要根据具体情况进行优化和调整。同时也应该注意不要过度优化,以免影响测试的准确性和可靠性。

 

遇到alert弹出窗如何处理?

在 Selenium 中,可以使用 `switch_to.alert` 方法来处理 alert 弹出窗。

弹出窗有三种类型:

1. 确认框(Confirmation box):包含确认和取消两个按钮。
2. 提示框(Prompt box):包含文本输入框和确认和取消两个按钮。
3. 警告框(Alert box):只包含一个 OK 按钮。

对于确认框和提示框,可以使用 `accept()` 和 `dismiss()` 方法来点击确认和取消按钮。对于提示框,可以使用 `send_keys()` 方法来输入文本。

以下是一个示例代码,来演示如何处理一个确认框:

from selenium import webdriver
from selenium.webdriver.common.alert import Alert

driver = webdriver.Chrome()
driver.get("http://www.example.com")

alert = Alert(driver)
alert_text = alert.text

# 点击确认框的确认按钮
alert.accept()

# 点击确认框的取消按钮
# alert.dismiss()

# 输入文本到提示框
# alert.send_keys("text")

driver.quit()

 需要注意的是,如果 alert 弹出窗没有出现,那么在调用 `switch_to.alert` 方法时,会抛出 `NoAlertPresentException` 异常。因此在处理 alert 弹出窗时,需要进行异常处理。

元素定位方法你熟悉的有哪些?

Selenium 中常用的元素定位方法有以下几种:

1. ID 定位:使用 `find_element_by_id()` 或 `find_elements_by_id()` 方法,通过元素的 ID 属性进行定位。

2. Name 定位:使用 `find_element_by_name()` 或 `find_elements_by_name()` 方法,通过元素的 Name 属性进行定位。

3.Class Name 定位:使用 `find_element_by_class_name()` 或 `find_elements_by_class_name()` 方法,通过元素的 Class Name 属性进行定位。

4.Tag Name 定位:使用 `find_element_by_tag_name()` 或 `find_elements_by_tag_name()` 方法,通过元素的标签名称进行定位。

5. Link Text 定位:使用 `find_element_by_link_text()` 或 `find_elements_by_link_text()` 方法,通过元素的链接文本进行定位。

6.Partial Link Text 定位:使用 `find_element_by_partial_link_text()` 或 `find_elements_by_partial_link_text()` 方法,通过元素的部分链接文本进行定位。

7. XPath 定位:使用 `find_element_by_xpath()` 或 `find_elements_by_xpath()` 方法,通过元素的 XPath 表达式进行定位。

8.CSS Selector 定位:使用 `find_element_by_css_selector()` 或 `find_elements_by_css_selector()` 方法,通过元素的 CSS Selector 进行定位。

 

Seleinum是否有读取excel文件的库

Selenium 本身不提供读取 Excel 文件的库,但是可以与 Python 中的第三方库 `openpyxl` 或 `xlrd` 配合使用来读取 Excel 文件。

其中,`openpyxl` 适用于读取和写入 Excel 2007 及以上版本格式的文件(即 .xlsx 格式),而 `xlrd` 则适用于读取 Excel 2003 及以下版本格式的文件(即 .xls 格式)。

以下是使用 `openpyxl` 库读取 Excel 文件的示例代码:

 

from openpyxl import load_workbook

# 打开 Excel 文件
wb = load_workbook(filename='example.xlsx', read_only=True)

# 选择工作表
ws = wb['Sheet1']

# 读取单元格数据
cell_value = ws['A1'].value
print(cell_value)

# 读取整个行的数据
row_values = [cell.value for cell in ws[2]]
print(row_values)

# 读取整个列的数据
col_values = [cell.value for cell in ws['B']]
print(col_values)

# 关闭 Excel 文件
wb.close()

需要安装 `openpyxl` 库,可以使用以下命令进行安装:

pip install openpyxl

在selenium自动化测试过程中,举例一下你遇到过那些异常

在 Selenium 自动化测试过程中,常见的异常包括:

1. `NoSuchElementException`:当使用 `find_element_by_xxx` 方法查找元素时,如果没有找到符合条件的元素,就会抛出该异常。

2. `TimeoutException`:当等待某个元素或某个条件超时时,就会抛出该异常。

3. `StaleElementReferenceException`:当通过一个元素的引用去操作该元素,但是该元素已经被删除或者发生了变化,就会抛出该异常。

4. `ElementNotInteractableException`:当尝试与一个不可交互的元素进行交互时,就会抛出该异常。

5. `ElementClickInterceptedException`:当尝试点击某个元素时,但是该元素被其他元素遮挡,就会抛出该异常。

6. `UnexpectedAlertPresentException`:当弹出了意外的警告框(Alert)时,就会抛出该异常。

7. `WebDriverException`:当发生不可预测的异常时,就会抛出该异常。

这些异常通常都有相应的解决方案,比如等待元素出现重新定位元素模拟键盘操作等。在编写 Selenium 自动化测试脚本时,需要注意捕获和处理这些异常,以保证测试的稳定性和可靠性。

 

 你查找元素遇到过在Frame里面吗?你是如何处理Frame里面元素定位的?

是的,当元素在 Frame 中时,我们需要使用 `switch_to.frame()` 方法来切换到对应的 Frame 中,然后再进行元素的定位和操作。

例如,如果我们要查找一个在 Frame 中的文本框,我们需要先使用 `switch_to.frame()` 方法切换到对应的 Frame 中,然后再使用 `find_element_by_xxx()` 方法查找该文本框。查找完成后,需要使用 `switch_to.default_content()` 方法切换回主页面。

 下面是一个示例代码:

from selenium import webdriver

driver = webdriver.Chrome()

# 打开页面
driver.get("http://example.com")

# 切换到 Frame 中
frame = driver.find_element_by_xpath("//iframe[@id='frame_id']")
driver.switch_to.frame(frame)

# 在 Frame 中查找元素并操作
text_box = driver.find_element_by_xpath("//input[@id='text_box_id']")
text_box.send_keys("hello world")

# 切换回主页面
driver.switch_to.default_content()

# 关闭浏览器
driver.quit()

需要注意的是,当需要切换到多层嵌套的 Frame 中时,需要多次使用 `switch_to.frame()` 方法切换到对应的 Frame 中。另外,如果 Frame 中的元素没有被正确定位到,可能是因为 Frame 加载的速度较慢,需要等待一段时间后再进行定位。

 在执行脚本过程,如何实现当前元素高亮显示?

在执行脚本过程中,可以通过 JavaScript 代码实现当前元素高亮显示。具体实现方法如下:

1. 首先,需要在 Python 代码中使用 `execute_script()` 方法执行 JavaScript 代码。例如:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://example.com")

# 定位元素
element = driver.find_element_by_xpath("//input[@id='text_box_id']")

# 使用 JavaScript 代码高亮显示该元素
driver.execute_script("arguments[0].style.border = '2px solid red'", element)

# 关闭浏览器
driver.quit()

2. 在 JavaScript 代码中,使用 `arguments[0]` 表示传入的第一个参数,即要高亮显示的元素。使用 `style.border` 设置元素的边框样式,可以将元素的边框设置为红色实线 2 像素宽度的边框。

通过上述方法,即可在执行脚本过程中实现当前元素高亮显示。需要注意的是,高亮显示只是为了方便调试和查看,实际自动化测试脚本中应该避免使用这种方法。

你知道哪些测试自动化的脚本技术?

常见的测试自动化脚本技术有以下几种:

1. Selenium:Selenium 是一个广泛使用的自动化测试工具,它支持多种编程语言,并且可以模拟用户在浏览器中的操作,如点击、输入、下拉框选择等。

2. Appium:Appium 可以用于自动化测试移动应用程序,它支持多种移动操作系统,如 iOS、Android。与 Selenium 类似,Appium 也可以模拟用户在移动设备中的操作。

3. Robot Framework:Robot Framework 是一个通用的自动化测试框架,它支持多种测试库和测试类型,包括 Web 自动化测试、API 测试、数据库测试等。

4. TestNG:TestNG 是一个用于 Java 平台的测试框架,它可以用于单元测试、集成测试、端到端测试等多种测试场景,而且支持并发测试。

5. JUnit:JUnit 是一个专门用于 Java 单元测试的框架,它可以用于测试 Java 类和方法的正确性,支持断言、测试用例组织、测试结果报告等功能。

6. Pytest:Pytest 是一个用于 Python 平台的测试框架,它可以用于单元测试、集成测试、端到端测试等多种测试场景,而且易于学习和使用。

这些测试自动化脚本技术都有各自的特点和适用场景,选择适合自己的技术可以提高测试效率和质量。

 

谈谈你对 CI/CD 的理解

CI/CD 是指持续集成/持续交付,是一种软件开发实践,它将软件开发的各个阶段(比如构建、测试、部署等)自动化,从而提高软件开发的效率和质量。

持续集成(CI)是指在开发过程中,不断地将代码集成到主干,并且进行自动化构建和测试,以确保代码质量。

持续交付(CD)是指在开发过程中,不断地将代码交付到生产环境,并且进行自动化部署和监控,以确保软件可用性。

CI/CD 是一种自动化的软件开发流程,它可以帮助开发者更快地将代码从开发环境部署到生产环境,从而提高软件开发的效率和

 


http://www.kler.cn/a/6799.html

相关文章:

  • SDIO 和MISC 什么关系
  • 笔记02----重新思考轻量化视觉Transformer中的局部感知CloFormer(即插即用)
  • 【第七节】在RadAsm中使用OllyDBG调试器
  • Stable Diffusion核心网络结构——CLIP Text Encoder
  • golang开源框架:go开源验证框架validator
  • leetcode 面试150之 Z 字形变换
  • 想成为一名【黑客】,你该如何快速的入门?
  • 项目1新知识
  • SpringBoot简介
  • 【django开发手册】如何使用select_related进行一次连表查询
  • 时间状语前不用介词的几种情况
  • 力扣8. 字符串转换整数 (atoi) 15行极简C++ 代码一次遍历通过
  • 【面试】面试官问的几率较大的网络安全面试题
  • 最优清零方案 蓝桥杯 2138 python实现
  • Java初阶 ( String 类)
  • 【新2023Q2押题JAVA】华为OD机试 - 打折买水果
  • 浅谈JVM(二):类加载机制
  • 4_vim的高级用法配置
  • 【Redis】redis跟数据库的数据同步问题
  • 【蓝桥杯】【嵌入式组别】第八节:EEPROM
  • TCP报文的交互过程
  • 【FLEXPART】拉格朗日粒子扩散模式
  • 2023-Python实现有道翻译接口加密解密
  • Unity组件——LayoutElement (UI自动布局组件)说明
  • Springmvc程序
  • Unity Animation -- 导入动画