中易网

怎么样参数化字符串类型

答案:3  悬赏:10  
解决时间 2021-10-13 06:28
  • 提问者网友:藍了天白赴美
  • 2021-10-12 10:11
怎么样参数化字符串类型
最佳答案
  • 二级知识专家网友:往事隔山水
  • 2021-10-12 11:07
做负载或者压力测试时,很多人选择使用了Loadrunner测试工具。该工具的基本流程是先将用户的实际操作录制成脚本,然后产生数千个虚拟用户运行脚本(虚拟用户可以分布在局域网中不同的PC机上),最后生成相关的报告以及分析图。但是在录制脚本的过程中会遇到很多实际的问题,比如不同的用户有不同的使用数据,这就牵涉到参数的设置问题。本文就Loadrunner中参数的设置进行说明,希望对大家有所帮助。

在录制程序运行的过程中,VuGen(脚本生成器) 自动生成了包含录制过程中实际用到的数值的脚本。如果你企图在录制的脚本中使用不同的数值执行脚本的活动(如查询、提交等等),那么你必须用参数值取代录制的数值。这个过程称为参数化脚本。

本文主要包括如下内容:理解参数的局限性、建立参数、定义参数的属性、理解参数的类型、为局部数据类型设置参数的属性、为数据文件设置参数的属性、从已经存在的数据库中引入数据。

除了GUI,以下的内容适合于各种类型的用户脚本。

一、关于参数的定义

在你录制程序运行的过程中,脚本生成器自动生成由函数组成的用户脚本。函数中参数的值就是在录制过程中输入的实际值。

例如,你录制了一个Web应用程序的脚本。脚本生成器生成了一个声明,该声明搜索名称为“UNIX”的图书的数据库。当你用多个虚拟用户和迭代回放脚本时,也许你不想重复使用相同的值“UNIX”。那么,你就可以用参数来取代这个常量。结果就是你可以用指定的数据源的数值来取代参数值。数据源可以是一个文件,也可以是内部产生的变量。

用参数表示用户的脚本有两个优点:① 可以使脚本的长度变短。② 可以使用不同的数值来测试你的脚本。例如,如果你企图搜索不同名称的图书,你仅仅需要写提交函数一次。在回放的过程中,你可以使用不同的参数值,而不只搜索一个特定名称的值。

参数化包含以下两项任务:① 在脚本中用参数取代常量值。② 设置参数的属性以及数据源。

参数化仅可以用于一个函数中的参量。你不能用参数表示非函数参数的字符串。另外,不是所有的函数都可以参数化的。

二、参数的创建

可以指定名称和类型来创建参数。不存在对脚本中参数个数的限制。在Web程序的用户脚本中,你可以使用如下过程在基于文本的脚本视图中创建参数。或者,也可以在基于图标的树形视图中创建参数。

在基于文本的脚本视图中创建一个参数:

1、 将光标定位在要参数化的字符上,点击右键。打开弹出菜单。

2、 在弹出菜单中,选择“Replace with a Parameter”。选择或者创建参数的对话框弹出。

3、 在“Parameter name”中输入参数的名称,或者选择一个在参数列表中已经存在的参数。

4、 在“Parameter type”下拉列表中选择参数类型。

5、 点击“OK”,关闭该对话框。脚本生成器便会用参数中的值来取代脚本中被参数化的字符,参数用一对“{}”括住。

注意:在参数化CORBA或者General-Java 用户脚本的时候,必须参数化整个字符串,而不是其中的部分。另外注意:除了Web或者WAP,缺省的参数括号对于任何脚本都是 “{}”。你可以在“General Options”对话框中的“Parameterization”标签(Tools>General Options)中定义参数括号种类。

6、 用同样的参数替换字符的其余情况,选中参数,点击右键,弹出菜单。从弹出的菜单中,选择“Replace More Occurrences”。搜索和替换对话框弹出。“Find What”中显示了你企图替换的值。“Replace With”中显示了括号中参数的名称。选择适当的检验框来匹配整个字符或者大小写。如果要搜索规则的表达式(.,!,?等等),选中“Regular Expression”检验框,然后点击“Replace”或者“Replace All”。

注意:小心使用“Replace All”,尤其替换数字字符串的时候。脚本生成器将会替换字符出现的所有情况。

7、 如果想用以前定义过的参数来替换常量字符串的话,选中该字符串,点击右键,然后选择“Use Existing Parameter”,子菜单“Use Existing Parameters”弹出。从子菜单“Use Existing Parameters”选择参数,或者用“Select from Parameter List”来打开参数列表对话框。

