Skip to content

自动化测试用例

自动化测试用例

目标

  1. 验证宠物主人搜索功能的准确性和可用性。
  2. 确保搜索结果按照预期排序和展示。
  3. 检查搜索功能的兼容性,确保在不同浏览器上的一致性。

步骤

  1. 选择编程语言:选择用于编写测试脚本的编程语言。多数自动化测试工具支持多种语言,例如 Java、Python 等。
  2. 实现自动化测试脚本:使用选择的测试工具和编程语言,实现自动化测试脚本。确保脚本能够模拟用户与应用程序的交互。
  3. 执行测试脚本:执行自动化测试脚本,观察测试结果。确保测试脚本能够按照预期执行,并记录测试输出和任何错误信息。
  4. 生成测试报告:根据测试执行结果生成详细的测试报告。报告应该包括执行的测试用例、通过和失败的用例、错误信息、执行时间等。

参考示例

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