利用人工智能ChatGPT自动生成基于PO的数据驱动测试框架

简介: PO(PageObject)设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类,并以页面为单位来写测试用例,实现页面对象和测试用例的分离。数据驱动测试(DDT)是一种方法,其中在数据源的帮助下重复执行相同顺序的测试步骤,以便在验证步骤进行时驱动那些步骤的输入值和/或期望值。

简介

PO(PageObject)设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类,并以页面为单位来写测试用例,实现页面对象和测试用例的分离。

数据驱动测试(DDT)是一种方法,其中在数据源的帮助下重复执行相同顺序的测试步骤,以便在验证步骤进行时驱动那些步骤的输入值和/或期望值。

无论是 PO 设计模式还是数据驱动测试,其实都是目前测试工程师在编写自动化测试框架中的常用技巧与设计模式。而以前复杂的设计模式与框架,可以利用ChatGPT轻松生成,只需要在其基础之上做适当的调优即可。

实践演练

  • 提示词:请示使用PO设计模式编写一个Web自动化测试脚本,要求使用到pytest测试框架和selenium web自动化框架。

ChatGPT返回的代码如下:


# login_page.py

class LoginPage:
    def __init__(self, driver):
        self.driver = driver
        self.url = "https://example.com/login"  # 替换成实际的登录页面URL

    def open(self):
        self.driver.get(self.url)

    def enter_username(self, username):
        username_field = self.driver.find_element_by_id("username")  # 替换为实际的用户名字段元素定位方式
        username_field.send_keys(username)

    def enter_password(self, password):
        password_field = self.driver.find_element_by_id("password")  # 替换为实际的密码字段元素定位方式
        password_field.send_keys(password)

    def click_login_button(self):
        login_button = self.driver.find_element_by_id("login-button")  # 替换为实际的登录按钮元素定位方式
        login_button.click()
AI 代码解读

# test_login.py

import pytest
from selenium import webdriver
from login_page import LoginPage

@pytest.fixture
def browser():
    driver = webdriver.Chrome()  # 使用Chrome浏览器,确保已安装Chrome驱动程序并将其添加到系统PATH中
    yield driver
    driver.quit()

def test_login_successful(browser):
    login_page = LoginPage(browser)
    login_page.open()
    login_page.enter_username("your_username")
    login_page.enter_password("your_password")
    login_page.click_login_button()

    # 进行登录后的断言,例如检查登录后的页面元素或URL
    assert "Welcome" in browser.title  # 替换成实际的断言条件
AI 代码解读

以上的代码只满足 PO 设计模式的需求,但是不满足数据驱动测试的需求,所以可以进一步优化提示词,要求用户名密码使用参数化以及数据驱动的方式传入。

  • 提示词:现在用户名密码,需要使用数据驱动+参数化的方式传入,请修改你的 test_login 的代码。

# test_login.py

import pytest
from selenium import webdriver
from login_page import LoginPage

@pytest.fixture
def browser():
    driver = webdriver.Chrome()  # 使用Chrome浏览器,确保已安装Chrome驱动程序并将其添加到系统PATH中
    yield driver
    driver.quit()

# 使用参数化装饰器传入多组用户名和密码
@pytest.mark.parametrize("username, password", [("user1", "pass1"), ("user2", "pass2")])
def test_login_successful(browser, username, password):
    login_page = LoginPage(browser)
    login_page.open()
    login_page.enter_username(username)
    login_page.enter_password(password)
    login_page.click_login_button()

    # 进行登录后的断言,例如检查登录后的页面元素或URL
    assert "Welcome" in browser.title  # 替换成实际的断言条件
AI 代码解读
  • 提示词:测试数据要求放在一个yaml文件中,然后代码读取该yaml文件

- username: user1
  password: pass1
- username: user2
  password: pass2
- username: user3
  password: pass3
AI 代码解读
# test_login.py
import pytest
from selenium import webdriver
from login_page import LoginPage
import yaml

@pytest.fixture
def browser():
    driver = webdriver.Chrome()  # 使用Chrome浏览器,确保已安装Chrome驱动程序并将其添加到系统PATH中
    yield driver
    driver.quit()

# 从YAML文件中读取测试数据
def get_test_data():
    with open("testdata.yaml", "r") as file:
        data = yaml.safe_load(file)
    return data

