大家好!今天来分享一个实战案例,讲解如何将DeepSeek接入VS Code,并结合 AI Toolkit 插件进行自动化脚本的开发。

一、准备工作

微软官方推出了一个强大的插件—AI Toolkit for Visual Studio Code。此插件支持多种开源及商用大模型,已集成 DeepSeek R1 模型,使得在 VS Code 中利用 DeepSeek 进行代码开发变得更加便捷。

安装 AI Toolkit 插件并启用 DeepSeek

在 VS Code 的插件中心搜索并安装 AI Toolkit。
AI Toolkit安装

安装完成后,前往插件页面选择 Catalog 中的 Models 模型,通过筛选条件 “hosted by Github” 以及 “publisher DeepSeek” 来访问 DeepSeek - R1 模型。
DeepSeek R1 模型

二、使用 AI 生成脚本

一旦开启 DeepSeek 模型,我们就可以新建一个 Playground,让 DeepSeek 帮助生成自动化脚本。以下是我对针对 SauceDemo 测试脚本的思考过程:

SauceDemo 测试脚本

1. 项目结构确定

在 POM 模式下,通常会包括页面对象、测试用例、配置文件和数据文件,所需的目录结构如下:

├── data
│   └── users.yml
├── pages
│   ├── __init__.py
│   ├── login_page.py
│   ├── products_page.py
│   └── checkout_page.py
├── tests
│   └── test_saucedemo.py
├── conftest.py
└── requirements.txt

2. 用户数据处理

用户数据存储在 users.yml 中,包括不同类型的用户(如正常用户、锁定用户、错误密码用户等)。这些数据将在测试用例中使用 pyYAML 库进行读取,以便用 @pytest.mark.parametrize 进行参数化测试。

valid_user:
  username: "standard_user"
  password: "secret_sauce"

invalid_users:
  - username: "locked_out_user"
    password: "secret_sauce"
    error: "Epic sadface: Sorry, this user has been locked out."
  - username: "invalid_user"
    password: "wrong_password"
    error: "Epic sadface: Username and password do not match any user in this service"

3. Page Object Model 实现

每个页面(如登录页、商品页、结算页)都有各自的类,以封装元素和操作。例如,LoginPage 类包括用户名、密码输入框、登录按钮和错误提示的方法。

pages/login_page.py

from playwright.sync_api import Page

class LoginPage:
    def __init__(self, page: Page):
        self.page = page
        self.username = page.locator("#user-name")
        self.password = page.locator("#password")
        self.login_button = page.locator("#login-button")
        self.error_message = page.locator(".error-message-container")
      
    def navigate(self):
        self.page.goto("https://www.saucedemo.com/")
  
    def login(self, username: str, password: str):
        self.username.fill(username)
        self.password.fill(password)
        self.login_button.click()

pages/products_page.py

from playwright.sync_api import Page

class ProductsPage:
    def __init__(self, page: Page):
        self.page = page
        self.title = page.locator(".title")
        self.inventory_items = page.locator(".inventory_item")
        self.cart_button = page.locator(".shopping_cart_link")
  
    def add_to_cart(self, index: int = 0):
        self.inventory_items.nth(index).locator("button").click()
  
    def go_to_cart(self):
        self.cart_button.click()

pages/checkout_page.py

from playwright.sync_api import Page

class CheckoutPage:
    def __init__(self, page: Page):
        self.page = page
        self.first_name = page.locator("#first-name")
        self.last_name = page.locator("#last-name")
        self.postal_code = page.locator("#postal-code")
        self.continue_button = page.locator("#continue")
        self.finish_button = page.locator("#finish")
        self.complete_header = page.locator(".complete-header")
      
    def fill_info(self, first: str, last: str, zipcode: str):
        self.first_name.fill(first)
        self.last_name.fill(last)
        self.postal_code.fill(zipcode)
        self.continue_button.click()
  
    def complete_checkout(self):
        self.finish_button.click()

4. 测试用例设计

测试用例应使用 pytest 参数化,涵盖不同用户场景,例如正常登录成功、无效密码、锁定用户等。同时,需测试结账流程,包括填写信息的完整性。

