扫码阅读
手机扫码阅读

ChatGPT在GUI自动化测试领域的应用

231 2024-02-21

ChatGPTChat Generative Pre-trained Transformer)是美国OpenAI研发的聊天机器人程序,于20221130日发布。ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过理解和学习人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文等任务。今天我们就来看看ChatGPT在软件测试领域的应用。


ChatGPT和GUI自动化测试

对于软件研发,ChatGPT 最有趣的功能之一是它可以根据简单的自然语言的描述生成可运行的代码。它可以生成多种语言的代码,并可以跨这些语言使用大量内置包。那么,随之而来的问题是,ChatGPT是否可以用来生成自动化测试的代码?


答案显然是确定的, ChatGPT可以用多种语言编写基于Selenium的GUI自动化测试。


但是能够编写出看起来准确的代码仅仅是个开始。在一个理想的场景中,人们会向 ChatGPT提供要生成的测试的描述,它会知道有关被测系统的所有详细信息,并且它会生成完美的、无需修改的可执行代码。但是,ChatGPT目前还无法做到这么完美,不过,它的功能仍然令人印象深刻。


ChatGPT在测试中的应用,不是要完全取代测试工程师,而是作为一种新的低代码方法来赋能测试工程师,使其测试用例的开发更高效。低代码开发允许几乎没有编码经验的人可以使用拖放式开发平台或简单的自然语言来实现测试代码的编写,因此对于团队编写测试自动化代码来说更容易实现,而且成本更低。


ChatGPT可以被视为用于编写自动化测试用例的强大低代码工具。ChatGPT接受自然语言作为输入,然后自动生成可运行的自动化测试脚本,因此用户使用的认知成本很低,接下来让我们一起看一下ChatGPT在生成测试自动化脚本、类和函数方面的非常出色表现。


使用ChatGPT生成基于Cucumber的GUI自动化测试用例

ChatGPT生成自动化测试用例代码的能力还是很强大的。测试工程师提供基于自然语言的测试要求(称为prompt),ChatGPT就可以直接生成Cucumber使用的场景和步骤定义,它甚至知道Cucumber需要运行的不同组件,而无需提前明确告知。


下面的图1展示了使用ChatGPT生成Google搜索测试用例的例子,在这个例子中,我们指定使用基于BDDCucumber作为框架,来完成一个Google网站的测试。

1:使用ChatGPT生成Google搜索测试用例的例子

从这个例子中可以看出,promptGoogle网站测试的具体要求并没有明确,但ChatGPT仍会生成一个脚本来测试 Google网站的主要功能之一,即搜索功能。在此示例中,它甚至正确识别了 Google 搜索栏的标识符是“q”。

虽然这是ChatGPT生成测试用例很好的例子,但是预测标识符“q”的准确性并不表示它永远是正确的。在大多数情况下,ChatGPT是无法知道元素的准确定位器,但是它会自己实现占位弥补。

人工遍历生成的代码,并查找和替换所有元素定位器是非常耗时耗力的,通过将操作行为和页面对象的解耦分离可以使问题变得容易很多,这样当元素定位信息发生变化的时候只需要修改页面对象的定义,而不需要修改操作行为,这样可以提高测试脚本的可维护性,因此我们希望使用页面对象模型来构建我们的测试代码,

下面的图2prompt就要求ChatGPT使用Cucumber,用Python语言实现一个基于页面对象模型的通用登录测试。

2:使用Cucumber,用Python语言实现基于页面对象模型的通用登录测试

我们看到,ChatGPT为网站的登录页面生成了一个通用测试,并指示ChatGPT使用页面对象模型和类变量作为元素定位器,这样的代码可维护性就要比之前的好出一大截。

但是,如果你仔仔细观察,会发现测试的所有输入值(例如 URL、用户名和密码)都硬编码到了步骤实现中。实际场景中被测网站不太可能是“http://www.example.com/login”,并且有效的用户名和密码也不应该是硬编码的“username”和“password”。

