• 周四. 12 月 5th, 2024

三天学会自动化测试之第三天:Python进阶编程与Web自动化测试

anilineup

9 月 7, 2024

一、进阶自动化测试技术

  • 测试框架深入
    • unittest框架的高级用法:setUp、tearDown、setUpClass、tearDownClass等。
    • pytest框架的优势与使用方法:fixture、参数化测试、插件扩展等。
  • 页面对象模式(Page Object Pattern)
    • 什么是页面对象模式。
    • 页面对象模式的优点:提高代码可维护性、减少代码重复。
    • 如何在自动化测试中应用页面对象模式。
  • 测试数据管理
    • 数据驱动测试的概念。
    • 使用CSV、JSON等格式的数据文件进行测试数据管理。
  • 测试报告生成
    • 使用pytest-html或allure等工具生成详细的测试报告。
    • 如何解析测试报告并分析测试结果。

二、实战演练

  • unittest框架高级用法示例

  • import unittest
    from selenium import webdriver
    
    class TestWebPage(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            cls.driver = webdriver.Chrome(executable_path='path_to_chromedriver')
        
        @classmethod
        def tearDownClass(cls):
            cls.driver.quit()
    
        def setUp(self):
            self.driver.get("http://www.example.com")
    
        def test_page_title(self):
            self.assertEqual(self.driver.title, "Example Domain")
    
        def test_search_functionality(self):
            search_box = self.driver.find_element_by_name("q")
            search_box.send_keys("test")
            search_box.submit()
            self.assertIn("test", self.driver.page_source)
    
    if __name__ == "__main__":
        unittest.main()

    pytest框架示例

    import pytest
    from selenium import webdriver
    
    @pytest.fixture(scope="module")
    def setup():
        driver = webdriver.Chrome(executable_path='path_to_chromedriver')
        yield driver
        driver.quit()
    
    def test_page_title(setup):
        setup.get("http://www.example.com")
        assert setup.title == "Example Domain"
    
    @pytest.mark.parametrize("search_term, expected_result", [("test", "test"), ("hello", "hello")])
    def test_search(setup, search_term, expected_result):
        search_box = setup.find_element_by_name("q")
        search_box.send_keys(search_term)
        search_box.submit()
        assert expected_result in setup.page_source

    页面对象模式示例

    # pages.py
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    class LoginPage:
        def __init__(self, driver):
            self.driver = driver
            self.username_input = (By.ID, "username")
            self.password_input = (By.ID, "password")
            self.login_button = (By.ID, "login")
    
        def enter_username(self, username):
            input_field = WebDriverWait(self.driver, 10).until(EC.presence_of_element_located(self.username_input))
            input_field.send_keys(username)
    
        def enter_password(self, password):
            input_field = WebDriverWait(self.driver, 10).until(EC.presence_of_element_located(self.password_input))
            input_field.send_keys(password)
    
        def click_login(self):
            button = WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable(self.login_button))
            button.click()

    使用数据文件进行测试

    import json
    import pytest
    from selenium import webdriver
    from pages import LoginPage
    
    def load_data():
        with open('data.json', 'r') as file:
            return json.load(file)
    
    @pytest.fixture(scope="module")
    def setup():
        driver = webdriver.Chrome(executable_path='path_to_chromedriver')
        yield driver
        driver.quit()
    
    @pytest.mark.parametrize("data", load_data())
    def test_login(setup, data):
        page = LoginPage(setup)
        page.enter_username(data['username'])
        page.enter_password(data['password'])
        page.click_login()
        assert "Dashboard" in setup.page_source

    三、项目实践

    • 综合运用unittest框架编写测试套件
      • 设计一个包含多个测试用例的测试套件。
      • 使用setUp和tearDown方法初始化和清理测试环境。
    • 使用pytest框架进行参数化测试
      • 创建一个包含多个数据点的测试用例。
      • 验证不同输入条件下的行为。
    • 实现一个复杂的Web应用测试案例
      • 使用页面对象模式重构之前的简单测试脚本。
      • 添加更多复杂的测试场景,如表单验证、动态加载内容等。
      • 生成详细的测试报告,并进行分析。

    四、总结与反馈

    • 知识点回顾:复习今天的重点知识。
    • 课后作业:布置综合性的测试任务,要求使用页面对象模式、数据驱动测试等高级技术。
    • 答疑解惑:回答学员的问题,并提供进一步的学习建议。

    通过这三天的学习,学员应该已经掌握了Python自动化测试的基础知识和进阶技巧,并且能够独立完成较为复杂的测试任务。未来的实践中,学员可以继续探索更多高级特性和工具,不断深化自己的技能。

anilineup

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注