测试用例生成平台通过大模型升级查询功能,生成智能测试用例
在测试工作中,查询功能是各类系统的核心模块,传统的测试用例编写往往耗时且重复。如何让老旧平台焕发新活力?本文将结合大模型技术,通过用户输入的字段信息,自动化生成高效、精准的测试用例。同时,我们还将介绍如何在 Django 框架中异步调用阿里云的 DeepSeek-R1 API,避免阻塞主线程,从而进一步提升系统性能。点击底部小卡片了解更多AI测试话题。
一、传统查询功能的痛点
在老旧平台中,查询功能面临以下问题:
- 测试用例编写耗时:每次需求变更后,测试用例需要手动更新,效率低下。
- 用例质量参差不齐:测试人员的理解差异导致用例覆盖率和场景设计不足。
- 缺乏智能化:无法根据用户输入的字段信息自动生成测试用例,适应动态变化的需求。
二、大模型驱动的查询功能升级
2.1 升级方案概述
通过将用户输入的字段名称、字段类型、字段值等信息传递给大模型,我们可以自动生成符合标准的测试用例。以下是升级的基本逻辑:
-
用户输入查询条件(字段名称、类型、值等)。

-
系统将输入的信息封装为提示词(Prompt),并发送给大模型。

-
大模型根据模板自动生成测试用例,包括查询步骤和预期结果。 真拿来即用!

