软件测试/测试开发丨利用ChatGPT自动生成基于PO的数据驱动测试框架

点此获取更多相关资料

简介

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

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

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

实践演练

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

ChatGPT返回的代码如下:

# login_page.pyclass LoginPage:def __init__(self, driver):self.driver = driverself.url = "https://example.com/login"  # 替换成实际的登录页面URLdef 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.pyimport pytest
from selenium import webdriver
from login_page import LoginPage@pytest.fixture
def browser():driver = webdriver.Chrome()  # 使用Chrome浏览器,确保已安装Chrome驱动程序并将其添加到系统PATH中yield driverdriver.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()# 进行登录后的断言,例如检查登录后的页面元素或URLassert "Welcome" in browser.title  # 替换成实际的断言条件

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

  • 提示词:现在用户名密码,需要使用数据驱动+参数化的方式传入,请修改你的 test_login 的代码。
# test_login.pyimport pytest
from selenium import webdriver
from login_page import LoginPage@pytest.fixture
def browser():driver = webdriver.Chrome()  # 使用Chrome浏览器,确保已安装Chrome驱动程序并将其添加到系统PATH中yield driverdriver.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()# 进行登录后的断言,例如检查登录后的页面元素或URLassert "Welcome" in browser.title  # 替换成实际的断言条件
- username: user1password: pass1
- username: user2password: pass2
- username: user3password: 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 driverdriver.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()# 进行登录后的断言,例如检查登录后的页面元素或URLassert "Welcome" in browser.title  # 替换成实际的断言条件

总结

1.写清楚需求:明确生成的框架使用的技术栈,比如示例中的 Python + Selenium。

2.将复杂的任务拆分为更简单的子任务:将PO设计模式与数据驱动测试拆成两个提示词进行提问,方便后续进行纠正。

3.系统地测试变化: 当返回信息不满足需求,可以进一步提出要求,比如一开始ChatGPT理解的数据驱动通过变量实现即可,可以进一步补充为通过文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/99779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS 中::after的妙用(实现在margin中显示内容)

效果图如下: 背景: 如上图,之前只是当纯的写一个参考货架平面图,用作物料系统的在库状态可视化,当完成页面body分成10等份时,货架之间需要有通道,为了实现实际的样式,我给每个等份都…

SpringBoot集成WebSocket讲解

文章目录 1 WebSocket1.1 简介1.2 WebSocket作用和调用1.2.1 作用1.2.2 js端调用 1.3 Javax1.3.1 服务端1.3.1.1 服务端接收1.3.1.2 服务端集成1.3.1.3 ping和pong消息 1.3.2 客户端1.3.2.1 客户端接收1.3.2.2 客户端发送 1.4 WebMVC1.4.1 服务端1.1.4.1 服务端接收1.1.4.2 服务…

ArcGIS Pro地图可视化—双变量关系映射

原址链接ArcGIS Pro地图可视化—双变量关系映射https://mp.weixin.qq.com/s/g-pPBHPXMOEF5NHm06JcrA 这个方法很早很早以前就有了,可能大家早就知道了,可我昨天刚看到这个东西 https://en.wikipedia.org/wiki/Multivariate_map 像是上图,美国…

笔记36:CNN的多通道卷积到底是什么样的

总结: (1)输入卷积层的feature_map的通道数,就是该卷积层每个卷积核所含有的通道数 (2)输出卷积层的feature_map的通道数,就是该卷积层所含有的卷积核的个数 a a a a 解释:【…

无人化微波产品智能测试系统

无人化微波产品智能测试系统是面向射频微波产品领域客户数字化转型需求,推出的一款新形态自动测试系统。该系统实现了微波产品测试由单工位串行测试向多工位并行测试转变,具有测试容量大、测试效能高、测试管理信息化等特点。该系统可数倍提升客户的测试…

【运维日常】mongodb 集群生产实践

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

以dzzoffice为例设置通过 SOCKET 连接 SMTP 服务器发送(支持 ESMTP 验证)

