让我们假设我在loadrunner参数中定义了一个键/值对 名为mytable.dat的部分(参数类型:表)
loadrunner是否有内置函数来更新此表? 我可以根据密钥访问值吗?
换句话说,假设此表包含将成为密钥的用户名 和电子邮件地址作为值 - 我想问一下获取某个用户的地址并更新他的电子邮件,这样当我明天再次运行测试时,loadrunner将加载mytable.dat的更新版本
我想避免在c中编程,如果没有内置的方法在loadrunner中执行它比我更喜欢使用javascript处理它。
答案 0 :(得分:1)
在LoadRunner中有3种类型的参数:
1)静态 - 使用VuGen中的参数对话框定义的参数(例如,您正在讨论的表类型参数)。这些参数是只读的,可以使用大括号表示法访问:
lr_message(lr_eval_string("{NewParam}"));
2)动态 - 使用脚本中的代码定义的参数,可以在代码中读取和写入(并通过大括号访问):
lr_save_string("aaaa","bbb");
lr_message(lr_eval_string("{bbb}"));
3)VTS - 这基本上是一个小型数据库,您可以从运行该脚本的任何vUser访问该数据库,并且您可以使用适当的API完全控制其中的内容(请阅读VTS上的文档)
其他一些说明: “Table”参数是一种使用一个参数访问多个值的方法,请确保这是您真正需要的参数类型。
某些协议支持JavaScript作为脚本语言。要将语言切换为JavaScript,请转到记录 - >录制选项,在对话框General - >中编写脚本并将语言更改为JavaScript。然后重新生成脚本(或记录一个空脚本),它将在JavaScript中重新生成
答案 1 :(得分:1)
这是动态更新的核心问题。您在磁盘上更新的表不是虚拟用户使用的表。在测试开始时,参数表被加载到RAM中以减少磁盘访问。因此,您对表所做的任何写操作都将在下次测试执行时可用。
下一个问题并非微不足道,是数据库管理解决方案存在的核心原因,您将如何管理数十/数百/数千个用户对给定文件的读/写访问权限以进行更新?这是一项艰难的编程挑战。搞错了,你会在你的负载生成器上锁定你的文件系统......如果文件在一个公共文件服务器上,你现在可以访问所涉及的网络,那就更糟了。这将导致虚拟用户速度变慢,因为每个人都等待独占锁来更新表。
使用队列实际上是为虚拟用户提供最佳选择,其中有一个业务流程需要更新第二个业务流程使用的数据表。在同一个线程中注意到的是VTS,它作为LoadRunner的一部分提供,以解决这个问题。我的偏好是RabbitMQ,因为它有一个HTTP接口的构建来从队列中推送和弹出值。您还可以利用来自Amazon,Cloud Azure,IBM Cloud,Rackspace等的任何无服务器计算队列来进行此类事件。
有些人希望将数据库服务器用于此Feed。我建议不要使用此选项,因为实施时最常使用的表单是使用相同的数据库来提供数据作为被测应用程序。这会对生产中不存在的AUT造成负担。对于返回所需的一行数据的查询,此负载也从未进行过优化,因此负载与直接连接到数据库的用户数量不成比例,这在生产中不会发生。