基于LangChain手工测试用例转Web自动化测试生成工具

news/2024/11/19 14:48:47/文章来源:https://www.cnblogs.com/hogwarts/p/18387399

在传统编写 Web 自动化测试用例的过程中,基本都是需要测试工程师,根据功能测试用例转换为自动化测试的用例。市面上自动生成 Web 或 App 自动化测试用例的产品无非也都是通过录制的方式,获取操作人的行为操作,从而记录测试用例。整个过程类似于

但是通常录制出来的用例可用性、可维护性都不强,而且依然需要人手工介入录制的过程。

在 LLM 问世之后,我们便在探索,是否有第二种可能性,由大模型执行功能测试用例,生成自动化测试用例?

应用价值

测试工程师在编写用例的过程中,将操作步骤明确的表达出来。即可通过大模型将功能测试用例可以直接转为 Web 自动化测试用例。极大的节省了人力与资源。

实践演练

实现原理

整个实现原理如下图所示:

实现思路

测试用例规范与要求

如果想要将功能用例转换为自动化测试用例,那么对功能测试用例则需要清晰,明确的表达出来每个操作步骤。如果测试用例本身就表达的含糊不清,那么自然大模型是无法识别它需要进行的具体的操作步骤的。

如下所示,为一个登录功能的测试步骤。在这些测试步骤中,具体打开哪些页面,输入哪些信息,点击哪些按钮都清晰的表达了出来。


1. 打开 https://litemall.hogwarts.ceshiren.com/#/login?redirect=%2Fdashboard
2. 输入用户名 hogwarts
3. 输入密码 test12345
4. 点击登录按钮
5. 进入主页,获取此时的url
6. 执行完成,退出浏览器
通过 AGENT 执行功能测试用例。

大模型本身是不具备任何执行能力或生成能力的,它只会”思考“,但是通过 LangChain 的 Agent,可以将一些”工具”外挂到大模型身上。

那么如果要执行这些功能测试用例,大模型就需要具备执行用例的能力。而我们要做的事情,就是将 tools(工具包),外挂到大模型上面。

相关知识点: Agent、 tools

  • 封装好 web 的底层工具

class WebAutoFramework:def __init__(self):self.driver = Noneself.element = Nonedef init(self):if not self.driver:self.driver = webdriver.Chrome()self.driver.implicitly_wait(5)def open(self, url):self.init()self.driver.get(url)return self.source()def source(self):return self.driver.execute_script("""var content="";document.querySelectorAll('button').forEach(x=> content+=x.outerHTML);document.querySelectorAll('input').forEach(x=> content+=x.outerHTML);//document.querySelectorAll('table').forEach(x=> content+=x.outerHTML);return content;""")def click(self):"""点击当前的元素:return:"""self.element.click()sleep(1)return self.source()def send_keys(self, text):self.element.clear()self.element.send_keys(text)return self.source()def find(self, locator):print(f"find css = {locator}")element = self.driver.find_element(by=By.CSS_SELECTOR, value=locator)self.element = elementreturn self.source()def quit(self):self.driver.quit()def get_current_url(self):print(f"当前的url为{self.driver.current_url}")return self.driver.current_url
  • 创建工具以及其说明,并且将工具绑定到工具包中

web = WebAutoFramework()
@tool
def open(url: str):"""使用浏览器打开特定的url,并返回网页内容"""r = web.open(url)return r@tool
def find(css: str):"""定位网页元素"""return web.find(css)@tool
def click(css: str = None):"""以css的方式定位网页元素后点击"""web.find(css)return web.click()@tool
def send_keys(css, text):"""定位到css指定的元素,并输入text"""web.find(css)return web.send_keys(text)@tool
def sleep(seconds: int):"""等待指定的秒数"""time.sleep(seconds)@tool
def quit():"""退出浏览器"""web.quit()@tool
def get_current_url():"""获取当前的url"""return web.get_current_url()tools = [open, quit, get_current_url, find, click, send_keys]