注意:如果用以前定义过的参数来替换常量字符串的话,那么,使用“Parameter List”非常方便。同时,还可以查看和修改该参数的属性。

8、 对于已经用参数替换过的地方,如果想取回原来的值,那么,就在参数上点击右键,然后选择“Restore Original value”。

在Web用户脚本的树形视图中创建参数:

1、将光标定位在企图参数化的地方,点击右键,从弹出的菜单中选择“Properties”。则相关的属性对话框打开。

2、点击在要参数化的参量的旁边的“ABC”形状的图标。“Select or Create Parameter”对话框打开。

3、在“Parameter name”中输入参数的名称,或者从列表中选择一个已经存在的参数。

4、在“Parameter type”中输入参数的类型。

5、点击“OK”关闭该对话框。用户脚本生成器会用参数来替换最初的字符串常量,并用一个表格形状的图标替换“ABC”形状的图标。

6、要恢复参数化以前的值,点击图标,然后从弹出的菜单中选择“Undo Parameter”,则以前的值便会重现。

三、定义参数的属性

创建参数完成后,就可以定义其属性了。参数的属性定义就是定义在脚本执行过程中,参数使用的数据源。在Web用户脚本中,你既可以在基于文本的脚本视图中定义参数属性,也可以在基于图标的树形视图中定义参数属性。下面的过程将教你如何在基于本文的脚本视图中定义参数属性。

在基于文本的脚本视图中定义参数属性步骤:

1、 在参数上点击右键,有菜单弹出。

2、 在弹出的菜单中,选择“Parameter Properties”。参数属性对话框打开,显示和当前参数类型相关的属性。

3、 输入参数的属性值。

4、 点击“Close”关闭参数属性对话框。

在Web用户脚本的树形视图中定义参数的属性:

1、 将关标定位在参数上,然后点击右键,选择“Properties”。属性对话框打开。

2、 点击要定义属性的参数旁边的表格形状按钮,点击右键,选择“Parameter Properties”。参数属性对话框打开,和参数类型相关的属性显示出来。

3、 输入参数的属性。

4、 点击“Close”关闭参数属性对话框。

使用参数列表:  使用参数列表可以在任意时刻查看所有的参数,创建新的参数、删除参数,或者修改已经存在参数的属性。

1、 点击参数列表按钮或者用“Vuser>Parameter List”。参数列表对话框打开。

2、 要创建新的参数,点击“New”按钮。新的参数则被添加在参数树中,该参数有一个临时的名字,你可以给它重新命名,然后回车。设置参数的类型和属性,点击“OK”,关闭参数列表对话框。

注意:不要将一个参数命名为“unique”,因为这个名称是用户脚本生成器本身的。用户脚本生成器创建新的参数,但是不会自动用该参数在脚本中替换任意选中的字符串。

3、 要删除已有的参数,那么,要先从参数树中选择该参数,点击“Delete”,然后确认你的行为即可。

4、 要修改已有参数,那么,要先从参数树中选择该参数,然后编辑参数的类型和属性。



四、理解参数的类型  在你定义参数属性的时候,要指定参数值的数据源。你可以指定下列数据源类型的任何一种:

Internal Data―― 虚拟用户内部产生的数据。

Data Files ――存在于文件中的数据。可能是已存在的文件或者是用脚本生成器新创建的。

User-Defined Functions―― 调用外部DLL函数生成的数据  Internal Data包括以下几种:

1、 Date/Time  Date/Time用当前的日期/时间替换参数。要指定一个Date/Time格式,你可以从菜单列表中选择格式,或者指定你自己的格式。这个格式应该和你脚本中录制的Date/Time格式保持一致。

2、 Group Name  Group Name 用虚拟用户组名称替换参数。在创建scenario的时候,你可以指定虚拟用户组的名称。当从用户脚本生成器运行脚本的时候,虚拟用户组名称总是None。

3、 Load Generator Name  Load Generator Name用脚本负载生成器的名称替换参数。负载生成器是虚拟用户在运行的计算机。

4. Iteration Number  Iteration Number用当前的迭代数目替换参数。

5、 Random Number  Random Number用一个随机数替换参数。通过指定最大值和最小值来设置随机数的范围。

6、 Unique Number  Unique Number用一个唯一的数字来替换参数。你可以指定一个起始数字和一个块的大小。

7、 Vuser ID  Vuser ID用分配给虚拟用户的ID替换参数,ID是由Loadrunner的控制器在scenario运行时生成的。如果你从脚本生成器运行脚本的话,虚拟用户的ID总是-1。

