Skip to content

pytest-dsl强大的关键字驱动测试自动化框架

让测试自动化变得简单直观 - 使用自然语言风格的DSL编写测试,无需复杂编程技能

pytest-dsl

快速体验

安装

bash
pip install pytest-dsl
bash
uv pip install pytest-dsl

VS Code 插件安装

pytest-dsl 提供独立的 VS Code 扩展,可在扩展商店搜索 pytest-dsl 或直接安装:

bash
code --install-extension felix-1991.pytest-dsl-support
text
在VS Code中按 Ctrl+Shift+X 打开扩展商店
搜索 "pytest-dsl" 并安装

UI测试支持

UI 测试能力由独立扩展包提供,需要额外安装:

bash
pip install pytest-dsl-ui

#安装playwright依赖
playwright install

创建第一个测试

创建文件 hello.dsl

python
@name: "我的第一个测试"
@description: "学习pytest-dsl的第一步"

# 定义变量
message = "Hello, pytest-dsl!"
count = 3

# 打印欢迎消息
[打印], 内容: ${message}

# 简单循环
for i in range(1, ${count} + 1) do
    [打印], 内容: "第 ${i} 次循环"
end

# 测试断言
[断言], 条件: "${count} == 3", 消息: "计数器应该等于3"

teardown do
    [打印], 内容: "测试完成!"
end

运行测试

bash
# 直接运行DSL文件
pytest-dsl hello.dsl

# 运行目录下所有DSL文件
pytest-dsl tests/

核心特性

🎯 自然语言风格

python
# 像写文档一样编写测试
[HTTP请求], 客户端: "default", 配置: '''
    method: GET
    url: https://api.example.com/users/1
    asserts:
        - ["status", "eq", 200]
        - ["jsonpath", "$.name", "exists"]
'''

🌐 远程执行

python
@remote: "http://remote-server:8270/" as remote_machine

# 在远程机器上执行关键字
remote_machine|[HTTP请求], 客户端: "default", 配置: '''
    method: GET
    url: https://internal-api.example.com/data
'''

🧪 Pytest集成

python
# test_runner.py
from pytest_dsl.core.auto_decorator import auto_dsl

@auto_dsl("./tests")
class TestDSL:
    """自动将DSL目录转换为pytest测试"""
    pass

# 使用pytest运行
# pytest test_runner.py -q

🖥️ Web UI测试

python
# 通过 pytest-dsl-ui 扩展包提供的 UI 关键字进行浏览器自动化测试
[打开浏览器], 浏览器类型: "chrome", 无头模式: false

[访问页面], URL: "https://example.com"

[点击元素], 选择器: "#login-button"

[输入文本], 选择器: "input[name='username']", 文本: "admin"

[断言元素文本], 选择器: ".welcome-message", 期望文本: "欢迎回来"

[关闭浏览器]

🔧 自定义关键字

python
# 定义可复用的关键字
function 用户登录 (用户名, 密码="默认密码") do
    [HTTP请求], 客户端: "default", 配置: '''
        method: POST
        url: /api/login
        request:
            json:
                username: "${用户名}"
                password: "${密码}"
        captures:
            token: ["jsonpath", "$.token"]
    '''
    return ${token}
end

# 使用自定义关键字
token = [用户登录], 用户名: "admin"

📊 数据驱动

python
@data: "test_data.csv" using csv

# CSV中的每一行都会执行一次测试
[HTTP请求], 客户端: "default", 配置: '''
    method: POST
    url: /api/login
    request:
        json:
            username: "${username}"
            password: "${password}"
    asserts:
        - ["status", "eq", ${expected_status}]
'''

开发工具支持

VSCode扩展功能

以下能力来自独立的 VS Code 扩展,而非当前仓库主包直接内置:

📊 智能关键字管理

  • 关键字浏览器 - 侧边栏显示所有可用关键字
  • 分类管理 - 按类型自动分组(内置、自定义、库、用户、收藏夹)
  • 智能搜索 - 支持名称、参数、说明的实时模糊搜索
  • 收藏夹功能 - 标记常用关键字,快速访问
  • 树状结构 - 清晰的层级展示,支持展开/折叠

🔍 智能编辑功能

  • 语法高亮 - 完整的pytest-DSL语法高亮支持
  • 智能补全 - 基于关键字库的自动补全和参数提示
  • 参数模板 - 自动生成带参数的关键字模板
  • 快捷键支持 - 高效的键盘操作和快捷插入
  • 错误检查 - 实时语法和语义错误检测
  • 悬停提示 - 关键字文档和参数说明

⚙️ 便捷配置管理

  • 关键字文件生成 - 自动生成和管理关键字JSON文件
  • 实时缓存 - 智能缓存减少重复加载
  • 可视化编辑 - 图形化界面编辑关键字定义

🎮 交互操作支持

  • 拖拽操作 - 支持从关键字浏览器拖拽到编辑器
  • 右键菜单 - 丰富的上下文菜单操作
  • 快速操作 - 一键插入、复制、收藏等功能

支持的文件类型

  • .dsl - pytest-dsl测试文件
  • .pytest-dsl - pytest-dsl测试文件(备选扩展名)

适用场景

🔗 API接口测试

完整的HTTP测试支持,包括请求发送、响应捕获、断言验证

🖥️ Web UI测试

浏览器自动化测试,支持元素交互、页面导航和界面验证

🏗️ 分布式测试

跨服务调用、服务间通信和分布式系统测试,支持复杂的微服务架构验证

🔄 回归测试

数据驱动和批量执行,轻松处理大量回归测试用例

🔗 集成测试

跨系统测试协调,支持复杂的集成测试场景

👥 团队协作

VS Code插件支持,提升团队开发效率和代码质量

Released under the MIT License.