Odottaa

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 31. maaliskuuta 2015 tarkistetusta versiosta . tarkastukset vaativat 9 muokkausta .
Odottaa
Tyyppi työkalu interaktiivisten sovellusten automatisointiin ja testaamiseen
Kehittäjä Don Liebes
Sisään kirjoitettu C
Käyttöjärjestelmä Monialustainen ohjelmisto
uusin versio 5.45 (2013-05-02)
Lisenssi julkista
Verkkosivusto core.tcl.tk/expect

Expect on Unix -  automaatio- ja testaustyökalu, jonka Don Libes on kirjoittanut Tcl - skriptikielen laajennukseksi interaktiivisille sovelluksille, kuten telnet , ftp , passwd , fsck , rlogin , tip , ssh ja muut. Tk :n avulla interaktiivisia sovelluksia voidaan käyttää graafisen X11 - käyttöliittymän (GUI) kanssa .

Peruskäsitteet

Expect tukee säännöllistä lausekemoottoria ja perusohjelmointiominaisuuksia, joiden avulla yksinkertaiset komentosarjat voivat hallita tehokkaasti ohjelmia, kuten telnet , ftp ja ssh , joissa ei ole sisäänrakennettua komentosarjakieltä, makroja tai muita ohjelmointimekanismeja.

Tehokas käytettäessä verkkolaitteita - hallittujen (aktiivisten) verkkolaitteiden kokoonpanojen massapäivitys eriytetyllä komentojen suorittamisella (riippuen toimittajasta, ohjelmistoversiosta tai tyypistä (kytkin, reititin jne.)).

Esimerkkejä

Yksinkertainen komentosarjaesimerkki, joka automatisoi telnet-istunnon:

#!/usr/bin/expect ######################################## # ########################################## $remote_server - palvelin, käytetty # #$my_user_id - palvelimen käyttäjätunnus # #$my_password - palvelimen käyttäjän salasana # #$my_command - palvelimella suoritettava komento # # # # Oletetaan, että $etäpalvelin, $my_user_id, $my_password ja $my_command # # on alustettu komentosarjassa aikaisemmin. ################################################# _ #################################### # Avaa telnet-istunto etäpalvelimella ja odota käyttäjätunnuspyyntö. spawn telnet $ Remote_server odottaa "käyttäjänimi:" # Lähetä käyttäjätunnus ja odota salasanapyyntöä. send "$my_user_id\r" expect "password:" # Lähetä salasana ja odota komentotulkkikehotetta. send "$my_password\r" odottaa "%" # Lähetä komento ja odota seuraavaa komentotulkkikehotetta. send "$my_command\r" odottaa "%" # Tallenna tulos muuttujaan. Se voidaan näyttää tai kirjoittaa levylle. aseta tulokset $expect_out ( puskuri ) # Lopeta telnet-istunto ja odota rivin loppu (eof) merkkiä. lähetä "exit\r" odottaa eof

Esimerkkinä toinen komentosarja, joka automatisoi ftp-istunnon:

#!/usr/bin/expect # Avaa ftp-istunto etäpalvelimella ja odota käyttäjätunnuspyyntöä. spawn ftp $remote_server expect "username:" # Lähetä käyttäjätunnus ja odota salasanakehotetta. send "$my_user_id\r" expect "password:" # Lähetä salasana ja odota ftp-kehotetta. send "$my_password\r" odottaa "ftp>" # Vaihda binääritilaan ja odota ftp-kehotetta uudelleen. send "bin\r" odottaa "ftp>" # Sammuta syöttökehote. send "prompt\r" odottaa "ftp>" # Hae kaikki tiedostot lähetä "mget *\r" odota "ftp>" # Lopeta ftp-istunto ja odota tiedoston lopun (eof) erikoismerkkiä. lähetä "hei\r" odottaa eof
  • spawn - ohjelmakutsu
  • odottaa - odottaa käynnissä olevan ohjelman rivin tulosta (kirjaimellisesti: odotamme mitä käynnissä oleva ohjelma sanoo);
  • lähetä - lähetä tietoja tai komentoja kutsutulle ohjelmalle (se toimii kuin kirjoittaisit komentoja konsoliin itse)
  • sulje - lopeta käsikirjoitus

Käyttö

Expect toimii liimana liimaamaan olemassa olevat apuohjelmat yhteen. Pääideana on käyttää olemassa olevia työkaluja mieluummin kuin ratkaista ongelma Expectissä.

Yksi Expectin pääkäyttökohteista on kaupallisissa sovelluksissa. Monet näistä sovelluksista tarjoavat komentoriviliittymän, mutta tämä ei yleensä riitä komentosarjaan . Ne on suunniteltu tarjoamaan käyttäjälle hallintatyökaluja, mutta valmistajat eivät usein käytä rahaa täysimittaisen komentosarjakielen luomiseen .

