Domanda

Ho letto molto RemoteWebDriver per selenio 2 usando la griglia di selenio. Al momento i miei test sono generati in Test() usando il [Test] Attributo.

Ho un TestCriteria Classe che riempirò con le informazioni e quindi utilizzo il modello di progettazione di oggetti "Pagina" del webdriver Selenium come modo di "controllare" il modo in cui questi dati vengono inseriti nei miei test.

Quindi, ho un oggetto di criteri semplici, ad esempio:

public class Credentials
{ 
    public string Username { get; set; } 
    public string Password { get; set; }
}

Quindi utilizzare queste informazioni in un oggetto LoginPage.

public class LoginPage
{
    [FindsByAnnotation]
    public IWebElement UsernameField { get; set; }

    [FindsByAnnotation]
    public IWebelement PasswordField { get; set; }

    [FindsByAnnotation]
    public IWebelement SubmitButton { get; set; }

    public HomePage Login(Credentials cred)
    {
         UsernameField.SendKeys(cred.user);
         // code for login and return new HomePage object
    }
}

Ora, con questo tipo di struttura, sono in grado di creare un buon metodo che concavo nei miei test una volta che ho i dati di test, cose come l'oggetto delle credenziali, i dati che devono essere compilati su altre pagine ecc.

[TestFixture]
public class TestFixture
{
     private IWebDriver driver;
     private TestCaseData data; // Which contains a Credentials object etc etc

     [SetUp]
     public void SetUp()
     {
         data = new TestCaseData() 
         { 
              Credentials = new Credentials() 
              { 
                   Username = "username", 
                   Password = "password"
              }
             // Other test case data objects can be populated here 
         };

         driver = new FireFoxDriver();
     }

     [Test]
     public void Test()
     {
          new LoginPage().Login(data.Credentials)
                         .NavigateToSearchPage()
                         .EnterSearchCriteria(data.SearchCritiera)
          // etc
     }

}

Va bene tutto, ma ... e se volessi caricare in questi dati di test da un oggetto testdata serializzato che può essere deserializzato da XML.

Sono anche interessato a usare RemoteWebDriver, che ho già usato, tuttavia, è ancora sfaldato rispetto all'uso solo IWebDriver driver = new FireFoxDriver(); , tuttavia, ignorando queste questioni, mi piacerebbe davvero eseguire una TestCase più di una volta ... allo stesso tempo. Il che mi porta alla questione dei test paralleli.

Capisco che Mbunit può gestire questo che fa parte del Gallio, avevo anche esaminato Punit, che è un'estensione della NUNIT ma ha ancora molta strada da fare. Quindi ho deciso di restare con Mbunit.

Questo mi dà la possibilità di eseguire i testfixtures con l'attributo [Parallelizable]. Quindi, se compilo il mio progetto e carico nel progetto DLL in Gallio Testrunner GUI, posso eseguire 4 casi di test contemporaneamente, che in cambio apre 4 browser che eseguono ogni test contemporaneamente, dando anche la possibilità di sottolineare il sito Mentre tutti e 4 i test sono in esecuzione. (Ovviamente questo sarebbe aumentato per eseguire diverse centinaia di browser su più macchine usando il selenio remotewebdriver con la griglia di selenio.

Chiunque qui sa un modo in cui posso caricare in una raccolta di oggetti serializzati XML, generare nuovi oggetti di fissaggio che possono avere il [Parallelizable] Attributo aggiunto alla parte superiore del dispositivo di prova e farli funzionare tutti contemporaneamente dopo il caricamento in file da 1 - 10 .xml da A, ad esempio: C: TestCase Directory?

La mia idea è quella di caricare tutti questi, quindi avere la griglia di selenio maneggevano le sessioni del browser con 1-5 nodi di selenio che corrono collegati al mozzo della griglia di selenio principale.

Sto solo avendo una difficoltà a trarre vantaggio davvero dalla griglia di selenio quando non riesco a trovare un framework che mi permetta di generare un Test Fixture, che include un file [SetUp] [TearDown] [Test] e la capacità di impostare determinate condizioni di test per test a seconda di ciò che viene caricato dal file .xml di TestCase.

Ad esempio, se un file .xml testcase aveva un elemento che era fallito, come posso caricare questo file .xml e impostare un attributo sul [test] di TestFixture per questo o mappare la descrizione .xml testcase del test sul test [Test(Description = "")] attributo in fase di esecuzione.

Conosco già la funzionalità di Selenium Webdriver, il modello di progettazione di Page, il selenio EventFiringWebDriver funzionalità per screenshot.

Come posso utilizzare la possibilità di caricare in diversi testcasedata serializzati XML, generare nuovi oggetti di TestFixture dopo che questi sono stati caricati?

Idealmente vorrei la [configurazione] di ogni testfixte per configurare il IWebDriver Poiché alcuni URL sarebbero diversi a seconda di ciò che il file TestCase.xml conterrebbe, ad esempio di questo test è quello di eseguire su un ambiente UAT, un ambiente di test, un ambiente di pre-produzione, devo configurarlo prima che il test sia eseguito.

Qualcuno ha un esempio di base che utilizza questi concetti principali con webdriver Grid/Selenium Selenium con la possibilità di eseguire questi dispositivi di prova in parallelo per utilizzare la funzionalità della griglia di selenio nell'esecuzione di browser di più.

Quindi qualcosa che sto cercando nel codice pseudo.

public class Main()
{
   // Load Testfixtures
   List<TestCase> testCases = Deserialise("\\Some\\FolderLocation");

   foreach(test in testCases)
   { 
      // create NEW testFixture, not [Test]
      // ability to attach parallel TestFixture
   }  
}

[Testfixture]
[Parallelizable]
public class TestFixture
{

     public TestCase testCase { get; set; }
     public IWebDriver driver { get; set; }

     [SetUp]
     public void SetUp()
     {
         if(testCase.Environment == "UAT")
         {
             driver = new FireFoxDrive()
             driver.NavigateTo("http://localhost/uat/Login");
         }

         // What if the testCase.ShouldPass is false?

         // How can i generate my [Test] with ExpectedException?

     }

      [Test]
      public void Test()
      {
          // code here with page object method chaining passing in testCase data objects  
      }
}

Forse sto andando in questo design nel modo sbagliato. Qualche suggerimento per favore nel modo migliore per parallelizzare questi?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top