in

dotNet Umbria [DNU]

Il primo User Group in Umbria sul mondo .Net

Fabrizio Bernabei

  • Test automatizzato delle applicazioni WEB: Selenium o WatiN?

    Ci sono casi in cui nello sviluppo di una applicazione WEB si rende necessario (o perlomeno è una comodità in più) poter effettuare test di alto livello direttamente sulla UI stessa, magari perché si deve fare refactoring su un prodotto esistente e in un primo momento è necessario avere uno strumento che “garantisca” che le macro-funzionalità continuino a funzionare, oppure per testare (e poter ripetere nel tempo) il comportamento della UI in diversi ambienti.

    Per tutte queste cose esistono soluzioni specifiche (alcune che coprono diverse esigenze, altre un sottoinsieme perché per esempio non sono in grado di operare con tutti i browser) che permettono di definire dei test in grado di interagire con le pagine dell’applicazione web come farebbe un utente vero e proprio, cioè cliccando su link e bottoni e “navigando” l’applicazione in maniera completamente automatizzata.

    In precedenza ho usato con soddisfazione WatiN che in sostanza è uno dei framework/strumenti che permette di eseguire test “pilotando” l’applicazione web direttamente da codice C#. In sostanza si tratta di una libreria che mette a disposizione un insieme di classi che permettono di aprire il web browser, navigare su uno specifico indirizzo, verificare quando la pagina è caricata, verificare che contenga determinati elementi ed interagire con essi sotto forma di oggetti utilizzabili da codice. Il vantaggio di tutto questo poi è la possibilità di automatizzare queste operazioni ed includere in un test (fatto col nostro framework preferito) per eseguirlo quando necessario: ma uno snippet di codice vale più di mille parole Open-mouthed

       1: [Test]
       2: public void SearchForWatiNOnGoogle()
       3: {
       4:  using (IE ie = new IE("http://www.google.com"))
       5:  {
       6:   ie.TextField(Find.ByName("q")).TypeText("WatiN");
       7:   ie.Button(Find.ByName("btnG")).Click();
       8:   
       9:   Assert.IsTrue(ie.ContainsText("WatiN"));
      10:  }
      11: } 

    In questo periodo ho l’esigenza di mettere insieme dei test su un’applicazione WEB su cui sto lavorando e avrei potuto riutilizzare direttamente questo prodotto, ma incuriosito da una discussione di qualche tempo fa su UGIALT.net ho deciso di dare un’occhiata a Selenium che sulla carta è forse ancor più potente di WatiN e dispone dii strumenti evoluti per il suo utilizzo. Si descrive infatti come (testualmente dal sito web) “Selenium is a suite of tools to automate web app testing across many platforms”, un insieme di strumenti per automatizzare il testing di applicazioni web su diverse piattaforme. Vediamo un po’ di cosa si tratta…

    Il primo tool da provare è sicuramente Selenium IDE, un ambiente autonomo per la scrittura, l’esecuzione, la registrazione ed il debug di test realizzato sotto forma di plug-in per FireFox. Con questo strumento è possibile registrare una sessione di navigazione e rimandarla in esecuzione in modo del tutto automatico, o addirittura eseguire passo-passo i comandi registrati “ammirando” quello che succede nella finestra del browser. Ovviamente è possibile modificare, aggiungere o rimuovere comandi allo script sia attraverso l’interfaccia visuale (in sostanza una griglia dove ad ogni riga corrisponde un’azione a sua volta definibile come “comando da eseguire-elemento da utilizzare-valore da utilizzare”) sia attraverso il sorgente vero e proprio dello script. In merito a questo ultimo punto va specificato che lo script è rappresentabile in diversi linguaggi; per default l’IDE usa un banale HTML con al suo interno un elemento <TABLE> dove le righe contenute rappresentano i comandi da esguire. Dal menu Opzioni è poi possibile scegliere la visualizzazione dello script con un altro linguaggio (fra gli altri: C#, Java, PHP, Ruby) e anche modificare direttamente dall’editor il comportamento del test.

    A titolo di esempio lo stesso test visto prima per WatiN si traduce in Selenium (facendo uso solo dell’IDE con la registrazione automatica e riportando solamente il codice “saliente”) in:

       1: [Test]
       2: public void TheUntitledTest()
       3: {
       4:     selenium.Open("http://www.google.com/");
       5:     selenium.Type("q", "selenium");
       6:     selenium.Click("btnG");
       7:     selenium.WaitForPageToLoad("30000");
       8:     try
       9:     {
      10:         Assert.IsTrue(selenium.IsTextPresent("Selenium"));
      11:     }
      12:     catch (AssertionException e)
      13:     {
      14:         verificationErrors.Append(e.Message);
      15:     }
      16: }

    che nella sua incarnazione in HTML diventa

       1: <tr>
       2:     <td>open</td>
       3:     <td>www.google.com</td>
       4:     <td></td>
       5: </tr>
       6: <tr>
       7:     <td>type</td>
       8:     <td>q</td>
       9:     <td>selenium</td>
      10: </tr>
      11: <tr>
      12:     <td>clickAndWait</td>
      13:     <td>btnG</td>
      14:     <td></td>
      15: </tr>
      16: <tr>
      17:     <td>verifyTextPresent</td>
      18:     <td>Selenium</td>
      19:     <td></td>
      20: </tr>

    Ovviamente questa è solamente la punta dell’iceberg; ci sono ancora da vedere molte cose interessanti, a partire dagli altri strumenti ed in primis Selenium RC che permette di pilotare i test dal nostro codice e tanto altro ancora.

    Per ora come introduzione penso possa bastare ma nei prossimi giorni, di pari passo con l’esplorazione più approfondita del framework, aspettatevi nuovi post con approfondimenti ed un po’ di codice in più. Wink

  • Evento DotNetUmbria Visual Studio Team System. Promosso a pieni voti!

    Complice un fine settimana fuori e qualche bizza del server DNU risolta da poco (grazie Paolo Smile) scrivo con qualche giorno di ritardo dell’evento tenutosi venerdì scorso a Perugia.

    Per prima cosa un ringraziamento e tanti complimenti a Lorenzo che ha tenuta alta l’attenzione per tutto il pomeriggio in modo magistrale, nonostante il “pranzetto” non indifferente che ci siamo fatti “Dal mi’ cocco” pochi minuti prima dell’inizio! Il resto della comitiva era rappresentato dal “senoncifosselui” Andrea e da "Gastone" Marco (che anche questa volta si è portato a casa il premio a estrazione).

    Poi una nota sulla nuova location inaugurata per questo evento; un ringraziamento a Confindustria che ci ha messo a disposizione una sala molto accogliente ed idonea per questo e magari per i prossimi eventi.

    Per concludere un saluto a Matteo Emili che ho conosciuto di persona e ho scoperto essere un “seguace” di Lorenzo: ormai conosce VSTS quanto lui o quasi Tongue out.

    Per concludere un saluto a tutti i partecipanti che mi sono sembrati interessati come non mai agli argomenti trattati. In conclusione posso dire: evento promosso a pieni voti, ora al lavoro per quelli futuri!!!

  • Nuovo evento, nuovo ospite. E’ la volta di VS Team System!

    Fra una settimana esatta è in programma un nuovo appuntamento organizzato da DotNetUmbria. Questa volta si parlerà di Visual Studio Team System e a farlo sarà un ospite graditissimo oltre che preparatissimo come Lorenzo Barbieri (Developer Evangelist Microsoft Italia).

    Riporto brevemente l’agenda sintetica dell’evento che trovate in forma più dettagliata nell’apposita pagina qui:
    15.00 - 15.30 Introduzione a VSTS e TFS 2008 e 2010
    15.30 - 16.45 Introdurre TFS nella piccola azienda
    16.45 - 18.00 Profilazione, analisi, ottimizzazione del codice con VSTS Development Edition

    Ci sono ancora alcuni posti disponibili per chi volesse partecipare. La pagina per la registrazione la trovate all’indirizzo: http://dotnetumbria.org/eventi/Default.aspx?IdEvento=9

    Inoltre si pensava di fermarci per un aperitivo/cena per concludere la serata insieme a Lorenzo. Per chi fosse interessato pregherei di segnalare l’adesione lasciando una risposta sull’appopsita discussione del nostro forum: http://dotnetumbria.org/forums/p/373/740.aspx#740

  • [OT] Bug non riproducibile

    Questa vignetta è semplicemente SPETTACOLARE! Open-mouthed

    Fonte: xkcd

  • IE8 e asp:menu. Pace fatta :)

    Dopo il rilascio di Internet Explorer 8 qualcuno avrà notato che il controllo Menu di ASP.NET ha qualche problemino di rendering sul nuovo browser.

    Per correggere il problema è stato rilasciato un fix. Per ulteriori informazioni vedere direttamente alla fonte (Bertrand Le  Roy).

  • Evento ASP.NET MVC. Aperte le iscrizioni!

    Sono stati definiti gli ultimi dettagli per il Workshop Asp.Net MVC del prossimo 3 Aprile in cui Simone parlerà approfonditamente del nuovo framework recentemente rilasciato in versione definitiva.

    Il workshop si terrà all’Hotel Giò di Perugia quindi comodo per tutti i i “dotnettiani” del centro-italia e non solo.

    Ora sotto con la registrazione! Ci vediamo il 3 Aprile.

    P.S.: Grazie Andrea per la segnalazione Open-mouthed. Diciamo che per il momento questa versione alfa può andar bene ma c’è ancora da lavorare.

  • Disponibile anche Silverlight 3 Beta 1

    Visto che oggi è giornata di annunci e nuovi download, dopo il post su ASP.NET MVC 1.0 ora è la volta di Silverlight 3.0 Beta 1.

    Ecco tutto lo “scaricabile”:

    Microsoft® Silverlight™ 3 SDK Beta 1 download
    Microsoft® Silverlight™ 3 Tools Beta 1 for Visual Studio 2008 SP1: download
    Microsoft® Silverlight™ 3 Beta 1 Documentation: download

  • ASP.NET MVC RTM!

    Segnalato direttamente da Simone Chiaretta, è da poco scaricabile la versione finale di ASP.NET MVC.

    In attesa del prossimo evento in cui proprio Simone, autore del libro Beginning ASP.NET MVC verrà a trovarci per parlare in lungo ed in largo del nuovo framework, vale la pena effettuare il download e iniziare a dare un’occhiata.

    Vado a scaricare… Smile

  • Silverlight & WPF: tempo di concorsi

    Sembra proprio che Natale sia periodo di panettoni, regali e… concorsi.

    In questi giorni per chi vuole cimentarsi e mettersi alla prova nella scrittura di applicazioni/articoli sulle tecnologie Microsoft basate su XAML troverà pane per i suoi denti. Ecco infatti due interessanti iniziative:

    • Write and Win! contest – Christmas Edition
      SilverlightShow è uno dei portali di riferimento per lo sviluppo con Silverlight. Fino al 31 Gennaio chi volesse cimentarsi nella realizzazione di “qualsiasi cosa” in Silverlight e scriverci poi un articolo, può farlo e rischia di vincere premi interessanti sotto forma di licenze software e buoni acquisto su Amazon.
    • Inspire the world with just 10K
      Questo invece è una vera e propria sfida d’altri tempi! Lo scopo e realizzare un’applicazione il cui codice sia complessivamente minore di 10k. Ai nostalgici ricorderà sicuramente gli albori della programmazione in DOS quando la lotta sul filo dei bit era all’ordine del giorno Open-mouthed. In questo caso il contest è sponsorizzato da MIX 09 (l’evento MS che si terra a Marzo 09 a Las Vegas incentrato sullo sviluppo WEB) ed in palio ci sono accessi all’evento, carte visa con dollari da spendere a piacere Surprised e altro.

    Ora non rimane che rimboccarsi le maniche e scrivere qualche riga di codice fra un panettone ed un bicchiere di spumante!

  • Merry Christmas and Happy New Year


    Auguro a tutti un Felice Natale e un Sereno Anno Nuovo!

    Per allietare (si fa per dire Open-mouthed) questi giorni di festa ecco a voi la nostra performance da elfi. Non c’è che dire, sicuramente meglio in questa veste che in quella di sviluppatori!

    Per guardare il filmato in tutta la sua splendida bellezza basta cliccare qui (http://elfyourself.jibjab.com/view/kUzEcuqsdM6aM3q8#) e godersi lo spettacolo!
    Ma affrettatevi perché il video resta disponibile solo fino al 15 Gennaio 2009, a meno che qualcuno non proprio a posto con la capoccia voglia finanziare con una donazione l’acquisto per circa 4€ Smile.

     

    Buon Natale e Felice Anno Nuovo!

    P.S.: Come buon proposito per il 2009 spero di scrivere qualche post più interessante per la community, lo prometto!

     

     

     

    -
  • NHibernate, Entity Framework o altro? Un evento per scoprirlo…

     

    Venerdì prossimo è in programma il nuovo evento della community in cui si parlerà (o come dice qualcuno si faranno degli spiegoni) di accesso ai dati ed in particolare di ORM.

    Per chi è interessato (e per chi non lo è ma vuole solo venire a mangiucchiare qualcosa aggratis al coffe break :D) l’ingresso è libero e senza registrazione (chi utilizza facebook e lo desidera può comunque segnalare la sua adesione qui) quindi non ci sono scuse.

    L’agenda completa è consultabile qui; l’elenco delle sessioni sarà il seguente:

    15.00 – 15.30 Introduzione agli ORM (Simone Belia)
    15.30 – 16.15 ADO.NET Entity Framework: Come vincere La Guerra dei Mondi (in quaranta minuti) (Marco Poponi)
    16.15 – 16.30 Coffe Break
    16.30 – 17.15 ORM? NHibernate grazie (Matteo Mariucci)
    17.15 – 17.45 Benchmarking e valutazioni: come scegliere la strategia per il mio progetto? (Paolo Possanzini)
    17.45 – 18.30 Q&A

    Ci vediamo al Giò venerdì prossimo dalle ore 15.00 in poi.

  • Svelato l'ultimo "tassello" di Silverlight 2

    Fra gli innumerevoli annunci e rilasci durante la PDC che si sta svolgendo in questi giorni, oggi è toccato anche al Silverlight Toolkit, insieme di controlli aggiuntivi e temi per arricchire ulteriormente le applicazioni RIA scritte in SL.

    Contando fra gli altri anche la presenza dell'ottimo Silverlight Contrib sempre su Codeplex, direi che ora non manca più nulla... Smile

  • UG.NET... Benvenuti a Toscana ed Emilia Romagna

    Mi associo al caloroso benvenuto di Andrea ai due neonati user group .Net a noi vicini (DotNetToscana e DotDotNet), che si aggiungono alla "lista di centro" assieme a DotNetUmbria e DotNetMarche!

    Chissà che prima o poi non si possa organizzare un bell'evento "centrico", tecnologico ma soprattutto culinario. Tongue out

    Gli annunci più o meno sparsi qui, qui, qui e ancora qui.

  • Localizzazione lato client con ASP.NET Ajax

    Il framework ASP.NET Ajax implementa un sistema per la localizzazione delle applicazioni "lato client". Se abbiamo uno ScriptManager in una pagina, impostando l'attributo  EnableScriptLocalization a "true" abilitiamo questa funzionalità che in sostanza "serve" dei file javascript in base alla cultura corrente. Prendiamo ad esempio il codice seguente e supponiamo che venga eseguita su un PC con impostata la localizzazione in lingua inglese (en-US ad esempio):

       1: <asp:ScriptManager runat="server" ID="TheScriptManager" 
    EnableScriptLocalization="true">
       2:     <Scripts>
       3:         <asp:ScriptReference Path="~/js/Risorse.js" />
       4:     </Scripts>
       5: </asp:ScriptManager>

    Viene referenziato nello script manager il file Risorse.js, questo significa che il file in questione verrà inviato (o meglio la direttiva script..ecc verrà inserita nell'html prodotto dalla pagina) al client ql momento della richiesta della pagina. La particolarità è che, avendo abilitato l'apposita opzione dello ScriptManager (che per default è impostata a false) per la localizzazione, se nella posizione dove si trova il file js ne esiste una versione con nome Risorse.en-US.js, verrà servita questa in quanto corrisponde alla cultura correntemente impostata.

    In questo modo è possibile creare dei file js contenenti le risorse necessarie alla localizzazione in diverse lingue e ASP.NET Ajax provvederà in automatico ad inviarci quello corretto per la lingua in uso. Un esempio di utilizzo potrebbe essere il seguente, un file di risorse fatto in questo modo:

       1: Risorse = {
       2:     "Lingua" : "it-IT",
       3:     "testoBtnAnnulla" : "Annulla"
       4: };

    oppure in questo nella sua versione per la lingua inglese (con estensione .en-US.js)

       1: Risorse = {
       2:     "Lingua" : "en-US",
       3:     "testoBtnAnnulla" : "Cancel"
       4: };

    Nel codice javascript del client ci basterà scrivere qualcosa tipo:

       1: alert("La lingua corrente è: " + Risorse.Lingua);

    Per ottenere un alert contenente un messaggio che cambierà in base alla lingua correntemente selezionata.

    Fin qui tutto ok; qualche perplessità potrerbbe però nascere nel momento in cui la nostra applicazione debba gestire/memorizzare la cultura da utilizzare sul server. Già perche il sistema appena illustrato tiene conto in realtà della cultura corrente del client (dove gira il browser per intenderci) e non quella del server. Nella nostra applicazione invece potrebbe servire la cosa opposta perchè ad esempio la lingua impostata da utilizzare può essere impostata manualmente dall'utente attraverso l'interfaccia dell'applicazione e poi salvata nel profilo personale o in un cookie, e magari ci serve che sia lato server per localizzare altre parti/pagine dell'applicazione che "girano" soltanto sul server.

    In questi casi si può comunque continuare ad utilizzare la tecnica appena descritta, con pochi accorgimenti. Prima di tutto possiamo in questo caso non abilitare la localizzazione automatica degli script, semplicemente impostando a false l'attributo EnableScriptLocalization dello ScriptManager o non impostandolo affatto in quanto come detto per default non è abilitato.
    Ora possiamo sfruttare un'altra possibilità della localizzazione che consiste nel poter forzare per mezzo di un attributo la cultura con cui deve essere servito un particolare script dallo ScriptManager, semplicemente impostandola sul singolo riferimento per mezzo della proprietà ResourceUICultures come nell'esempio seguente:

       1: <asp:ScriptManager runat="server" ID="TheScriptManager">
       2:     <Scripts>
       3:         <asp:ScriptReference Path="~/js/Risorse.js" 
    ResourceUICultures
    ="it-IT" />
       4:     </Scripts>
       5: </asp:ScriptManager>

    In questo modo lo ScriptManager cercherà di utilizzare sempre e comunque un file scritto per la cultura italiana, indipendentemente da quella impostata sul client. Il prossimo passo per sfruttare questo meccanismo per il nostro scopo, è quello di fare in modo che il file di risorse javascript venga effettivamente inviato specificandone la cultura, ma quest'ultima sia impostata dal server prima della renderizzazione della pagina. Quello che serve quindi è semplicemente specificare il riferimento al file di risorse nello ScriptManager da codice a runtime impostandone di volta in volta la cultura da utilizzare (che ovviamente può cambiare anche da un postback all'altro.. l'importante è che per la cultura che si imposta ci sia un file js corrispondente, altrimenti le risorse non saranno inviate al client). Per farlo basta togliere dallo ScriptManager il riferimento al file Risorse.js dell'esempio ed aggiungerlo a runtime nel codice eseguito lato server, ad esempio nell'evento PageLoad della pagina in questo modo:

       1: protected void Page_Load(object sender, EventArgs e)
       2: {
       3:     // Riferimento al file di risorse da utilizzare
       4:     ScriptReference jsRisorse = new ScriptReference("~/js/Risorse.js");
       5:  
       6:     // la cultura viene impostata leggendola dal thread corrente,
       7:     // potrebbe essere diversa da quella del client
       8:     // e anche da quella di altri processi che girano sul server web
       9:     jsRisorse.ResourceUICultures = new string[1] 
    { System.Threading.Thread.CurrentThread.CurrentUICulture.ToString() };
      10:  
      11:     // il riferimento con la cultura specificata viene aggiunto allo
      12:     // ScriptManager. Se ad esempio la cultura impostata fosse en-US 
      13:     // è necessario che sia presente il file ~/js/Risorse.en-US.js
      14:     // perchè questo verrà effettivamente referenziato nell'HTML
      15:     TheScriptManager.Scripts.Add(jsRisorse);
      16: }

    E con questo abbiamo raggiunto il nostro scopo, cioè sul client verra servito il file js di risorse localizzato in base alle impostazioni memorizzate sul server, magari n el profilo dell'utente, e queste ultime possono essere diverse da quelle del PC client dove gira l'applicazione all'interno del browser.

     

     

    Technorati tags: , ,

     

  • Prova il microframework e vinci!!!

    Il titolo di questo post non è solo uno slogan da cartellone pubblicitario (anche se l'obiettivo è quello Smile) ma un'iniziativa "lanciata" dal team del Microsoft MF per incoraggiare gli sviluppatori a prendere parte al programma di beta della nuova versione 3.0.
    In sostanza, registrandosi al programma beta e scaricando l'SDK dal sito http://connect.microsoft.com/netmf entro il 31 Agosto, si riceve un "biglietto elettronico" ed il 15 Settembre verrà "estratto" il fortunato vincitore di un RicaVision Universal Remote Control (non so quanto utile, ma sicuramente un bell'oggettino)...

    Per i numerosi appassionati di Micro Framework che ci sono da queste parti, una buona scusa per studiarsi le novità della nuova versione di questo framework che, a prescindere dalle trovate marketing, promette veramente molto bene. Ecco una sintesi delle novità che saranno introdotte (tratte dal sito ufficiale):

    • Interop and native code linking
    • Touch screen and inking/gesturing support
    • USB device
    • SSL (secure sockets) for the TCP/IP stack
    • Visual Studio 2008 support
    • DPWS (Devices Profile for Web Services), including new codegen tools
    • 4bpp font support
    • Enhanced and more compatible serial/UART model
    File system*
    802.11 Wi-Fi infrastructure*
    Support for more cores and processor architectures*
    Publicly available Porting Kit for purchase* (separate product not included with the SDK)
    (Features noted with * will not be available in the first public beta)


    A questo punto non resta altro che provare...

More Posts Next page »
dotNet Umbria 2007-2008
Powered by Community Server (Commercial Edition), by Telligent Systems