python+selenium+unittest自动化框架

博客内容暂定,目前仅知标签包含自动化,具体信息技术相关关键信息尚未给出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

暂定

<think>我们正在构建一个基于PythonSeleniumUnittest自动化测试框架。参考引用内容,我们可以总结出以下步骤:1.**环境准备**:安装必要的库(Selenium,Unittest等)。 2. **项目结构设计**:组织项目目录(如测试用例、页面对象、测试报告等)。 3. **编写基础类**:-测试基类(TestBase):用于初始化WebDriver,提供公共方法(如截图)。-页面对象(Page Objects):封装页面元素和操作。 4. **编写测试用例**:继承unittest.TestCase,使用页面对象编写测试方法(以test_开头)。5.**测试套件构建**:批量加载测试用例。 6. **生成测试报告**:使用HTMLTestRunner等生成美观的测试报告。 7. **可选**:加入邮件发送功能(发送测试报告)。下面逐步说明: ###1.环境准备安装Selenium:```bashpipinstall selenium```同时,确保已下载对应浏览器的驱动(如ChromeDriver)并配置环境变量。###2.项目结构建议如下:``` project/ ├── testsuites/#测试套件目录(可存放测试用例集合)├──pageobjects/#页面对象目录│└── login_page.py#登录页面对象示例├── report/#存放测试报告├── common/#公共模块│└──test_base.py#测试基类└──run.py#主运行脚本```###3.编写基础类**test_base.py**(测试基类): ```pythonimport unittestfromselenium importwebdriverimporttimeimport osclassTestBase(unittest.TestCase):@classmethoddef setUpClass(cls):cls.driver =webdriver.Chrome()cls.driver.implicitly_wait(10)cls.driver.maximize_window()@classmethoddef tearDownClass(cls):time.sleep(3)cls.driver.quit()def get_windows_img(self):"""将截图保存到report目录"""day= time.strftime("%Y-%m-%d", time.localtime(time.time()))screenshot_path= f"report/{day}/screenshots/"if notos.path.exists(screenshot_path):os.makedirs(screenshot_path)now= time.strftime("%Y%m%d%H%M%S",time.localtime(time.time()))screenshot=self.driver.save_screenshot(f"{screenshot_path}{now}.png")returnscreenshot``` **login_page.py**(页面对象示例):```pythonfromselenium.webdriver.common.byimport ByclassLoginPage:def __init__(self,driver):self.driver= driver#页面元素定位username_input =(By.ID,'username')password_input= (By.ID, 'password')submit_button =(By.ID,'submit')#页面操作defopen(self, url):self.driver.get(url)definput_username(self, username):self.driver.find_element(*self.username_input).send_keys(username)def input_password(self, password):self.driver.find_element(*self.password_input).send_keys(password)defclick_submit(self):self.driver.find_element(*self.submit_button).click() ```###4.编写测试用例在testsuites目录下创建测试用例文件(如test_login.py):```pythonimportunittestfrom pageobjects.login_page importLoginPagefromcommon.test_base importTestBaseclassTestLogin(TestBase):#继承TestBasedef test_login_success(self):"""测试成功登录"""login_page =LoginPage(self.driver)login_page.open("http://example.com/login")login_page.input_username("valid_user")login_page.input_password("valid_pass")login_page.click_submit()#断言登录成功后的页面元素self.assertIn("Welcome", self.driver.page_source)deftest_login_fail(self):"""测试失败登录"""login_page =LoginPage(self.driver)login_page.open("http://example.com/login")login_page.input_username("invalid_user")login_page.input_password("invalid_pass")login_page.click_submit()error_text= self.driver.find_element_by_id("error").textself.assertTrue(error_text, "登录失败提示未出现")if __name__== '__main__':unittest.main()``` ###5.构建测试套件并生成报告使用`HTMLTestRunner`生成报告(需下载HTMLTestRunner.py并放入项目)。创建`run.py`: ```pythonimport unittestimporttimeimport osfromHTMLTestRunner importHTMLTestRunner#定义测试用例目录test_dir ='testsuites'discover =unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')if __name__== "__main__":#创建报告目录day =time.strftime("%Y-%m-%d",time.localtime(time.time()))report_dir =f"report/{day}"ifnot os.path.exists(report_dir):os.makedirs(report_dir)now= time.strftime("%Y%m%d%H%M%S",time.localtime(time.time()))report_file =f"{report_dir}/{now}_report.html"withopen(report_file, 'wb')as f:runner =HTMLTestRunner(stream=f,title='自动化测试报告',description='测试详情')runner.run(discover)``` ###6.运行执行`run.py`,测试报告将生成在report目录下。 ###注意事项-测试用例方法必须以`test_`开头。-页面对象模式(PageObject)有助于代码复用和维护。 -报告模块`HTMLTestRunner`需要自行下载(网上搜索下载,或使用其他报告库如BeautifulReport,参考引用[3])。通过以上步骤,一个基本的自动化测试框架就搭建完成了。§§相关问题§§1.如何优化Selenium测试的执行速度?2.如何在测试失败时自动截图?3.如何将测试报告通过邮件发送? 4.如何处理测试中的动态元素?5.如何实现数据驱动测试?</think>### 基于Python+Selenium+Unittest自动化测试框架搭建指南 #### 1. **环境准备** - 安装Python(建议3.7+) - 安装依赖库: ```bash pip install selenium unittest html-testRunner beautifulreport ``` - 下载浏览器驱动(如ChromeDriver)并配置环境变量[^1] #### 2. **项目结构设计** ```markdown project/ ├── common/ # 公共模块 │ ├── test_base.py # 测试基类 │ └── config.py # 配置文件 ├── pageobjects/ # 页面对象模型 │ └── baidu_page.py # 页面操作封装 ├── testsuites/ # 测试用例集 │ └── test_search.py # 测试用例 ├── report/ # 测试报告目录 └── run.py # 主执行文件 ``` #### 3. **核心代码实现** **(1) 测试基类 (common/test_base.py)** ```python import unittest from selenium import webdriver import time, os class TestBase(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = webdriver.Chrome() cls.driver.implicitly_wait(10) cls.driver.maximize_window() @classmethod def tearDownClass(cls): time.sleep(3) cls.driver.quit() def get_windows_img(self): """截图方法""" day = time.strftime("%Y-%m-%d", time.localtime(time.time())) screenshot_path = f"report/{day}/screenshots/" if not os.path.exists(screenshot_path): os.makedirs(screenshot_path) now = time.strftime("%Y%m%d%H%M%S", time.localtime(time.time())) self.driver.save_screenshot(f"{screenshot_path}{now}.png") ``` **(2) 页面对象封装 (pageobjects/baidu_page.py)** ```python class BaiduPage: def __init__(self, driver): self.driver = driver def open(self, url): self.driver.get(url) def input_keyword(self, keyword): search_box = self.driver.find_element("id", "kw") search_box.clear() search_box.send_keys(keyword) def click_search(self): self.driver.find_element("id", "su").click() def get_title(self): return self.driver.title ``` **(3) 测试用例 (testsuites/test_search.py)** ```python from common.test_base import TestBase from pageobjects.baidu_page import BaiduPage class TestSearch(TestBase): def test_baidu_search(self): """百度搜索测试""" page = BaiduPage(self.driver) page.open("https://www.baidu.com") page.input_keyword("Selenium") page.click_search() self.get_windows_img() # 调用截图方法 self.assertIn("Selenium", self.driver.title) ``` **(4) 测试执行入口 (run.py)** ```python import unittest import time from BeautifulReport import BeautifulReport if __name__ == '__main__': # 定义测试套件 test_suite = unittest.defaultTestLoader.discover( start_dir='testsuites', pattern='test_*.py' ) # 生成报告 day = time.strftime("%Y-%m-%d", time.localtime(time.time())) report_dir = f"report/{day}" result = BeautifulReport(test_suite) result.report( filename=f"自动化测试报告_{time.strftime('%H%M%S')}", description='UI自动化测试', report_dir=report_dir ) ``` #### 4. **关键设计原则** 1. **PO模式(Page Object)** 将页面元素定位和操作封装成独立类,实现测试脚本与页面元素的解耦[^2] 2. **测试分层结构** - 基础层:`test_base.py` 处理浏览器初始化和公共方法 - 页面层:页面操作封装 - 用例层:业务测试逻辑 - 执行层:测试组织和报告生成 3. **测试报告优化** 使用`BeautifulReport`生成可视化HTML报告,包含: - 测试通过率统计 - 失败用例截图 - 详细执行日志[^3] #### 5. **执行流程** 1. 运行`python run.py`启动测试 2. 自动加载`testsuites`目录下所有`test_*.py`文件 3. 生成带时间戳的HTML测试报告 4. 失败用例自动截图保存到`report/日期/screenshots/` #### 6. **常见问题解决** - **元素定位失败**:增加隐式等待`implicitly_wait` - **浏览器兼容性**:在`test_base.py`中扩展浏览器支持 - **并行测试**:使用`unittest`的`TestLoader`并发执行[^4] > 框架扩展建议:可集成邮件通知(SMTP)、持续集成(Jenkins)和数据库验证模块[^5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值