五、数据文件  数据文件包含着脚本执行过程中虚拟用户访问的数据。局部和全局文件中都可以存储数据。可以指定现有的ASCII文件、用脚本生成器创建一个新的文件或者引入一个数据库。在参数有很多已知值的时候数据文件非常有用。数据文件中的数据是以表的形式存储的。一个文件中可以包含很多参数值。每一列包含一个参数的数据。列之间用分隔符隔开,比如说,用逗号。  对数据文件设置参数属性  如果使用文件作为参数的数据源,必须指定以下内容:文件的名称和位置、包含数据的列、文件格式,包括列的分隔符、更新方法。  如果参数的类型是“File”,打开参数属性(Parameter Properties)对话框,设置文件属性如下:

1、 在“File path”中输入文件的位置,或者点击“Browse”指定一个已有文件的位置。缺省情况下,所有新的数据文件名都是“parameter_name.dat”,注意,已有的数据文件的后缀必须是.dat。

2、 点击“Edit”。记事本打开,里面第一行是参数的名称,第二行是参数的初始值。使用诸如逗号之类的分隔符将列隔开。对于每一新的表行开始一行新的数据。  注意:在没有启动记事本的情况下如果想添加列,就在参数属性对话框中点击“Add Col”,那么“Add new column”对话框就会弹出。输入新列的名称,点击“OK”。脚本生成器就会添加该列到表中,并显示该列的初始值。

3、 在“Select Column”部分,指明包含当前参数数据的列。你可以指定列名或者列号。列号是包含你所需要数据的列的索引。列名显示在每列的第一行(row 0)。

4、 在“Column delimiter”中输入列分隔符,你可以指定逗号、空格符等等。

5、 在“First data line”中,在脚本执行的时候选择第一行数据使用。列标题是第0行。若从列标题后面的第一行开始的话,那就在“First data line”中输入1。如果没有列标题,就输入0。

6、 在“Select next row”中输入更新方法,以说明虚拟用户在脚本执行的过程中如何选择表中的数据。方法可以是:连续的、随机的、唯一的、或者与其它参数表的相同行。

6.1、 顺序(Sequential):该方法顺序地给虚拟用户分配参数值。如果正在运行的虚拟用户访问数据表的时候,它会取到下一行中可用的数据。

6.2、 随机(Random):该方法在每次迭代的时候会从数据表中取随机数

6.3、 使用种子取随机顺序(Use Random Sequence with Seed):如果从Loadrunner的控制器来运行scenario,你可以指定一个种子数值用于随机顺序。每一个种子数值在测试执行的时候代表了一个随机数的顺序。无论你何时使用这个种子数值,在scenario中同样的数据顺序就被分配给虚拟用户。如果在测试执行的时候发现了一个问题并且企图使用同样的随机数序列来重复测试,那么,你就可以启动这个功能(可选项)。

6.4、 唯一(Unique):Unique方法分配一个唯一的有顺序的值给每个虚拟用户的参数。

6.5 、与以前定义的参数取同一行(Same Line As ):该方法从和以前定义过的参数中的同样的一行分配数据。你必须指定包含有该数据的列。在下拉列表中会出现定义过的所有参数列表。注意:至少其中的一个参数必须是Sequential、Random或者Unique。
全部回答
  • 1楼网友:上分大魔王
  • 2021-10-12 12:40
string 字符串数据[]; string 长字符串; int i=0; while(i<字符串数据.length){  string temp=长字符串;  while(temp.length>字符串数据[i].length){  if(int position=长字符串.indexof(字符串数据[i])>0){       temp=temp.substring(position);       长字符串.setcolor(position,position+字符串数据[i].length); } }       } 票数: 0
  • 2楼网友:人间朝暮
  • 2021-10-12 11:38
