剑客
关注科技互联网

使用 Rational Performance Tester 对 Citrix 的故障排除及最佳实践

简介

Citrix Presentation Server 的 IBM Rational® Performance Tester Extension 使用 Citrix 客户端软件中包含的 Citrix ICA Client Simulation API,记录和回放用户与基于 Citrix 的应用程序之间的交互,这些应用程序是在 Citrix Presentation Server、XenApp 或 XenDesktop 软件中运行的虚拟化应用程序)。多个 Microsoft Windows 进程在后台交互来实现此目的。本教程将讨论使用 Rational Performance Tester 执行 Citrix 负载测试时采用的最佳实践,以及排除常见问题的技巧。其中不包含针对 Citrix 性能测试的最佳实践;这些最佳实践可以在 Rational Performance Tester 知识中心 中找到。

本教程包含两节:记录期间的故障排除和最佳实践,以及测试和计划回放。

测试记录期间的 Citrix 错误

Windows 注册表中没有 AllowSimulationAPI 键

在安装 Citrix 客户端(Citrix Receiver 或 Citrix Online Plugin)后第一次启动来进行记录时,您可能会看到为了进行记录而打开的 Citrix 客户端窗口中突出显示着 “Unsupported Function”。此错误是由与 Citrix 客户端相关的错误或不完整的 Windows 注册表条目导致的 — 最重要的是 Citrix 客户端使用的注册表键 AllowSimulationAPI,该键用于激活 ICA Client Simulation API。

如果遇到此错误,请确保采用具有管理特权的用户身份运行 Citrix 安装程序。即使您以管理用户身份安装了 Citrix 客户端,偶尔也会发生 AllowSimulationAPI 写入失败。如果出现这种情况,可以手动创建该条目。

要验证 AllowSimulationAPI 键是否存在并在需要时创建它:

  1. 打开 Windows 注册表编辑器 ( Start > Run > Regedit )。
  2. 如果使用的是 32 位 Windows,请导航到 HKEY_LOCAL_MACHINE > SOFTWARE > Citrix > ICA Client > CCM
  3. 如果使用的是 64 位 Windows,路径为 HKEY_LOCAL_MACHINE > SOFTWARE > Wow6432Node > Citrix > ICA Client > CCM

    Windows 注册表中的 ICA 客户端文件夹

    使用 Rational Performance Tester 对 Citrix 的故障排除及最佳实践

    使用 Rational Performance Tester 对 Citrix 的故障排除及最佳实践
  4. 针对 ICA 客户端的 Windows 注册表条目:在 CCM Folder 中,确认键 AllowSimulationAPI 存在且值为 1。如果值为 1,则忽略本节中的剩余步骤。
  5. 如果 CCM 文件夹或 AllowSimulationAPI 值不存在,则右键单击 ICA Client 文件夹 并选择 New > Key 选项。将在 ICA Client 父文件夹下创建一个新的子文件夹。
  6. 将新文件夹重命名为 CCM。
  7. 右键单击此文件夹并选择 New > DWORD (32-bit) Value
  8. 将新属性命名为 AllowSimulationAPI。

    创建 AllowSimulationAPI

    使用 Rational Performance Tester 对 Citrix 的故障排除及最佳实践

    使用 Rational Performance Tester 对 Citrix 的故障排除及最佳实践
  9. 双击 AllowSimulationAPI 。将打开 Edit DWORD (32-bit) Value 对话框。

    编辑 AllowSimulationAPI

    使用 Rational Performance Tester 对 Citrix 的故障排除及最佳实践

    使用 Rational Performance Tester 对 Citrix 的故障排除及最佳实践
  10. 在 Edit DWORD (32-bit) Value 对话框中,在 Value data 字段中键入 1 ,然后单击 OK
  11. 如果记录问题仍然存在,则重新启动系统,以确保注册表设置生效。

清除 Citrix 进程

当 Citrix 客户端启动时,会启动一些进程,最明显的是 Citrix Connection Center (concentr.exe) 和 Citrix Connection Manager (wfcrun32.exe)。在关闭与 Citrix 服务器的连接后,这些进程会在 Citrix 客户端窗口退出后继续运行。

由于此原因,当您使用 Rational Performance Tester 开始记录 Citrix 测试时,可能遇到以下错误。这些错误将在打开用于记录的 Citrix 客户端窗口后发生:

  • Unsupported Function
  • Protocol Driver Error

在此状态下无法捕获和生成新 Citrix 测试。要恢复正常并成功执行记录,可终止 Citrix Connection Centre (concentr.exe) 和 Citrix Connection Manager (wfcrun32.exe)。这会强制 Citrix 客户端在下次尝试连接时打开这些进程的新实例。要终止这些进程,可使用 Windows 任务管理器或从 Windows 命令行使用 taskkill 实用程序。

如果测试或计划性回放异常退出,Rational Performance Tester 启动的进程 CitrixRuntime.exe 和 Citrix 客户端启动的进程 wfica32.exe 可能保留在系统中。如果在记录期间发生错误,请在开始一次新记录之前终止这些进程。确保首先结束了 concentr.exe 进程。

Citrix Online Plug-in 与 Citrix Receiver

Citrix 客户端软件以前叫做 Citrix Online Plug-in。最后一个 Citrix Online Plug-in 独立版本 (V12.3) 是在 2012 年 4 月发布的,现在已不再支持该版本。Citrix Online Plug-in 软件现在包含在 Citrix Receiver 包中。第一个 Citrix Receiver (V3.1) 包含 Online Plug-in V13.1,后续版本命名采用了相同的模式。

用于 Rational Performance Tester 记录和回放的机器不得同时分别安装 Citrix Online Plug-in 和 Citrix Receiver。为确认这一点,可以查看 Windows 控制面板中的 Add/Remove Programs 实用程序,确认仅安装了一个。

记录时最大化应用程序窗口

记录鼠标单击事件时,ICA Client Simulation API 捕获操作的 xy 坐标。在回放期间,Rational Performance Tester 告诉 ICA Client Simulation API 在相同的坐标上执行回放。这使操作对回放期间应用程序窗口的相对位置差异很敏感。如果应用程序窗口在屏幕上一个不同的相对位置打开,需要的 GUI 元素不再位于相同的位置,鼠标事件也不会对应用程序产生任何影响。这可能导致回放失败。

下图显示了对一个简单应用程序记录的 Citrix 测试 — Windows 记事本。在此测试中:

  • 用户打开记事本
  • 键入 foo
  • 通过鼠标单击退出应用程序

此测试包含坐标 (577, 402) 上的鼠标左键单击事件。这些坐标现在对应于用户解除 Save dialog 框时的位置。

Citrix 鼠标单击测试元素

使用 Rational Performance Tester 对 Citrix 的故障排除及最佳实践

使用 Rational Performance Tester 对 Citrix 的故障排除及最佳实践

如果在回放期间,Save dialog 窗口或记事本窗口在一个与记录时不同的位置打开,在坐标 (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 登录的自定义代码元素

使用 Rational Performance Tester 对 Citrix 的故障排除及最佳实践

使用 Rational Performance Tester 对 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;
}

备注:还有其他一些通过自定义代码实现锁定的方式,比如使用 Execution Engine 数据区域。

结束语

Citrix 性能测试非常困难,甚至对于经验丰富的开发人员也是如此。设置客户端系统以及设置 Rational Performance Tester 与 Citrix ICA Client Simulation API 的交互可能很复杂。在本教程中,您了解了一些经常出现的问题及其解决方案。使用此信息和 Rational Performance Tester 知识中心,可以解决 Citrix 性能测试项目中可能遇到的一些障碍。

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址