写点什么

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

作者:测试人
  • 2023-10-10
    北京
  • 本文字数:2172 字

    阅读完需:约 7 分钟

免费领取:测试资料+测试用例+简历模板+测试文档

简介

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 pytestfrom selenium import webdriverfrom login_page import LoginPage
@pytest.fixturedef 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 pytestfrom selenium import webdriverfrom login_page import LoginPage
@pytest.fixturedef 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.pyimport pytestfrom selenium import webdriverfrom login_page import LoginPageimport yaml
@pytest.fixturedef 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 理解的数据驱动通过变量实现即可,可以进一步补充为通过文件。

发布于: 刚刚阅读数: 6
用户头像

测试人

关注

专注于软件测试开发 2022-08-29 加入

霍格沃兹测试开发学社,测试人社区:https://ceshiren.com/t/topic/22284

评论

发布
暂无评论
软件测试/测试开发丨ChatGPT自动生成基于PO的数据驱动测试框架_Python_测试人_InfoQ写作社区