首页 > 其他分享 >软件测试/人工智能|如何使用ChatGPT编写符合PO模式的数据驱动测试框架

软件测试/人工智能|如何使用ChatGPT编写符合PO模式的数据驱动测试框架

时间:2023-11-23 17:33:56浏览次数:36  
标签:username self driver page PO login password ChatGPT 软件测试

简介

上一篇文章我们介绍了使用ChatGPT帮我们编写自动化测试脚本,但是上文编写的脚本并不符合我们的PO设计模式,作为现在主流的设计模式,更加方便我们去编写脚本,一旦页面发生变动,我们的代码改动也会变小,所以我们的目标不是使用ChatGPT编写自动化脚本,而是要使用ChatGPT来编写符合PO设计模式的自动化脚本,而且PO设计模式又经常会结合数据驱动,所以本文就来给大家介绍一下使用ChatGPT来生成符合PO模式的数据驱动测试。

演练示例

提问:请使用PO设计模式编写一个网站登录的Web自动化测试脚本,要求使用到Pytest测试框架和Selenium Web自动化框架。

ChatGPT回复如下:

当使用Page Object 设计模式时,可以将网站的不同页面抽象为单独的类,每个类对应一个页面。这里是一个示例,假设有登录页面和用户账户页面:

首先,创建一个 login_page.py 文件:

from selenium import webdriver
from selenium.webdriver.common.by import By

class LoginPage:
    def __init__(self, driver):
        self.driver = driver
        self.url = "https://example.com/login"
        self.username_input = (By.ID, "username")
        self.password_input = (By.ID, "password")
        self.login_button = (By.ID, "login-button")

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

    def set_username(self, username):
        self.driver.find_element(*self.username_input).send_keys(username)

    def set_password(self, password):
        self.driver.find_element(*self.password_input).send_keys(password)

    def click_login(self):
        self.driver.find_element(*self.login_button).click()

然后,创建一个user_account_page.py文件:

class UserAccountPage:
    def __init__(self, driver):
        self.driver = driver

    def get_title(self):
        return self.driver.title

接下来,编写一个测试文件test_login.py,利用Page Object模式执行登录并验证:

import pytest
from selenium import webdriver
from login_page import LoginPage
from user_account_page import UserAccountPage

@pytest.fixture(scope="module")
def browser():
    driver = webdriver.Chrome()
    yield driver
    driver.quit()

def test_login(browser):
    login_page = LoginPage(browser)
    user_account_page = UserAccountPage(browser)

    login_page.load()
    login_page.set_username("your_username")
    login_page.set_password("your_password")
    login_page.click_login()

    # 验证登录后页面的标题
    assert "User Account" in user_account_page.get_title(), "页面标题未显示用户账户信息"

这个测试文件使用了 LoginPageUserAccountPage 类来执行登录并验证登录后的页面标题。LoginPage 类包含加载页面和执行登录的方法,而 UserAccountPage 类包含获取页面标题的方法。

但是我们也发现,该脚本还未实现数据驱动测试,我们可以继续提问,实现数据驱动测试。

提问:我现在想把用户名密码使用数据驱动+参数化的方式传入,请修改你的 test_login 的代码。

ChatGPT回复如下:

当使用数据驱动和参数化的方式传入用户名和密码时,可以使用pytest的参数化装饰器。在测试文件中添加参数化装饰器,并将测试数据传入测试函数。

import pytest
from selenium import webdriver
from login_page import LoginPage
from user_account_page import UserAccountPage

@pytest.fixture(scope="module")
def browser():
    driver = webdriver.Chrome()
    yield driver
    driver.quit()

# 测试数据(用户名和密码)
testdata = [
    ("username1", "password1"),
    ("username2", "password2"),
    # 可以添加更多的测试数据
]

@pytest.mark.parametrize("username, password", testdata)
def test_login(browser, username, password):
    login_page = LoginPage(browser)
    user_account_page = UserAccountPage(browser)

    login_page.load()
    login_page.set_username(username)
    login_page.set_password(password)
    login_page.click_login()

    # 验证登录后页面的标题
    assert "User Account" in user_account_page.get_title(), "页面标题未显示用户账户信息"

在这个示例中,testdata 列表包含了多组用户名和密码,通过 @pytest.mark.parametrize 装饰器将这些数据传递给 test_login 函数。测试将会针对每一组数据执行登录操作,并验证登录后页面的标题。