符串或串(String)是由零个或多个字符组成的有限序列。一般记为 s='a1a2•••an'(n>=0)。它是编程语言中表示文本的数据类型。   通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链接存储方式。 字符串函数   1. 连接运算 concat(s1,s2,s3…sn) 相当于s1+s2+s3+…+sn.   例:concat(‘11’,’aa’)=’11aa’;   2. 求子串。 Copy(s,I,L) 从字符串s中截取第I个字符开始后的长度为l的子串。   例:copy(‘abdag’,2,3)=’bda’   3. 删除子串。过程 Delete(s,I,l) 从字符串s中删除第I个字符开始后的长度为l的子串。   例:s:=’abcde’;delete(s,2,3);结果s:=’ae’   4. 插入子串。 过程Insert(s1,s2,I) 把s1插入到s2的第I个位置   例:s:=abc;insert(‘12’,s,2);结果s:=’a12bc’   5. 求字符串长度 length(s) 例:length(‘12abc’)=5   6. 搜索子串的位置 pos(s1,s2) 如果s1是s2的子串 ,则返回s1的第一个字符在s2中的位置,若不是子串,则返回0.   例:pos(‘ab’,’12abcd’)=3   7. 字符的大写转换。Upcase(ch) 求字符ch的大写体。   例:upcase(‘a’)=’A’   8. 数值转换为数串。 过程 Str(x,s) 把数值x化为数串s.   例:str(12345,s); 结果s=’12345’   9. 数串转换为数值。 过程val(s,x,I) 把数串s转化为数值x,如果成功则I=0,不成功则I为无效字符的序数   例:val(‘1234’,x,I);结果 x:=1234 形式理论   设 Σ 是叫做字母表的非空有限集合。Σ 的元素叫做“符号”或“字符”。在 Σ 上的字符串(或字)是来自 Σ 的任何有限序列。例如,如果 Σ = {0, 1},则 0101 是在 Σ 之上的字符串。   字符串的长度是在字符串中字符的数目(序列的长度),它可以是任何非负整数。“空串”是在 Σ 上的唯一的长度为 0 的字符串,并被指示为 ε 或 λ。   在 Σ 上的所有长度为 n 的字符串的集合指示为 Σn。例如,如果 Σ = {0, 1} 则 Σ2 = {00, 01, 10, 11}。注意 Σ0 = {ε} 对于任何字母表 Σ。   在 Σ 上的所有任何长度的字符串的集合是 Σ 的Kleene闭包并被指示为 Σ*。依据Σn, 。例如,如果 Σ = {0, 1} 则 Σ* = {ε, 0, 1, 00, 01, 10, 11, 000, 001, 010, 011, …}。尽管 Σ* 自身是可数无限的,Σ* 的所有元素都有有限长度。   在 Σ 上一个字符串的集合(就是 Σ* 的任何子集)被称为在 Σ 上的形式语言。例如,如果 Σ = {0, 1},则带有偶数个零的字符串的集合({ε, 1, 00, 11, 001, 010, 100, 111, 0000, 0011, 0101, 0110, 1001, 1010, 1100, 1111, …})是在 Σ 上的形式语言。 串接和子串   “串接”是 Σ* 上的重要二元运算。对于 Σ* 中的两个字符串 s 和 t,它们的串接被定义为在 s 中的字符序列之后跟随着 t 中的字符序列,并被指示为 st。例如,Σ = {a, b, …, z},并且 s = bear 且 t = hug,则 st = bearhug 而 ts = hugbear。   字符串串接是结合性的,但非交换性运算。空串充当单位;对于任何字符串 s,有 εs = sε = s。所以,集合 Σ* 和串接运算形成了幺半群,就是从 Σ 生成的自由幺半群。此外,长度函数定义从 Σ* 到非负整数的幺半群同态。   字符串 s 被称为是字符串 t 的“子串”或“因子”,如果存在(可能为空)字符串 u 和 v 使得 t = usv。“是其子串”关系定义了在 Σ* 上的偏序,其最小元是空串。 词典排序   经常需要定义在字符串集合上的次序。如果字符表 Σ 有一个全序 (cf. 字母序),则可以定义在 Σ* 上的叫做词典序的全序。注意因为 Σ 是有限的,总是可以定义在 Σ 继而在 Σ* 上的良好次序。例如,如果 Σ = {0, 1} 并且 0 < 1,则 Σ* 的词典次序是 ε < 0 < 00 < 000 < … < 011 < 0110 < … < 01111 < … < 1 < 10 < 100 < … < 101 < … < 111 … 字符串运算   在形式理论中经常出现一些在字符串上的额外运算。它们在条目字符串运算中给出。 字符串数据类型   字符串数据类型是建模在形式字符串的想法上的数据类型。字符串是几乎在所有编程语言中可以实现的非常重要和有用的数据类型。在某些语言中它们可作为基本类型获得,在另一些语言中做为复合类型获得。多数高级语言的语法允许通常用某种方式引用起来的字符串来表示字符串数据类型的实例;这种元字符串叫做“文本”或“字符串文本”。 字符串长度   尽管形式字符串可以有任意(但有限)的长度,实际语言的字符串的长度经常被限制到一个人工极大值。一般的说,有两种类型的字符串数据类型: “定长字符串”,它有固定的极大长度并且不管是否达到了这个极大值都使用同样数量的内存;和“变长字符串”,它的长度不是专断固定的并且依赖于实际的大小使用可变数量的内存。在现代编程语言中的多数字符串是变长字符串。尽管叫这个名字,所有变长字符串还是在长度上有个极限,一般的说这个极限只依赖于可获得的内存的数量。 字符编码   历史上,字符串数据类型为每个字符分配一个字节,尽管精确的字符集随着区域而改变,字符编码足够类似得程序员可以忽略它 — 同一个系统在不同的区域中使用的字符集组要么让一个字符在同样位置,要么根本就没有它。这些字符集典型的基于ASCII码或EBCDIC码。   意音文本的语言比如汉语、日语和朝鲜语(合称为CJK)的合理表示需要多于256个字符(每字符一个字节编码的极限)。常规的解决涉及保持对ASCII码的单字节表示并使用双字节来表示CJK字形。现存代码在用到它们会导致一些字符串匹配和切断上的问题,严重程度依赖于字符编码是如何设计的。某些编码比如EUC家族保证在ASCII码范围内的字节值只表示ASCII字符,使得使用这些字符作为字段分隔符的系统得到编码安全。其他编码如ISO-2022和Shift-JIS不做这种担保,使得基于字节的代码做的匹配不安全。另一个问题是如果一个字符串的开头被删除了,对解码器的重要指示或关于在多字节序列中的位置的信息可能就丢失了。另一个问题是如果字符串被连接到一起(特别是在被不知道这个编码的代码截断了它们的结尾之后),第一个字符串可能不能导致编码器进入适合处理第二个字符串的状态中。   Unicode也有些复杂的问题。多数语言有Unicode字符串数据类型(通常是UTF- 16,因为它在Unicode补充位面介入之前就被增加了)。在Unicode和本地编码之间转换要求理解本地编码,这对于现存系统要一起传输各种编码的字符串而又没有实际标记出它们用了什么编码就是个问题。 实现   某些语言如 C++ 把字符串实现为可以用于任何基本类型的模版,但这是个例外而不是规则。   如果一个面向对象语言把字符串表示为对象,它们叫做“可变的”(mutable),如果值可以在进行时间变更,叫做“不变的”(immutable),如果这个值在建立后就冻结了。例如,Ruby 有可变字符串,而 Python 的字符串是不可变的。   其他语言,最著名的有 Prolog 和 Erlang,避免实现字符串数据类型,转而采用把字符串表示为字符代码的列表的约定。 表示法   一种常用的表示法是使用一个字符代码的数组,每个字符占用一个字节(如在ASCII代码中)或两个字节(如在unicode中)。它的长度可以使用一个结束符(一般是NUL,ASCII代码是0,在C编程语言中使用这种方法)。或者在前面加入一个整数值来表示它的长度(在Pascal语言中使用这种方法)。   这是一个用NUL结束的字符串的例子,它用10个byte存储,用ASCII表示法:   F R A N K NUL k e f w   46 52 41 4E 4B 00 6B 66 66 77   上面的字符串的长度为5个字符,但注意它占用6个字节。结束符后的字符没有任何意义。   这是相同的Pascal字符串:   length F R A N K k e f w   05 46 52 41 4E 4B 6B 66 66 77   当然,可能还有其它的表示法。使用树和列表可以使得一些字符串操作(如插入和删除)更高效。 字符串实用程序   一些编程语言设计为编写字符串处理程序更容易编写。这是一些例子:   awk   Icon   perl   MUMPS   sed   SNOBOL   很多UNIX实用程序进行简单的字符串处理,并能用于简单地编写一些强大的字符串处理算法。文件和有限流可以像字符串一样查看。   一些新的编程语言,包括Perl、Python和Ruby,借助正则表达式来帮助文本处理。 字符串操作   一个简单的字符串操作是“连接”:也就是说先写一个字符串S,随后在后面再写一个T得到ST这样一个过程。其它的常见操作包括在一个长字符串中搜索一个子串,排列一组字符串以及分析一个字符串。因为存在如此多的字符串应用方式,所以相应地有许多权衡了不同应用的相关算法。 高级的字符串算法通常使用包括后向树和有限状态机在内的复杂机制和数据结构。 算法   这是一些字符串处理算法,在字符串上进行不同的处理:   字符串查找算法   正则表达式算法   模式匹配
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息