声明 Agent,并将tools传递过去:

 web_agent = create_structured_chat_agent(llm, tools, prompt)
# Create an agent executor by passing in the agent and tools
web_agent_executor = AgentExecutor(agent=web_agent, tools=tools,verbose=True,return_intermediate_steps=True,handle_parsing_errors=True)

执行 Agent:

r = web_agent_executor.invoke({"input": query})
记录执行步骤

在 Agent 的配置中,可以要求 agent 将所有的执行步骤记录下来。而执行记录会记录在返回结果中的intermediate_steps中。

而我们则需要将这些步骤取出来,按照我们的需求记录下来。

# 获取执行结果
r = agent.invoke({"input": query})
# 获取执行记录
steps = r["intermediate_steps"]
steps_info = []
# 遍历执行步骤
for step in steps:action = step[0]if isinstance(action, AgentAction):steps_info.append({'tool': action.tool, 'input': action.tool_input})
生成自动化测试用例。

拥有执行步骤之后,可以将执行步骤传递给大模型,然后让大模型根据执行步骤直接生成 web 自动化测试用例。


prompt = PromptTemplate.from_template("""
你是一个web自动化测试工程师,主要应用的技术栈为pytest + selenium。
以下为web自动化测试的测试步骤,测试步骤由json结构体描述
{step}{input}
""")
AGENT 结合 CHAIN

