自动化测试用例
自动化测试用例
目标
- 验证宠物主人搜索功能的准确性和可用性。
- 确保搜索结果按照预期排序和展示。
- 检查搜索功能的兼容性,确保在不同浏览器上的一致性。
步骤
- 选择编程语言:选择用于编写测试脚本的编程语言。多数自动化测试工具支持多种语言,例如 Java、Python 等。
- 实现自动化测试脚本:使用选择的测试工具和编程语言,实现自动化测试脚本。确保脚本能够模拟用户与应用程序的交互。
- 执行测试脚本:执行自动化测试脚本,观察测试结果。确保测试脚本能够按照预期执行,并记录测试输出和任何错误信息。
- 生成测试报告:根据测试执行结果生成详细的测试报告。报告应该包括执行的测试用例、通过和失败的用例、错误信息、执行时间等。
参考示例
import allure
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from utils.logger import logger
@allure.epic("宠物医院")
@allure.feature("宠物主人搜索功能")
class TestOwnerSearch:
OWNER_URL = "http://192.168.20.30:8083/owners"
def setup(self):
"""
准备测试环境,打开宠物主人信息页面
:return:
"""
service = Service(executable_path=ChromeDriverManager().install())
self.driver = webdriver.Chrome(service=service)
logger.info(f"打开地址:{self.OWNER_URL}")
self.driver.get(self.OWNER_URL)
self.driver.maximize_window()
logger.info(f"设置隐式等待15秒")
self.driver.implicitly_wait(15)
def teardown(self):
logger.info("保存当面页面截图tmp.png")
self.driver.save_screenshot("tmp.png")
logger.info("将截图添加到报告中")
allure.attach.file("tmp.png", name="页面截图",
attachment_type=allure.attachment_type.PNG)
self.driver.quit()
@pytest.mark.P0
@allure.story("Owners搜索")
@allure.title("搜索-结果不止一个")
def test_search_more_exists(self):
"""
测试步骤:
1. 进入宠物主人信息页面
2. Last name输入框输入【searchkey】
3. 点击 Find Owner 按钮"
预期结果:结果数量大于=2 不止一个
:return:
"""
searchkey = "Davis"
logger.info(f"向搜索框中输入内容:{searchkey}")
self.driver.find_element(By.ID, "lastName").send_keys(searchkey)
logger.info("点击 Find Owner 按钮")
self.driver.find_element(By.CSS_SELECTOR, ".form-group .btn-default").click()
logger.info("查看结果列表")
ownerlist = self.driver.find_elements(By.CSS_SELECTOR, ".table .ownerFullName")
logger.info("断言比较结果列表的长度大于2 len(ownerlist) >= 2")
assert len(ownerlist) >= 2
def check_ele(self, locator):
flag = True
try:
self.driver.find_element(*locator)
except:
flag = False
return flag
@pytest.mark.P0
@allure.story("Owners搜索")
@allure.title("搜索-结果只有一个")
def test_search_only_exists(self):
"""
测试步骤:
1. 进入宠物主人信息页面
2. Last name输入框输入 【Coleman】 唯一存在
3. 点击 Find Owner 按钮
预期结果:搜索成功,进入 Lastname 为 Coleman 的宠物主人信息详情页面
:return:
"""
searchkey = "Coleman"
logger.info(f"向搜索框中输入内容:{searchkey}")
# 向搜索框中输入内容 searchkey
self.driver.find_element(By.ID, "lastName").send_keys(searchkey)
# 点击 Find Owner 按钮
self.driver.find_element(By.CSS_SELECTOR, ".form-group .btn-default").click()
# 查看结果 进入详情页面
locator = (By.CSS_SELECTOR, ".ownerFullName")
result = self.check_ele(locator)
assert result
@pytest.mark.P0
@allure.story("Owners搜索")
@allure.title("搜索-结果不存在")
def test_search_not_exists(self):
"""
测试步骤:
1. 进入宠物主人信息页面
2. Last name输入框输入 【xxx】 不存在的数据
3. 点击 Find Owner 按钮
预期结果:提示 No owners with LastName starting with“xxx”
:return:
"""
searchkey = "xxx"
logger.info(f"向搜索框中输入内容:{searchkey}")
# 向搜索框中输入内容 searchkey
self.driver.find_element(By.ID, "lastName").send_keys(searchkey)
# 点击 Find Owner 按钮
self.driver.find_element(By.CSS_SELECTOR, ".form-group .btn-default").click()
# 判断是否存在对应的提示
locator = (By.XPATH, "//*[text()='No owners with LastName starting with \"xxx\"']")
result = self.check_ele(locator)
assert result
@pytest.mark.P0
@allure.story("Owners搜索")
@allure.title("搜索-搜索词为空")
def test_search_is_null(self):
"""
前提:系统中存在宠物主人50个以上
测试步骤:
1. 进入宠物主人信息页面
2. Last name 输入框为空
3. 点击 Find Owner 按钮
预期结果:搜索成功,显示所有的宠物主人信息
:return:
"""
searchkey = ""
logger.info(f"向搜索框中输入内容 :{searchkey}")
# 向搜索框中输入内容 searchkey
self.driver.find_element(By.ID, "lastName").send_keys(searchkey)
logger.info("点击 Find Owner 按钮")
self.driver.find_element(By.CSS_SELECTOR, ".form-group .btn-default").click()
logger.info("查看结果列表")
ownerlist = self.driver.find_elements(By.CSS_SELECTOR, ".table .ownerFullName")
logger.info("断言 assert len(ownerlist) >= 50 ")
assert len(ownerlist) >= 50
@pytest.mark.P2
@allure.story("Owners搜索")
@allure.title("搜索-结果失败{searchkey}")
@pytest.mark.parametrize("searchkey", [
"1","霍格沃兹测试开发学社","#@"
])
def test_search_failure_P2(self,searchkey):
"""
前提条件:
测试步骤:
1. 进入宠物主人信息页面
2. Last name输入框输入【searchkey】
3. 点击 Find Owner 按钮
预期结果:搜索失败,提示 No owners with LastName starting with“searchkey”
:return:
"""
logger.info(f"向搜索框中输入内容:{searchkey}")
# 向搜索框中输入内容 searchkey
self.driver.find_element(By.ID, "lastName").send_keys(searchkey)
logger.info("点击 Find Owner 按钮")
self.driver.find_element(By.CSS_SELECTOR, ".form-group .btn-default").click()
logger.info("判断是否存在对应的提示")
locator = (By.XPATH, f"//*[text()='No owners with LastName starting with \"{searchkey}\"']")
result = self.check_ele(locator)
assert result
@pytest.mark.P2
@allure.story("Owners搜索")
@allure.title("搜索-搜索词为单字符")
def test_search_len_1(self):
"""
前提条件:Last name 为 a 的宠物主人信息已存在
测试用例:
1. 进入宠物主人信息页面
2. Last name输入框输入【a】
3. 点击Find Owner按钮
预期结果:搜索成功
:return:
"""
searchkey = "a"
logger.info(f"向搜索框中输入内容:{searchkey}")
# 向搜索框中输入内容 searchkey
self.driver.find_element(By.ID, "lastName").send_keys(searchkey)
logger.info("点击 Find Owner 按钮")
self.driver.find_element(By.CSS_SELECTOR, ".form-group .btn-default").click()
logger.info("查看结果列表")
ownerlist = self.driver.find_elements(By.CSS_SELECTOR, ".table .ownerFullName")
name = ownerlist[0].text
logger.info(f"判断结果中的第一个搜索结果名字:{name} 包含{searchkey}")
assert searchkey in name
@pytest.mark.P2
@allure.story("Owners搜索")
@allure.title("搜索-结果词为一个空格")
def test_search_space(self):
"""
前提条件:系统中存在宠物主人至少50个
测试用例:
1. 进入宠物主人信息页面
2. Last name 输入框输入 1 位空格
3. 点击 Find Owner 按钮
预期结果:搜索成功,显示所有的宠物主人信息
:return:
"""
searchkey = " "
logger.info(f"向搜索框中输入内容:{searchkey}")
# 向搜索框中输入内容 searchkey
self.driver.find_element(By.ID, "lastName").send_keys(searchkey)
logger.info("点击 Find Owner 按钮")
self.driver.find_element(By.CSS_SELECTOR, ".form-group .btn-default").click()
logger.info("查看结果列表")
ownerlist = self.driver.find_elements(By.CSS_SELECTOR, ".table .ownerFullName")
logger.info("断言 len(ownerlist) >= 50")
assert len(ownerlist) >= 50