总结

本文主要介绍了使用ChatGPT实现PO设计模式和数据驱动测试的结合,我们需要注意的是,我们在提问时可以将PO设计模式和数据驱动测试分开,这样方便我们对ChatGPT的回复进行纠正,也把更为复杂的任务简单化了,希望本文可以帮到大家。

获取更多技术资料,请点击!

标签:username,self,driver,page,PO,login,password,ChatGPT,软件测试
From: https://www.cnblogs.com/hogwarts/p/17852084.html

相关文章

  • 软件测试/人工智能|使用ChatGPT帮我们查找bug
    简介作为一个程序员,发现自己写的bug其实不是一件容易的事情,我们会更容易发现别人的错误,对于自己代码里的错误会更难发现,这也是测试的必要性。通常,我们会有以下几种方式来检测发现代码中的bug:研发编写单元测试。代码扫描,比如sonarqube,findbugs。测试人员进行集成测试现在有......
  • 软件测试/人工智能|如何使用ChatGPT帮我们写自动化测试脚本
    简介当今软件开发中,自动化测试脚本的编写是确保软件质量和稳定性的重要步骤。随着人工智能和自然语言处理技术的进步,像ChatGPT这样的语言模型已经成为编写自动化测试脚本的有力工具。ChatGPT可以根据给定的指令和条件生成代码,简化了测试流程并提高了效率。演练示例假设我们有......
  • 解决spring gateway 在globalFilter 中改写response后前端接到的数据不完整问题
    表现情况1. 前端请求后不响应2.前端接到的数据不完整 是因为修改返回体后没修改header中的content-length.设置成正确的content-length就可以了response.getHeaders().setContentLength(bodyStr.getBytes().length);参考https://juejin.cn/post/7050273290752884743......
  • 全新Self-RAG框架亮相,自适应检索增强助力超越ChatGPT与Llama2,提升事实性与引用准确性
    全新Self-RAG框架亮相,自适应检索增强助力超越ChatGPT与Llama2,提升事实性与引用准确性1.基本思想大型语言模型(LLMs)具有出色的能力,但由于完全依赖其内部的参数化知识,它们经常产生包含事实错误的回答,尤其在长尾知识中。为了解决这一问题,之前的研究人员提出了检索增强生成(RAG),它通......
  • Firefox developer tools truncates long network response, Chrome does not show
    Firefoxdevelopertoolstruncateslongnetworkresponse,ChromedoesnotshowFirefoxdevtoolsnetworkinspectorstilltruncatesresponsesto1MBbydefault.Youcanchangeordisablethelimitbynavigatingtoabout:configandchangingdevtools.netmonit......
  • com.aspose.words word 转pdf问题
    在讲word转pdf的时候推荐使用以下代码publicstaticvoidmain(String[]args)throwsException{//加载要转换的Word文档。Documentdoc=newDocument("C:\\Temp\\input.doc");//要保存输出的PDF文件的位置。StringoutputFilenam......
  • poll机制
    一.参考网址1. 一文带你搞懂中断按键驱动程序之poll机制(超详细)2. Linux网络编程——I/O复用之poll函数......
  • VO、BO、PO、DTO、DAO
    一、简介   【VO】:ViewObject。用于表示一个与前端交互的对象;   【DTO】:DataTransferObject。表示一个数据传输对象;   【BO】:BusinessObject。表示一个业务对象;   【PO】:PersistantObject。表示数据库中的一条映射对象   【DAO】:......
  • 您可以尝试添加 --skip-broken 选项来解决该问题 ** 发现 2 个已存在的 RPM 数据库问
    ##提示如下**Found2pre-existingrpmdbproblem(s),‘yumcheck’outputfollows:2:postfix-2.10.1-7.el7.x86_64hasmissingrequiresoflibmysqlclient.so.18()(64bit)2:postfix-2.10.1-7.el7.x86_64hasmissingrequiresoflibmysqlclient.so.18(libmysqlclient_18)......
  • Spring中@Mapper和@Repository的区别与使用
    本文根据文章:https://blog.csdn.net/m0_45210394/article/details/126223145进行修改@Mapper是mybatis的注解,标注在dao层接口上,可以通过动态代理生成接口的实例bean(编译之后能生成相应的接口实现类)@Repository是spring的注解,也标注在dao层接口上,但是@Repository注解只是表明这......