在测试dzzoffice的过程中,需要配置邮件服务器,dzzoffice的邮件设置有三种选项: 1、通过 PHP 函数的 sendmail 发送(推荐此方式) 2、通过 SOCKET 连接 SMTP 服务器发送(支持 ESMTP 验证) 3、通过 PHP 函数 SMTP 发送 Email(仅 Windows 主机下有…

vulnhub_clover靶机渗透测试

clover靶机 文章目录 clover靶机信息收集ftp渗透web渗透横线移动权限提升靶机总结 靶机地址:https://www.vulnhub.com/entry/clover-1,687/ 信息收集 使用nmap扫描得到了很对端口,能用的也就是21 22 80三个端口,其他都是关闭的,全…

基于正点原子alpha开发板的第三篇系统移植

系统移植的三大步骤如下: 系统uboot移植系统linux移植系统rootfs制作 一言难尽,踩了不少坑,当时只是想学习驱动开发,发现必须要将第三篇系统移植弄好才可以学习后面驱动,现将移植好的文件分享出来: 仓库&…

医药行业投资公司都有哪些?医药企业项目投资分析实用工具

据药融云-投融资数据库信息调研结果发现,在 3000家参与医疗投资的资方中,有超200家专注医疗投资的机构。 资方的信息可以通过垂直的生物医药行业投融资数据库进行查找,该类数据库收载了全球绝大部分的生物医药行业投资机构信息(包含了投资机构…

clickhouse之readonly解决方法

1,问题描述 日志报错写入ck报错:ru.yandex.clickhouse.except.ClickHouseUnknownException: ClickHouse exception, code: 1002, host: 192.16.1.19, port: 8123; Code: 242. DB::Exception: Table is in readonly mode: replica_path/clickhouse/tables…

$attrs 和 $listeners (vue2vue3)

目录 透传 Attributes Attributes 继承​ 对 class 和 style 的合并 v-on 监听器继承 深层组件继承 禁用 Attributes 继承 多根节点的 Attributes 继承 vue2 $attrs 和 $listeners $attrs 概念说明 $attrs 案例 $listeners 概念说明 $listeners案例 vue3 $attr…

【算法|双指针系列No.3】leetcode202. 快乐数

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

springboot整合websocket开箱即用

springboot-websocket整合项目开箱即用,ws服务端,包含了在线客户监听,发送指定客户端数据,发送所有客户端数据。还可以根据指定转发给某个客户端。 WebSocketConfig配置缓存大小设置,设置异步发送操作的超时时间&#…

为什么 0.1 + 0.1 !== 0.2

为什么 0.1 0.1 ! 0.2 总结了几个很有意思的基础题目,分享一下。 为什么 0.1 0.1 ! 0.2 看到这个问题,不得不想到计算机中的数据类型,其中浮点数表示有限的精度。那么它就无法精确的表示所有的十进制小数,所以在在某些情况下…

盲盒电商模式:融合神秘感与趣味性,带来消费者购买欲望与商业利益

盲盒电商模式是一种以“神秘感趣味性”为特点,将电商与社交购物相结合的新型商业模式。这种模式通过为消费者提供不确定性和惊喜,激发了消费者的购买欲望,同时也为商家拓展了销售渠道,带来了可观的商业利益。盲盒,字面…

在conda虚拟环境下安装PyTorch-gpu版本

conda环境配置 在conda虚拟环境下安装PyTorch-gpu版本1. 下载好anaconda以及CUDA2. 创建并进入虚拟环境 选择python版本3. 找对python torch torchvision cuda的对应版本 并 下载安装4. 测试是否成功5. 参考资料 在conda虚拟环境下安装PyTorch-gpu版本 引言: 学会在…

leetcode 73.矩阵置零

题目链接:leetcode 73 1.题目 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 2.示例 1)示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&a…

bootstrapjs开发环境搭建

Bootstrapjs是一个web前端页面应用开发框架,其提供功能丰富的JavaScript工具集以及用户界面元素或组件的样式集,本文主要描述bootstrapjs的开发环境搭建。 如上所示,使用nodejs运行时环境、使用npm包管理工具、使用npm初始化一个项目工程test…

C#实现OPC DA转OPC UA服务器

运行软件前提前安装好OPC运行组件: 为方便演示,提前准备好了一个DAServer服务器: 接下来开始配置: 该软件主要实现的功能如下: 配置过程也相对简单: 第一步: 编辑如下文件: 第二步…