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

news2025/1/12 21:41:52

简介

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

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

总结

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

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

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

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

 

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

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

相关文章

有奖招募——2023年度清华社“荐书官”活动今日开始了!

又到“1024程序员节”了,维护网络世界稳定和平的程序员大大们,辛苦了!生活难免有bug,来给彼此个hug~ 过完1024,这一年也快要结束了,岁末回顾又要提上日程。很多人都有整理年度书单的习惯,那么这…

服务器数据恢复-服务器系统损坏启动蓝屏的数据恢复案例

服务器故障&分析: 某公司一台华为机架式服务器,运行过程中突然蓝屏。管理员将服务器进行了重启,但是服务器操作系统仍然进入蓝屏状态。 导致服务器蓝屏的原因非常多,比较常见的有:显卡/内存/cpu或者其他板卡接触不…

基于SSM的流浪动物领养信息系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

lua-web-utils和proxy程序示例

以下是一个使用lua-web-utils和https://www.duoip.cn/get_proxy的爬虫程序示例。每行代码后面都给出了详细的中文解释。 -- 导入所需的库 local http require("http") local ltn12 require("ltn12") local json require("json") local web_u…

GitLab升级16.5.0后访问提示502

系统是兼容CentOS8的TencentOS3.1 GitLab原来的版本是16.4.1 使用yum升级时发现GitLab有新版本,决定升级。 升级过程无异常,出现升级成功的提示。 可是意外的时,访问站点时提示502. GitLab比较吃资源,启动的服务较多。之前也有等会就正常的情况。 这次没那么幸运,一…

python爬虫-某政府网站反爬小记——请求参数base64加密

注意!!!!某XX网站逆向实例仅作为学习案例,禁止其他个人以及团体做谋利用途!!! 第一步,正常分析页面,可以看到请求参数被加密了 第二步, 打断点查…

imu的静止零偏噪声标定与积分

示例使用的Imu为轮趣科技 n100 mini其中imu出来的数据的坐标系是基于ROS坐标系的 Eigen::Quaterniond q_ahrs(ahrs_frame_.frame.data.data_pack.Qw,ahrs_frame_.frame.data.data_pack.Qx,ahrs_frame_.frame.data.data_pack.Qy,ahrs_frame_.frame.data.data_pack.Qz);Eigen::…

Android Kotlin 协程初探 | 京东物流技术团队

1 它是什么(协程 和 Kotlin协程) 1.1 协程是什么 维基百科:协程,英文Coroutine [kəru’tin] (可入厅),是计算机程序的一类组件,推广了协作式多任务的子程序,允许执行被…

QSPI介绍

0 Preface/Foreword 1 QSPI介绍

数据结构与算法课后题-第七章(顺序查找和折半查找)

牛刀小试,做一下小题,检查一下自己的基础知识掌握的情况。 文章目录 牛刀小试1牛刀小试2牛刀小试3牛刀小试4牛刀小试5牛刀小试6牛刀小试7牛刀小试8牛刀小试9牛刀小试10牛刀小试11牛刀小试12牛刀小试13牛刀小试14牛刀小试15 牛刀小试1 牛刀小试2 错题分析…

从「纯野妆」到「降温妆」,解析小红书“热词爆款学”

白开水妆、视觉降温妆、亚裔辣妹妆......打开小红书的美妆板块,你会发现许多这类极具创意的妆容热词。小红书用户乐于尝鲜、乐于创新,具有强大的创造能力,热衷于为产品、为妆容、为穿搭起“外号”。这些“外号”往往能突破原有思维的束缚&…

el-select multiple表单校验问题

el-select multiple表单校验问题 <el-form refform :modelform><el-form-item propvulTypes label漏洞类型><el-select v-modelform.vulTypes changevulTypeChange><el-option v-foritem in vulList :keyitem :labelitem :valueitem></el-option&g…

智能井盖传感器特点是什么?

在城市基础设施建设过程中&#xff0c;无论是国际大都市还是小县城&#xff0c;井盖所导致的问题会严重影响着城市地下生命线。井盖如若出现移动翻转等现象&#xff0c;是市民生命安全的潜在隐患&#xff0c;也有可能会影响下水道&#xff0c;供水管道等正常运行。所以传统井盖…

HashMap 源码解析

目录 一. 前言 二. 哈希表 三. 源码解析 3.1. 数据结构 3.2. 类结构 3.3. 字段属性 3.4. 构造方法 3.5. 确定哈希桶数组索引位置 3.6. 添加元素 3.7. 扩容机制 3.8. 删除元素 3.9. 查找元素 一. 前言 HashMap基于哈希表的Map接口实现&#xff0c;是以key-value存储…

JavaScript 函数 eval() , json字符串转换

eval() eval() 函数计算 JavaScript 字符串&#xff0c;并把它作为脚本代码来执行。 如果参数是一个表达式&#xff0c;eval() 函数将执行表达式。如果参数是Javascript语句&#xff0c;eval()将执行 Javascript 语句 console.log(eval(2 2)); // Expected output: 4console…

基于SSM的论文投稿系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

PMP考试时间是什么时候?

PMP官方公布&#xff0c;一般来说&#xff0c;一年有4次&#xff0c;分别在3月、6月、9月和12月。具体日期或者时间变动看官方通知。 pmp干货&#xff1a;点击免费刷题&#xff0c;PMP第七版&#xff0c;预测敏捷资料免费分享&#xff01; 来说一下考试的相关情况 1、考试题型…

【EI会议征稿】第十届机电一体化与工业信息学国际学术研讨会(ISMII 2024)

第十届机电一体化与工业信息学国际学术研讨会&#xff08;ISMII 2024&#xff09; 2024 10th International Symposium on Mechatronics and Industrial Informatics 随着往年九届的成功举办&#xff0c;2024年第十届机电一体化与工业信息学国际学术研讨会&#xff08;ISMII…

docker安装mqtt服务器, 并测试连接

docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:5.3.0 使用mqttx进行测试: 参考: 下载 EMQX

自定义命名不同类型文件,隐藏编号轻松整理,一键操作高效便捷!

你是否曾经因为文件名混乱而烦恼&#xff0c;或者因为编号重复而感到困扰&#xff1f;让我们一起解决这个问题&#xff0c;推荐一款强大的文件改名工具&#xff0c;帮助你个性化文件改名&#xff0c;自定义命名不同类型文件&#xff0c;隐藏编号轻松整理&#xff01; 首先我们…