TweetFollow Us on Twitter

Using Virtual User
Volume Number:12
Issue Number:9
Column Tag:Quality Assurance

Software Testing With Virtual User

A cost-effective proving ground for software

By Jeremy Vineyard

Introduction

It is continually frustrating to have new applications crash soon after being installed. Such products give the impression that insufficient work was done before shipping to ensure their quality.

In software companies today, it is standard procedure to test a product to ensure its quality and reliablity before shipping. Quality Assurance (QA) is a common name for such testing. QA is becoming increasingly important as applications take on ever-increasing size and complexity. There can be many thousands of variations in the ways a user might interact with a software product, and a QA tester must check these to verify that everything works correctly. So QA testers need the tools to get their job done effectively.

There are numerous ways to improve the software testing process, but one of the most effective has been the automated testing tool, whereby QA testers can set up specific tests and suites of tests to be run by the computer. This frees them from many hours of drudgery, thus saving both time and money by allowing them to refocus their energies on tasks that need more human interaction, spreading the range of the testing eventually completed. This also leads to more reliability in the software.

You don’t have to have a dedicated QA department to be able to test your products. Even if you are a small developer, it is a good idea always to verify the quality of your products before they are shipped, and automated tools can help. One of the most popular automated testing tools for the Mac is Virtual User.

What is Virtual User?

Virtual User (VU) is an automated testing tool that allows a computer to emulate a human user, performing actions such as clicking the mouse and typing keys. This computer acts as a host, and controls other computers just as a person would. One or more target computers act as agents receiving instructions from the host.

Figure 1. Virtual User

The VU environment consists of an application that compiles and run scripts. VU scripts must be edited separately in a text editor, such as MPW or BBEdit.

VU links computers together over an AppleTalk network. The minimum setup for a VU testing system is the VU software package and two computers (one host and one target).

