基于 LangChain 的自动化测试用例的生成与执行

应用价值

  • 通过人工智能代替人工操作的部分,节省时间,提升效率。
  • 通过封装更多的 Tools,让 Agent 更为智能。

实践演练

实现原理

img

实现思路

在理解需求之后,我们可以了解到我们需要让 Agent 具备两个功能:

  1. 输入源码信息,生成 python 文件。
  2. 输入文件名,执行 pytest 测试文件功能。

如此,可以通过如下两个步骤实现需求:

  1. 工具包封装。
  2. 实现 Agent。
工具包封装

为了让工具包更易被大模型理解,我们将注释调整为英文,提升准确率。同时为了传参的时候不出现格式错误问题,通过args_schema限制参数结构与格式(tools 章节有具体讲解)。

from langchain_core.tools import tool
from pydantic.v1 import BaseModel, Field

class PythonFileInput(BaseModel):
    # 定义参数的描述    
    filename: str = Field(description="filename")    
    source_code: str = Field(description="source code data")
    
class PytestFileName(BaseModel):
    # 定义参数的描述    
    filename: str = Field(description="The name of the file to be executed")
    
@tool(args_schema=PythonFileInput)
def write_file(filename, source_code):
    """    
    Generate python files based on input source code    
    """    
    with open(filename, "w") as f:    
        f.write(source_code)
        

@tool(args_schema=PytestFileName)
def execute_test_file(filename):
    """    
    Pass in the file name, execute the test case and return the execution result    
    """    
    import subprocess    
    # 使用subprocess模块执行pytest命令    
    result = subprocess.run(['pytest', filename], capture_output=True, text=True)    
    # 检查pytest的执行结果    
    if result.returncode == 0:   
        print("测试运行成功!")    
    else:   
        print("测试运行失败:")    
    print(result.stdout)    
    return result.stdout
通过 AGENT 实现需求
  1. 首先封装 Agent,绑定工具,输入提示词。在示例中,是在 LangChain 官方提供的 structured-chat-agent提示词基础之上修改的提示词,添加了一个code变量。目的是为了后面 code 可以由其他的 chain 的执行结果而来。
#  注意:需要再原提示词的基础上添加 {code} 变量
# prompt = hub.pull("hwchase17/structured-chat-agent")
llm = ChatOpenAI()

agent1 = create_structured_chat_agent(llm, tools_all, prompt)

agent_executor = AgentExecutor(
    agent=agent1, tools=tools_all,    
    verbose=True,    
    return_intermediate_steps=True,    
    handle_parsing_errors=True)

if __name__ == '__main__':
    agent_executor.invoke({"input": "请根据以上源码生成文件", "code": """def test_demo(): return True"""})

由以上的步骤,即可生成一个源码文件:

img

\1. 在生成源码文件后,可以继续补充提示词,要求Agent 执行对应的测试用例:
在这里插入图片描述
img

到这里,通过 Agent 就能自动生成测试用例文件执行测试用例了。

与其他的场景结合

在前面的章节中,已经实现了自动生成接口自动化测试用例的操作。可以直接与前面的操作结合,自动生成接口自动化测试用例,并执行测试用用例。

注意:load_case 如何实现在前面章节:《基于LangChain手工测试用例转接口自动化测试生成工具》,已有对应讲解

# load_case 的返回结果是接口的自动化测试用例
chain = (
        RunnablePassthrough.assign(code=load_case) | agent1
)

agent_executor = AgentExecutor(
    agent=chain, tools=tools_all,    
    verbose=True,    
    return_intermediate_steps=True,    
    handle_parsing_errors=True)
    
if __name__ == '__main__':
    agent_executor.invoke({"input": """      
               请根据以下步骤完成我让你完成操作,没有完成所有步骤不能停止:                
               1. 先根据以上源码生成文件。                
               2. 根据上一步生成的源码文件,进行执行测试用例操作,并返回终的执行结果                
               """})

执行之后,即可在控制台看到生成的接口自动化测试用例的执行记录。

img

总结

  1. 自动化测试用例的生成与执行的实现原理。
  2. 自动化测试用例的生成与执行的实现思路。
  3. 利用 Agent 实现自动化测试用例的生成与执行。

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

### 测试用例自动生成的方法和工具 #### 方法概述 测试用例自动生成旨在减少手动编写测试用例的工作量并提高覆盖率。这一过程通常依赖于静态分析、动态分析以及基于模型的技术来识别潜在的边界条件和其他重要场景。 对于应用程序而言,LangChain 可用于构建特定领域内的自然语言处理管道,从而帮助理解应用逻辑并生成相应的测试脚本[^1]。此方法涉及解析源码结构,提取函数签名及其参数定义,并尝试推断合理的输入组合以覆盖不同路径执行情况下的预期行为。 #### 工具介绍 - **Python 自动化框架中的测试生成器** Python 的某些单元测试库支持通过装饰器或其他机制来自动生成基础级别的测试案如,在给定一段简单的算术运算代码时,可以利用反射特性自动创建针对各个操作符的功能验证程序片段[^2]: ```python import unittest class TestMathOperations(unittest.TestCase): @staticmethod def test_operation(op, expected_result): result = op() assertEqual(result, expected_result) if __name__ == '__main__': suite = unittest.TestLoader().loadTestsFromTestCase(TestMathOperations) unittest.TextTestRunner(verbosity=2).run(suite) ``` 上述子展示了如何为加法和减法这样的基本数学计算建立通用化的测试模板;实际项目里则可能需要更复杂的策略去适应具体业务需求。 - **接口自动化测试平台** 除了传统的UI层面交互外,API层面上同样存在大量机会实施高效的黑盒/白盒检验工作流。市面上有许多成熟的产品可供选用,比如JMeter 和 Postman 这样的开源解决方案提供了图形界面友好且易于上手的操作环境,允许用户快速搭建起RESTful服务端点间的通信链路模拟实验场境[^3]。 然而值得注意的是,尽管这些第三方组件能够满足大部分常规用途的要求,但在面对高度定制化的企业级应用场景时往往暴露出灵活性不足的问题——因此有时不得不自行开发专用型辅助设施来弥补现有产品的局限性。 - **专门设计的应用测试用例生成器** 还有一些专门为解决某一类问题而打造的小众软件也值得关注。像“三角形分类判定”的练习题目就催生出了针对性极强的教学资源分享网站上的插件式扩展包,它不仅限定了几何形状属性作为研究对象,还进一步细分成了多个相互关联却又各自独立的任务环节以便学习者逐步掌握核心概念[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值