写点什么

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

  • 2023-11-23
    北京
  • 本文字数:2005 字

    阅读完需:约 7 分钟

简介

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

演练示例

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


ChatGPT 回复如下:


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


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


from selenium import webdriverfrom 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 pytestfrom selenium import webdriverfrom login_page import LoginPagefrom 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 pytestfrom selenium import webdriverfrom login_page import LoginPagefrom 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 的回复进行纠正,也把更为复杂的任务简单化了,希望本文可以帮到大家。


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



用户头像

社区:ceshiren.com 微信:ceshiren2021 2019-10-23 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料,实时更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬。

评论

发布
暂无评论
软件测试/人工智能|如何使用ChatGPT编写符合PO模式的数据驱动测试框架_霍格沃兹测试开发学社_InfoQ写作社区