Citrix Presentation Server的IBMRational®Performance Tester Extension使用Citrix客户端软件的一部分Citrix ICA Client Simulation API记录和回放用户与基于Citrix的应用程序(在Citrix Presentation Server或XenApp中运行的虚拟应用程序)的交互。或XenDesktop软件)。 多个Microsoft Windows进程在后台交互以实现此目的。 本教程讨论了使用Rational Performance Tester进行Citrix负载测试的最佳实践,以及解决常见问题的技巧。 本教程不包括Citrix Performance Testing的最佳实践。 您可以在Rational Performance Tester知识中心中找到它们。
本教程分为两个部分:录制时的故障排除和最佳实践,以及测试和安排播放。
测试记录期间的Citrix错误
Windows注册表中不存在AllowSimulationAPI密钥
在Citrix客户端(Citrix Receiver或Citrix Online插件)安装后首次启动录制时,您可能会看到在打开的Citrix客户端窗口中突出显示“不支持的功能”。 此错误是由与Citrix客户端有关的Windows注册表项不正确或不完整引起的,最重要的是由Citrix客户端AllowSimulationAPI使用的注册表项激活了ICA Client Simulation API。
如果遇到此错误,请确保Citrix安装程序以具有管理特权的用户身份运行。 即使您以管理用户身份安装了Citrix客户端,偶尔也无法编写AllowSimulationAPI。 如果发生这种情况,您可以手动创建条目。
要验证AllowSimulationAPI密钥是否存在并根据需要创建它:
- 打开Windows注册表编辑器(“ 开始”>“运行”>“ Regedit” )。
- 如果您使用32位Windows,请导航至HKEY_LOCAL_MACHINE>软件> Citrix> ICA客户端> CCM 。
- 如果您使用64位Windows,则路径为HKEY_LOCAL_MACHINE>软件> Wow6432Node> Citrix> ICA Client> CCM 。
Windows注册表中的ICA客户端文件夹
- ICA客户端的Windows注册表项:在CCM文件夹中,验证键AllowSimulationAPI是否存在并且其值为1。如果值为1,请忽略本节中的其余步骤。
- 如果不存在CCM文件夹或AllowSimulationAPI值,请右键单击ICA Client文件夹,然后选择“ 新建”>“密钥”选项。 创建一个新文件夹作为ICA Client父文件夹的子文件夹。
- 重命名新文件夹CCM。
- 右键单击此文件夹,然后选择“ 新建”>“ DWORD(32位)值” 。
- 命名新属性AllowSimulationAPI。
创建AllowSimulationAPI
- 双击AllowSimulationAPI 。 将打开“编辑DWORD(32位)值”对话框。
编辑AllowSimulationAPI
- 在“编辑DWORD(32位)值”对话框中,在“值数据”字段中键入
1
,然后单击“ 确定” 。 - 如果录制问题仍然存在,请重新启动系统以确保注册表设置已生效。
清理Citrix流程
Citrix客户端启动时,它将启动一些进程,尤其是Citrix连接中心(concentr.exe)和Citrix Connection Manager(wfcrun32.exe)。 在关闭与Citrix服务器的连接后,Citrix客户端窗口退出后,这些过程将继续运行。
因此,当您使用Rational Performance Tester启动Citrix测试记录时,可能会遇到以下错误。 在Citrix录制客户端窗口打开之后,将发生这些错误:
- 不支持的功能
- 协议驱动程序错误
在这种状态下无法捕获和生成新的Citrix测试。 要恢复并使记录成功运行,请终止Citrix连接中心(concentr.exe)和Citrix连接管理器(wfcrun32.exe)。 这将迫使Citrix客户端在下次尝试连接时打开这些进程的新实例。 要结束这些过程,请使用Windows任务管理器或Windows命令行中的taskkill实用程序。
由Rational Performance Tester启动的CitrixRuntime.exe和由Citrix客户端启动的wfica32.exe进程可能由于测试的异常退出或计划的回放而保留在系统中。 如果在录制过程中发生错误,请在开始新录制之前终止这些过程。 确保先结束concentr.exe进程。
Citrix Online插件与Citrix Receiver
Citrix客户端软件以前称为Citrix Online Plug-in。 最新的Citrix Online插件独立版本(V12.3)于2012年4月发布。不再受支持。 Citrix Online Plug-in软件现已成为Citrix Receiver软件包的一部分。 第一个Citrix Receiver(V3.1)包括Online Plug-in V13.1,并且版本命名法以相同的模式继续进行。
用于Rational Performance Tester记录和回放的机器不应同时安装Citrix Online插件和Citrix Receiver。 要确认这一点,请在Windows“控制面板”中的“ 添加/删除程序”实用程序中查找并确认仅安装了一个。
记录并最大化应用程序窗口
在记录鼠标单击事件时,ICA Client Simulation API会捕获动作的x和y坐标。 在回放期间,Rational Performance Tester指示ICA Client Simulation API在相同的坐标上执行回放。 这使得动作对播放时应用程序窗口的相对位置的差异敏感。 如果应用程序窗口在屏幕上的其他相对位置打开,则所需的GUI元素不再位于同一位置,并且鼠标事件对应用程序没有任何影响。 可能会导致播放失败。
下图显示了针对简单应用程序Windows记事本记录的Citrix测试。 在此测试中:
- 用户打开记事本
- 类型
foo
- 单击鼠标退出应用程序
该测试包含坐标(577,402)上的鼠标左键单击事件。 这些坐标现在对应于用户关闭“ 保存”对话框的位置。
Citrix鼠标单击测试元素
如果在播放期间,“保存”对话框窗口或“记事本”窗口在与录制时不同的位置打开,则鼠标单击坐标(577,408)无效。 Citrix测试将导致注销失败,并且同一用户下次尝试登录时会打开意外窗口。
为避免这种情况,请在录制时使用热键或快捷方式。 如果某些操作没有关联的快捷方式或热键,请记录与最大化的主窗口的交互。 随着应用程序窗口的最大化,相对位置发生变化的机会会减少,从而产生可靠的播放效果。 将键盘操作记录到Windows快捷方式中,该快捷方式在应用程序主窗口启动后立即最大化。
多用户Citrix计划运行的最佳做法
通常,不是在工作台机器上完成多用户Citrix计划回放,而是在使用IBM Rational Performance Tester Agent软件的另一台机器上进行回放。 本节描述了一些在Rational Performance Tester代理上运行多用户Citrix调度的最佳实践。
设置代理计算机以进行Citrix回放
使用远程代理计算机运行工作负载时需要了解的重要事项是:
- 确保Rational Performance Tester代理是32位的。 Citrix测试播放不适用于64位代理软件。
- Citrix回放需要AllowSimulationAPI的注册表项。 与工作台计算机一样,请确保Citrix客户端以具有管理特权的用户身份安装。
- 验证AllowSimulationAPI注册表项在正确的位置,值为1。
限制并发登录
在负载测试方案中,通常是让虚拟用户长时间登录,执行操作和退出循环。 随着系统中虚拟用户数量的增加,回放中,多个Citrix用户可能会同时登录到服务器。 当多个用户同时从同一台代理计算机登录Citrix服务器时,Citrix会话的可靠性问题可能会导致回放错误。 在多用户日程表回放期间,这种情况很少发生,具体取决于环境因素,例如完成登录所需的时间,因此请不要对所有日程表都应用此解决方案。 仅在必要时使用它。
加速时间可以通过分发用户登录名来缓解这种情况。 但是在使用循环长时间运行的测试中,仅具有加速时间可能不够。 但是,您可以设置计划以防止多个并发登录。
下图显示了一种防止并发登录的方法。 在此示例中,使用自定义代码元素在文件系统中创建了登录锁定文件。 这是在启动Login元素之前发生的。 用户完成登录后,另一个自定义代码将删除此文件。
自定义代码元素可锁定Citrix登录
下面的清单显示了运行此代码的虚拟用户。 在继续登录之前,它验证锁定文件不存在。 如果存在锁定文件,它将等待直到锁定文件在系统中不再可用。 该代码还包括一种检测过期锁定文件的机制。
虚拟用户代码
package customcode;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
...
public String exec(ITestExecutionServices tes, String[] args) {
File connectionLock = new File("C://path//to//lockFile");
while(true){
if(connectionLock.exists()){
tes.getTestLogManager().reportMessage("Another VU logging in now. Will try later.");
try { // Delete stale lock file if any
long timeStamp = connectionLock.lastModified();
Calendar rightNow = Calendar.getInstance();
if ((rightNow.getTimeInMillis() - timeStamp) > (5 * 60 * 1000)){ //> 5 mins
tes.getTestLogManager().reportMessage("Stale lock file to be removed");
connectionLock.delete();
}
//zzz...
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}else{
try {
connectionLock.createNewFile();
tes.getTestLogManager().reportMessage("Creating Lock File");
}catch (IOException e) {
e.printStackTrace();
}
break;
}
}
return null;
}
以下清单是释放锁定的自定义代码(删除连接锁定文件)。 这应该在用户成功登录后运行。
释放连接锁的示例代码
...
public String exec(ITestExecutionServices tes, String[] args) {
File connectionLock = new File("C://path//to//lockFile");
if(connectionLock.exists()){
tes.getTestLogManager().reportMessage("Removing login lock file");
connectionLock.delete();
}
return null;
}
注意:还有其他方法可以使用自定义代码实现锁定,例如使用执行引擎数据区域。
结论
Citrix性能测试具有挑战性,即使对于有经验的开发人员也是如此。 设置客户端系统以及Rational Performance Tester与Citrix ICA Client Simulation API的交互可能会很复杂。 在本教程中,您了解了一些常见问题以及这些问题的解决方案。 使用此信息和Rational Performance Tester知识中心来解决Citrix性能测试项目中可能出现的一些障碍。
翻译自: https://www.ibm.com/developerworks/library/d-rational-citrix-troubleshooting-trs/index.html