# 使用参数化装饰器传入多组用户名和密码
@pytest.mark.parametrize("user_data", get_test_data())
def test_login_successful(browser, user_data):
    username = user_data["username"]
    password = user_data["password"]

    login_page = LoginPage(browser)
    login_page.open()
    login_page.enter_username(username)
    login_page.enter_password(password)
    login_page.click_login_button()

    # 进行登录后的断言,例如检查登录后的页面元素或URL
    assert "Welcome" in browser.title  # 替换成实际的断言条件
AI 代码解读

由此一步步的优化提示词以及ChatGPT的响应信息,即可让ChatGPT逐步满足需求。

总结

  1. 写清楚需求:明确生成的框架使用的技术栈,比如示例中的 python + selenium。
  2. 将复杂的任务拆分为更简单的子任务:将PO设计模式与数据驱动测试拆成两个提示词进行提问,方便后续进行纠正。
  3. 系统地测试变化: 当返回信息不满足需求,可以进一步提出要求,比如一开始ChatGPT理解的数据驱动通过变量实现即可,可以进一步补充为通过文件。
目录
打赏
0
0
0
0
203
分享
相关文章
|
3月前
|
Metasploit Pro 4.22.7-2025050101 发布 - 专业渗透测试框架
Metasploit Pro 4.22.7-2025050101 发布 - 专业渗透测试框架
106 10
Metasploit Pro 4.22.7-2025050101 发布 - 专业渗透测试框架
|
4月前
|
Metasploit Pro 4.22.7-2025042101 发布 - 专业渗透测试框架
Metasploit Pro 4.22.7-2025042101 (Linux, Windows) - 专业渗透测试框架
110 5
Metasploit Pro 4.22.7-2025042101 发布 - 专业渗透测试框架
|
11天前
|
Metasploit Pro 4.22.8-2025073001 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.8-2025073001 (Linux, Windows) - 专业渗透测试框架
41 0
人工智能驱动的软件工程:测试左移的崛起价值
本文探讨了人工智能驱动下测试左移理念在软件工程中的重要性,分析测试工程师在需求评估、AI代码生成及遗留系统优化中的关键作用,揭示AI带来的挑战与机遇,并指出测试工程师需提升技能、关注合规与可维护性,以在AI时代保障软件质量。
47 0
Playwright 自动化测试系列(7)| 第三阶段:测试框架集成​​Page Object 模式
本课程详解Playwright测试框架中的Page Object模式,通过电商登录-下单实战演示PO架构设计与高级技巧,结合Pytest实现多用户测试。重点解析PO模式提升代码复用性、降低维护成本的核心价值,并提供常见问题解决方案,助力构建高可维护性的自动化测试体系。
Playwright 自动化测试系列(6)| 第三阶段:测试框架集成​指南:参数化测试 + 多浏览器并行执行
Pytest 与 Playwright 集成可提升自动化测试效率,支持参数化测试、多浏览器并行执行及统一报告生成。通过数据驱动、Fixture 管理和并行优化,显著增强测试覆盖率与执行速度,适用于复杂 Web 应用测试场景。
自动化测试框架深度解析与选择指南
Apache JMeter是Apache组织基于Java开发的一款压力测试工具,旨在测试软件的性能承受能力。它支持多种协议测试及功能测试,提供灵活的断言创建能力,如同创建带断言的脚本来验证程序是否返回预期结果。
Metasploit Pro 4.22.7-2025061201 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.7-2025061201 (Linux, Windows) - 专业渗透测试框架
78 3
Metasploit Pro 4.22.7-2025061201 (Linux, Windows) - 专业渗透测试框架
阿里云人工智能平台 PAI 开源 EasyDistill 框架助力大语言模型轻松瘦身
本文介绍了阿里云人工智能平台 PAI 推出的开源工具包 EasyDistill。随着大语言模型的复杂性和规模增长,它们面临计算需求和训练成本的障碍。知识蒸馏旨在不显著降低性能的前提下,将大模型转化为更小、更高效的版本以降低训练和推理成本。EasyDistill 框架简化了知识蒸馏过程,其具备多种功能模块,包括数据合成、基础和进阶蒸馏训练。通过数据合成,丰富训练集的多样性;基础和进阶蒸馏训练则涵盖黑盒和白盒知识转移策略、强化学习及偏好优化,从而提升小模型的性能。
|
3月前
|
Metasploit Pro 4.22.7-2025052201 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.7-2025052201 (Linux, Windows) - 专业渗透测试框架
98 5
Metasploit Pro 4.22.7-2025052201 (Linux, Windows) - 专业渗透测试框架
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问