软件测试-自动化测试面试基础相关
在上一家公司做自动化测试用的什么框架?
常见的自动化测试框架包括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、工具本身并无想像力。
怎么实施自动化测试?
- 编写自动化测试方案,明确自动化测试范围、模块,自动化测试方法、环境,自动化框架测试策略
- 编写自动化测试用例
- 编写自动化测试代码
- 对自动化测试结果进行分析,发现缺陷并定位是否是BUG,提交BUG
- 编写自动化报告
- 对编写的自动化测试代码进行优化
你觉得自动化测试最大的缺陷是什么?
自动化测试的最大缺陷之一是它无法完全代替手动测试。虽然自动化测试可以减少测试时间和成本,但它不能完全取代人工测试。自动化测试只能执行预定义的测试脚本,而无法检测出新的、未知的问题。此外,自动化测试需要投入大量的时间和资源来编写和维护测试脚本,因此,如果测试需求发生变化,可能需要重新编写大部分测试脚本。
另一方面,自动化测试也会受到测试环境和工具的影响。由于测试环境和工具的复杂性,可能会出现测试结果不准确的情况。例如,当测试环境出现网络问题时,自动化测试可能会失败,而手动测试可以通过一些方法解决这个问题。
最后,自动化测试的质量也取决于测试脚本的编写质量。如果测试脚本编写不当,就会出现测试结果不准确的情况,这可能会导致测试结果不可靠。因此,需要花费大量时间和精力来编写高质量的测试脚本。
自动化代码中,用到了哪些设计模式?
在自动化代码中,常用的设计模式包括:
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 是一种自动化的软件开发流程,它可以帮助开发者更快地将代码从开发环境部署到生产环境,从而提高软件开发的效率和