Upload
leona-booth
View
226
Download
2
Embed Size (px)
Citation preview
Expect
Tool for Automation and Testing
Expect - Introduction
Unix automation and testing tool
Written by Don Libes Primarily designed as an
extension to the Tcl scripting language
Useable in interactive applications such as telnet, ftp, passwd, fsck, rlogin, tip, ssh, and others.
Expect – TCL* Basics
Everything is a command No Fixed Parser Case-Sensitive Explicit Expression Evaluation
– set a 5 a = 5– set b a+2 b = a+2– set c [expr $a+2] c = 7 (Note: $ for variable substitution)
Simple variables are strings of arbitrary length Real & Int cast to real Non-numeric string and real/int cast to string Built in Lists Standard flow control structures (while, if, etc.) String manipulation with Regular Expressions Procedures – arguments can be passed by value or reference*Tool Command Language
Expect – The Programming Language
Extension of TCL, so the syntax is TCL syntax Basic command set
– expect– send– spawn– Interact
Regular Expression pattern matching “Glue” to combine separate executables
Expect – Pros / Cons
Pros– Built on existing system tools, so learning
curve is small.– Extensive support from corporate entities*
*Silicon Graphics, IBM, HP, Sun, Xerox, Amdahl, Tektronix, AT&T, ComputerVision and the World Bank
– Numerous ports to other programming languages (Perl, Python, java, etc.)
Cons– Only useful for command line scripting– Cryptic syntax for those unfamiliar with TCL
(When do I use a $ again?)– Generally machine dependent tools are run
with Expect, so porting scripts cross-platform is not easily supported.
Expect – “Hello World!”
Start Expect with “expect” or write the script to a file and run > expect filename
send “Hello World!\n” expect “Hi\n”Putting it together Expect “Hi\n” { send “Hi World!\n” }
Expect – More Advanced
expect "hi\n" { send "Hi World!\n" } \
"hello\n" {send "Hello World!\n" } \
"bye\n" {send "Bye World!\n" }
Expect - Automation
spawn ftp $argvexpect "Name" { send "anonymous\r" } \ "name" { send "anonymous\r" }expect "assword:"send "[email protected]\r"interact
Expect - Others
Brute Force security Beer Chess Weather Rogue Hunt
Expect - GnuChess
# start things rollingspawn gnuchessset id1 $spawn_idexpect "White \\(1\\) :"send "random\r"send "depth 6\r"send "go\r"# read_first_moveexpect -re "My move is : (.*)\n"
spawn gnuchessset id2 $spawn_idexpect "White \\(1\\) :"send "random\r"send "depth 5\r"send $expect_out(1,string)
while {1} { expect { -i $id2 -re "is : (.*)\n" { send -i $id1 $expect_out(1,string) } -i $id1 -re "is : (.*)\n" { send -i $id2 $expect_out(1,string) } }}
Expect - Questions