利用人工智能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理解的数据驱动通过变量实现即可,可以进一步补充为通过文件。
相关文章
|
15天前
|
机器学习/深度学习 人工智能 自然语言处理
软件测试中的人工智能革命:现状与未来展望
【10月更文挑战第2天】 本文深入探讨了人工智能在软件测试领域的应用现状、面临的挑战以及未来的发展方向。通过分析AI技术如何提高测试效率、准确性和自动化水平,文章揭示了AI在改变传统软件测试模式中的关键作用。同时,指出了当前AI测试工具的局限性,并对未来AI与软件测试深度融合的前景进行了展望,强调了技术创新对于提升软件质量的重要性。
35 4
|
9天前
|
自然语言处理 机器人 Python
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
ChatPaper是一个基于文本生成技术的智能研究论文工具,能够根据用户输入进行智能回复和互动。它支持快速下载、阅读论文,并通过分析论文的关键信息帮助用户判断是否需要深入了解。用户可以通过命令行或网页界面操作,进行论文搜索、下载、总结等。
21 1
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
|
5天前
|
存储 测试技术 数据库
数据驱动测试和关键词驱动测试的区别
数据驱动测试 数据驱动测试或 DDT 也被称为参数化测试。
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
软件测试中的人工智能:提升效率与准确性的新途径
在当今快速发展的技术领域,人工智能(AI)正成为软件测试的重要工具。本文将探讨AI在软件测试中的应用,如何通过智能化手段提高测试的效率和准确性。从自动化测试到缺陷预测,我们将深入了解AI如何改变传统的软件测试方式,为软件开发流程带来革命性的变化。
|
15天前
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。
|
9天前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
30 0
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
|
9天前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
20 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
12天前
|
Web App开发 设计模式 测试技术
自动化测试框架的搭建与实践
【10月更文挑战第5天】本文将引导你理解自动化测试框架的重要性,并通过实际操作案例,展示如何从零开始搭建一个自动化测试框架。文章不仅涵盖理论,还提供具体的代码示例和操作步骤,确保读者能够获得实用技能,提升软件质量保障的效率和效果。
|
14天前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
24 4
|
12天前
|
机器学习/深度学习 人工智能 监控
软件测试中的人工智能革命
本文探讨了人工智能在软件测试中的应用及其带来的变革。通过分析AI如何提高测试效率、准确性,并减少人工干预,本文揭示了软件测试领域的未来趋势。

热门文章

最新文章