import pytest
import yaml
from playwright.sync_api import Page

with open("data/users.yml") as f:
    test_data = yaml.safe_load(f)

@pytest.mark.parametrize("user", test_data["invalid_users"])
def test_invalid_login(page: Page, user):
    login_page = LoginPage(page)
    login_page.navigate()
    login_page.login(user["username"], user["password"])
    assert login_page.error_message.is_visible()
    assert user["error"] in login_page.error_message.inner_text()

def test_valid_login_and_checkout(page: Page):
    # Login
    login_page = LoginPage(page)
    login_page.navigate()
    login_page.login(test_data["valid_user"]["username"], 
                     test_data["valid_user"]["password"])
  
    # Add product
    products_page = ProductsPage(page)
    assert products_page.title.inner_text() == "Products"
    products_page.add_to_cart()
    products_page.go_to_cart()
  
    # Checkout
    page.click("#checkout")
    checkout_page = CheckoutPage(page)
    checkout_page.fill_info("John", "Doe", "12345")
    checkout_page.complete_checkout()
  
    assert checkout_page.complete_header.inner_text() == "THANK YOU FOR YOUR ORDER"

5. fixture 设置

使用 conftest.py 来设置 Playwright 的 fixture,例如浏览器、页面实例等。每次测试前转到登录页,登录后访问库存页,从而处理测试的前置条件。

import pytest
from playwright.sync_api import Playwright

@pytest.fixture(scope="function")
def page(playwright: Playwright):
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    yield page
    context.close()
    browser.close()

6. 依赖库

pytest
playwright
PyYAML

关键点总结:

  1. POM 模式分层清晰,每个页面封装相应的操作及元素定位。
  2. 利用 YAML 文件管理测试数据,方便维护与扩展。
  3. 参数化测试覆盖多种异常场景验证。
  4. 完整的端到端测试流程覆盖登录-加购-结账全流程。
  5. 使用 Playwright 的同步 API 简化测试编写。
  6. 通过 conftest 管理浏览器实例。

三、整合项目步骤

1. 需要检查的测试场景

登录

  • 正确用户/密码组合登录成功
  • 错误密码提示错误信息
  • 锁定用户无法登录
  • 空用户名或密码提示错误信息

结账

  • 正常填写所有信息,完成订单
  • 必填字段缺失(如 first name 为空)提示错误
  • 取消订单流程

2. 实施步骤

  • 创建项目结构,安装依赖:pytest、playwright、pyyaml。
  • 编写 users.yml 文件,包含不同类型的用户数据。
  • 实现各个页的 Page 类,包括元素定位和操作方法。
  • conftest.py 中定义 fixture,例如初始化 page,创建各个 page 对象的实例。
  • 编写测试用例,参数化用户数据,覆盖正常和异常流程。
  • 处理测试中的等待和断言,确保元素存在或文本正确。

3. 关键点总结

  • POM 模式分层清晰,每个页面封装对应的操作和元素定位。
  • 使用 YAML 文件管理测试数据,便于维护和扩展。
  • 参数化测试支持多种异常场景验证。
  • 完整的端到端测试流程覆盖登录-加购-结账全流程。
  • 使用 Playwright 的同步 API 简化测试编写。
  • 通过 conftest.py 管理浏览器实例。

四、效果

测试效果

五、结论

通过 DeepSeek 的结果,我们几乎无需进行太多调整就能成功执行,大大提高了自动化实现的效率。值得一提的是,DeepSeek 提供的思考过程对我们的代码实现和用例设计具有重要参考价值。


希望以上分享能帮助大家更好地使用 DeepSeek 和 VS Code 进行自动化测试开发!如有任何问题,欢迎留言讨论!

END
本文作者:
文章标题: 如何将 DeepSeek 接入 VS Code 实现自动化脚本开发
本文地址: https://www.haovps.top/archives/389.html
版权说明:若无注明,本文皆 高性能VPS推荐与IT技术博客 | Haovps.Top 原创,转载请保留文章出处。
cc
最后修改:2025 年 02 月 08 日
如果觉得我的文章对你有用,请随意赞赏