VS Code如何集成DeepSeek R1 开发自动化脚本

开发工具 潘老师 3个月前 (02-07) 349 ℃ (0) 扫码查看

今天,就为大家详细介绍如何将DeepSeek接入VS Code,并结合AI Toolkit插件,实现自动化脚本的实战开发,以一个针对saucedemo的测试脚本项目为例,带大家一步步深入体验。

一、前期准备:搭建开发环境

微软官方推出了一款功能强大的AI辅助插件——AI Toolkit for Visual Studio Code,它为开发者和AI工程师提供了便利,能够借助各种开源或商用大模型进行开发。值得一提的是,该插件目前已集成了DeepSeek R1模型,让我们在VS Code中就能轻松借助DeepSeek开展代码开发工作。

安装AI ToolKit插件并启用DeepSeek模型并不复杂。打开VS Code的插件中心,搜索“AI Toolkit”并完成安装。

安装完成后,在插件页面找到Catalog中的Models模型页面,通过筛选“hosted by Github”以及“publisher DeepSeek”,就能顺利启用DeepSeek – R1模型。

二、借助AI生成自动化脚本

拥有DeepSeek模型后,我们就可以创建一个Playground,让它帮助我们生成自动化脚本。以针对saucedemo的自动化测试脚本为例,看看DeepSeek是如何发挥作用的。

1. 规划项目结构

在POM(Page Object Model)模式下,项目结构通常包含page对象、测试用例、配置文件、数据文件等。合理的目录结构如下:

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

这样的结构分层清晰,便于管理和维护项目。

2. 处理用户数据

用户数据存放在user.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

每个页面,如登录页、商品页、结算页,都有对应的类来封装元素和操作。以登录页为例:

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()

通过这种方式,每个页面的操作和元素定位都被清晰地封装起来,提高了代码的可维护性和复用性。

4. 设计测试用例

测试用例利用pytest的参数化功能,覆盖多种用户场景,包括正常登录、无效密码、锁定用户等。同时,对checkout流程也进行全面测试,涵盖正常流程和填写信息不完整等情况。

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,如browser、page,以及各个page对象的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. 梳理测试场景

  • 登录场景:包括正确用户密码登录成功、错误密码提示错误信息、锁定用户无法登录、空用户名或密码提示错误。
  • Checkout场景:涵盖正常填写所有信息完成订单、必填字段缺失提示错误、取消订单流程。

2. 执行实施步骤

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

3. 把握关键点

  • POM模式的分层结构,让每个页面的操作和元素定位清晰明确。
  • 使用YAML文件管理测试数据,方便维护和扩展。
  • 参数化测试能够有效支持多种异常场景的验证。
  • 完整的端到端测试流程,全面覆盖登录、加购、结账等环节。
  • Playwright的同步API简化了测试编写过程。
  • 通过conftest管理浏览器实例,提高测试的稳定性和可重复性。

四、见证成果:测试运行效果

运行测试后,得到如下结果:

langlongrong@lang longrongdeMacBook-Pro sauce_demo_test % pytest tests/test_saucedemo.py -v
test session starts 
platform darwin --Python 3.10.8,pytest-7.2.0, pluggy-1.0.0--/Library/Frameworks/Python.framework/Versions/3.10/bin/python3.10
cachedir:.pytest_cache
metadata: {'Python':'3.10.8','Platform':'mac0s-12.7.6-x8664-1386-64bit','Packages':{'pytest':'7.2.0','pluggy':'1.0.0'},'Plugins': {'rerunfailures': 10.3,'html':'3.2.0','anyio':'4.6.0','playwright':'0.7.0','testreport':'1.1.5','base-url':'2.1.0','metadata':'2.0.4','hydra-core':'1.3.2'}, Base URL':'')
rootdir: /Users/lang longrong/tool/workespace/sauce_demo_test
plugins: rerunfailures-10.3,html-3.2.0,anyio-4.6.0,playright-0.7.0, testreport-1.1.5,base-ur1-2.1.0, metadata-2.0.4,hydra-core-1.3.2
collected 3 items
tests/test_saucedemo.py::test_invalid_login[user0] PASSED
tests/test_saucedemo.py::test_invalid_login[user1] PASSED
tests/test_saucedemo.py::test_valid_login_and_checkout PASSED
[33%] [66%] [100%]
passed in 20.94s

可以看到,所有测试用例均顺利通过,这充分展示了DeepSeek生成的脚本的有效性。

五、总结

从这次实战可以发现,参照DeepSeek给出的结果,基本无需大幅调整就能让脚本成功执行,极大地提高了自动化实现的效率。而且,DeepSeek在生成脚本过程中给出的思考过程,对我们进行代码实现和用例设计具有重要的参考价值,有兴趣的朋友赶紧让你的vscode集成deepseek吧!


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/tool/13985.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】