利用人工智能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()

# 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  # 替换成实际的断言条件

以上的代码只满足 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  # 替换成实际的断言条件
  • 提示词:测试数据要求放在一个yaml文件中,然后代码读取该yaml文件

- username: user1
  password: pass1
- username: user2
  password: pass2
- username: user3
  password: pass3
# 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  # 替换成实际的断言条件

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

总结

  1. 写清楚需求:明确生成的框架使用的技术栈,比如示例中的 python + selenium。
  2. 将复杂的任务拆分为更简单的子任务:将PO设计模式与数据驱动测试拆成两个提示词进行提问,方便后续进行纠正。
  3. 系统地测试变化: 当返回信息不满足需求,可以进一步提出要求,比如一开始ChatGPT理解的数据驱动通过变量实现即可,可以进一步补充为通过文件。
相关文章
|
13天前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
60 8
|
19天前
|
人工智能 JavaScript 前端开发
自动化测试框架的演进与实践###
本文深入探讨了自动化测试框架从诞生至今的发展历程,重点分析了当前主流框架的优势与局限性,并结合实际案例,阐述了如何根据项目需求选择合适的自动化测试策略。文章还展望了未来自动化测试领域的技术趋势,为读者提供了宝贵的实践经验和前瞻性思考。 ###
|
26天前
|
人工智能 监控 测试技术
探索软件测试中的自动化框架选择与优化策略####
【10月更文挑战第21天】 本文深入剖析了软件测试领域面临的挑战,聚焦于自动化测试框架的选择与优化这一核心议题。不同于传统摘要的概述方式,本文将以一个虚拟案例“X项目”为线索,通过该项目从手动测试困境到自动化转型的成功历程,生动展现如何根据项目特性精准匹配自动化工具(如Selenium、Appium等),并结合CI/CD流程进行深度集成与持续优化,最终实现测试效率与质量的双重飞跃。读者将跟随“X项目”团队的视角,直观感受自动化框架选型的策略性思考及实践中的优化技巧,获得可借鉴的实战经验。 ####
32 0
|
8天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
39 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
14天前
|
安全 Ubuntu Linux
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
38 9
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
|
22天前
|
Java 测试技术 API
探索软件测试中的自动化框架选择####
在当今快节奏的软件开发周期中,自动化测试已成为确保产品质量与加速产品迭代的关键策略。本文深入剖析了自动化测试的核心价值,对比分析了市场上主流的自动化测试框架,旨在为项目团队提供选型时的考量因素及实践指南,助力高效构建适应未来变化的自动化测试体系。 ####
|
18天前
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。
|
21天前
|
jenkins 测试技术 持续交付
自动化测试框架的搭建与实践
在软件开发领域,自动化测试是提升开发效率、确保软件质量的关键手段。本文将引导读者理解自动化测试的重要性,并介绍如何搭建一个基本的自动化测试框架。通过具体示例和步骤,我们将探索如何有效实施自动化测试策略,以实现软件开发流程的优化。
43 7
|
18天前
|
数据管理 jenkins 测试技术
自动化测试框架的设计与实现
在软件开发周期中,测试是确保产品质量的关键步骤。本文通过介绍自动化测试框架的设计原则、组件构成以及实现方法,旨在指导读者构建高效、可靠的自动化测试系统。文章不仅探讨了自动化测试的必要性和优势,还详细描述了框架搭建的具体步骤,包括工具选择、脚本开发、执行策略及结果分析等。此外,文章还强调了持续集成环境下自动化测试的重要性,并提供了实际案例分析,以帮助读者更好地理解和应用自动化测试框架。
|
19天前
|
监控 测试技术 定位技术
探索软件测试中的自动化测试框架选择与实施###
本文不概述传统意义上的摘要内容,而是直接以一段对话形式引入,旨在激发读者兴趣。想象一下,你是一名勇敢的探险家,面前摆满了各式各样的自动化测试工具地图,每张地图都指向未知的宝藏——高效、精准的软件测试领域。我们将一起踏上这段旅程,探讨如何根据项目特性选择合适的自动化测试框架,并分享实施过程中的关键步骤与避坑指南。 ###
29 4
下一篇
DataWorks