[{"title": "根据机构、类型、开始日期、结束日期组合查询","steps": "1.进入页面;\n2.在机构中选择湖北分公司;\n3.在类型中选择当年;\n4.在开始日期输入2023-01-01;\n5.在结束日期输入2023-12-31;\n6.点击查询","expect_results": "查询到湖北分公司当年且在2023-01-01至2023-12-31期间的数据","priority": "P0"},{"title": "根据开始日期、结束日期组合查询","steps": "1.进入页面;\n2.在开始日期输入2023-01-01;\n3.在结束日期输入2023-12-31;\n4.其他条件保持默认;\n5.点击查询","expect_results": "查询到2023-01-01至2023-12-31期间的数据","priority": "P0"},{"title": "根据机构、类型组合查询","steps": "1.进入页面;\n2.在机构中选择湖北分公司;\n3.在类型中选择当年;\n4.其他条件保持默认;\n5.点击查询","expect_results": "查询到湖北分公司当年的数据","priority": "P1"},{"title": "根据机构、开始日期、结束日期组合查询","steps": "1.进入页面;\n2.在机构中选择湖北分公司;\n3.在开始日期输入2023-01-01;\n4.在结束日期输入2023-12-31;\n5.其他条件保持默认;\n6.点击查询","expect_results": "查询到湖北分公司且在2023-01-01至2023-12-31期间的数据","priority": "P1"},{"title": "根据类型、开始日期、结束日期组合查询","steps": "1.进入页面;\n2.在类型中选择当年;\n3.在开始日期输入2023-01-01;\n4.在结束日期输入2023-12-31;\n5.其他条件保持默认;\n6.点击查询","expect_results": "查询到当年且在2023-01-01至2023-12-31期间的数据","priority": "P1"},{"title": "根据机构查询","steps": "1.进入页面;\n2.在机构中选择湖北分公司;\n3.其他条件保持默认;\n4.点击查询","expect_results": "查询到湖北分公司的所有数据","priority": "P2"},{"title": "根据类型查询","steps": "1.进入页面;\n2.在类型中选择当年;\n3.其他条件保持默认;\n4.点击查询","expect_results": "查询到当年的所有数据","priority": "P2"},{"title": "根据开始日期查询","steps": "1.进入页面;\n2.在开始日期输入2023-01-01;\n3.其他条件保持默认;\n4.点击查询","expect_results": "查询到开始日期大于等于2023-01-01的数据","priority": "P3"},{"title": "根据结束日期查询","steps": "1.进入页面;\n2.在结束日期输入2023-12-31;\n3.其他条件保持默认;\n4.点击查询","expect_results": "查询到结束日期小于等于2023-12-31的数据","priority": "P3"}
]
2.2 提示词逻辑设计
我们设计如下提示词模板:
prompt = (f'系统名称为: {project};主功能模块名称为: {primary_module};子功能模块为:{sub_module};'f'用例创建人为: {case_creator};'f'查询结果比对方式为: {check_result_method};'f'查询页面是否需要补充UI测试用例: {ui_case_needed};自主标定用例的优先级;')prompt += f'字段名称: {field_name};字段类型: {field_type};'if enums:prompt += f'枚举值:{enums};'
elif symbol_date:prompt += f'日期符号为:{symbol_date};'
elif date_:prompt += f'日期为:{date_};'
elif symbol_time:prompt += f'时间比较符号为:{symbol_time};'
elif time_:prompt += f'时间选定的值为:{time_};\n'
2.3 自动生成的测试用例示例
根据提示词生成的测试用例示例如下:
[{'title': '根据姓名查询'},{'steps': '1.进入页面;\n2.在查询条件姓名输入;\n3.其他查询条件保持默认;\n4.点击查询'},{'expect_results': '查询到姓名的数据'},
]
通过这种方式,测试工程师只需输入字段信息,即可轻松生成高质量的测试用例,大幅提升工作效率。
三、实战演练:基于大模型升级查询功能
结合上述逻辑,我们对用户输入进行处理,并生成测试用例。以下是具体代码示例:
3.1 数据输入
用户输入字段信息:
project = "客户管理系统"
primary_module = "查询功能"
sub_module = "客户信息查询"
case_creator = "测试工程师A"
check_result_method = "数据匹配"
ui_case_needed = "是"field_name = "姓名"
field_type = "字符串"
enums = None
symbol_date = None
date_ = None
symbol_time = None
time_ = None
3.2 提示词构建
根据输入信息构建提示词:
prompt = (f'系统名称为: {project};主功能模块名称为: {primary_module};子功能模块为:{sub_module};'f'用例创建人为: {case_creator};'f'查询结果比对方式为: {check_result_method};'f'查询页面是否需要补充UI测试用例: {ui_case_needed};自主标定用例的优先级;')prompt += f'字段名称: {field_name};字段类型: {field_type};'
3.3 调用大模型生成测试用例
通过大模型接口生成测试用例:
async def generate_cases(prompt_param):# 初始化OpenAI客户端client = OpenAI(# 如果没有配置环境变量,请用百炼API Key替换:api_key="sk-xxx"# api_key='sk-xxx',api_key='sk-xxx', # todo 此处需更换base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")reasoning_content = "" # 定义完整思考过程answer_content = "" # 定义完整回复is_answering = False # 判断是否结束思考过程并开始回复example = [{'title': '根据姓名查询'},{'steps': '1.进入页面;\n2.在查询条件姓名输入;\n3.其他查询条件保持默认;\n4.点击查询'},{'expect_results': '查询到姓名的数据'},]# 创建聊天完成请求completion = client.chat.completions.create(model="deepseek-r1", # 此处以 deepseek-r1 为例,可按需更换模型名称messages=[{'role': 'user','content': f'你是一名资深测工程师,根据这些字段组合{prompt_param}生成查询条件的组合,条件组合不能重复;输出列表形式的JSON,示例:{example}'}],stream=True,# 解除以下注释会在最后一个chunk返回Token使用量# stream_options={# "include_usage": True# })print("\n" + "=" * 20 + "思考过程" + "=" * 20 + "\n")for chunk in completion:# 如果chunk.choices为空,则打印usageif not chunk.choices:print("\nUsage:")print(chunk.usage)else:delta = chunk.choices[0].delta# 打印思考过程if hasattr(delta, 'reasoning_content') and delta.reasoning_content != None:print(delta.reasoning_content, end='', flush=True)reasoning_content += delta.reasoning_contentelse:# 开始回复if delta.content != "" and not is_answering:print("\n" + "=" * 20 + "完整回复" + "=" * 20 + "\n")is_answering = True# 打印回复过程print(delta.content, end='', flush=True)answer_content += delta.contentreturn answer_content
四、Django 异步调用阿里云 DeepSeek-R1 API
为了在查询功能升级中提升性能,我们可以采用 Django 异步调用阿里云 DeepSeek-R1 API。以下是具体实现步骤:
4.1 安装依赖
pip install aiohttp
4.2 异步请求实现
通过 aiohttp 实现异步调用:
import aiohttp
import asyncioasync def generate_cases(prompt_param):# 初始化OpenAI客户端client = OpenAI(# 如果没有配置环境变量,请用百炼API Key替换:api_key="sk-xxx"# api_key='sk-xxx',api_key='sk-xxx', # todo 此处需更换base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")reasoning_content = "" # 定义完整思考过程answer_content = "" # 定义完整回复is_answering = False # 判断是否结束思考过程并开始回复example = [{'title': '根据姓名查询'},{'steps': '1.进入页面;\n2.在查询条件姓名输入;\n3.其他查询条件保持默认;\n4.点击查询'},{'expect_results': '查询到姓名的数据'},]# 创建聊天完成请求completion = client.chat.completions.create(model="deepseek-r1", # 此处以 deepseek-r1 为例,可按需更换模型名称messages=[{'role': 'user','content': f'你是一名资深测工程师,根据这些字段组合{prompt_param}生成查询条件的组合,条件组合不能重复;输出列表形式的JSON,示例:{example}'}],stream=True,# 解除以下注释会在最后一个chunk返回Token使用量# stream_options={# "include_usage": True# })print("\n" + "=" * 20 + "思考过程" + "=" * 20 + "\n")for chunk in completion:# 如果chunk.choices为空,则打印usageif not chunk.choices:print("\nUsage:")print(chunk.usage)else:delta = chunk.choices[0].delta# 打印思考过程if hasattr(delta, 'reasoning_content') and delta.reasoning_content != None:print(delta.reasoning_content, end='', flush=True)reasoning_content += delta.reasoning_contentelse:# 开始回复if delta.content != "" and not is_answering:print("\n" + "=" * 20 + "完整回复" + "=" * 20 + "\n")is_answering = True# 打印回复过程print(delta.content, end='', flush=True)answer_content += delta.contentreturn answer_content# 示例调用
async def search_page_generate_case_by_ai(request):print('开始进行异步大模型用例生成')if request.method == 'POST':case = Cases.objects.all()case_common_title = []case_common_steps = []case_common_expect_result = []total_len = len(request.POST)case_system = request.POST.get('auth')case_module = ''primary_module = request.POST.get("module1")sub_module = []for _ in range(2, 4):if request.POST.get(f"module{_}"):sub_module.append(request.POST.get(f"module{_}"))sub_module = ">>".join(sub_module)case_precondition = f'已登录{case_module}系统'page_name = request.POST.get('page_name')check_result_method = request.POST.get("check_result_method")case_creator = request.POST.get('creator')ui_case_needed = request.POST.get('ui_case')field_count = (total_len - 10) // 7project = Project.objects.get(project_name=case_system)project_id = project.idif field_count > 1:field_name_list = []prompt = (f'系统名称为: {project};主功能模块名称为: {primary_module};子功能模块为:{sub_module};'f'用例创建人为: {case_creator};'f'查询结果比对方式为: {check_result_method};'f'查询页面是否需要补充UI测试用例: {ui_case_needed};自主标定用例的优先级;')for i in range(field_count):field_name = request.POST.get(f'field_name{i}')field_type = request.POST.get(f'field_type{i}')enums = request.POST.get(f'enums{i}')symbol_date = request.POST.get(f'symbol_date{i}')date_ = request.POST.get(f'date{i}')symbol_time = request.POST.get(f'symbol_time{i}')time_ = request.POST.get(f'time{i}')time_ = str(time_).replace('T', ' ')field_name_list.append(field_name)# todo 修改此处适配AI大模型用例生成prompt += f'字段名称: {field_name};字段类型: {field_type};'if enums:prompt += f'枚举值:{enums};'elif symbol_date:prompt += f'日期符号为:{symbol_date};'elif date_:prompt += f'日期为:{date_};'elif symbol_time:prompt += f'时间比较符号为:{symbol_time};'elif time_:prompt += f'时间选定的值为:{time_};\n'deepseek_result = await generate_cases(prompt)return HttpResponse(deepseek_result)asyncio.run(main())
4.3 在 Django 中集成
将异步调用集成到 Django 视图中:
@require_POST
async def search_page_generate_case_by_ai(request):print('开始进行异步大模型用例生成')if request.method == 'POST':case = Cases.objects.all()case_common_title = []case_common_steps = []case_common_expect_result = []total_len = len(request.POST)case_system = request.POST.get('auth')case_module = ''primary_module = request.POST.get("module1")sub_module = []for _ in range(2, 4):if request.POST.get(f"module{_}"):sub_module.append(request.POST.get(f"module{_}"))sub_module = ">>".join(sub_module)case_precondition = f'已登录{case_module}系统'page_name = request.POST.get('page_name')check_result_method = request.POST.get("check_result_method")case_creator = request.POST.get('creator')ui_case_needed = request.POST.get('ui_case')field_count = (total_len - 10) // 7project = Project.objects.get(project_name=case_system)project_id = project.idif field_count > 1:field_name_list = []prompt = (f'系统名称为: {project};主功能模块名称为: {primary_module};子功能模块为:{sub_module};'f'用例创建人为: {case_creator};'f'查询结果比对方式为: {check_result_method};'f'查询页面是否需要补充UI测试用例: {ui_case_needed};自主标定用例的优先级;')for i in range(field_count):field_name = request.POST.get(f'field_name{i}')field_type = request.POST.get(f'field_type{i}')enums = request.POST.get(f'enums{i}')symbol_date = request.POST.get(f'symbol_date{i}')date_ = request.POST.get(f'date{i}')symbol_time = request.POST.get(f'symbol_time{i}')time_ = request.POST.get(f'time{i}')time_ = str(time_).replace('T', ' ')field_name_list.append(field_name)# todo 修改此处适配AI大模型用例生成prompt += f'字段名称: {field_name};字段类型: {field_type};'if enums:prompt += f'枚举值:{enums};'elif symbol_date:prompt += f'日期符号为:{symbol_date};'elif date_:prompt += f'日期为:{date_};'elif symbol_time:prompt += f'时间比较符号为:{symbol_time};'elif time_:prompt += f'时间选定的值为:{time_};\n'deepseek_result = await generate_cases(prompt)return HttpResponse(deepseek_result)else:return HttpResponse("没有内容!!!")
通过这种方式,Django 可以在处理查询请求时避免主线程阻塞,从而提升系统的并发性能。
五、大模型与平台升级的未来展望
通过大模型的引入,老旧平台的查询功能可以焕发新活力。测试工程师不仅能更高效地生成测试用例,还可以通过异步调用大模型接口,提升系统响应速度,为用户提供更好的体验。未来,随着大模型和容器化技术的普及,本地部署和性能优化将成为测试领域的重要方向。
快将这些技术应用到你的项目中,让测试工作更智能、更高效吧!
相关文章:
测试用例生成平台通过大模型升级查询功能,生成智能测试用例
在测试工作中,查询功能是各类系统的核心模块,传统的测试用例编写往往耗时且重复。如何让老旧平台焕发新活力?本文将结合大模型技术,通过用户输入的字段信息,自动化生成高效、精准的测试用例。同时,我们还将…...
python每日十题(9)
外存储器的容量一般都比较大,而且大部分可以移动,便于在不同计算机之间进行信息交流。外存储器中数据被读入内存储器后,才能被CPU读取,CPU不能直接访问外存储器。本题答案为A选项。 进程是指一个具有一定独立功能的程序关于某个数…...
macOS 制作dmg磁盘映像安装包
制作dmg磁盘影像安装包需要准备一下材料: 1. 导出的APP 2. 背景图片 3. 应用程序替身 前两种材料很容易得到。 下面介绍一下 应用程序替身制作过程: Finder —> 选中 应用程序 --> 找到顶部菜单栏中 的 前往 ----> 选择上层文件夹选中应用程…...
LeetCode热题100JS(79/100)第十五天|347|295|121|55|45
347. 前 K 个高频元素 题目链接:347. 前 K 个高频元素 难度:中等 刷题状态:1刷 新知识: 解题过程 思考 示例 1: 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2] 没思路,看答案 题解分析 参考题解链接:…...
Rust从入门到精通之精通篇:22.Unsafe Rust 详解
Unsafe Rust 详解 在 Rust 的设计哲学中,安全性是核心原则之一。Rust 的所有权系统、借用检查器和类型系统共同保证了内存安全和线程安全。然而,有些底层操作无法通过 Rust 的安全检查机制进行验证,这就是 unsafe Rust 存在的原因。在本章中…...
Three.js 快速入门教程【十八】射线拾取模型——鼠标点击屏幕选中模型或物体
系列文章目录 Three.js 快速入门教程【一】开启你的 3D Web 开发之旅 Three.js 快速入门教程【二】透视投影相机 Three.js 快速入门教程【三】渲染器 Three.js 快速入门教程【四】三维坐标系 Three.js 快速入门教程【五】动画渲染循环 Three.js 快速入门教程【六】相机控件 Or…...
如何下载 Postman?快速指南!
Postman 是一款非常受欢迎的 API 测试工具。它最初是作为一个 Chrome 插件发布,后来发展成为一款独立的跨平台软件,支持 Windows、Mac、Linux 等操作系统。 Postman 怎么下载教程(2025最新版)?...
Shiro学习(一):Shiro介绍和基本使用
一、Shiro介绍 1、百科对shiro的定义如下: Apache Shiro 一个强大且易于使用的 Java 安全框架,它提供了身份验证、授权、加密和会话管理等功能。Shiro 的设计目标是简化企业级应用程序的安全性开发过程,同时保持代码的简洁和易于维护。 2、…...
【git】基本操作
添加文件进本地仓库 git add 文件名删除文件 git rm 文件名版本回退 git reset [--sort| -- mixed | -- hard] sort选项: 只回退版本库,不回退暂存区和工作区 mixed(reset的默认选项): 回退版本库和暂存区,不回退工作区 hard :…...
7.1 分治-快排专题:LeetCode 75. 颜色分类
1. 题目链接 LeetCode 75. 颜色分类 2. 题目描述 给定一个包含红色(0)、白色(1)和蓝色(2)的数组 nums,要求原地对数组进行排序,使得相同颜色的元素相邻,且按红、白、蓝…...
深度解析:TOML、XML、YAML及其他配置/数据格式对比
深度解析:TOML、XML、YAML及其他配置/数据格式对比 在软件开发和系统配置中,选择合适的配置或数据格式至关重要。本文将对比 TOML、XML、YAML 等常见格式,梳理它们的核心特性、适用场景及区别,并扩展介绍其他类似格式,…...
开源软件许可证冲突的原因和解决方法
1、什么是开源许可证以及许可证冲突产生的问题 开源软件许可证是一种法律文件,它规定了软件用户、分发者和修改者使用、复制、修改和分发开源软件的权利和义务。开源许可证是由软件的版权所有者(通常是开发者或开发团队)发布的,它…...
详解java体系实用知识总结
0.java技术能力框架 基础模块应用模块综合模块技术岗位与面试流程常用工具集系统架构设计计算机基础常用框架微服务架构jvm原理缓存容器化多线程队列云计算(阿里云/aws)设计模式数据库数据结构与算法 1.常用设计模式与应用场景 工厂模式:s…...
node-ddk,electron,主进程通讯,窗口间通讯
node-ddk,electron,主进程通讯,窗口间通讯 https://blog.csdn.net/eli960/article/details/146207062 也可以下载demo直接演示 http://linuxmail.cn/go#node-ddk import 在主进程 import main, { NODEDDK } from "node-ddk/main"在渲染进程 import renderer, …...
kubectl 命令参数详解与示例
kubectl 命令参数详解与示例 kubectl 是 Kubernetes 的命令行工具,用于与 Kubernetes 集群交互。下面我将详细介绍 kubectl 的主要命令参数,并提供相应的使用示例。 一、基础命令 1. kubectl get - 获取资源信息 常用参数: -n, --namesp…...
在 Ubuntu 20.04 上重新启动网络
参考链接: 如何在 Ubuntu 22.04 上重新启动网络 执行以下两条命令,ok sudo nmcli networking off sudo nmcli networking on...
STM32 - 在机器人、自动化领域,LL库相比HAL优势明显
在机器人控制器、电机控制器等领域的开发,需要高实时性、精细化控制或者对代码执行效率、占用空间有较高要求。所以,大家常用的HAL库明显不符合要求。再加上,我们学习一门技术,一定要学会掌握底层的原理。MCU开发的底层就是寄存器…...
【区块链安全 | 第二篇】区块链概念详解
文章目录 概述1. 区块链类型2 区块链五层架构3 账本模型4. 节点(Node)5. 区块(Block)6. 区块链(Blockchain)7. 区块链工作流程 核心技术1. 共识机制2. 智能合约 主要组件1. 交易(Transaction&am…...
【开源宝藏】30天学会CSS - DAY6 第六课 流光文字动画
第 0 步:项目结构 lighting-text/├─ index.html└─ style.cssindex.html:包含列表 <ul>,其中每个 <li> 放一个字母或符号。style.css:设置背景、文字样式,以及关键帧动画(lighting…...
linux - centos7 部署 redis6.0.5
事先说明 本篇文章只解决在部署redis中出现的问题,并没有部署redis的全过程,详细部署过程可以参考Linux安装部署Redis(超级详细) - 长沙大鹏 - 博客园 执行 make 命令时报错 原因:是因为gcc版本太低 升级gcc版本时 出现没有可用软件包 devt…...
Java反射机制详解:原理、应用与最佳实践
Java反射机制详解:原理、应用与最佳实践 1. 什么是反射? Java反射(Reflection)是指在运行时动态获取类的信息(如类名、方法、字段、构造方法等)并操作对象的能力。它允许程序在运行时检查和修改类的行为&…...
Swift实现嵌套json字典重排序并输出string
在网络请求或接口签名中,通常要求将参数按照一定规则拼接成字符串。一个常见的做法是对字典的 key 进行排序,然后按照 “keyvalue” 的格式拼接,多个参数之间以特定符号(例如 &)连接。 如果参数中包含嵌套的字典或…...
【Ai】--- 可视化 DeepSeek-r1 接入 Open WebUI(超详细)
在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【Ai】--- 可视化 DeepSeek-r1 接入 Open WebUI(超详细) 开发环境一、前情提要:你…...
VSCode加Cline插件加DeepSeek实现AI编程指南
VSCode加Cline插件加DeepSeek实现AI编程指南 简介 本文将详细介绍如何在VSCode中使用Cline插件结合DeepSeek AI实现高效的AI辅助编程,特别适合初学者快速上手。我们将通过实现一个TodoList应用的例子来演示整个流程。 环境准备 1. 安装VSCode 前往VSCode官网下…...
代码规范之Variable Names变量名
代码规范之Variable Names变量名 golang中 官方文档:https://go.dev/wiki/CodeReviewComments#variable-names Variable names in Go should be short rather than long. This is especially true for local variables with limited scope. Prefer c to lineCoun…...
2025春招市场迎AI热潮:生成式人工智能(GAI)认证如何重构人才竞争力
随着科技的飞速发展,人工智能(AI)已逐渐渗透到我们生活的方方面面,从智能家居到自动驾驶,从智能客服到医疗诊断,AI的身影无处不在。而在这股AI浪潮中,生成式人工智能(Generative AI,…...
Flink基础简介和安装部署
文章目录 一、Flink基础简介1、什么是Flink2、Flink流处理特性3、Flink四大基石4、Flink中的角色 二、Flink集群搭建1、Local模式①上传Flink安装包②启动交互窗口③提交任务测试④访问WebUI页面查看⑤退出停止集群 2、Standalone模式①修改配置⽂件 conf/flink-conf.yaml②修改…...
SpringBoot分布式项目实战:观察者模式的高阶应用与避坑指南
一、痛点场景:当观察者遇上分布式 在某电商平台重构项目中,我们遭遇了这样的困境:订单中心完成支付后需要触发库存扣减、积分结算、物流调度等12个后续操作。最初的实现采用了硬编码调用: // 伪代码示例 public void paySuccess…...
How to use pgbench to test performance for PostgreSQL?
pgbench 是一个用于测试 PostgreSQL 数据库性能的基准测试工具。通过模拟多个客户端并发执行 SQL 查询,它可以帮助你评估数据库的性能。以下是使用 pgbench 的基本步骤: 安装 pgbench pgbench 是 PostgreSQL 的一部分,因此在安装 PostgreSQ…...
C#基础学习(五)函数中的ref和out
1. 引言:为什么需要ref和out? 问题背景:函数参数默认按值传递,值类型在函数内修改不影响外部变量;引用类型重新赋值时外部对象不变。核心作用:允许函数内部修改外部变量的值,实现“双向传参…...
