Pregunta

He estado leyendo mucho RemoteWebDriver para selenio 2 con cuadrícula de selenio. Por el momento en que mis pruebas se generan en el Test() utilizando el [Test] Atributo.

tengo un TestCriteria Clase que lleno con información y luego uso el Selenium WebDriver 'PAGNO DE DESEJO DE PÁGINA DE PÁGINA' como una forma de 'controlar' cómo se ingresan estos datos en mis pruebas.

Entonces, tengo un objeto de criterio simple, por ejemplo:

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

Luego use esta información en un objeto 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
    }
}

Ahora, con este tipo de estructura, puedo crear un buen encadenamiento de métodos en mis pruebas una vez que tengo los datos de prueba, cosas como mi objeto de credenciales, datos que deben completarse en otras páginas, 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
     }

}

Todo esto está bien, pero ... ¿qué pasaría si quisiera cargar en estos datos de prueba de un objeto TestData serializado que puede deserializarse de XML?

También estoy interesado en usar RemoteWebDriver, que ya he usado, sin embargo, sigue siendo caumno en comparación con usar solo IWebDriver driver = new FireFoxDriver(); , sin embargo, ignorar estos asuntos, realmente me gustaría ejecutar una prueba de prueba más de una vez ... al mismo tiempo. Lo que me lleva a la cuestión de las pruebas paralelas.

Entiendo que Mbunit puede manejar esto, que es parte de Gallio, también había buscado Punit, que es una extensión de Nunit, pero aún tiene un largo camino por recorrer. Así que he decidido seguir con mbunit.

Esto me da la capacidad de ejecutar las huellas de prueba con el atributo [Parallelizable]. Entonces, si compilo mi proyecto y cargo en el proyecto DLL en Gallio TestRunner GUI, puedo ejecutar 4 casos de prueba al mismo tiempo, lo que a cambio abre 4 navegadores que ejecutan cada prueba al mismo tiempo, dando la capacidad de enfatizar el sitio mientras que las 4 pruebas se ejecutan. (Obviamente, esto se incrementaría para ejecutar varios cientos de navegadores en múltiples máquinas utilizando selenio Remotewebdriver con cuadrícula de selenio.

¿Alguien aquí conoce una forma en la que pueda cargar en una colección de objetos serializados XML? Generar nuevos objetos de prueba de prueba que puedan tener el [Parallelizable] Atributo agregado a la parte superior del accesorio de prueba y haga que todos se ejecuten al mismo tiempo después de cargar en archivos 1 - 10 .xml de A, por ejemplo: C: Testcase Directory?

Mi idea es tener todos estos cargados, y luego tener el manejo de la cuadrícula de selenio en las sesiones del navegador con nodos de selenio 1 - 5 que se ejecutan conectados al cubo de la cuadrícula de selenio principal.

Solo tengo una dificultad para aprovechar realmente la red de selenio cuando no puedo encontrar un marco que me permita generar un Test Fixture, que incluye un [SetUp] [TearDown] [Test] y la capacidad de establecer ciertas condiciones de prueba para probar atributos dependiendo de lo que se cargue desde el archivo .xml de prueba.

Por ejemplo, si un archivo .xml de prueba tenía un elemento que fallaba, ¿cómo puedo cargar este archivo ?xml y establecer un atributo en la [prueba] de mi testfixture para esto, o asignar la descripción de la prueba de prueba de la prueba a la prueba a la prueba a la prueba a [Test(Description = "")] atributo en tiempo de ejecución.

Ya conozco la funcionalidad de Selenium WebDriver, el patrón de diseño de objetos de la página, el Selenium EventFiringWebDriver Funcionalidad para capturas de pantalla.

¿Cómo puedo utilizar la capacidad de cargar en varios XML TestCaseData, generar nuevos objetos TestFixture después de que se hayan cargado?

Idealmente, me gustaría que la [configuración] de cada huella de prueba configurara el IWebDriver Debido a que ciertas URL serían diferentes dependiendo de lo que contendría el archivo testcase.xml, por ejemplo, de esta prueba es ejecutarse en un entorno UAT, entorno de prueba, un entorno de preproducción, necesito configurar esto antes de que se ejecute la prueba.

¿Alguien tiene un ejemplo básico que utilice estos conceptos principales con Selenium Grid/Selenium WebDriver con la capacidad de ejecutar estos accesorios de prueba en paralelo para utilizar la funcionalidad de la red de selenio de ejecutar múltiples navegadores?

Entonces, algo que estoy buscando en pseudo código.

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

Tal vez estoy haciendo este diseño de la manera incorrecta. ¿Alguna sugerencia por favor sobre la mejor manera de paralelizarlos?

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top