Question

J'ai fait beaucoup de lecture sur RemoteWebDriver pour le sélénium 2 à l'aide de la grille de sélénium. Pour le moment, mes tests sont générés dans le Test() en utilisant le [Test] Attribut.

j'ai un TestCriteria Classe que je remplit d'informations, puis utilise le «modèle de conception d'objets de page de page de sélénium comme un moyen de« contrôler »comment ces données sont entrées dans mes tests.

J'ai donc un objet de critères simples, par exemple:

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

Utilisez ensuite ces informations dans un objet 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
    }
}

Maintenant, avec ce type de structure, je suis en mesure de créer de bonnes méthodes dans mes tests une fois que j'ai les données de test, des choses comme mon objet d'identification, des données qui doivent être remplies sur d'autres pages, etc.

[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
     }

}

C'est bien bien, mais ... et si je voulais charger dans ces données de test d'un objet TestData sérialisé qui peut être désérialisé à partir de XML.

Je suis également intéressé à utiliser RemoteWebDriver, ce que j'ai déjà utilisé cependant est toujours floconneux par rapport à l'utilisation juste IWebDriver driver = new FireFoxDriver(); Cependant, en ignorant ces questions, j'aimerais vraiment exécuter un testcase plus d'une fois ... en même temps. Ce qui m'amène à la question des tests parallèles.

Je comprends que Mbunit peut gérer cela qui fait partie de Gallio, j'avais également examiné le punit qui est une extension de Nunit mais il a encore un long chemin à venir. J'ai donc décidé de m'en tenir à Mbunit.

Cela me donne la possibilité d'exécuter les TestFixtures avec l'attribut [Parallelizable]. Donc, si je compile mon projet et que je charge dans la DLL du projet dans Gallio Testrunner GUI, je peux exécuter 4 cas de test en même temps, ce qui en retour ouvre 4 navigateurs exécutant chaque test en même temps, donnant également la possibilité de souligner le site Alors que les 4 tests fonctionnent. (De toute évidence, cela serait augmenté pour exécuter plusieurs centaines de navigateurs sur plusieurs machines en utilisant le sélénium Remotewebdriver avec une grille de sélénium.

Quelqu'un ici connaît-il un moyen où je peux charger dans une collection d'objets sérialisés XML, générer de nouveaux objets TestFixture qui peuvent avoir le [Parallelizable] Attribut ajouté en haut du luminaire de test et les faire fonctionner tous en même temps après le chargement dans des fichiers 1 à 10 .xml à partir de A, par exemple: C: TestCase Directory?

Mon idée est de les avoir tous chargés, puis de gérer la grille de sélénium les séances de navigateur avec 1 à 5 nœuds de sélénium fonctionnant connectés au moyeu de grille Selenium principal.

J'ai juste du mal à profiter vraiment de la grille de sélénium quand je ne trouve pas de cadre qui me permet de générer un Test Fixture, qui comprend un [SetUp] [TearDown] [Test] et la possibilité de définir certaines conditions de test pour tester les attributs en fonction de ce qui est chargé à partir du fichier .xml TestCase.

Par exemple, si un fichier .xml TestCase avait un élément qui était échoué, comment puis-je charger ce fichier .xml dans et définir un attribut sur le [test] de mon test [Test(Description = "")] attribut au moment de l'exécution.

Je connais déjà les fonctionnalités du sélénium webdriver, le modèle de conception d'objets de la page, le sélénium EventFiringWebDriver fonctionnalité pour les captures d'écran.

Comment puis-je utiliser la possibilité de charger dans plusieurs TestCaseData sérialisés XML, générer de nouveaux objets TestFixture après le chargement?

Idéalement, je voudrais que la [configuration] de chaque TestFixture soit pour configurer le IWebDriver Étant donné que certaines URL seraient différentes en fonction de ce que le fichier TestCase.xml contiendrait, par exemple, par exemple, ce test est d'exécuter sur un environnement UAT, un environnement de test, un environnement de pré-production, je dois configurer cela avant l'exécution du test.

Quelqu'un a-t-il un exemple de base qui utilise ces concepts principaux avec Selenium Grid / Selenium WebDriver avec la possibilité d'exécuter ces luminaires de test en parallèle pour utiliser la fonctionnalité de grille de sélénium de l'exécution de plusieurs navigateurs.

Donc quelque chose que je recherche dans le code 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  
      }
}

Peut-être que je vais à propos de cette conception dans le mauvais sens. Des suggestions s'il vous plaît sur la meilleure façon de les paralléliser?

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top