es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Selenium: La mejor forma de probar las características de una aplicación con 2 usuarios diferentes (NUnit, C#)

Estoy buscando una forma limpia de probar todas las funcionalidades en la página web con 2 usuarios diferentes.
Un usuario es el administrador y el segundo es un usuario normal.

Aquí está el resumen de mis pruebas de Selenium:

enter image description here

Como puedes ver, tenemos 3 funcionalidades diferentes en la página web:

  • UnlockInstruction
  • Tac
  • UploadCodes

Cada una de estas funcionalidades tiene su propia clase de prueba con su propio WebDriver para poder ejecutar las pruebas en paralelo.

Cada uno de estos archivos de prueba llama a la clase de inicio de sesión (Login Class) en el SetUp.

Lo que hace la clase de inicio de sesión es:

  1. Abrir el sitio web con “goToUrl”
  2. Obtener el nombre de usuario y la contraseña que se almacena en una herramienta de administración de contraseñas
  3. Utilizar Selenium para ingresar el nombre de usuario, contraseña y hacer clic en iniciar sesión
  4. Esperar hasta que se cargue la página después de iniciar sesión y volver a los métodos de prueba

Todo funciona perfectamente cuando lo pruebo para un usuario. Todas las pruebas se ejecutan en paralelo.

Ahora quiero probar todas las mismas funcionalidades con el usuario administrador.

La única forma que se me ocurre es simplemente crear otra clase de inicio de sesión que obtenga las credenciales del otro usuario y también copiar las 3 clases de prueba, de modo que las 6 pruebas se ejecuten en paralelo.

Pero en mi opinión, no es una solución limpia, porque estaría copiando 4 archivos que tendrían casi el mismo código 1:1.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para evitar duplicar las clases de prueba y crear una clase de inicio de sesión separada para el usuario administrador, podemos modificar la clase de inicio de sesión para que acepte un argumento para el nombre de usuario y la contraseña. Luego, en cada una de las clases de prueba de características, podemos instanciar dos objetos de inicio de sesión con las credenciales del usuario administrador y normal y utilizarlos adecuadamente en cada método de prueba.

    Aquí tienes un ejemplo:

    Clase de inicio de sesión:

    public class Login
    {
        private IWebDriver _driver;
    
        public Login(IWebDriver driver)
        {
            _driver = driver;
        }
    
        public void LoginUser(string username, string password)
        {
            // 1. Abrir el sitio web con goToUrl
            _driver.Navigate().GoToUrl("https://example.com/login");
    
            // 2. Utilizar una herramienta de administración de contraseñas para obtener el nombre de usuario y la contraseña
    
            // 3. Utilizar Selenium para ingresar el nombre de usuario, la contraseña y hacer clic en iniciar sesión
            _driver.FindElement(By.Id("username")).SendKeys(username);
            _driver.FindElement(By.Id("password")).SendKeys(password);
            _driver.FindElement(By.Id("loginButton")).Click();
    
            // 4. Esperar hasta que se cargue la página después del inicio de sesión y volver a los métodos de prueba
            WebDriverWait wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(10));
            wait.Until(driver => driver.FindElement(By.Id("loggedInHeader")).Displayed);
        }
    }
    

    Clases de prueba de características:

    [TestFixture("normal.user@example.com", "password123", "admin.user@example.com", "adminpassword456")]
    public class UnlockInstructionTests
    {
        private IWebDriver _driver;
        private Login _normalUserLogin;
        private Login _adminUserLogin;
    
        public UnlockInstructionTests(string normalUserUsername, string normalUserPassword, 
                                      string adminUserUsername, string adminUserPassword)
        {
            // Inicializar WebDrivers para pruebas paralelas
            _driver = new ChromeDriver();
            _driver.Manage().Window.Maximize();
    
            // Instanciar objetos de inicio de sesión con diferentes credenciales
            _normalUserLogin = new Login(_driver);
            _adminUserLogin = new Login(_driver);
    
            // Iniciar sesión en ambos usuarios
            _normalUserLogin.LoginUser(normalUserUsername, normalUserPassword);
            _adminUserLogin.LoginUser(adminUserUsername, adminUserPassword);
        }
    
        [Test]
        public void TestFeatureWithNormalUser()
        {
            // Realizar pasos de prueba para el usuario normal
        }
    
        [Test]
        public void TestFeatureWithAdminUser()
        {
            // Realizar pasos de prueba para el usuario administrador
        }
    
        [TearDown]
        public void Cleanup()
        {
            // Cerrar el controlador después de cada prueba
            _driver.Quit();
        }
    }
    

    Al pasar las credenciales como argumentos al atributo TestFixture e instanciar dos objetos de inicio de sesión en el constructor, podemos evitar duplicar las clases de prueba y mantener el código limpio. Además, al aprovechar las capacidades de prueba paralela de NUnit, podemos ejecutar las pruebas aún más rápido.

Comments are closed.