基于 Python+Selenium+Pytest 的 DeepSeek 全流程自动化测试框架搭建
本文将使用Python作为开发语言,Selenium作为 Web 自动化工具,Pytest作为测试框架,搭建 DeepSeek 平台的全流程自动化测试框架,覆盖登录、聊天、个人设置等核心场景。该框架具备可扩展性、可维护性,适合作为 Web 端自动化测试的入门实践。本文通过 Page Object 模式(PO 模式)封装了 DeepSeek 的核心页面操作,结合 Pytest 的夹具机制实现了测试流
以下是一篇关于使用 Python+Selenium+Pytest 搭建 DeepSeek 全流程自动化测试框架的 CSDN 博客文章,包含登录、聊天、个人设置等场景的实现:
基于 Python+Selenium+Pytest 的 DeepSeek 全流程自动化测试框架搭建
一、测试框架介绍
本文将使用 Python 作为开发语言,Selenium 作为 Web 自动化工具,Pytest 作为测试框架,搭建 DeepSeek 平台的全流程自动化测试框架,覆盖登录、聊天、个人设置等核心场景。该框架具备可扩展性、可维护性,适合作为 Web 端自动化测试的入门实践。
二、环境准备
1. 依赖安装
首先安装所需的 Python 库:
bash
-
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager import time from selenium.webdriver.ie.service import Service
三、核心模块实现
1. 基础页面对象(base_page.py)
封装 Selenium 通用操作(点击、输入、元素等待等),作为其他页面的父类:
python
运行
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
class BasePage:
def __init__(self, driver):
self.driver = driver
self.wait = WebDriverWait(driver, 10) # 显式等待超时时间
def find_element(self, locator):
"""定位单个元素"""
return self.wait.until(EC.presence_of_element_located(locator))
def find_elements(self, locator):
"""定位多个元素"""
return self.wait.until(EC.presence_of_all_elements_located(locator))
def click(self, locator):
"""点击元素"""
self.find_element(locator).click()
def send_keys(self, locator, text):
"""输入文本"""
self.find_element(locator).clear()
self.find_element(locator).send_keys(text)
def get_url(self, url):
"""打开指定URL"""
self.driver.get(url)
def get_title(self):
"""获取页面标题"""
return self.driver.title
def hover(self, locator):
"""鼠标悬停"""
element = self.find_element(locator)
ActionChains(self.driver).move_to_element(element).perform()
2. 页面对象实现(以登录页为例)
(1)登录页函数
python
def login(driver, username, password):
# 输入手机号
user_input = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CSS_SELECTOR,
"#root > div > div > div._99ad066 > div > div > div.ds-sign-up-form__main > div.ds-sign-up-form__main-hero > div:nth-child(3) > div.ds-form-item__content > div > input"))
)
user_input.clear()
user_input.send_keys(username)
print(f"输入用户名: {username if username else '空'}")
# 输入密码
pwd_input = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CSS_SELECTOR,
"#root > div > div > div._99ad066 > div > div > div.ds-sign-up-form__main > div.ds-sign-up-form__main-hero > div:nth-child(4) > div.ds-form-item__content > div > input"))
)
pwd_input.clear()
pwd_input.send_keys(password)
print(f"输入密码: {'*' * len(password) if password else '空'}")
# 点击登录按钮
login_btn = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CSS_SELECTOR,
"#root > div > div > div._99ad066 > div > div > div.ds-sign-up-form__main > div.ds-sign-up-form__main-hero > div.ds-button.ds-button--primary.ds-button--filled.ds-button--rect.ds-button--block.ds-button--l.ds-sign-up-form__register-button"))
)
login_btn.click()
print("点击登录按钮")
(2)聊天页函数
python
def chat(driver, content):
chat_input=WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "#root div.c3ecdb44 div._7780f2e div.aaff8b8f div._24fad49 textarea"))
)
chat_input.clear()
chat_input.send_keys(content)
# 点击发送按钮
send_btn = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CSS_SELECTOR, "#root div.c3ecdb44 div._7780f2e div.aaff8b8f div.ec4f5d61 div.ds-icon-button._7436101"))
)
send_btn.click()
3. 全局夹具(conftest.py)
定义前置 / 后置操作(初始化浏览器、登录等):
python
运行
@pytest.fixture(scope="function")
def driver():
# 启动浏览器
# 确保chromedriver.exe路径正确
service = Service("./谷歌浏览器驱动/chromedriver.exe")
driver = webdriver.Chrome(service=service)
driver.maximize_window()
# 打开页面
driver.get("https://chat.deepseek.com/sign_in")
# 等待页面加载并点击密码登录选项
try:
# 等待密码登录选项出现并点击
password_login_tab = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH,
'//*[@id="root"]/div/div/div[2]/div/div/div[2]/div[1]/div[1]/div[2]/div[1]'))
)
password_login_tab.click()
print("已点击密码登录选项")
except TimeoutException:
print("未找到密码登录选项,测试终止")
driver.quit()
return
# 确认登录表单加载完成
try:
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR,
"#root > div > div > div._99ad066 > div > div > div.ds-sign-up-form__main > div.ds-sign-up-form__main-hero > div:nth-child(3) > div.ds-form-item__content > div > input"))
)
print("登录表单加载完成")
except TimeoutException:
print("登录表单加载失败")
driver.quit()
return
yield driver # 提供驱动给测试用例
driver.quit() # 测试结束后关闭浏览器
四、测试用例实现
1. 登录测试(test_login.py)
python
运行
@pytest.mark.parametrize(
"case_name, username, password, expected,",
[
("1. 正确账号密码", "15303054272", "3105952423@", "登录成功"),
("2. 错误账号", "13800000000", "Test123456", "账号或密码错误"),
("3. 错误密码", "13800138000", "Wrong123", "账号或密码错误"),
("4. 空账号", "", "Test123456", "请输入手机号"),
("5. 空密码", "13800138000", "", "请输入密码"),
("6. 无效格式账号", "invalid-phone", "Test123456", "请输入正确的手机号")
]
)
2. 聊天测试(test_chat.py)
python
运行
@pytest.mark.parametrize(
"case_name,content,expected,",
[
("1. 正常文本", "你好","消息发送成功"),
("2. 为空","","请输入文本"),
("3. 数字类型", "13800138000", "消息发送成功"),
("4. 超长文本","Testfhajksdhfjkdsahfjkdsafhdsfjkalsdhfjkdsahfjikadshfjksdhfjksdhfjksdhfjksdhfjksdhfjksdhfjksdhfjksdhfjksdhfjksdhfjksdhfjksdhfjksdhfjksdhfjksdhfjksdhfjksdhfjksdhfjksdhfjksdhfjksdhfjksdhfjksdhf", "字数超限"),
("5. 特殊格式", "\-", "按输入格式展示")
]
)
五、测试执行与报告生成
1. 执行入口(run.py)
python
运行
def test_deepseek_login(driver, case_name, username, password, expected):
if not driver: # 如果驱动初始化失败,跳过测试
return
print(f"\n开始测试:{case_name}")
# 执行登录操作
login(driver, username, password)
# 验证登录结果
try:
# 检查错误提示
error_msg = WebDriverWait(driver, 5).until(
EC.presence_of_element_located((By.CSS_SELECTOR, ".error"))
).text
assert expected in error_msg, f"失败:实际提示[{error_msg}],预期包含[{expected}]"
print("测试通过")
except:
# 检查登录成功状态(通过#chat-input元素判断)
try:
# 等待聊天输入框出现,确认登录成功
WebDriverWait(driver, 15).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "#root > div > div > div.c3ecdb44 > div._7780f2e > div > div > div._9a2f8e4 > div.aaff8b8f > div > div > div._24fad49 > textarea"))
)
assert "登录成功" in expected, "失败:预期失败但实际登录成功"
print("测试通过(预期结果为登录成功,检测到聊天输入框)")
except:
print("测试通过:未检测到错误提示,也未找到聊天输入框(预期结果为登录失败,未检测到聊天框)")
六、框架扩展建议
- 异常处理优化:在
BasePage中添加截图方法,用例失败时自动截图并附加到报告。 - 数据驱动:结合
pytest-parametrize或CSV/Excel实现多组测试数据。 - CI/CD 集成:将脚本集成到 Jenkins、GitHub Actions 等平台,实现定时执行。
- 元素定位优化:使用 YAML/JSON 管理元素定位器,避免硬编码。
总结
本文通过 Page Object 模式(PO 模式)封装了 DeepSeek 的核心页面操作,结合 Pytest 的夹具机制实现了测试流程的自动化。该框架不仅适用于 DeepSeek,也可迁移到其他 Web 平台的自动化测试中,关键在于保持页面逻辑与测试用例的分离,提高代码复用性和可维护性。
实际使用时,需根据 DeepSeek 官网的最新元素结构(如 CSS 选择器、ID 等)调整定位器,确保脚本稳定性。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)