Bootstrap

手把手教你从无到有搭建Python+Selenium+Pytest+Allure UI自动化测试框架搭建

Python+Selenium+Pytest+Allure UI自动化测试框架搭建指南

在这份详细指南中,我将会一步一步地搭建一个基于Python、Selenium、Pytest和Allure的UI自动化测试框架。这个框架将包含目录结构、必要的依赖、配置文件、示例测试用例和生成测试报告的完整流程。

一、项目结构

首先,我们来规划项目的目录结构:

ui-automation-framework/
│
├── tests/
│   ├── __init__.py
│   ├── test_example.py
│   ├── conftest.py
│   ├── pages/
│   │   ├── __init__.py
│   │   ├── base_page.py
│   │   ├── home_page.py
│   ├── resources/
│       ├── test_data.yaml
│
├── reports/
│   ├── allure-report/
│   ├── allure-results/
│
├── requirements.txt
├── pytest.ini
├── .gitignore
└── README.md

二、安装依赖

接下来,我们需要安装一些必要的Python包。创建并激活虚拟环境(可选),然后安装依赖项。

python -m venv venv
source venv/bin/activate  # Windows 上使用 venv\Scripts\activate
pip install selenium pytest allure-pytest pyyaml

将以下内容添加到requirements.txt文件中:

selenium
pytest
allure-pytest
pyyaml

三、配置文件

1. pytest.ini

在项目根目录下创建一个pytest.ini文件,用于配置pytest。

[pytest]
addopts = --alluredir=reports/allure-results
testpaths = tests
2. .gitignore

在项目根目录下创建一个.gitignore文件,忽略不需要提交到版本控制的文件。

venv/
__pycache__/
reports/

四、页面对象模型 (POM)

页面对象模型是一种设计模式,通过创建页面类来封装页面元素和交互逻辑,提高代码的可维护性和可读性。

1. base_page.py

创建一个base_page.py文件,用于封装通用的页面操作。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class BasePage:
    def __init__(self, driver):
        self.driver = driver

    def find_element(self, locator, time=10):
        return WebDriverWait(self.driver, time).until(EC.presence_of_element_located(locator))

    def click_element(self, locator, time=10):
        element = self.find_element(locator, time)
        element.click()

    def enter_text(self, locator, text, time=10):
        element = self.find_element(locator, time)
        element.clear()
        element.send_keys(text)
2. home_page.py

创建一个home_page.py文件,定义具体页面的操作。

from selenium.webdriver.common.by import By
from tests.pages.base_page import BasePage

class HomePage(BasePage):
    SEARCH_BOX = (By.NAME, 'q')
    SEARCH_BUTTON = (By.NAME, 'btnK')

    def enter_search_term(self, term):
        self.enter_text(self.SEARCH_BOX, term)

    def click_search(self):
        self.click_element(self.SEARCH_BUTTON)

五、测试用例

tests目录下创建测试用例文件test_example.py

import pytest
from selenium import webdriver
from tests.pages.home_page import HomePage

@pytest.fixture(scope='module')
def driver():
    driver = webdriver.Chrome()  # 请确保已安装ChromeDriver
    driver.maximize_window()
    yield driver
    driver.quit()

def test_google_search(driver):
    driver.get('https://www.google.com')
    home_page = HomePage(driver)
    home_page.enter_search_term('Selenium')
    home_page.click_search()
    assert 'Selenium' in driver.title

六、测试数据

tests/resources目录下创建一个测试数据文件test_data.yaml

google_search:
  search_term: 'Selenium'

然后在conftest.py文件中加载测试数据。

import pytest
import yaml

@pytest.fixture(scope='module')
def test_data():
    with open('tests/resources/test_data.yaml') as f:
        data = yaml.safe_load(f)
    return data

七、集成Allure

Allure是一种强大的报告工具,它可以帮助我们生成更具吸引力和可读性的测试报告。我们已经在pytest.ini文件中配置了Allure的结果目录。

运行测试并生成报告:

pytest
allure serve reports/allure-results

八、详细代码实现

1. base_page.py
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class BasePage:
    def __init__(self, driver):
        self.driver = driver

    def find_element(self, locator, time=10):
        return WebDriverWait(self.driver, time).until(EC.presence_of_element_located(locator))

    def click_element(self, locator, time=10):
        element = self.find_element(locator, time)
        element.click()

    def enter_text(self, locator, text, time=10):
        element = self.find_element(locator, time)
        element.clear()
        element.send_keys(text)
2. home_page.py
from selenium.webdriver.common.by import By
from tests.pages.base_page import BasePage

class HomePage(BasePage):
    SEARCH_BOX = (By.NAME, 'q')
    SEARCH_BUTTON = (By.NAME, 'btnK')

    def enter_search_term(self, term):
        self.enter_text(self.SEARCH_BOX, term)

    def click_search(self):
        self.click_element(self.SEARCH_BUTTON)
3. test_example.py
import pytest
from selenium import webdriver
from tests.pages.home_page import HomePage

@pytest.fixture(scope='module')
def driver():
    driver = webdriver.Chrome()  # 请确保已安装ChromeDriver
    driver.maximize_window()
    yield driver
    driver.quit()

def test_google_search(driver):
    driver.get('https://www.google.com')
    home_page = HomePage(driver)
    home_page.enter_search_term('Selenium')
    home_page.click_search()
    assert 'Selenium' in driver.title
4. test_data.yaml
google_search:
  search_term: 'Selenium'
5. conftest.py
import pytest
import yaml

@pytest.fixture(scope='module')
def test_data():
    with open('tests/resources/test_data.yaml') as f:
        data = yaml.safe_load(f)
    return data

九、执行和报告生成

1. 执行测试

运行测试命令:

pytest
2. 生成Allure报告

生成并查看Allure报告:

allure serve reports/allure-results

十、总结

通过以上步骤,我们成功搭建了一个基于Python、Selenium、Pytest和Allure的UI自动化测试框架。这个框架具有良好的扩展性和可维护性,可以帮助测试团队高效地进行UI自动化测试。

参考资料

这个详细的指南覆盖了从环境配置到测试执行和报告生成的每一个步骤,希望能够帮助你搭建一个高效的UI自动化测试框架。

;