65.9K
CodeProject 正在变化。 阅读更多。
Home

ScriptRunner 应用程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.97/5 (18投票s)

2007年3月26日

CPOL

4分钟阅读

viewsIcon

94682

downloadIcon

1975

ScriptRunner 简介。一个用于用户界面单元测试的脚本工具。

Screenshot - ScriptRunner.jpg

引言

当今软件专业人士最受追捧的技能之一不仅是编写高质量代码的能力,而且是测试和验证代码的能力。这正是该工具发挥作用的地方。ScriptRunner 不同于其他单元测试框架。事实上,ScriptRunner 是 CPP Unit 等传统单元测试框架的补充。单元测试框架允许您测试应用程序中的模块。模块可以是库、类(或对象),也可以是简单的函数。ScriptRunner 通过模拟用户与您的软件的交互来补充单元测试,并可以显示程序执行中的任何错误。

描述

最初,ScriptRunner 的创建目的是模拟用户与应用程序的交互。但最终,这个工具得到了发展。现在,它提供了一个简单的 TRACE 库来捕获应用程序状态,当然,也用于报告程序中的任何错误。
通常,使用 CPP Unit(或其他框架),您需要编写代码来测试函数,并传入正确值和错误值,以验证它是否行为正确。这些工具非常棒,如果您选择测试足够重要的函数,就可以获得非常好的覆盖率,并轻松找到程序中的 bug(或损坏的代码)。

但是,缺少的一个方面是如何测试用户界面以达到相同的结果?ScriptRunner 可以帮助您做到这一点!您可以编写一个简单的脚本来与您的应用程序进行交互,并使用 ScriptRunner TRACE 库来显示任何成功或失败。

它是如何工作的?

ScriptRunner 是一个脚本宿主应用程序。它提供了一组接口来执行应用程序、操作窗口以及向用户界面提交输入,就像用户通常所做的那样。有几个命令可用于配置和运行测试脚本。我假设每个人都会识别标准图标,并知道它们的作用。现在,我将描述其他图标,以便您开始。

ScriptRunner Command

命令 描述
Trace 您可以使用 Trace 按钮将跟踪语句(OutputDebugString)直接捕获到此窗口。您的代码可以通过使用 ScriptRunner TRACE 库将输出字符串直接发送到此窗口。脚本还可以通过使用 ScriptHost.DebugOutput 函数发送输出。
停止 Stop Trace 将停止捕获调试器输出。
Compare Compare 模式可用于验证程序执行时发送的输出。
Run Run 命令将执行一个用户界面 JavaScript 测试单元。

有几项附加功能可用于过滤程序输出。还提供了上下文菜单选项来加载和保存程序输出设置。

ScriptRunner ScriptHost API

函数 描述
Display(text) 显示一个消息框。
DebugOutput(text) 将输出文本发送到 ScriptRunner 输出 窗口
FindWindow(class,title) 搜索特定的 窗口 类和标题(可选)。
SendKey(keyCode,ctrlKey,altKey) 将虚拟键码发送到活动窗口(具有焦点的控件)。可以选择模拟按下 CTRL 和 ALT 键。
SendKeys(text) 发送按键(用户模拟)。
Sleep(delay) 等待指定的毫秒数。
bool LaunchApp(appPath) 运行一个应用程序。
string GetEnvString(sName) 获取一个环境变量字符串。

ScriptRunner WindowDispatch API

函数 描述
Window 获取 窗口 句柄的属性。由于 ScriptRunner 负责创建和初始化此对象,因此应将其用作只读属性。
string GetWindowText() 获取当前标题文本或编辑控件的编辑文本。
int GetWindowTextLength() 获取当前标题文本(或编辑文本)的长度。
bool SetWindowText(text) 更改 窗口 文本。
SetFocus() 将焦点更改为 窗口
ShowWindow(cmdShow) 显示/隐藏 窗口
Window GetDlgItem(dlgItem) 获取子 窗口 句柄。
ChildWindowFromPoint(x,y) 从客户端坐标获取子 窗口 句柄。
MoveWindow(x,y,w,h) 调整 窗口 的大小和位置。
SetWindowPos(x,y,cx,cy,flg) 调整 窗口 的大小和位置。
Window FindWindowEx(class,title,prev) 根据类或标题查找子 窗口
bool SetForegroundWindow() 窗口 设置为前景。
Window GetParent() 获取当前 窗口 的父窗口。
MouseHover() 将鼠标移动并居中到 窗口 对象上。
MouseLClick(x,y,clickNow) 将鼠标移动到 窗口 的客户端位置,并在移动结束时可选地模拟左键单击。
MouseRClick(x,y,clickNow) 将鼠标移动到 窗口 的客户端位置,并在移动结束时可选地模拟右键单击。

ScriptRunner 示例

ScriptRunner 只公开一个事件处理程序 OnStarted。这是运行脚本推荐的主入口点。在 JavaScript 中,使用原型 function ScriptHost::OnStarted()

示例

function ScriptHost::OnStarted()
{
  LaunchApp("C:\\Windows\\System32\\Notepad.exe");
  Sleep(500);
  var winObj = FindWindow("Notepad", "Untitled - Notepad");
  if (winObj)
  {
    winObj.SetForegroundWindow();
    winObj.SetFocus();
    SendKey(0x74); // F5
    SendKeys("Hello CodeProject gurus around the world!\r");
    SendKeys("1234567890-=\r");
    SendKeys("!@#$%^&*()_+\r");
    SendKeys("abcdefghijklmnopqrstuvwxyz\r");
    SendKeys("ABCDEFGHIJKLMNOPQRSTUVWXYZ\r");
  }
  else
    Display("Untitled - Notepad window was not found...");
}

单元测试输出到 ScriptRunner

如前所述,C/C++ 应用程序可以将输出发送到 ScriptRunner 输出窗口。为此,您需要在解决方案中包含一组文件。

  • CTracer.h:用于挂钩程序中的 OutputDebugString 调用。
  • SocketHandle.h, cpp:用于与 ScriptRunner 通信的套接字 API。
  • HookImportFunction.h, cpp:PJ Naughter 的 Hook Import 函数(点击此处)(版权 © 1999; PJ Naughter)

项目信息

此工具使用

历史

  • 2007 年 3 月 25 日 - 公开发布
© . All rights reserved.