Sistema de blog de práctica de prueba automatizado


prefacio

Este artículo es para escribir casos de prueba para el sistema de blogs que se ha hecho antes , y usar la herramienta de prueba automática Selenium4 y el marco de prueba de unidad Junit5 para escribir código para los casos de prueba del sistema de blogs.


1. Escribir casos de prueba para el sistema de blogs.

El sistema de blog consta de cuatro páginas, inicio de sesión, lista, detalles y páginas de edición. Para obtener detalles e implementación, consulte los artículos anteriores del sistema de blog .

inserte la descripción de la imagen aquí

2. Pruebas automatizadas

La creación de un controlador es una parte común de la prueba, por lo que se puede colocar en una clase y luego crear una clase de prueba para la página de inicio de sesión, la página de lista de inicio de sesión, la página de detalles de inicio de sesión y la página de edición de inicio de sesión, y finalmente crear una suite para seleccione la clase a probar.
inserte la descripción de la imagen aquí

La clase AutotestUtils incluye métodos para crear objetos y guardar capturas de pantalla durante la ejecución de la prueba.

    //1.创建驱动对象
    public static ChromeDriver createDriver() {
    
    
        if (driver == null) {
    
    
            driver = new ChromeDriver();
            //创建隐式等待
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
        }
        return driver;
    }
	//通过格式化时间戳来动态的获取截图名
    public List<String> getTime() {
    
    
        //文件格式 20230307-225600
        SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyyMMdd-HHmmssSS");
        SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyyMMdd");
        String fileName = simpleDateFormat1.format(System.currentTimeMillis());
        String dirName = simpleDateFormat2.format(System.currentTimeMillis());
        List<String > list = new ArrayList<>();
        list.add(dirName);
        list.add(fileName);
        return list;
    }
    /**
     * 获取屏幕截图,把所有的用例执行的结果保存下来
     */
    public void getScreenShot(String str) throws IOException {
    
    
        List<String> list = getTime();
        //dir+fileName
        String fileName = "./src/test/java/com/blogWebAutoTest/"+list.get(0)+"/"+str+"_"+list.get(1)+".png";
        File srcFile = driver.getScreenshotAs(OutputType.FILE);
        //把屏幕截图生成的文件放到指定的路径
        FileUtils.copyFile(srcFile,new File(fileName));
    }

1. Prueba de la página de inicio de sesión del blog

Escriba de acuerdo con el caso de prueba.

Utilizado principalmente en el conjunto de pruebas técnicas @Suite, organiza la secuencia de obtención de URL, inicio de sesión exitoso/fallo y cierre de recursos.

Nota: Al configurar varios conjuntos de datos para iniciar sesión (usando @CsvSource), primero debe borrar los datos en el cuadro de inicio de sesión.

BlogIniciar sesiónPrueba

//调用AutotestUtils中的createDriver
    private static ChromeDriver driver = createDriver();
    //测试登录页面的一些共同步骤
    //1.获取浏览器对象
    //2.访问登录页面的URL
    @BeforeAll
    public static void baseControl() {
    
    
        driver.get("http://121.4.74.140:8080/blogSystem2/blog_login.html");
    }

    /**
     * 检查登录页面打开是否正确
     * 检查点:主页 写博客 元素是否存在
     */
    @Test
    @Order(1)
    public void loginPageLoadRight() {
    
    
        driver.findElement(By.cssSelector("#username"));
        driver.findElement(By.cssSelector("#password"));
    }

    /**
     *检查正常登录是否成功
     */
    //@ParameterizedTest
    @CsvSource({
    
    "张三,123","王一,123"})
    @Order(3)
    public void loginSuccess(String name,String password) {
    
    
        //清空登录框,以防多组登录
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        //进行登录
        driver.findElement(By.cssSelector("#username")).sendKeys(name);
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#login-button")).click();
        //如果跳转到博客列表页,才算登录成功
        driver.findElement(By.cssSelector("body > div.container > div.container-right > div:nth-child(1) > div.date"));
        driver.navigate().back();
    }

    /**
     * 登录失败检测
     */
    @ParameterizedTest
    @CsvSource({
    
    "张三,1234"})
    @Order(2)
    public void loginFail(String name,String password) {
    
    
        //清空登录框,以防多组登录
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        //进行登录
        driver.findElement(By.cssSelector("#username")).sendKeys(name);
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#login-button")).click();
        //登录失败情况
        String expect = "用户未注册或用户名密码错误!登录失败!";
        String actual = driver.findElement(By.cssSelector("body")).getText();
        Assertions.assertEquals(expect,actual);
    }

