pytest 实战演练【pytest】

转载自白月黑羽,pytest 框架 - 白月黑羽,仅作学习笔记用途,侵权联系删除


pytest 实战演练:测试"白月 SMS 系统"的登录功能

在这一部分,我们以"白月SMS系统"为被测对象,运用 pytest 完成其登录功能的自动化测试。该实战案例帮助你理解如何组织测试项目结构、调用被测系统的业务代码,并正确执行测试用例。


一、环境准备

请按以下步骤完成环境配置:

  1. 安装与启动被测系统
    下载并部署白月 SMS 系统,确保服务成功运行。安装与运行方法详见视频讲解与安装文档(原视频链接处)。
  2. 获取测试用例文档
    下载测试用例说明文件,了解 UI-0001 至 UI-0005 用例的具体测试逻辑与预期结果。

二、运行测试的正确方式

在自动化项目中,我们常常需要从不同模块导入项目内的库文件。为了避免出现 ModuleNotFoundError 等模块导入错误,推荐通过以下命令行方式运行测试:

复制代码
python -m pytest cases -sv

其中:

  • -m 以模块方式运行 Python,自动将当前目录加入模块搜索路径;
  • -s 显示测试中使用的 print() 输出,有利于调试;
  • -v 输出更详细的测试用例执行信息。

三、自动化用例示例(UI-0001 ~ UI-0003)

测试用例文件结构
复制代码
autotest/
├── cases/
│   └── 登录/
│       └── test_错误登录.py
└── lib/
    └── webui.py

1. 测试用例代码:cases/登录/test_错误登录.py
python 复制代码
import pytest
from lib.webui import loginAndCheck

class Test_错误登录:

    def test_UI_0001(self):
        alertText = loginAndCheck(None, '88888888')
        assert alertText == '请输入用户名'

    def test_UI_0002(self):
        alertText = loginAndCheck('byhy', None)
        assert alertText == '请输入密码'

    def test_UI_0003(self):
        alertText = loginAndCheck('byh', '88888888')
        assert alertText == '登录失败 : 用户名或者密码错误'

每个测试函数负责验证一个 UI 场景,例如用户名为空、密码为空或用户名密码错误等,使用断言 assert 判断实际提示是否符合预期。


2. 登录逻辑封装函数:lib/webui.py
python 复制代码
from selenium import webdriver
import time

def loginAndCheck(username, password):
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    
    driver.get('http://127.0.0.1/mgr/sign.html')

    if username is not None:
        driver.find_element_by_id('username').send_keys(username)

    if password is not None:
        driver.find_element_by_id('password').send_keys(password)

    driver.find_element_by_css_selector("button[type='submit']").click()

    time.sleep(2)

    alertText = driver.switch_to.alert.text
    print(alertText)

    driver.quit()

    return alertText

该函数封装了浏览器操作流程,包含:

  • 启动 Chrome 浏览器;
  • 打开登录页;
  • 输入用户名和密码(若不为 None);
  • 点击登录按钮;
  • 获取弹窗提示文本作为实际结果返回。

💡建议:实际测试中,可考虑引入显式等待(WebDriverWait),替代 time.sleep,以提升效率与稳定性。


四、运行测试并查看结果

确保浏览器驱动(如 ChromeDriver)已正确安装,系统服务已运行。在项目根目录执行命令:

复制代码
python -m pytest cases -sv

运行输出示例如下:

python 复制代码
用例C001001
请输入用户名
.
用例C001002
请输入密码
.
用例C001003
登录失败 : 用户名或者密码错误
.

每个 . 表示对应测试用例执行成功,如有断言失败则会显示 F 并附带错误信息。


五、实战要点与建议

  • 项目结构应分清业务逻辑与测试用例,便于维护和扩展;
  • 封装常用操作(如登录)提高代码复用性;
  • 使用 -m 方式运行 pytest 避免导包失败问题;
  • 自动化测试应尽量模拟真实用户行为,增强用例覆盖的有效性;
  • 可进一步接入 pytest-html 插件生成可视化测试报告。

如需后续继续完成 UI-0004 与 UI-0005 或扩展至其它功能模块测试(如注册、重置密码等),我也可帮你补充对应测试逻辑与封装设计。是否需要继续?

相关推荐
程序员龙叔6 天前
编写高质量 Skill 系列 -- 如何设计需求分析与用例生成的 SKILL
自动化测试·软件测试·python·软件测试工程师·接口测试·性能测试·skill·ai测试
许彰午6 天前
39_Java单元测试JUnit入门
java·junit·单元测试
shushangyun_6 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
goldenrolan6 天前
A公司物料替代测试系统 v1.7:从需求到 exe/apk 的 AI 辅助全链路实践
android·自动化测试·软件测试·python·ai
施努卡机器视觉6 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
dayuOK63076 天前
写作卡壳怎么办?我的“5分钟启动法”
人工智能·职场和发展·自动化·新媒体运营·媒体
程序员小远6 天前
自动化测试基础知识总结
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
志栋智能6 天前
超自动化巡检:如何选择适合你的起点?
运维·自动化
HackTwoHub6 天前
Sqli-Scanner SQL注入SKILL自动化挖掘SQL注入,零依赖自动化SQL注入挖掘,赏金猎人
数据库·人工智能·sql·web安全·网络安全·自动化·系统安全
csdndeyeye6 天前
拆解AI投简历插件:塔塔网申的技术逻辑和实测数据
人工智能·自动化·秋招·ai投简历插件·ai找工作·求职助手·应届生就业