VU is developed by Apple Computer, Inc., and is available for under $100 through most Macintosh developer catalogs. [It comes for free if you’re already subscribing to the ETO CD. Apple lists the price as $150 on their Web site, at http://dev.info.apple.com/TPC/VU.Datasheet.html, but says $79 in the printed APDA catalogue. Go figure. - man]

Limitations Of Virtual User

There are many things that an automated tool cannot do, and it is important to realize these limitations before planning your automated test suites. An automated tool cannot tell when something “looks right” on the screen. VU can’t tell you when an icon or window is pretty or ugly or misaligned.

VU is fairly unintelligent. You can tell it to “Move window ‘My Window’ to (x,y)”, but you can’t tell it to “Open icon for hard drive in Finder.” Also, if the target machine crashes, VU doesn’t know about it and will keep trying to run the script. The script can be paused and the machine restarted to allow the script to resume. Proper debugging techniques are essential for determining the events that led up to the crash. Some of these techniques will be explained later in the article.

Advantages of Virtual User

VU is most effective at highly repetitive tests that may have many variations. One example might be to select every control in every dialog in the application, making sure that each click produces the appropriate dialog, action, etc. This would be a very tedious task for a human to accomplish, but the computer doesn’t care about tediousness, making it the ideal tester for the project.

Another use of VU is to write a test that can be run after every internal build of a product (development, alpha, beta, final candidate) to verify that nothing was broken by the code changes made to the previous version. VU can also be used to set up automatic bug verification, by acting out the steps necessary to reproduce a bug. With this capability, the automatic bug verification can be run on every new release of a product to ensure that the bug is fixed and that it doesn’t sneak back into the code.

Understanding Virtual User Scripts

Each automated script has an entry point specified by the script statement in VU:

script TestControlsAndWindows()
begin
    # Do automated tests here.
end;

From then on, the VU script is much like the actions of a person. You tell it to click on windows or buttons, move the mouse, type keys, and more. Here is an example of a script that will test some menu items:

script TestMenuItems()
begin
    # Select the menu item “Show Script Window” from the “Windows” menu.
 select [menuItem title:"Show Script Window" 
 menu:[menu title:"Windows"]];

    # Wait 10 seconds for the window to appear.
 wait(10);

    # Verify that the “Script Window” window appears.
 if match [window ordinality:1 title:"Script Window"]
 println("The window 'Script Window' 
 opened correctly.");
 else
 println("ERROR! The window 'Script Window'
  did not open.");
end;

In addition to scripts, VU supports functions that act as extensions to the script. These are called tasks. A task is a procedure with a list of parameters and an optional return value.

task DoTheRightThing(var1 := "default value", var2)
begin
    # Do the right thing here.
 
    # Return a value (optional).
 return "result";
end;

VU collects information about the target computer’s environment using (as we have already seen) the match statement. The match statement looks for a specific environment element, using descriptor traits such as the element’s title or ordinality.

VU can “see” any menu or window and any control that is implemented with the Control Manager and stored in the window’s list of controls. However, because the List Manager doesn’t provide a standard API for accessing the contents of a list, VU cannot see a list or the items inside it. VU can also see dialog items such as user items, static text, edit text, icons, and pictures.

# Find the menu called “Testing”.
theMenu := match [menu title:"Testing"];

# Find the frontmost window.
theWindow := match [window ordinality:1];

The collect statement is similar to match in that it collects all the elements of a certain type into a list.

# Keep a list of all the open windows.
windowList := collect [window];

VU then interacts with the environment, using such keywords as select, drag, close, type, and click. VU accesses common Macintosh objects such as windows, buttons, scroll bars, and menus.

# Select the menu item.
select [menuItem title:"Show Clipboard" 
 menu:[menu title:"Edit"]];

# Move the window.
drag [window title:"Clipboard"] relative:{30, 30};

# Type characters into the window.
type keystrokes:{"This is some text"};

# Select a button.
select [button title:"OK"];

# Close the window.
close [window ordinality:1 title:"Clipboard"]!;

Tip: If possible, implement your application windows as modeless dialogs. VU recognizes the user item element in a dialog, allowing user items to indicate to VU where non-standard user interface elements are located.

Debugging Virtual User Scripts

VU provides a log file feature, by which information from within the script can be written out, providing the scripter with information about the current run-time state of the script. One of the most effective ways to debug an automated script is to log with the println statement anywhere anything important happens or changes. (The {} syntax substitutes the actual values of the variables for the variable names in the string.)

task MyTask(var1, var2, var3)
begin
 println("MyTask({var1}, {var2}, {var3})");

 println("Starting batch processing.");
 StartBatchProcessing();
end;

Tip: Because there is no type checking in VU, it is a good idea to log the parameters that are input into every task to make sure that the correct values were passed.

Extending Virtual User with Libraries

One of the most useful features of VU is the ability to split commonly used tasks into reusable files called libraries. To use all of the tasks in a library, the Libraries statement is used as shown:

# This statement makes all the tasks in the file called “Special Tools.vulib” 
# accessible to this script.
Libraries "Special Tools.vulib";

Libraries are commonly used to group tasks with common actions into smaller and more manageable files, such as Finder Tools.vulib, My App Tools.vulib, etc.

Tip: Because large projects may have dozens of library files, it is a good idea to establish a naming convention for both the names of the library files and the names of the tasks within the files. One might, for instance, append “Tools.vulib” to the name of every library file, and use a unique two-letter prefix for every task in the library.

# This task is in the library “Finder Tools.vulib”.
task FT_EjectDisk()
begin
    # Eject the disk with a command-key combination.
 pressKey keystrokes:{commandKey};
 type keystrokes:{'E'};
 releaseKey keystrokes:{commandKey};
end;

Extending Virtual User with Globals

Another useful feature of VU is support for global variables. To declare a global variable, simply place the global keyword before the variable name when you define it.

# Once this variable is defined, it can be accessed from anywhere.
global gMyGlobal := 1000;

To access a previously defined global variable, again attach the global keyword before using the variable.

Here is an example of how using global variables can save considerable time and effort. This script:

task MA_DoThis(appVersion := '1.0', var1, var2, var3)
begin
end;

task MA_DoThat(appVersion := '1.0', var1, var2)
begin
end;

script MyScript()
begin
 MA_DoThis('1.0', 10, 20, 30);
 MA_DoThat('1.0', "test", "do");
end;

can be simplified to this:

task MA_DoThis(var1, var2, var3)
begin
    # Now the variable ‘gAppVersion’ is using the global value.
 global gAppVersion;
end;

task MA_DoThat(var1, var2)
begin
    # Now the variable ‘gAppVersion’ is using the global value.
 global gAppVersion;
end;

script MyScript()
begin
 global gAppVersion := '1.0';

 MA_DoThis(10, 20, 30);
 MA_DoThat("test", "do");
end;

The advantages may seem small in this simple example, but once you start writing scripts with hundreds or even thousands of separate tasks being called, it can be difficult to pass variables several levels deep through the chain. Using globals allows variables to be accessed from anywhere within the script.

Tip: For applications whose user interface is changing rapidly, insteading of searching all of your scripts and libraries every time the text for a menu item, window, or button is changed, use a global variable that is declared at the beginning of every script, to hold the current state of the interface item.

# This task must be called before the globals can be used.
task MA_DeclareGlobals()
begin
 global toolsMenu := [menu title:"Tools"];

    # If the name of the paint tool menu item ever changes, we have only to
    # change it in one place, and all other scripts will be using the correct
    # value. This keeps us from having to replace the string everywhere it
    # occurs in all of the scripts.
 global paintToolMenuItem := 
 [menuItem title:"Painter" menu:toolsMenu];
end;

task MA_SwitchToPaintTool()
begin
 select global paintToolMenuItem;
end;

Extending Virtual User with External Tools

If you find that you have reached the limitations of the VU language, it is possible to write an external tool for VU. An external tool is an application that communicates with VU by sending and receiving Apple events. Because the external tool can be written in a more powerful language such as C/C++ or Pascal, the VU language can be extended. Templates and examples for creating external tools come with VU, eliminating much of the work.

Additional Features of Virtual User

VU has many of the features of a modern programming language, including if-else statements, for/while loops, list- and string-processing operators, and more.

VU has a built-in regular expression matching system that allows you to write scripts that match environment elements based on regular expressions, rather than simple strings. This is useful for multiple interface elements that may have similar names, but are not exactly the same. “Untitled-1”, “Untitled-2”, etc., can be represented by the regular expression “/Untitled- /”.

When running against multiple target machines, agents can communicate with each other by sending and receiving messages. This allows synchronization of events for software that can be run on multiple systems at the same time. This is useful for network software products that must be installed on more than one machine to communicate with one another.

The best place to learn about the features of VU is to look in the VU Language Reference manual. It is well written, and thoroughly describes the capabilities of the VU language.

Summary

Automated testing tools will never be able to entirely replace human testers in QA, nor should they. Most of what QA does is about discerning how a user might interact with a product, and a computer cannot always predict these actions or define a good way to test them. However, used properly, automated tools can greatly increase the productivity of QA, saving labor costs, increasing consistency, and shortening time to market. In today’s highly competitive environment, automated tools can provide you with the edge you need to succeed.

[There is a great deal of VU-related material on the Tool Chest editions of Apple’s Developer CD. For instance, in the May CD, which was the current Tool Chest CD as this issue went to press, the Testing & Debugging folder inside the Subject Index folder held aliases to various folders containing VU material, including a tutorial and a host of tools that extend VU’s abilities in valuable ways (note, in particular, Ivy, which allows VU to “capture and compare screen images”). - man]

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Final Cut Pro 10.6.4 - Professional vide...
Redesigned from the ground up, Final Cut Pro combines revolutionary video editing with a powerful media organization and incredible performance to let you create at the speed of thought.... Read more
iMovie 10.3.4 - Edit personal videos and...
With a streamlined design and intuitive editing features, iMovie lets you create Hollywood-style trailers and beautiful movies like never before. Browse your video library, share favorite moments,... Read more
Motion 5.6.2 - Create and customize Fina...
Motion is designed for video editors, Motion 5 lets you customize Final Cut Pro titles, transitions, and effects. Or create your own dazzling animations in 2D or 3D space, with real-time feedback as... Read more
iMazing 2.15.8 - Complete iOS device man...
iMazing is the world’s favourite iOS device manager for Mac and PC. Millions of users every year leverage its powerful capabilities to make the most of their personal or business iPhone and iPad.... Read more
VueScan 9.7.90 - Scanner software with a...
VueScan is a scanning program that works with most high-quality flatbed and film scanners to produce scans that have excellent color fidelity and color balance. VueScan is easy to use, and has... Read more
Compressor 4.6.2 - Adds power and flexib...
Compressor adds power and flexibility to Final Cut Pro X export. Customize output settings, work faster with distributed encoding, and tap into a comprehensive set of delivery features. Features:... Read more
Capture One 15.3.2.11 - RAW workflow sof...
Capture One is a professional RAW converter offering you ultimate image quality with accurate colors and incredible detail from more than 400 high-end cameras - straight out of the box. It offers... Read more
Vivaldi 5.4.2753.28 - An advanced browse...
Vivaldi is a browser for our friends. We live in our browsers. Choose one that has the features you need, a style that fits and values you can stand by. From the look and feel, to how you interact... Read more
Parallels Desktop 18.0.0 - Run Windows a...
Parallels allows you to run Windows and Mac applications side by side. Choose your view to make Windows invisible while still using its applications, or keep the familiar Windows background and... Read more
TechTool Pro 16.0.1 - Hard drive and sys...
TechTool Pro has long been one of the foremost utilities for keeping your Mac running smoothly and efficiently. With the release of this version, it has become more proficient than ever. Main... Read more

Latest Forum Discussions

See All

Turn-Based RPG ‘Avatar: Generations’ Sof...
Square Enix London Mobile, Navigator Games, and Paramount Consumer Products just announced that the turn-based RPG Avatar: Generations based on Nickelodeon’s Avatar: The Last Airbender is soft launching this month for mobile. Avatar: Generations is... | Read more »
Tower of Fantasy launches today and brin...
Level Infinite and Hotta Studio have announced the release of their very ambitious looking shared open world MMORPG Tower of Fantasy. With its cross-platform functionality between PC and mobile, it looks to be one to roll the dice on and enjoy at... | Read more »
‘Genshin Impact’ Version 3.0 Gets a New...
After HoYoverse released Genshin Impact (Free) version 2.8 on all platforms, the company has slowly been teasing the major upcoming 3.0 update. This update features the Sumeru region with many characters. While details on the update including a... | Read more »
Out Now: ‘Tower of Fantasy’, ‘Tightrope...
Each and every day new mobile games are hitting the App Store, and so each week we put together a big old list of all the best new releases of the past seven days. Back in the day the App Store would showcase the same games for a week, and then... | Read more »
SwitchArcade Round-Up: ‘Book Quest’, ‘Cl...
Hello gentle readers, and welcome to the SwitchArcade Round-Up for August 10th, 2022. In today’s article, we’ve got a little news about an update to a game I really like, a few new releases to summarize, and some sales to look at. A bit of a quiet... | Read more »
‘Pine Tar Poker’ is an Otherworldly Poke...
Developer BJ Malicoat, who put out the well-received and former Apple Game of the Day pick Downwordly in June of last year, is back working on another mobile game project called Pine Tar Poker, and it has caught my attention. Why? Because it’s a... | Read more »
Darkness Rises celebrates four years of...
Four years of uptime for a mobile game is akin to eternity, and this is exactly the milestone that Darkness Rises has reached. It is important for developers to keep updating to keep the game fresh, and NEXON has announced a massive anniversary... | Read more »
Keep Your Smatphone’s Case On When Using...
The original Gamevice was born as a sort of offshoot of the weird Wikipad gaming tablet/controller/hybrid thing way back in 2014. Interestingly, the first Gamevice controller for iOS only supported the iPad mini and launched in 2015, with versions... | Read more »
SwitchArcade Round-Up: A ‘Splatoon 3’ Ni...
Hello gentle readers, and welcome to the SwitchArcade Round-Up for August 9th, 2022. In today’s article, we’ve got some news about a Splatoon 3 Nintendo Direct, a review of QUByte’s Thunderbolt Collection, a single new release summary, and the usual... | Read more »
Orangepixel’s Pacifist Survival Game ‘Re...
Back in June we learned that long-time mobile developer Orangepixel, who also makes games for PC and consoles (including the Atari VCS!), would be bringing the unique survival game Residual to mobile devices sometime this year. Originally launched... | Read more »

Price Scanner via MacPrices.net

Apple has 24-inch M1 iMacs available starting...
Apple has 24-inch M1 iMacs with M1 CPUs (8-core CPU/7-core GPU) available today in their Certified Refurbished store for $1099 shipped. Their price is $200 off standard MSRP. Each iMac is in like-new... Read more
13″ M1 MacBook Airs in stock today for $799,...
QuickShip Electronics has open-box return 13″ M1 MacBook Airs in stock and on sale for $200 off MSRP on their eBay store right now, each with free express delivery. According to QuickShip, “The item... Read more
In stock today: Mac Studio models for up to $...
Apple retailer Expercom has Mac Studio models in stock today and on sale for up to $400 off Apple’s MSRP, depending on configuration. Their prices are the lowest price available for a Mac Studio from... Read more
Mac mini with M1 CPU and 512GB of storage on...
Amazon has the M1 Mac mini with a 512GB SSD in stock today on sale for $749.99 including free shipping. Their price is $150 off Apple’s MSRP, and it’s the lowest price available for this... Read more
Need a Mac or iPad for school? Get a free App...
Apple’s Back to School promotion for 2022 continues to run through September 26, 2022. As part of this promotion, Apple will include a free $150 Apple Gift Card with the purchase of any MacBook Air,... Read more
Apple Watch SE on sale for $50 off MSRP
Amazon has Apple Watch SE GPS models on sale for $50 off MSRP for a limited time, each including free shipping. Their prices are the lowest currently available for SE Watches: – 40mm Apple Watch SE... Read more
Save $310 on a 14″ 24-core GPU M1 Max MacBook...
Save $310 on 14″ MacBook Pros with 24-core M1 Max processors at Apple (32GB RAM/1TB SSD) with these Certified Refurbished models in stock today for $2789 in Space Gray or Silver colors. Regular price... Read more
14″ M1 Pro MacBook Pros available today at Ap...
Apple has Certified Refurbished standard-configuration 14″ MacBook Pros with M1 Pro CPUs available today for up to $250 off original MSRP, starting at $1799. Each model features a new outer case,... Read more
13″ MacBook Air with M2 CPU, in Starlight, on...
Apple retailer Expercom has the new Starlight 13″ MacBook Air with an M2 CPU (8GB RAM/256GB SSD) on sale for $1135.05, shipped, through August 12, 2022. Their price is $64 off Apple’s MSRP, and it’s... Read more
14″ M1 Pro MacBook Pro with 1TB SSD on sale f...
Expercom is offering a $200 instant discount on the 14″ M1 Pro MacBook Pro with a 1TB SSD through August 12, 2022. Their discount reduces the price of this configuration to $1999 shipped — the lowest... Read more

Jobs Board

Solutions Engineering Manager - *Apple* - S...
…in our Hardware and Advanced Solutions group leading and developing our Apple technical practice to increase revenue and profitability. The ideal candidate would Read more
Operations Associate - *Apple* Blossom Mall...
Operations Associate - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Read more
Cashier - *Apple* Blossom Mall - JCPenney (...
Cashier - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Blossom Mall Read more
Omnichannel Associate - *Apple* Blossom Mal...
Omnichannel Associate - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Read more
Sephora Beauty Advisor - *Apple* Blossom Ma...
Sephora Beauty Advisor - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.