更好的写法应该是Cucumber在场景中,从feature文件中读取“username”变量和“password”变量。如果你不知道这个如何实现或者不想花时间自己代码,怎么办?那么,你可以要求ChatGPT来重构代码。为此我们使用图3promptChatGPT提出了改进要求,显式要求从feature文件中读取“username”和“password”。

3:改进后的代码:从feature文件中读取“username”和“password

更新之后的代码实现了从feature文件读取变量,而不是硬编码。这个过程恰好体现出了ChatGPT的显著特征之一:该模型的对话性质允许你准确地告诉系统你想要在代码中更改什么,并且它非常擅长倾听和执行你的请求。

如果需要进一步考虑生成代码的执行,我们可以进一步要求ChatGPT生成与Sauce Labs兼容的测试脚本。由于在Sauce Labs上运行脚本需要更新脚本使其支持Selenium启动测试的方式,因此让ChatGPT编写准确的启动方法对于没有太多编码经验的测试工程师来说可能至关重要。只需在prompt中添加“并在 Sauce Labs 上运行测试”,我们就可以生成一个脚本,其中包含启动测试的准确方法,具体的过程如图4所示。

4:生成能够在Sauce Labs上运行的测试脚本

这次生成的脚本使用了正确的 URL,传递必要的能力,并使用正确的驱动程序方法开始测试。它可以任意决定使用哪个平台、浏览器名称和版本,也可以手动或通过告诉ChatGPT更新这些功能来轻松更新这些内容。通过这样的过程,你可能已经发现了,在Sauce Labs上运行由 ChatGPT生成的测试就是这么容易。

ChatGPT在GUI自动化测试应用中的一些问题

虽然 ChatGPT 有很大的潜力成为自动化测试的低代码解决方案,但它仍然存在问题。测试工程师需要对被测应用程序以及生成代码时使用的编码语言和包有一定的了解,因为系统通常需要被告知纠正问题。

另外,由于ChatGPT本身不运行代码,因此无法知道生成的代码是否真正可运行。一个明显的短板是需要手动更新XpathsID以准确定位正确的元素,因为ChatGPT不仅不知道这些标识符,它会填充随机标识符,以便输出代码尽可能完整。

上述代码的另一个问题是步骤描述并不总是准确反映脚本中正在测试的内容。例如,步骤“I should see my username "{username}" is in the top right corner”使用方法“expected_conditions.presence_of_element_located()”,它只检查以确保该元素存在于页面,而不是它位于屏幕的特定区域,所以对于页面展示的检查这样的脚本是无能为力的。

最后,ChatGPT将在其测试代码中假定登录的最常见形态。上述的例子都是在提交前在同一个页面输入用户名和密码,但有些网站是先输入用户名,然后点击“下一步”之类的按钮,再输入密码。用户可以使用ChatGPTprompt特性来纠正诸如此类的问题,但是,同样,测试工程师必须能够首先自己对被测系统有清晰的认知,所以其实在ChatGPT场景下,真正考验的是测试工程师的用例表述能力,当测试用例表述不清晰的话,ChatGPT也是无能为力的。


ChatGPT自动化测试应用总结

ChatGPT是一个非常强大的自然语言模型,具有巨大的潜力。它可以做的事情很重要,它可能会引领许多问题的低代码测试解决方案。它有可能在测试中这样做,但仍然需要对所使用的语言和被测应用程序有合理的理解才能更好地使用ChatGPT。但我们不应该低估它的潜力:ChatGPT是真正令人印象深刻的代码生成,这是以前的自然语言生成模型无法实现的。

原文链接: https://mp.weixin.qq.com/s?__biz=MzkzNDM1MDU3Mg==&mid=2247484582&idx=1&sn=fb2107c9cc91377eae7bc070d150b0dc

关注软件研发行业效能提升与质量提升的工程实践,普及研发效能宣言的价值观、最佳实践与工程落地案例

14 篇文章
浏览 4687
加入社区微信群
与行业大咖零距离交流学习
软件研发质量管理体系建设 白皮书上线