自动化测试篇
1.列出你所知道的自动测试工具和框架,选一个你所熟悉的,简述用它进行自动化测试的步骤
参考答案:
常见的自动化测试工具和框架包括Selenium、Appium、JUnit、TestNG、Cucumber、Robot Framework等。我选择Selenium作为我熟悉的工具进行简述。
使用Selenium进行自动化测试的步骤如下:
-
安装和配置:首先,需要安装Selenium WebDriver,并配置相应的浏览器驱动,如ChromeDriver、GeckoDriver等。
-
编写测试脚本:使用编程语言(如Java、Python等)编写自动化测试脚本,通过Selenium提供的API来操作浏览器。可以使用基本的定位元素和操作元素的方法,如findElement、sendKeys、click等,以及其他高级操作,如处理弹窗、多窗口切换等。
-
设置测试环境:在测试脚本中设置测试环境,如打开浏览器、输入URL等。
-
编写断言:在测试脚本中添加断言,验证测试结果是否符合预期。可以使用Selenium提供的断言方法,如assertEquals、assertTrue等。
-
运行测试脚本:使用测试框架(如JUnit、TestNG)运行测试脚本,生成测试报告。可以通过命令行或集成开发环境来执行测试。
-
分析测试结果:分析测试报告,查看测试结果是否通过,并定位测试失败的原因。
-
维护和更新:根据需求的变化,对测试脚本进行维护和更新,保持自动化测试的可靠性和稳定性。
总结来说,使用Selenium进行自动化测试的步骤包括安装和配置、编写测试脚本、设置测试环境、编写断言、运行测试脚本、分析测试结果以及维护和更新。这些步骤可以帮助开发人员和测试人员快速构建和执行自动化测试。
2.什么样的产品或模块适合实施自动化测试?
参考答案:
自动化测试适用于各种类型的软件产品和模块,包括:
-
Web应用程序:自动化测试可以用于验证Web应用程序的功能、界面和性能。
-
移动应用程序:自动化测试可以用于验证移动应用程序的功能、界面和兼容性,支持iOS和Android平台。
-
桌面应用程序:自动化测试可以用于验证桌面应用程序的功能和性能,例如Windows桌面应用程序。
-
API和微服务:自动化测试可以用于验证API和微服务的功能和性能。
-
数据库:自动化测试可以用于验证数据库的功能和性能,例如数据读取和写入操作。
-
安全性测试:自动化测试可以用于验证系统的安全性,例如检查SQL注入或跨站脚本攻击。
-
性能测试:自动化测试可以用于验证系统的性能和负载承受能力。
总的来说,任何需要反复测试和验证的软件产品或模块都适合实施自动化测试。自动化测试可以提高测试效率、减少人为错误,并快速捕捉和修复问题。
QTP篇
1.GetROProperty,GetTOProperty,GetTOProperties 3个函数的区别
参考答案:
GetROProperty函数用于获取对象的运行时属性值,即对象在当前时刻的属性值。这些属性值通常表示对象的状态、属性、位置等信息。
GetTOProperty函数用于获取测试对象的测试对象属性值,即对象在测试脚本中设置的属性值。这些属性值通常表示对象在测试脚本中设定的特定状态或属性。
GetTOProperties函数用于获取测试对象的所有测试对象属性值。这个函数返回一个关联数组,其中包含了对象的所有测试对象属性及其对应的值。
这三个函数的区别在于获取的属性范围不同,GetROProperty获取的是运行时属性值,GetTOProperty获取的是测试对象属性值,GetTOProperties获取的是所有测试对象属性的集合。
2.什么是检查点,检查点的作用是什么,请列举出你所知道的检查点类型
参考答案:
检查点是软件测试过程中的一种技术,用于在测试执行过程中检测系统的状态是否符合预期,以便确定测试是否通过或失败。它通常用于验证软件功能、数据正确性和性能等方面。
检查点的作用包括:
- 验证功能:通过检查点可以验证系统是否正确执行了特定的功能,例如确认一个按钮是否被正确激活。
- 验证数据:可以检查系统是否正确地处理和显示数据,例如确认表格中的数据是否正确加载。
- 验证界面:可以检查系统的用户界面是否符合预期,例如确认页面布局是否正确。
- 验证性能:可以检查系统是否能够在预期的时间范围内完成某个操作,例如确认数据库查询的响应时间是否符合要求。
以下是一些常见的检查点类型:
- 文本检查点:用于验证文本是否正确显示,例如验证页面标题或错误提示信息是否正确。
- 图像检查点:用于验证图像是否正确显示,例如确认图标、按钮或图片是否正确加载。
- 表格检查点:用于验证表格中的数据是否正确加载,例如确认表格中的数据和预期的数据是否一致。
- 链接检查点:用于验证链接是否正确指向预期的页面,例如确认导航菜单中的链接是否导航到正确的页面。
- 数据库检查点:用于验证数据库中的数据是否正确,例如确认数据库中的记录是否与预期一致。
- 响应时间检查点:用于验证系统的响应时间是否在可接受范围内,例如确认一个功能的响应时间是否满足性能要求。
这只是一些常见的检查点类型,实际上还有许多其他类型的检查点,可以根据具体测试需求选择适合的检查点类型。
3.在VBScript中,正则表达式通常被应用到什么地方,并且写出一个验证有效Email地址的正则表达式。
参考答案:
在VBScript中,正则表达式通常被用于字符串匹配和验证。正则表达式可以用来检查字符串是否符合特定的模式或格式,并对其进行处理。常见的应用包括验证邮箱地址、电话号码、密码强度等。
以下是一个验证有效Email地址的正则表达式的示例:
vbscript
Function IsValidEmail(email)
Dim regex
Set regex = New RegExp
' 设定Email地址的模式
regex.Pattern = "^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$"
' 忽略大小写
regex.IgnoreCase = True
' 执行匹配
IsValidEmail = regex.Test(email)
End Function
这个正则表达式验证了以下条件:
- 邮箱用户名可以包含字母、数字、下划线和连字符(-)
- 邮箱用户名中的点(.)可以重复出现,但不能连续出现
- 邮箱域名由字母、数字和连字符构成
- 邮箱域名中的点(.)可以重复出现,但不能连续出现
- 邮箱域名的最后一部分必须是2到7个字母(例如.com、.org、.edu等)
使用示例:
vbscript
Dim email
email = "test@example.com"
If IsValidEmail(email) Then
MsgBox "邮箱地址有效"
Else
MsgBox "邮箱地址无效"
End If
以上代码会弹出一个消息框,告诉你邮箱地址是否有效。
4.用VBScript删除E盘下的test文件夹
参考答案:
VBScript中可以使用FileSystemObject来操作文件和文件夹。下面是一个删除E盘下test文件夹的示例代码:
vbscript
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim folderPath
folderPath = "E:\test"
If fso.FolderExists(folderPath) Then
fso.DeleteFolder folderPath, True
MsgBox "成功删除文件夹"
Else
MsgBox "文件夹不存在"
End If
Set fso = Nothing
请注意,在删除文件夹时,第二个参数为True表示删除包括子文件夹和文件在内的所有内容。如果想仅删除文件夹本身,可以将第二个参数设置为False。
另外,在使用VBScript时,请确保以管理员身份运行脚本,否则可能没有权限删除文件夹。
5.写一小段QTP脚本,需要将global sheet中testvalue列第2行到第5行的数据读取出,读取成功后打印这些数据,请用testinput(testvalue)函数
参考答案:
' 利用QTP脚本,读取global sheet中testvalue列第2行到第5行的数据并打印 ' 使用testinput(testvalue)函数
' 创建测试对象 Dim globalSheet, testData Set globalSheet = DataTable.GlobalSheet Set testData = globalSheet.GetParameter("testvalue")
' 定义函数testinput Function testinput(value) MsgBox value End Function
' 读取数据 testinput(testData.Value(2)) testinput(testData.Value(3)) testinput(testData.Value(4)) testinput(testData.Value(5))
selenium篇
1.webdriver与selenium的区别
参考答案:
WebDriver和Selenium是两个不同的工具,但它们之间也有一些相似之处。
WebDriver是一个用于自动化测试的工具,它提供了一组API,用于控制浏览器执行各种操作。WebDriver可以与多种浏览器进行交互,并提供了一些基本的操作方法,如点击、输入文本、获取元素等。
Selenium是一个自动化测试框架,它包含了一系列工具和库,用于执行自动化测试任务。Selenium WebDriver是Selenium的一个子项目,它使用WebDriver API来控制浏览器,并执行自动化测试任务。
区别:
- WebDriver是一个API,而Selenium是一个完整的自动化测试框架。
- WebDriver可以与多种浏览器进行交互,而Selenium主要与浏览器进行交互。
- WebDriver提供了一些基本的操作方法,如点击、输入文本、获取元素等,而Selenium提供了更多的功能,如测试套件管理、并行执行等。
- WebDriver可以使用多种编程语言来编写测试脚本,如Java、Python、C#等,而Selenium主要使用Java编写测试脚本。
- WebDriver可以直接控制浏览器,而Selenium需要通过WebDriver来控制浏览器。
总的来说,WebDriver是Selenium的一个核心组成部分,用于控制浏览器执行自动化测试任务。Selenium是一个完整的自动化测试框架,它包含了WebDriver以及其他一些工具和库,用于执行自动化测试任务。
2.断言(assert)和验证(verify)的区别,分别何时使用
参考答案:
断言(assert)和验证(verify)都是用来检查程序中的条件是否满足的方法,但它们的使用场景和目的略有不同。
断言(assert)通常用于程序开发和测试阶段,用于检查程序中的条件是否为真。它可以在代码中插入断言语句来声明某个条件应该为真,如果条件不为真,断言会引发一个异常并终止程序的执行。断言的目的是在开发和测试阶段尽早发现程序中的错误和问题。
验证(verify)通常用于实际运行环境中,用于检查程序中的条件是否满足,并根据条件的结果采取相应的操作。验证可以是简单的if语句,也可以是更复杂的逻辑判断。验证的目的是在程序运行时动态地检查条件,并根据条件的结果进行相应的处理。
总结起来,断言(assert)是一种在开发和测试阶段用于检查程序中的条件是否为真的方法,它旨在尽早发现错误和问题。验证(verify)则是一种在实际运行环境中动态地检查条件,并根据条件的结果进行相应操作的方法。
3.selenium如何测试ajax功能,简述即可
参考答案:
Selenium可以通过以下方式来测试Ajax功能:
-
等待Ajax请求完成:Selenium提供了
WebDriverWait
类和ExpectedConditions
类,可以使用WebDriverWait
的until
方法结合ExpectedConditions
中的presence_of_element_located
或visibility_of_element_located
等条件,来等待页面上的某个元素出现或可见,从而判断Ajax请求是否完成。 -
模拟Ajax请求:Selenium提供了
JavascriptExecutor
接口,可以使用execute_script
方法来执行JavaScript代码。通过执行一段JavaScript代码来模拟Ajax请求,然后再通过其他Selenium操作来验证请求的结果,从而测试Ajax功能。 -
监听Ajax请求:可以使用Selenium的
EventFiringWebDriver
类来注册一个监听器,通过监听beforeNavigateTo
、beforeClickOn
、afterClickOn
等事件,可以捕获到页面上的Ajax请求。然后可以通过其他Selenium操作来验证请求的结果,从而测试Ajax功能。
需要注意的是,对于Ajax请求的测试,需要结合页面的具体实现和使用的技术栈来选择合适的测试方法。同时还需要注意页面加载的超时时间,避免由于Ajax请求过长而导致测试超时。
自动化实战篇
将如下的测试场景用最熟悉的自动化工具实现,写出具体的实施步骤和脚本内容,测试数据自己准备
测试内容:上传功能
测试目的:上传功能可支持一次上传999个文件
测试步骤:1.准备数据 2.上传文件 3.等待上传完成 4.判断上传完成及成功预期结果:上传成功
说明:每个文件内容需不一样,文件名无要求
参考答案:
以Selenium WebDriver为例,以下是一个使用Python编写的自动化脚本示例:
- 准备数据:
- 准备999个文件,每个文件内容不一样(可以使用随机文本生成工具生成)。
- 上传文件:
-
打开网页并进入上传页面。
-
使用循环遍历的方式,逐个上传文件。
-
使用WebDriver定位上传按钮元素,并发送文件路径。
示例代码:
python
from selenium import webdriver
import os
# 创建WebDriver对象
driver = webdriver.Chrome()
# 打开网页并进入上传页面
driver.get("http://example.com/upload")
# 循环遍历上传文件
for i in range(999):
# 获取文件路径
file_path = os.path.join(os.getcwd(), f"file{i}.txt")
# 定位上传按钮元素,并发送文件路径
upload_button = driver.find_element_by_css_selector("input[type=file]")
upload_button.send_keys(file_path)
- 等待上传完成:
-
在上传文件后,根据页面上的元素状态判断是否上传完成。
-
可以使用WebDriver内置的等待方法来实现,例如`WebDriverWait`。
- 判断上传完成及成功:
-
检查页面元素或者页面提示信息,判断上传是否成功。
-
可以使用WebDriver提供的断言方法来实现,例如`assert`。
示例代码:
python
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待上传完成
wait = WebDriverWait(driver, 10)
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "span.upload-status.completed")))
# 判断上传完成及成功
assert "上传成功" in driver.page_source