Expect- skripti voi käynnistää komentotulkin, lukea ympäristömuuttujia, suorittaa joukon Unix-komentoja tiedon saamiseksi ja syöttää sitten saadut tiedot tuotteen komentorivikäyttöliittymään käyttäjän asettaman tavoitteen saavuttamiseksi. Kun skripti on etsinyt tietoja tuotteen komentoriviltä, ​​se voi tehdä älykkään päätöksen toimenpiteistä ja niin edelleen.

Joka kerta kun Expect-toiminto suoritetaan, tulokset sijoitetaan paikalliseen muuttujaan $expect_out. Näin skripti voi samanaikaisesti kerätä tietoja käyttäjälle lähetettäväksi ja tehdä loogisia päätöksiä jatkotoimista olosuhteiden mukaan.

Expectiä käytetään laajasti työkaluna apuohjelmien, ohjelmien ja sulautettujen järjestelmien testipakettien luomiseen. DejaGnu on Expectillä kirjoitettu testauspaketti. Sitä käytettiin gcc-kääntäjän testaamiseen ja se soveltuu hyvin etäkoneilla testaukseen (esimerkiksi sulautettujen järjestelmien kehittämiseen).

Mielipiteet

Vahvuudet

Expect voidaan suorittaa säännöllisin väliajoin käyttämällä cronia järjestelmän hallintatehtävien kapseloimiseen. Tämän käyttötavan tarkoituksena on käyttää Expectiä järjestelmän hallintatehtävien suorittamiseen käyttämällä samassa tietokoneessa olevia työkaluja. Oppimiseen ei tarvita lisätyökaluja. Jos ohjelmoija tuntee jo Tcl :n , vaihtaminen Expectiin on helppoa ja suhteellisen yksinkertaista. Koska ohjelman rakenteet ja syntaksi ovat samat, lisäominaisuuksia lisätään.

Yrityksillä on monia vaihtoehtoja käyttää Expectiä sisäisiin tehtäviin. Sitä käyttävät laajasti yritykset, kuten Silicon Graphics , IBM , Hewlett-Packard , Sun Microsystems , Xerox , Amdahl , Tektronix , AT&T , Computervision ja Maailmanpankki suorittaakseen sisäisiä automatisoituja testitehtäviä kehitystyössä, tiedostojen siirrossa, tilien hallinnassa ja verkkotestausprojektit..

Expect on siirretty Pythonille ja Perlille erilaisina laajennuksina. Osa Expect-komentoista on siirretty javaan ja on saatavilla SwitchTermJ :ssä (java-pohjainen pääteemulaattori). Proseduurien toteutus näissä moduuleissa on pohjimmiltaan tulkinta alkuperäisestä versiosta vastaavalla toiminnallisuudella. Kun ymmärrät käsitteen, voit tarvittaessa siirtää sen muille kielille.

Heikkoudet

Expect perii syntaksin Tcl :stä , joka eroaa muista komentosarjakielistä, kuten bash , csh ja Perl . Sinun on jatkuvasti muistettava, milloin muuttujaa edeltää "$"-merkki ja milloin ei. Expectistä on saatavilla versioita Perlille ja Pythonille niille, jotka tuntevat niiden syntaksin.

Toinen rajoitus on vaikeus siirtää Expect-skriptejä alustojen välillä. Esimerkiksi Expect-komentosarja, joka on kirjoitettu käyttämään useita Unix-apuohjelmia, ei välttämättä toimi, jos se suoritetaan Windowsissa . Aina kun mahdollista, ohjelmoijan tulisi löytää sovellus, jossa on komentoriviliittymä, joka tarjoaa samat tiedot, ja tämä edellyttää todennäköisesti lähetä/ odota-komennon vaihtamista, joka voi olla komentosarjan pääosa. Tätä ongelmaa ei esiinny, jos käytät tcl , perl tai python niiden posix- liitäntöineen tiedostojen avaamiseen (avaa/sulje) ja niin edelleen, ja myös kun käytät etävuorovaikutukseen tavallisia posix-apuohjelmia ( telnet , ftp jne.).

Joten Expect automatisoi työkalut, joissa on komentorivikäyttöliittymä , mutta ei apuohjelmia, joissa on graafinen käyttöliittymä . Vaikka Windows tarjoaa monia erilaisia ​​apuohjelmia, joista monilla on vain graafinen käyttöliittymä ja ne jäävät Expectin soveltamisalan ulkopuolelle. Graafiset sovellukset Windowsissa voidaan automatisoida käyttämällä apuohjelmia, kuten AutoIt .

Linkit

Ulkoiset linkit