import jsonfrom langchain import hub
from langchain.agents import create_structured_chat_agent, AgentExecutor
from langchain.globals import set_debug
from langchain_core.agents import AgentAction
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAIfrom web.selenium_tools import toolsset_debug(True)prompt = hub.pull("hwchase17/structured-chat-agent")
llm = ChatOpenAI()
web_agent = create_structured_chat_agent(llm, tools, prompt)
# Create an agent executor by passing in the agent and tools
web_agent_executor = AgentExecutor(agent=web_agent, tools=tools,verbose=True,return_intermediate_steps=True,handle_parsing_errors=True)query = """
你是一个自动化测试工程师,接下来需要根据测试步骤,
每一步如果定位都是根据上一步的返回的html操作完成
执行对应的测试用例,测试步骤如下
1. 打开 https://litemall.hogwarts.ceshiren.com/#/login?redirect=%2Fdashboard
2. 输入用户名 hogwarts
3. 输入密码 test12345
4. 点击登录按钮
5. 进入主页,获取此时的url
6. 执行完成,退出浏览器
"""def web_execute_result(_):# 获取执行结果r = web_agent_executor.invoke({"input": query})# 获取执行记录steps = r["intermediate_steps"]steps_info = []# 遍历执行步骤,获取每一步的执行步骤以及输入的信息。for step in steps:action = step[0]if isinstance(action, AgentAction):steps_info.append({'tool': action.tool, 'input': action.tool_input})return json.dumps(steps_info)prompt_testcase = PromptTemplate.from_template("""
你是一个web自动化测试工程师,主要应用的技术栈为pytest + selenium。
以下为web自动化测试的测试步骤,测试步骤由json结构体描述{step}{input}""")chain = (RunnablePassthrough.assign(step=web_execute_result)| prompt_testcase| llm| StrOutputParser()
)print(chain.invoke({"input": "请根据以上的信息,给出对应的web自动化测试的代码"}))

执行效果

最后,自动生成的 Web 自动化测试用例效果如下:

总结

  1. Web 自动化测试用例生成工具需求说明。
  2. 如何通过 LangChain 实现 Web 自动化测试用例生成工具。

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

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

相关文章

PbootCMS网站常见错误提示总结

一些初涉相关领域的新朋友在进行 pbootcms 的安装过程中,往往会频繁遭遇一些错误状况。接下来,为您详细罗列 pbootcms 于后台抑或前台所呈现出的各类问题以及相应的解决办法。1、Parse error: syntax error, unexpected :, expecting { in www\core\function\handle.php on l…

PbootCMS未检测到您服务器环境的sqlite3数据库扩展

在进行相关操作时,未能检测到您服务器环境中的 sqlite3 数据库扩展。在 PbootCms 的安装流程当中,“未检测到您服务器环境的 sqlite3 数据库扩展”这一问题的解决办法扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、…

PbootCMS验证码不显示怎么办

扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题处理、二次开发、PSD转HTML、网站被黑、网站漏洞修复等。专业解决各种疑难杂症,您有任何网站问题都…

PbootCMS您访问路径含有非法字符,防注入系统提醒您请勿尝试非法操作!

您所访问的路径当中包含了非法字符,我们的防注入系统特此提醒您,千万不要尝试进行任何非法操作!扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题…

PbootCMS前台显示留言条数统计

前台所呈现的内容为留言条数的统计情况。 无需进行二次开发,通过运用 sql 标签即可达成。在 PbootCMS 当中,sql 标签的使用实例之一便是对网站留言的总数进行统计。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、J…

PbootCMS后台登录提示:”登录失败:数据库目录写入权限不足!“

后台登录提示:“登录失败:数据库目录写入权限不足!”通常来说,一般出现权限不足的情况,其中大多数状况都是由于文件夹权限不足所导致的。尤其是在使用 sqlite 的时候,必须要给根目录下的 data 文件夹设定 755 权限。扫码添加技术【解决问题】专注中小企业网站建设、网站安…

PbootCMS网站提示:”会话目录写入权限不足“

网站给出提示:“会话目录存在写入权限不足的情况。”在根目录之下,分别有:config(此为配置文件)、data(为 sqlite 数据库文件)、runtime(属于运行文件),需为其添加写入权限,可以设置为 755 或者 777 。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。…

阿里云站点升级提示:OpenSSL SSL_connect: Connection reset by peer in connection to www.pbootcms.com:443

阿里云站点出现升级提示:OpenSSL SSL_connect: 在与 www.pbootcms.com:443 进行连接时,连接被对方重置。 目前,出现这一状况的原因尚不明确。相应的解决方案为:将相关内容下载到本地,完成升级操作之后,再次重新上传至服务器。 扫码添加技术【解决问题】专注中小企业网站建…

一线实战:运维人少,我们是如何从 0 到 1 实践 DevOps 和云原生?

上海经证实业集团成立于 2009 年,公司一直致力于为新能源、车辆租赁以及智能机器人行业的客户群体提供高质量的“产投融合”增值服务,通过标准化金融产品和供应链信息技术为纽带,更好的服务实体经济。上海经证科技有限公司是上海经证实业下属的科技公司。作者:周明轩 背景 …

【转发】为什么说程序员是一个极度劳累的工作?

我们的累明天项目上线,通宵改BUG,好累。需求变来变去,这个项目什么时候是个头,好累现有的技术将要过时,面临淘汰,一堆的新技术要学,好累每天上下班总计四个小时,好累每天六点就要起床去上班,好累又要坐挤死人的地铁,好累。。。为什么会累本来的一个好觉,变成了通宵加…

【ROS教程】用CLion编译和调试ROS包的全流程及可能遇到的问题

@目录1.工作空间目录2.加载环境变量3.打开CLion4.配置CLion5.编译和调试软件包1.工作空间目录我们的一个工作空间目录应该是这样的2.加载环境变量先进入工作空间再加载source ./devel/setup.bash 3.打开CLion一定要在第二步的同一个终端下clion.sh如果打不开,说明没有将启动CL…

计算机---Linux操作系统---C语言---C程序设计---单片机---计算机网络---计算机安全---信息安全

欢迎各位同行、同学、同事、朋友选用、推荐这些教材,如果您需要这些教材的配套资源、或者您在使用过程中有任何疑问、或者您对这些教材有好的意见或建议,请您直接联系我(张同光的微信号:ztguang)。关于教材的介绍,可以在出版社官网或京东搜索“张同光”进行了解。