精华内容
下载资源
问答
  • Jmeter性能测试(10)--参数化

    千次阅读 2019-03-12 09:28:46
    参数化是自动化测试脚本的一种常用技巧。简单来说,参数化的一般用法就是将脚本中的某些输入使用参数来代替,在脚本运行时指定参数的取值范围和规则; 这样,脚本在运行时就可以根据需要选取不同的参数值作为输入。...

    参数化是自动化测试脚本的一种常用技巧。简单来说,参数化的一般用法就是将脚本中的某些输入使用参数来代替,在脚本运行时指定参数的取值范围和规则;

    这样,脚本在运行时就可以根据需要选取不同的参数值作为输入。这种方式通常被称为数据驱动测试(Data Driven Test),参数的取值范围被称为数据池(Data Pool)。

    jmeter的test plan中,支持如下4种参数化方式

    函数助手:_CSVRead

    CSV Data Set Config:CSV数据控件

    User Defined Variables:用户定义的变量

    User Variables:用户参数

    首先新建一个测试脚本,可以通过工具(badboy)录制或者自己手动编写

    登录请求的界面如下:

    这里我们对登录的用户名密码进行参数化,将用户名密码写入txt文档,保存为.dat格式,编码类型选择UTF-8

    因为配置元件——CSV Data Set Config对参数化的格式要求比较严格,用户名密码一一对应,之间用半角英文逗号隔开

    然后将保存的.dat文件放入计算机的某个盘里,这里我放入路径为:F:\jmeter\csvtest.dat

    下面具体介绍参数化常用的的两种方法:

    一、函数助手:_CSVRead

    点击jmeter的界面,功能栏选项→ 函数助手对话框→ _CSVRead

    CSV file to get values from | *alias:CSV文件取值路径,即这里需要写入之前的需要参数化的参数的文件路径

    CSV文件列号| next|*alias:文件起始列号:CSV文件列号是从0开始的,第一列为0,第二列为1,以此类推。。。

    函数字符串:即生成的参数化后的参数,可以直接在登陆请求中的参数中引用,第一列为用户名,函数字段号为0,第二列为密码,函数字段号为1,以此类推进行修改使用即可

    替换参数化后的参数,然后修改线程数,执行脚本,通过监听器里结果树的请求内容,可以看到请求的参数都是参数化后的数据

    二、配置元件——CSV Data Set Config

    点击线程组添加配置元件→ CSV Data Set Config:

    说明:

    Filename:F:\jmeter\csvtest.dat文件名,保存参数化数据的文件目录,可选择相对或者绝对路径(建议填写相对路径,避免脚本迁移时需要修改路径);

    File encoding:UTF-8,F:\jmeter\csvtest.dat文件的编码格式,在保存时保存编码格式为UTF-8即可;

    Variable Names(comma-delimited):对对应参数文件每列的变量名,类似excel文件的文件头,起到标示作用,同时也是后续引用的标识符,建议采用有意义的英文标示;

                                    (如:有几列参数,在这里面就写几个参数名称,每个名称中间用分隔符分割,这里的 user,pwd,可以被利用变量名来引用:user,user,{pwd};

    Delimitet:参数文件分隔符,用来在“Variable Names”中分隔参数,与参数文件中的分隔符保持一致即可;

    Allow quote data:是否允许引用数据,默认false,选项选为“true”的时候对全角字符的处理出现乱码 ;

    Recycle on EOF?:是否循环读取参数文件内容;因为CSV Data Set Config一次读入一行,分割后存入若干变量中交给一个线程,如果线程数超过文本的记录行数,那么可以选择从头再次读入;

    △ Ture:为true时,当已读取完参数文件内的测试用例数据,还需继续获取用例数据时,此时会循环读取参数文件数据(即:读取文件到结尾时,再重头读取文件);

    False:为false时,若已至文件末尾,则不再继续读取测试数据;通常在“线程组线程数* 线程组循环次数>参数文件行数”时,选用false(即:读取文件到结尾时,停止读取文件);

    Stop thread on EOF?:当Recycle on EOF为False时(读取文件到结尾),停止进程,当Recycle on EOF为True时,此项无意义;

    若为ture,则在读取到参数文件行末尾时,终止参数文件读取线程;

    若为false,此时线程继续读取,但会请求错误,因此时读取的数据为EOF;

    Sharing mode:共享模式,即参数文件的作用域,有以下几种方式:

    All threads:当前测试计划中的所有线程中的所有的线程都有效,默认;

    Current thread group:当前线程组中的线程有效;

    Current thread:当前线程有效;

    完成之后,将刚才生成的参数写入参数对应的值里面:

    以上两种常见的参数化的方法,推荐使用CSV控件方法(因为函数助手参数化功能相比其较弱)

    三、配置元件——User Defined Variables

    点击线程组添加配置元件→ User Defined Variables(用户定义的变量):

    如上图所示,在该参数组中已经定义了两个参数,通过界面下方的添加、删除按钮可以向参数列表增加和删除参数,Up和Down可以上下移动参数的位置;

    PS:User Defined Variables中定义的参数值在test plan执行过程中不能发生取值的改变,因此一般仅将test plan中不需要随迭代发生改变的参数(只取一次的参数)

        设置在此处;例如:被测应用的host和port值。

    四、前置处理器——User Variables

    点击线程组添加前置处理器——User Variables(用户参数):

    如上图所示,在该参数组中已经设置了两个参数,username和password分别有2组不同的取值,通过页面下方的四个按钮,可以增加删除参数的可能取值。

    PS:User Variables中设置的参数可以在test plan执行过程中发生变化。

    以上就是jmeter参数化的四种方式,其中:

    1、函数助手_CSVRead的参数化功能相比CSV Data Set Config较弱;

    2、CSV Data Set Config适用于参数取值范围较大的时候使用,该方法具有更大的灵活性;

    3、User Defined Variables一般用于test plan中不需要随请求迭代的参数设置;

    4、User Variables适用于参数取值范围很小的时候使用;

    PS:相比于loadrunner来说,jmeter参数化有以下不同:

    1.jmeter参数文件第一行没有列名称

    2.参数文件的编码,尽量保存为UTF-8(编码问题在使用CSV Data Set Config参数化时要求的比较严格)

    3.Jmeter的参数化没有LoadRunner做的出色,它是依赖于线程设置的(只有CSV Data Set Config参数化方法才有)

    Jmeter性能测试(11)--JDBC Request之Query Type

    展开全文
  • 接口测试参数化详解(Jmeter)

    千次阅读 2019-07-16 14:17:51
    接口测试是目前最主流的自动测试手段,它组合不同的参数向服务器发送请求,接受和解析响应结果,通过测试数据的交换逻辑来验证服务端程序工作的正确性。我们在测试过程中需要考虑不同的输入组合,来覆盖不同的测试...

    简介

    接口测试是目前最主流的自动化测试手段,它组合不同的参数向服务器发送请求,接受和解析响应结果,通过测试数据的交换逻辑来验证服务端程序工作的正确性。我们在测试过程中需要考虑不同的输入组合,来覆盖不同的测试范围;除此之外,系统中往往存在一些有唯一性校验的接口,不允许重复录入关键字段(eg: 用户名,身份证…),针对这些有唯一性校验的接口,需要在每次运行时动态输入不同的数据。

    为了解决上述问题,Jmeter提供了一些参数化的工具,最常用的有RandomString函数,CSVRead函数以及CSVDataSetConfig。
    在这里插入图片描述

    RandomString函数

    Jmeter通过RandomString函数助手可动态生成字符串,它包括三个变量:

    • Random string length:生成的String长度

    • Chars to use for random string generation:用于生成String的字符集

    • Name of variable in which to store the result (optional):可选,指定存储生成的String变量名,供后续接口调用。
    在这里插入图片描述
    通过RandomString可以生成任意长度的指定字符集的字符串,除了生成随机字符串,还可以基于RandomString拼接扩展特定格式的字符串。

    比如有些系统会校验手机号前三位,即可通过RandomString生成后8位数字,然后拼接满足需求的前三位数字组合。
    在这里插入图片描述
    RandomString函数非常强大,几乎可以实现接口单个请求参数的所有参数化工作,但在实际应用中,有时候不同请求参数有一定的关联性,此时无法通过RandomString来解决多请求参数之间的关联性问题,需要引入CSV组件来解决。

    CSVRead函数

    CSVRead函数适用于一组关联请求参数的场合,比如要选择用户的收获地址,往往需要选择省->市->区,而省市区这三个请求参数之间有关联性,此时可以通过自定义一组满足关联性要求的数据,将其写入CSV文件,然后在Jmeter中通过CSV函数来读取CSV文件。
    在这里插入图片描述

    Jmeter中通过函数助手可引入CSVRead函数的支持,它有两个参数:

    • CSV File to get Values from: 需要读取的CSV文件

    • CSV文件列号:从0开始
    在这里插入图片描述
    CSVRead函数有一些局限性,CSVRead不可指定编码,跨系统调用时可能出现乱码;另外多次循环同一个请求时会重复读取第一行数据,只有当线程数设置为多个时,才会读取多行数据。

    CSV Data Set Config配置元件

    CSV Data Set Config 是CSVRead函数的升级版组件,它可以配置更多选项来控制读取的过程:

    • Filename:CSV文件路径

    • File Encoding:编码格式,中文系统下生成的CSV文件编码使用GBK (英文系统使用UTF-8)

    • Variables Name:生成的变量名,通过顺序和Excel列数据对应,指定变量名以后DebugSampler中可查看变量值

    • Delimiter:分割符,CSV默认的分割符是逗号,tab分割符用

    • Allow quoted data: 是否允许双引号内的拆分,设置为Ture时,“a,b”,c 会被解析为3列数据,设置为False时,会被解析为2列数据,默认False

    • Recycle on EOF:参数文件是否循环遍历,设置为False时,文件遍历完则终止提取,请求的参数值为EOF,默认True。无论是设置多线程,还是多次迭代,都会循环遍历CSV文件。

    • Stop thread on EOF:参数值为EOF时,是否停止执行线程。当 Recycle on EOF 设置为 true 时,此项不起任何作用。当且仅当 Recycle on EOF? 为 false 时,此项配置才生效。默认为False

    • Sharing mode:共享模式,All threads:参数文件对所有线程共享,包括同一测试计划中的不同线程组;Current thread group:只对当前线程组中的线程共享;Current thread:仅对当前线程获取。
    在这里插入图片描述
    以上三个组件基本涵盖了接口自动化中参数化的绝大多数功能,对于更复杂的参数化需求,可通过编码方式实现脚本,并通过Jar包的方式引入脚本支持。

    作  者:Testfan Kitty

    出  处:微信公众号:自动化软件测试平台

    版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接

    展开全文
  • Postman之参数化

    千次阅读 2018-09-19 19:18:17
    Postman之参数化 1.直接设置为全局变量/环境变量 2.定义变量,并将变量设置为全局变量 3.将返回结果设置全局变量/环境变量

    Postman之参数化

    1.直接设置为全局变量/环境变量

    2.定义变量,并将变量设置为全局变量

    3.将返回结果设置全局变量/环境变量

    展开全文
  • jmeter参数化的用法和用途

    万次阅读 2018-04-25 19:55:07
    参数化,能打开这篇博客看的应该都懂。。。最早我能想到的就是对传的参数进行参数化,比如手机号,我传131开头的、133开头的、135开头的,如果不会参数化,就要写三个http请求,分别传这三种参数,学会了参数化,只...

            参数化,能打开这篇博客看的应该都懂。。。最早我能想到的就是对传的参数进行参数化,比如手机号,我传131开头的、133开头的、135开头的,如果不会参数化,就要写三个http请求,分别传这三种参数,学会了参数化,只写一个http请求就够了,当然还会加点jmeter的其它一些小东西。以我的理解,jmeter有四种参数化,我只用熟了两种,不过这两种应该是最好用的两种,今天就主要说说这两种,另外两种会大概提一下。(又回来修改一下,感觉jmeter既然有四种参数化,就有它的原因,今天又明白了其中一个存在的原因,虽然还觉得函数助手有点多此一举了,所以下面主要有三种参数化的方法)

            我学参数化时候用了“京东万象”的接口,那里提供很多接口可以供学习者使用,不用再因为学习接口测试而想办法抓包了。这里我主要用的是一个查询天气预报的接口,输入城市,就可以查这个城市的天气预报,下面是这个接口的信息。


            下面介绍第一种参数化方法:CSV Data Set Config

            这种方法需要写一个参数文件,放在电脑指定一个地方,


            这个东西在配置元件里,按着名字找就行了。

            名称:随意填写

            Filename:写参数文件放置的位置,应该也可以用相对路径,相对路径和绝对路径,根据个人喜好选择。这里可以看出我在F盘的jmeter目录下,有个city.txt的文件。文件内容如下:


            File encoding:这里应该是编码规则,先空着,如果编码不对可以试试utf-8。(这个接口我之前写了utf-8,运行结果有问题)

            Variable Names (comma-delimited):这里是参数的引用名,我在这写的city(如果这里看不懂,先往下看)。这里只参数化了其中一个参数,如果多个参数,参数名之间用英文的逗号隔开,如city,province。上面那个参数的文件里的参数值,就要写两列,之间用英文逗号隔开,如石家庄,河北。(应该是这样的,如有需要可以试试)。

            然后加一个http请求,具体怎么写不多说了,直接上图。


            和一般的http请求差不多,只是在传参数那里,看第二个传的参数。这里我为了省事,传的city这个参数,后面的参数值,就是引用上面CSV Data Set Config的Variable Names (comma-delimited),那里我写的city,这里格式就是这样:${city}。写到这里应该比较清楚了,用CSV Data Set Config调取文件,获取参数值,放到http请求里传出去。

            因为这里有四个参数,我要设置一下线程组。


            这里线程数设置为4,执行时候就自动获取参数,把文件里的4个参数都获取一遍,如果参数很多,可以使用这种参数啊化方法。就像我用过一次测试手机号段的,从100-199,一共100个号段,就是用的这种参数化。

            还有一种参数化,也是使用的外部文件,当参数值的,那个使用了一个函数助手,简单介绍一下。

            函数助手是在上面菜单栏里选项—>函数助手对话框。


            这里找到__CSVRead这个函数,函数参数这里可以看到两个参数,上面的就是参数文件的路径,和刚才一样,都在F盘那个目录;下面这个大概就是取第几列的意思,计算机都是从0开始计数,这里的0表示的是第一列。点击生成,生成的这个复制到http请求的city那个参数值那里就可以了,这里也要注意设置线程数。这个生成的字符串还是有规律的,看明白了也不用每次都打开函数助手生成,不过我还是喜欢用第一个那种参数化方法。

            第三种参数化方法:用户参数

            用户参数是在线程组,右键,添加,前置处理器里的,看一下用户参数内容,很简单。


            上面的名称和注释,内容随意。

            我这里名称还是用的city,后面的用户1、2、3、4,就是四个参数,一定要勾选“每次迭代更新一次”,不然执行了几次,都是取的一个城市,http请求还和第一种参数化写法一样,再附一张图。


            这个线程数也要记得改一下。这种参数化方法适用于参数少的情况。

            第四种:用户定义的变量

            这也是一种参数化方法,之前觉得有第一种和第三种就够了,因为用户定义的变量,并不能让一个参数有多个参数值可选,不明白为什么要有这个功能,直到今天突然领悟了,还要感谢项目中实践。之前测接口,有几百种情况,写了几百个HTTP请求,那会儿也没弄参数化,今天又发布了一版,而且IP地址变了,这下就得改几百个IP了,虽然只是简单的复制粘贴。改了几个突然想到了参数化,IP这里能不能参数化呢?如果能用哪种好?很快就想到了这个之前感觉很鸡肋的方法。下面就是这种参数化的使用方法,还是用的查询天气预报接口。(这期间把jmeter升成4.0了,只能截4.0的图了)


            点下面的添加,就可以添加一行,把url写进这里了。如果想参数化端口号,再添加一行,写端口号就可以了。引用url方法和其它参数引用方法一样了。


            IP那里被参数化了,可以执行。这么参数化下来,以后就不怕服务器IP再变了,如果变动,直接改一下用户定义的变量里面那个url的值就可以了。这种参数化方法适用于大量的HTTP请求里有相同的信息。(jmeter4.0可以设置成中文的,截图时候没设置)

            jmeter也可以连接数据库,从数据库中查询的数据可以当参数,但是这应该不算参数化,从数据库中找到很多数据,能真正当参数的只有一个,我还没实现每条数据当一次参数的方法,不知道有没有,如果有后续会写出来。

            上面介绍了参数化的用法,举得例子都是在http请求的Parameters里传参数,其实参数不止在这里用,同样http请求的Body Data里的参数也可以用参数化,看图。


            这是实际工作中用的参数化,我在尝试各种手机号段注册能不能成功。

            参数化也可以用在HTTP信息头管理器,断言也可以,就不附图了,我现在只用到了这几处,我想参数化还有其它地方的应用,不过用法都一样,就在实践中一点一点的琢磨了。

            参数化虽然好用,但是也不是越多越好,根据自己情况,判断哪里需要参数化。

            

    展开全文
  • PostMan接口参数化、接口返回值传递

    万次阅读 2018-06-22 16:27:57
    1 接口参数化第一步:点击右上角图标,打开环境配置页面,选择Globals,设置全局变量;第二步:添加变量名称,设置对应的变量值,保存;第三步:接口地址或者需要取值的参数value设置;注意需要取值的设置为{{变量...
  • 参数化SQL小认识

    千次阅读 热门讨论 2013-07-27 09:36:46
    在做机房收费系统项目,编写数据连接并访问数据库时,见别人都用了带“@...什么是参数化SQL呢? 在做第一次机房收费系统的时候,大部分的应该都是使用直接拼SQL语句的方法,那时候就听前辈们有说到SQL注入,那时候也
  • 曲面参数化定义

    千次阅读 2017-02-14 21:53:02
    在计算机图形学中,曲面数据包括两方面:几何数据结构和纹理数据结构。几何数据结构一般是多面体三角网格,存储为...纹理贴图就是将二维纹理贴到三维曲面的过程,在数学上成为曲面参数化问题,即求从曲面到平面的一个光
  • Jmeter-csv文件参数化

    万次阅读 2019-06-06 16:59:09
    找到需要传递参数的HTTP请求 将具体值改为变量引用,引用变量:${变量名} 请求数据位BodyData格式时,引用变量方式 图 5 具体值改为变量引用 在察看结果树中,察看变量引用的具体值 图 6 察看变量引用...
  • C# 使用参数化SQL语句

    万次阅读 热门讨论 2017-02-13 21:37:01
    在ADO.NET对象模型中执行一个参数化查询,需要向SqlCommand对象的Parameters集合添加SqlParameter对象。生成SqlParameter对象最简单的方式是调用SqlCommand对象的Parameters集合的AddWithValue方法。 这里又...
  • jmeter http接口参数化

    千次阅读 2018-05-29 15:58:08
    先创建一个接口测试用例。在线程组上右键添加一个配置元件---》用户定义的变量在面板中添加自己需要定义的变量在http请求页面的写法:执行后的结果...
  • 参数化查询的理解

    千次阅读 2018-07-30 16:11:41
    一般防护sql 都会出现pdo ,之前也一直不太清楚为什么pdo 能...机房重构敲组合查询时,会遇到多个操作符(+、-、*、/),因为之前在使用参数化查询时只要遇到给数据库赋值时就使用参数,(光知道这样能防止SQL注入...
  • LoadRunner参数化详解

    千次阅读 2019-06-28 15:31:47
    一、常见参数化类型 1、File:文本格式 设置如下: 输出如下: 2、Date/Time:获取当前时间,设置显示格式及更新方式 设置如下: 输出如下: 3、Unique Number:获得一个唯一的数据,在做某些主键...
  • ArrayList参数化

    千次阅读 2010-04-06 20:28:00
    import java.util.ArrayList;public class Print { public static void main(String[] args) { //参数化必须加上 ArrayList stringList2 = new ArrayList(); stringList2.add("Java 5.0 is good!"); //
  • 性能测试基础之脚本参数化

    千次阅读 2016-05-02 13:03:13
    本文主要对性能测试中的脚本参数化进行了定义、列举了几种常见的需进行脚本参数化的情况,并使用性能测试工具HyperPacer对如何进行脚本参数化进行了演示说明。
  • 参数化查询为什么能够防止SQL注入

    千次阅读 2018-07-19 16:13:19
    很多人都知道SQL注入,也知道SQL参数化查询可以防止SQL注入,可为什么能防止注入却并不是很多人都知道的。 本文主要讲述的是这个问题,也许你在部分文章中看到过这块内容,当然了看看也无妨。   首先:我们要...
  • 1.首先使用Loadrunner自带的飞机订票网站录制一个简单的登录脚本: 下图是截取的登录部分代码: 2.然后对用户名和密码进行参数化设置,...在本文我们还是都参数化来演示吧: 然后就会出现一个小小的...
  • Car mycar; 上面Car 是我们自己定义的一个类 mycar则先可看作是变量名。 其实也就叫做对象,在C#入门经典一书里称它为命名实例。...当我们自己定义了与类同名的有参构造函数时,假设参数类型是整型的,...
  • 前文写了solidworks的参数化建模及workbench的导入这篇主要针对所建模型,做分析及后处理 1 在analysis systems里面,双击static structural,拖拽A2到B3 2 进入model,添加约束和载荷,对左边圆孔添加约束:...
  • loadrunner11参数化设置

    千次阅读 2018-10-22 14:19:24
    双击Value后面的值选中后,右击选择Replace with a Parameter,设置参数名称,这部分是对用户名参数化,所以起名为username,,参数化时需要对value中的值是什么意思有个了解,不然参数化的东西都不知道是什么参数化...
  • 1.参数化方法  参数化设计(Parametric)设计(也叫尺寸驱动Dimension-Driven)是CAD技术在实际应用中提出的课题,它不仅可使CAD系统具有交互式绘图功能,还具有自动绘图的功能。目前它是CAD技术应用领域内的一个...
  • 参数方程中参数的意义: 参数方程中t的几何意义要看具体的曲线方程了,一般都是长度,角度等几何量,也有一些是不容易找到对应的几何量的。 参数方程定义: 一般的,在平面直角坐标系中,如果曲线上任意一点的...
  • 参数化设计的意义——Autodriver

    千次阅读 热门讨论 2018-03-15 13:34:50
    关键字:南京东岱 参数化设计 Autodriver什么是参数化?在参数化设计系统中,设计人员根据工程关系和几何关系来指定设计要求。要满足这些设计要求,不仅需要考虑尺寸或工程参数的初值,而且要在每次改变这些设计参数...
  • 什么是参数估计?

    千次阅读 2020-10-20 20:06:51
    参数估计(parameter estimation) 参数估计属于统计推断的范畴,是根据从总体中抽取的样本估计总体分布中包含的未知参数的方法。 统计推断是数理统计研究的核心问题,是指根据样本对总体分布或分布的数字特征等作出...
  • 今天大家一起来学习一下参数化的一个重要工具,我们在写脚本时,经常要用到参数化,而实现参数化最常用的方法之一就是使用CSV Data Set Config元件,使用方便,功能强大。   简单的使用方法估计大家都会,或者说...
  • 参数化配置 jmeter中进行参数化设置,右击测试计划或者线程组,add->config element->CSV Data Set Config参数1.png Allow quoted data 含义是是否允许带引号的数据,有两个选择true和false,false的意思是如果数据...
  • 什么是参数

    千次阅读 2016-12-06 21:27:45
    参数时随机变量时,该参数分布中的参数就是超参数,简单的说就是参数参数,感觉一般在贝叶斯方法中出现 所谓超参数,就是机器学习模型里面的框架参数,比如聚类方法里面类的个数,或者话题模型里面话题...
  • 当你是使用参数化查询时为参数赋值时,比如command.Parameters.Add("@a",SqlDbType.Text,30).Value=a;当a=null是将报错: 错参数化查询 '(@a varchar(100)....' 需要参数 '@a',但未提供该参数 只是因为你给...
  • Java中的序列到底是什么

    千次阅读 多人点赞 2020-06-29 14:07:46
    我们都知道,新建一个对象的时候实现 Serializeable 接口,但为什么要这么做?什么时候这样子做?这样子做会不会出现幺蛾子?阿淼一个三连差点把自己都问懵逼了…… 那接下来,大家就和阿淼一起简单了解一下这个知识...
  • 序列请求参数

    千次阅读 2019-05-08 18:28:31
    在前端请求中,或者跳转页面的时候,往往需要在地址后面加一些参数,但是参数多了之后,一个一个拼接很麻烦,所有为大家提供一个方法 function serializeData(obj){ let str='?' Object.keys(obj).forEach(function(key...
  • 【C# 教程系列第 5 篇】什么是 c# 中的 out 参数

    千次阅读 多人点赞 2018-12-20 15:52:55
    一:什么是 c# 中的 out 参数。 二:使用 out 参数的注意事项。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 510,371
精华内容 204,148
关键字:

参数化是什么意思