2. Prueba de página de lista de blogs

Después de iniciar sesión con éxito, ingrese a la página de la lista de blogs y verifique si la página de la lista de blogs se muestra normalmente verificando si hay ciertos elementos en la página de la lista.
BlogListTest:

    /**
     * 登录列表页面可以正常显示
     */
    @Test
    public void listPageLoadRight() throws IOException {
    
    
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)"));
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)"));
        getScreenShot(getClass().getName());
    }

3. Prueba de página de edición de blog

En la página de redacción del blog:
en primer lugar, es necesario verificar si la página de redacción del blog se muestra normalmente. Al igual que la página de lista de blogs, se determina si la página de redacción del blog se muestra normalmente comprobando si existen algunos elementos específicos; en segundo lugar , verifique si el envío de la edición del blog es normal y publique un
blog. Al escribir un blog, debido a que el editor del blog usa un complemento de terceros, no puede usar sendKeys directamente para editar haciendo clic en ciertos elementos; finalmente,
después de publicar el blog, compare el título del último blog con el título al editar el blog, y son iguales. Luego, el blog se publica con éxito.

BlogEditarPrueba

    /**
     *  检查编辑页面可以正常打开
     */
    @Test
    @Order(1)
    public void editPageLoadRight() throws IOException {
    
    
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)"));
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)"));
        getScreenShot(getClass().getName());
    }

    /**
     * 检查编写博客页面可以正常编写提交
     */
    @Test
    @Order(2)
    public void editAndSubmitBlog() throws IOException {
    
    
        String expect = "测试博客可以编写并提交";
        driver.findElement(By.cssSelector("#blog-title")).sendKeys(expect);
        //因为博客系统使用的是第三方软件,所以不能直接使用sendKeys
        driver.findElement(By.cssSelector("#editor > div.editormd-toolbar > div > ul > li:nth-child(17) > a > i")).click();
        driver.findElement(By.cssSelector("#submit")).click();
        getScreenShot(getClass().getName());
        //获取最后一条博客的标题文本,检查是否和预期一样
        String actual = driver.findElement(By.cssSelector("body > div.container > div.container-right > div:nth-child(5) > div.title")).getText();
        Assertions.assertEquals(expect,actual);
    }

4. Prueba de la página de detalles del blog

La prueba de la página de detalles es similar a la prueba de la página de lista, excepto que los elementos seleccionados pueden ser diferentes durante la prueba. .

    @Test
    public void detailPageLoadRight() throws IOException {
    
    
        driver.findElement(By.cssSelector("body > div.container > div.container-right > div > h3"));
        driver.findElement(By.cssSelector("body > div.container > div.container-right > div > div.date"));
        getScreenShot(getClass().getName());
    }

    @AfterAll
    public static void driverQuit() {
    
    
        driver.quit();
    }

En caso de que se olvide la versión del controlador, escriba directamente la versión del controlador como una clase de prueba
QuitDriverTest

public class QuitDriverTest extends AutotestUtils {
    
    
    private static ChromeDriver driver = createDriver();
    @Test
    public void quitDriver() {
    
    
        driver.quit();
    }
}

inserte la descripción de la imagen aquí

Resumir

Aspectos destacados del código de prueba del sistema de blogs:
(1) Utilice las anotaciones proporcionadas por Junit5: evite generar demasiados objetos, lo que resulta en una pérdida de recursos y tiempo, y mejore la eficiencia de la ejecución automatizada.
(2) El objeto controlador solo se crea una vez, lo que evita la pérdida de tiempo y recursos causada por la creación repetida del objeto controlador para cada caso de uso.
(3) Parametrización de uso: mantenga los casos de uso concisos y mejore la legibilidad del código.
(4) Use suites de prueba: reduzca la carga de trabajo de los evaluadores y ejecute todos los casos de prueba a la vez a través de la suite.
(5) Se utiliza la espera: se mejora la eficiencia de la operación de automatización y se mejora la estabilidad de la automatización.
(6) Capturas de pantalla: es conveniente rastrear el problema y resolverlo.

Supongo que te gusta

Origin blog.csdn.net/qq_45283185/article/details/129348566
Recomendado
Clasificación