首页 > 其他分享 >利用人工智能ChatGPT自动生成基于PO的数据驱动测试框架

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

时间:2024-07-31 13:07:19浏览次数:7  
标签:username 人工智能 driver PO login password ChatGPT def page

简介

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理解的数据驱动通过变量实现即可,可以进一步补充为通过文件。

标签:username,人工智能,driver,PO,login,password,ChatGPT,def,page
From: https://www.cnblogs.com/hogwarts/p/18334408

相关文章

  • python - 构建奇点容器时在 pyproject.toml 中找不到 [tool.poetry] 部分
    我正在尝试构建一个在HPC环境上运行的奇点容器。我正在使用poetry来管理python包。我的pyproject.toml文件的内容如下:[tool.poetry]name="haqc"version="0.1.0"description=""authors=["VivekKatial<[email protected]>"......
  • Tox 中的 Pytest - 找不到测试,`ImportError`
    我有一个具有当前结构的包:my_package|-pyproject.toml|-poetry.lock|-tox.ini|-my_package||-__init__.py||-my_package.py|-tests|-test_my_package.pypyproject.toml为pytest配置如下:[tool.pytest.ini_option......
  • 【Stable Diffusion真人大模型】再次升级!太逼真了!SD1.5模型超高真实度,细腻程度媲美XL
    前言AWPortraitWW模型再次升级,大佬**“DynamicWang”**于7月4日发布最新升级版本AWPortraitWW1.1版本。本次升级在画质表现上再一次提升。根据大佬所述该款模型的直出效果在细腻程度媲美XL和DIT架构的模型,在语义理解、人种及面部多样性上同样有了很大的提升,尤其是在棚拍及......
  • Polly服务熔断
    //自定义异常publicclassMyException:Exception{publicMyException(string?message):base(message){}}publicclassCircuitBreakerExample{//熔断规则privatestaticreadonlyIAsyncPolicy<HttpResponseMessage>_circuitB......
  • python导入包报错ImportError: cannot import name ‘Protocol‘
    python32.pyTraceback(mostrecentcalllast):File"2.py",line5,in<module>importptwt#use"fromsrcimportptwt"foraclonedtherepoFile"……lib/python3.6/site-packages/ptwt/_util.py",line2......
  • 核心(Hutool-core)克隆工具cn.hutool.clone.CloneSupport
    一、直接继承extendsCloneSupport这个类就完事了/**狗狗类,用于继承CloneSupport类@authorLooly*/privatestaticclassDogextendsCloneSupport{privateStringname="wangwang";privateintage=3;}当然,使用CloneSupport的前提是你没有继承任何的类,谁让Java......
  • Typora图片即时上传
    Typora图片即时上传声明:以下转载自:博客园markdown上传文件及图片-jaysonteng-博客园(cnblogs.com)使用Typora写博客,图片即时上传,无需第三方图床-EasyBlogImageForTypora-xhznl-博客园(cnblogs.com)感谢此文所引用的文章的作者提供的优质学习资源,如有侵犯,请原......
  • Python - Composition
     classEngine:def__init__(self,power):self.power=powerdefstart(self):self.draw_current()self.spin()self.ignite()defdraw_current(self):print('Drawingcurrent')defspin(sel......
  • 适用于 JDK 1.8 的 Spring Boot 的 maven 的 pom.xml 模板
    适用于JDK1.8的SpringBoot的maven的pom.xml模板 <?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:sche......
  • python3 unittest+BeautifulReport单个进程输出多个测试报告
    最近一个项目中需要由于输出的案例内容非常多(上万条),导致BeautifulReport输出的报告内容非常大(几百兆)。浏览器无法正常处理这么大的测试报告,就算打开了,也不方便阅读和处理,因此需要将报告分成多个输出。经修改代码,发现单个进程内输出多个测试报告出现问题:第一个测试报告能正常数据......