软件测试工具ScriptRunner介绍

在当今的软件开发行业中,对于软件专业人员来说,除了编写高质量的代码之外,测试和验证代码的能力同样重要。ScriptRunner就是这样一款工具,它与传统的单元测试框架如CPP Unit不同,ScriptRunner补充了单元测试的功能,通过模拟用户与软件的交互来显示程序执行中的任何错误。

ScriptRunner的起源与发展

ScriptRunner最初是为了模拟用户与应用程序的交互而创建的。随着时间的推移,这个工具已经发展成为一种提供简单TRACE库的工具,用于捕获应用程序的状态,并当然,报告程序中的任何错误。

ScriptRunner与传统单元测试框架的比较

使用CPP Unit或其他框架,可以编写代码来测试函数,传递正确的和错误的值来验证它的行为是否正确。这些工具非常出色,如果选择测试足够重要的函数,可以获得很好的覆盖率,并轻松地在程序中找到错误(或破损的代码)。

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

ScriptRunner的工作原理

ScriptRunner是一个脚本宿主应用程序。它提供了一组接口来执行应用程序,操作窗口,并向用户界面提交输入,就像用户通常会做的那样。有几个命令可用于配置和运行测试脚本。

Trace:可以使用Trace按钮直接将trace语句(OutputDebugString)捕获到这个窗口。代码可以通过使用ScriptRunner TRACE库将输出字符串直接发送到这个窗口。脚本也可以使用ScriptHost.DebugOutput函数发送输出。

Stop:Stop Trace将停止捕获调试器输出。

Compare:Compare模式可用于验证程序执行时发送的输出。

Run:Run命令将执行用户界面JavaScript测试单元。

此外,还有几个附加功能可用于过滤程序输出。上下文菜单选项也可用来加载和保存程序输出设置。

ScriptRunner ScriptHost API

ScriptRunner提供了一组API,允许执行多种操作,如显示消息框、发送输出文本到脚本运行器输出、查找特定窗口、发送虚拟键码、发送按键击、等待指定毫秒数、运行应用程序、获取环境变量字符串等。

WindowDispatch API允许获取窗口句柄、获取当前标题文本、更改窗口文本、更改焦点到窗口、显示/隐藏窗口、获取子窗口句柄、移动和重新定位窗口、设置窗口到前台、获取当前窗口的父窗口、移动并定位鼠标到窗口对象、移动鼠标到窗口客户端位置并可选地模拟左键点击、移动鼠标到窗口客户端位置并可选地模拟右键点击等。

ScriptRunner示例

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

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通信的Socket API)、HookImportFunction.h和cpp(PJ Naughter的Hook Import函数)。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485