博客系统自动化测试项目实践

Python+Pytest+Requests构建博客系统接口自动化测试实战指南 接口自动化测试是软件质量保障体系中的关键环节,它通过模拟客户端请求,直接验证后端API的功能、性能和稳定性。其核心原理在于编写脚本自动执行HTTP请求,并对响应结果进行断言,从而替代重复、易错的人工测试。这项技术的价值在于提升测试效率、保障核心数据交互层的可靠性,并能快速回归验证,尤其适用于Web应用、微服务等场景。本文聚焦于博客系统这一具体应用,详细阐述了如何利用Python+Pytest+Requests技术栈,从项目架构设计、请求封装、数据驱动到Fixture应用,构建一个可维护、可集成的自动化测试框 阅读详情

一.测试需求分析

1.功能分析

通过功能测试需求分析
在这里插入图片描述

2.非功能分析

非功能分析主要从:界面,性能,安全性,兼容性,可维护性等来分析

  • 界面
    布局、排版美观,设计符合当下时代。
    界面的按键和跳转能够正常使用。
  • 性能
    跳转页面不超过 3 秒。执行业务逻辑不超过 3 秒。
  • 安全
    防止用户数据泄露,预防sql注入,病毒危害系统
  • 兼容
    保证在不同系统(macOS,Windows),不同终端设备(PC,移动),不同浏览器上系统能正常运转
  • 可维护
    方便后续修复和扩展系统功能

二.制定测试方案(计划 + 策略)

测试范围以及测试点:
用户登录页面,注册页面,博客发布模块,博客删除模块,博客修改模块,博客主页模块。

测试方法: 自动化测试

测试所涉及的类型:功能,界面测试

三.编写测试用例

本次测试采用自动化测试主要对功能方面来进行测试用例的编写,通过前面对功能测试需求的分析,主要对六个功能模块来设计测试用例

在这里插入图片描述

四.执行自动化测试用例

自动化脚本如下:

package com.example.blog_test;

import lombok.SneakyThrows;
import org.assertj.core.data.Index;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
import org.openqa.selenium.*;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.springframework.boot.test.context.SpringBootTest;
import sun.security.util.Password;

import javax.swing.*;
import java.time.Duration;
import java.util.List;

import static java.lang.Thread.sleep;
import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest
public class ApplicationTest {
    /**
     * 测试登录模块
     */
    @Nested
    @Disabled
    public class LoginTest{
        @SneakyThrows
        @ParameterizedTest
        @CsvFileSource( files = "src/test/resources/TestSource/UserAcount.csv")
        void test(String name,String pwd)
        {
            Driver driver = new Driver();
            driver.MaxWindow();
            driver.get(PublicVariable.LoginUrl);
            //服务器性能太低 加载页面慢
            driver.Wait(5);
            //输入用户名账号
            WebElement UserName = driver.findElementByCss("#username");
            WebElement password = driver.findElementByCss("#password");
            UserName.sendKeys(name);
            password.sendKeys(pwd);
            //点击登录按钮
            WebElement button = driver.findElementByCss("#submit");
            button.click();

            //预期结果:跳转主页
//            WebDriverWait wait = new WebDriverWait(driver.getWebDriver(), Duration.ofSeconds(10)); // 设置等待时间为10秒
//            WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#app")));
            sleep(100);
            String CurUrl = driver.getUrl();
            assertEquals(CurUrl,PublicVariable.IndexUrl);
            //关闭窗口
            driver.quit();
        }
    }
    /**
     * 测试注册模块
     */
    @Nested
    @Disabled
    public class RegisterTest{
    }
    /**
     * 测试注销模块
     */
    @Nested
    @Disabled
    public class LogoutTest{
        @SneakyThrows
        @Test
        void test()
        {

            Driver driver = new Driver();
            //登录
            Tool.login(driver);
            //点击注销按钮
            WebElement LogOutBtn = driver.findElementByCss("#app > div > div > a:nth-child(8)");
            LogOutBtn.click();
            driver.confirm();
            sleep(1000);
            //预期结果: 导航栏 只有注册 登录 主页三个按钮
            List<WebElement> lists = driver.findElements("#app > div > div > a");
            assertEquals(lists.size(),3);
        }
    }
    /**
     * 测试博客发布模块
     */
    @Nested
    @Disabled
    public class ReleaseTest{
        @SneakyThrows
        @ParameterizedTest
        @CsvFileSource( files = "src/test/resources/TestSource/BlogDetail.csv")
       public void test(String title, String content)
        {

            Driver driver = new Driver();
            //登录
            Tool.login(driver);
            //获取导航栏元素列表
            List<WebElement> webElementList = driver.findElements("#app > div > div > a");
            //选取写博客功能元素
            WebElement target = null;
            for(int i = 0 ;i<webElementList.size();i++)
            {
                WebElement element = webElementList.get(i);
                if(element.getText().equals(Tool.Pub_blog))
                {
                    target = element;
                    continue;
                }
            }
            //进入博客发布页面 填写内容
            target.click();
            sleep(5000);
            WebElement Title = driver.findElementByCss("#add_title");
            Actions actions = new Actions(driver.getWebDriver());
            //输入内容
            actions.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).sendKeys(content).perform();
            //输入标题
            Title.sendKeys(title);
            //点击发布
            List<WebElement> lists = driver.findElements(".title > button");
            for(int i  =0;i<lists.size();i++)
            {
                WebElement element = lists.get(i);
                if(element.getText().equals("发布文章"))
                {
                    element.click();
                    sleep(1000);
                    driver.reject();
                    break;
                }
            }
            //预期结果:跳转到主我的博客页面 主页面第一篇文章为刚发布文章
            sleep(1000);
            String CurUrl = driver.getUrl();
            String IndexTitle = driver.findElementByCss("#app > div > section > div.el-scrollbar > div.el-scrollbar__wrap.el-scrollbar__wrap--hidden-default > div > section > section > main > section > header:nth-child(1) > header:nth-child(1) > h2").getText();
            String IndexContent = driver.findElementByCss("#app > div > section > div.el-scrollbar > div.el-scrollbar__wrap.el-scrollbar__wrap--hidden-default > div > section > section > main > section > main > span").getText();
            assertEquals(CurUrl,PublicVariable.MyBlogUrl);
            assertEquals(IndexTitle,title);
            assertEquals(IndexContent,content);
        }
    }
    /**
     * 测试博客删除模块
     */
    @Nested
    @Disabled
    public class DeleteTest{

        @Test
        void test()
        {

            Driver driver = new Driver();
            //先写入一篇文章
            Tool.pub_blog(driver,"测试","测试");
            //删除改文章
            List<WebElement> elements = driver.findElements("#app .el-main .el-main");
            WebElement el = elements.get(0);
            List<WebElement> lists = el.findElements(By.cssSelector("button"));
            for(int i = 0;i<lists.size();i++)
            {
                WebElement btn = lists.get(i);
                if(btn.getText().equals("删除文章"))
                {
                    btn.click();
                    driver.confirm();
                    break;
                }
            }
            //预期结果: 展台显示暂无内容
            WebElement h1 = driver.findElementByCss("h1");
            assertNotNull(h1);
            assertEquals(h1.getText(),"暂无内容");
        }
    }
    /**
     * 测试博客修改模块
     */
    @Nested
    @Disabled
    public class ModifyTest{
        @SneakyThrows
        @ParameterizedTest
        @CsvFileSource( files = "src/test/resources/TestSource/BlogDetail.csv")
        void test(String title,String content)
        {

            Driver driver = new Driver();
            //先写入一篇文章
            Tool.pub_blog(driver,"测试","测试");
            //修改文章
            List<WebElement> elements = driver.findElements("#app .el-main .el-main");
            WebElement el = elements.get(0);
            List<WebElement> lists = el.findElements(By.cssSelector("button"));
            for(int i = 0;i<lists.size();i++)
            {
                WebElement btn = lists.get(i);
                if(btn.getText().equals("修改文章"))
                {
                    btn.click();
                    break;
                }
            }
            sleep(100);
            //输入修改内容
            WebElement Title = driver.findElementByCss("#add_title");
            Actions actions = new Actions(driver.getWebDriver());
            //输入内容
            actions.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).sendKeys(content).perform();

            new Actions(driver.getWebDriver())
                    .click(Title)
                    .perform();
            //输入标题
            actions.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).sendKeys(title).perform();
            WebElement submitEl = driver.findElementByCss("#submit");
            submitEl.click();
            sleep(100);
            driver.reject();
            String CurUrl = driver.getUrl();
            sleep(500);
            //预期结果: 页面跳转到我的博客页面 且标题内容与修改相同
            String IndexTitle = driver.findElementByCss("#app > div > section > div.el-scrollbar > div.el-scrollbar__wrap.el-scrollbar__wrap--hidden-default > div > section > section > main > section > header:nth-child(1) > header:nth-child(1) > h2").getText();
            String IndexContent = driver.findElementByCss("#app > div > section > div.el-scrollbar > div.el-scrollbar__wrap.el-scrollbar__wrap--hidden-default > div > section > section > main > section > main > span").getText();
            assertEquals(CurUrl,PublicVariable.MyBlogUrl);
            assertEquals(IndexTitle,title);
            assertEquals(IndexContent,content);

        }
    }
    /**
     * 测试博客主页模块
     */
    @Nested

    public class IndexTest{
        @Test
        void test() {
            //插入多篇文章
            Tool.pub_blog(new Driver(), "测试", "测试");
            Tool.pub_blog(new Driver(), "测试", "测试");
            Driver driver  = new Driver();
            driver.MaxWindow();
            driver.get(PublicVariable.IndexUrl);
            WebElement pageNum = driver.findElementByCss("#app > div > section > div.pagination > div > ul > li");
            //预期结果 分页数目大于1
            assertNotEquals(Integer.parseInt(pageNum.getText()),1);
        }
    }

}

被测试项目源代码链接:https://github.com/911400586/Blog_System
自动化脚本源代码:https://github.com/911400586/Blog_Auto_Test

五.编写测试报告

点击下方连接查看详细测试报告
博客系统测试报告

六.项目总结

测试用例根据用户需求分析来设计,而且有整体框架,算是比较详细全面。
有待改善的地方:
系统中有一些模块的功能是类似的,导致设计测试用例的时候重复,略显冗余。
系统中的一些功能模块,设计出的测试用例覆盖率较低。

Python开发者必做的5个实战项目 Python作为通用编程语言,在数据处理、Web开发和人工智能等领域有着广泛应用。其简洁语法和丰富生态使开发者能快速构建实用工具。理解Python项目开发流程对职业发展至关重要,从需求分析到技术选型再到代码实现,每个环节都考验开发者的工程能力。本文推荐的5个实战项目涵盖数据处理自动化、全栈博客系统、金融数据分析等典型应用场景,使用Pandas、Django等主流技术栈,既适合练手也能解决实际问题。这些项目能有效展示开发者的Python核心技能和工程思维,是构建技术作品集的优质素材。 阅读详情

相关推荐

【博客系统UI自动化测试报告】

本文介绍了基于SSM框架的个人博客系统UI自动化测试过程。测试主要针对博客系统的核心功能模块,包括登录、主页展示、博客创作、修改、查看、删除和退出等功能。使用Selenium工具进行Web自动化测试,搭建了Edge浏览器(138.0.3351.121版本)与Selenium 4.0.0、webdriver-manager 4.0.2的测试环境。报告详细展示了登录模块的测试用例设计,包括7种失败场景和2种成功场景的测试代码实现,通过元素定位、输入操作和断言验证等功能测试。

2501_90956005的博客 1187

【测试理论与实践】(十)Web 项目自动化测试实战:从 0 到 1 搭建博客系统 UI 自动化框架

本文介绍了基于Python的博客系统UI自动化测试框架搭建实战。首先明确了测试目标与范围,设计了14条覆盖登录、列表、详情、编辑等核心功能的测试用例。然后详细讲解了环境配置、目录结构设计,以及驱动管理、截图工具等公共模块的封装方法。接着分模块实现了测试脚本开发,包括正常/异常场景的处理和断言验证。最后提供了测试报告模板和执行入口脚本,实现一键运行所有测试并生成专业报告。该框架可直接复用,能有效提升C++ Web项目的测试效率,减少回归测试成本。

2301_79248256的博客 3629

别再只调包了!深入理解机器学习虚拟筛选中的分子指纹(ECFP/Morgan)

本文深入探讨了ECFP/Morgan分子指纹在机器学习虚拟筛选中的应用与优化策略。通过解析半径参数与比特长度的化学意义,揭示了如何通过参数调优提升模型性能20%以上,特别适用于药物发现领域的高通量筛选。文章还提供了工程实践中的参数优化策略和多指纹融合技术,为开发者提供从理论到实践的全面指导。

weixin_33704234的博客 829

Python 接口自动化测试实战:基于 pytest + requests 的博客系统全流程

基于Python技术栈(pytest、requests、PyYAML、jsonschema、allure等)搭建博客系统接口自动化测试项目

lqf_fighting的博客 291

使用CubeMX生成的项目在Keil下添加DSP库并包含arm_math头文件后报错的解决办法

问题描述: 最近使用Cube生成工程后,在Keil中使用Manage Runtime Environment即绿色小饼干按钮添加CMSIS的DSP库后编译报错。很有意思的是,STM32论坛上有外国朋友报告的同样的错误,都是30个Errors,5个Warning。 问题分析: 参考国内论坛某帖子(具体想不起来了),认为因该是Cube复制了库后,Keil从原始Packs目录下引用DSP库导致和Cub...

qq_32256951的博客 7001

新能源知识库(68)复叠压缩式热泵蒸汽系统介绍

复叠压缩式热泵蒸汽系统通过多级压缩技术将低品位热能转化为高品位蒸汽,在汽车电镀场景中实现了高效、精准的能源利用。随着超高温工质与智能联供系统的发展,该技术将深度赋能电镀行业的高质量可持续发展。​:±1℃控温保障镀层均匀性,提升产品良率;多台复叠热泵+储热装置(如纺织厂6台热泵)复叠热泵+余热回收+智能控制(化工厂案例)​:无燃烧设计契合汽车行业ESG目标。单台高温热泵机组(如92P型号)复叠压缩式热泵蒸汽系统以。67.4万元(↓22%)600万–1200万元。事故率 ↓90%​​。150万–600万元。

竹君子之家 1420

博客系统项目于自动化测试

一、项目简介1. 个人博客系统采用前后端分离的方法来实现,同时使用了数据库来存储相关的数据,同时将其部署到云服务器上。前端主要有四个页面构成:登录页、列表页、详情页以及编辑页,以上模拟实现了最简单的个人博客系统。其结合后端实现了以下的主要功能:登录、编辑博客、注销、删除博客、以及强制登录等功能。2.但是该项目没有设计用户注册功能,只能提前在数据库中存储用户信息后经过校验登录;并且用户头像不能自己设定,在进行前端页面的书写过程中已经将头像的图片写为静态了;

m0_74930873的博客 907

告别色差!用Python+TCS34725颜色传感器实现精准色彩还原(附完整校准代码)

本文详细介绍了如何利用Python和TCS34725颜色传感器实现专业级色彩还原方案。通过双阶校准法(白光校准和黑电平校准)和进阶的光照自适应技术,解决传感器原始数据不准的问题,并提供完整的校准代码和实战案例,帮助开发者实现ΔE<3的高精度色彩识别。

weixin_30836759的博客 209

基于Pytest的博客系统API自动化测试框架实践

接口自动化测试是通过程序模拟HTTP请求、校验响应状态与业务字段,替代重复手工回归的工程实践。其核心原理在于请求封装、断言校验、测试数据与登录态的生命周期管理,以及参数化驱动多组边界数据验证。借助Pytest的Fixture、parametrize和断言重写能力,可显著降低用例维护成本,提升接口回归效率与失败可追溯性。在博客系统后端场景中,用户注册登录、文章增删改查、评论及分类标签等API存在字段缺失、权限越权和异常参数等风险,尤其需要稳定的接口测试用例设计与测试报告支撑。围绕Pytest、API自动化测试

weixin_28677451的博客 233

吉林大学软件工程章节测验 第九章 答案+解析

4.【判断题】估算软件规模有代码行技术和功能点技术两种方法,其中代码行方法估计实现一个功能所需要的源程序行数,其不依赖项目所使用的开发语言,并且具有较好的直观性。3.【单选题】软件项目估算时,若计划人员对每个功能分别按最佳的、可能的、悲观的三种情况给出功能点估计值,记作a, m, b,则估算的期望值E的公式为( )。8.【判断题】在工程网络图中,如果在由起始事件至终止事件所构成的一条路径上,所有事件的最早时刻都和最迟时刻都相同,那么这条路径就是关键路径。4.【单选题】配置管理贯穿软件开发的整个过程。

m0_51459931的博客 1430

Shopee 虾皮API接口:商品详情采集的实践

随着电商行业的蓬勃发展,数据采集和分析在商业决策中扮演着越来越重要的角色。Shopee作为东南亚领先的电商平台,拥有大量的商品数据。通过Shopee的API接口,我们可以方便地获取商品详情,为数据分析和市场研究提供有力支持。本文将介绍如何使用Shopee API接口采集商品详情,并分享一些实践技巧。提供了丰富的数据接口,包括商品详情、店铺信息、订单数据等。通过API接口,开发者可以轻松地获取Shopee平台上的数据,进行进一步的处理和分析。Shopee API接口:商品详情采集的实践与技巧。

An4480的博客 1886

博客系统项目自动化测试

首先我们要先准备好驱动,这里我们采用懒汉模式,然后就是start()方法,该方法我们在所有的测试方法之前执行一次,然后还有close()方法用于关闭浏览器回收驱动,用于在所有的测试方法执行之前来执行。在博客编辑页我们主要对界面的文字是否正确进行测试,然后对我们的删除按键是否能正确的显示进行测试,还有对各个页面的跳转进行测试。在博客列表页中我们主要测试当前列表中的各个文字的显示是否正确,测试对其它页面的跳转是否正常。该模块用于测试我们的登录界面的一些文字信息是否正确。

m0_72235725的博客 272

《派出你的AI同事:WorkBuddy案例实战》055:客服工单自动分类与话术生成

客服工单自动分类与话术生成 —— 《派出你的AI同事:WorkBuddy案例实战》系列文章,配图已统一为规范示意图。

LuckyHanMo的博客 283

博客系统接口自动化测试实践:从接口梳理到框架落地

接口自动化测试是保障Web服务稳定性的关键手段,其核心原理是通过脚本直接模拟HTTP请求,绕过界面层对后端接口的输入、输出及异常行为进行系统性验证。相比纯页面测试,它能更早暴露漏传参、校验不严、字段不一致等数据与状态问题,显著提升回归效率。在博客、CMS等内容管理系统中,用户体系、业务实体和权限边界天然覆盖了接口测试的典型场景,非常适合作为框架落地的练兵场。基于Python Requests与pytest的组合,配合Allure报告,可以高效实现接口梳理、用例设计和数据隔离。文章围绕博客系统的登录、文章、评

weixin_31321361的博客 237

计算数列位置N的值

本文介绍了一个数列生成问题,要求根据输入的两个整数M和N生成特定规则的数列,并输出第N个位置上的数值。数列生成规则为:前M个元素为1到M;后续元素根据前M个元素是否重复来决定计算方式(求和或求差)。文章提供了C++、Java和Python三种语言的实现方案,均包含输入处理、数列初始化、循环计算和结果输出等步骤。各语言实现中均使用集合去重特性判断重复元素,并通过内置函数或自定义方法求取最大值和最小值。该问题主要考察基础编程能力,包括数组/列表操作、最值计算和重复元素判断等基本编程技巧。

面试高手的博客 654

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

软件测试知识点总结6-自动化测试实战1

博客系统自动化测试实战。

池央的博客 165

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

博客系统练手Web自动化测试:从框架搭建到稳定性优化完整指南

软件测试工程师在掌握功能测试后,通常会转向UI自动化测试,通过脚本模拟真实用户操作,提升回归测试效率。Web自动化测试的核心是元素定位、等待机制、用例组织与数据管理,这些能力需要在一个足够真实又不复杂的系统上反复练习。博客系统恰好覆盖登录、富文本编辑、分页、弹窗等典型场景,是公认的最佳练手项目。从Selenium与pytest的框架搭建开始,可以逐步学习目录规划、浏览器驱动配置、页面对象模式封装、数据驱动设计、断言策略与Allure报告生成,最终解决稳定性优化问题。无论你是自动化测试新手,还是希望重构测试代

weixin_42523670的博客 246

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

以博客系统为例,基于web项⽬进⾏完整的⾃动化实战报告

本项目为轻量级博客系统测试实践,覆盖登录鉴权、CRUD、富文本编辑等核心功能,设计12个测试点、10个自动化用例,通过Selenium实现端到端验证。测试发现4个问题,包括未登录删除异常与弹窗缺失,主流程全部通过,质量达标。后续将扩展性能压测、多浏览器兼容及CI/CD集成,提升自动化成熟度。

code_whiter的博客 263

博客系统接口自动化项目

理解业务需求,若是针对未参与的项目实施接口自动化,应与业务人员、产品经理等沟通,了解接口所支持的业务场景和业务逻辑。根据业务需求,明确接口需要实现的具体功能,如数据的获取、修改、删除等操作,以及接口的输入输出要求。用例数量越多,测试时间越长。在使用pytest进行测试时,有时候我们需要按照特定的顺序来运行测试用例,尤其是在涉及到测试用例之间的依赖关系时。饼图显示了测试的通过率为100%,这意味着所有34个测试用例都成功执行,没有失败的测试用例。博客系统中接口较少,可以针对所有的接口实施自动化测试。

weixin_70067429的博客 701

Tara 开源项目教程

Tara 开源项目教程 项目介绍 Tara 是一个开源项目,旨在提供一个高效、易用的工具集,帮助开发者快速构建和部署应用。该项目基于现代技术栈,支持多种编程语言和框架,适用于各种规模的项目。 项目快速启动 环境准备 在开始之前,请确保您的开发环境已经安装了以下工具: Git Python 3.x Node.js 12.x 或更高版本 克隆项目 首先,克隆 Tara 项目到本地: git clo...

gitblog_01145的博客 443

Django博客系统开发:MVT架构与核心功能实现

Django作为Python生态中最流行的Web框架之一,其MVT(Model-View-Template)架构模式为开发者提供了清晰的代码组织方式。通过ORM实现数据库操作、类视图封装业务逻辑、模板系统处理前端展示,这种分层架构显著提升了开发效率。在实际项目中,Django特别适合构建内容管理系统,如博客平台。以用户认证、文章管理、评论系统等典型功能为例,开发者可以深入理解Django的工作机制。通过select_related优化数据库查询、利用缓存提升性能、结合Markdown实现富文本编辑,这些工程

weixin_31421613的博客 290

Rails Templater 使用教程

Rails Templater 使用教程 项目介绍 Rails Templater 是一个用于快速生成 Rails 应用程序模板的工具。它基于 Rails 7,并提供了一系列的配置和脚本,以简化新项目的创建过程。该项目的主要目标是帮助开发者快速启动新的 Rails 项目,并提供一些预配置的功能和最佳实践。 项目快速启动 安装和使用 克隆项目仓库: git clone https://githu...

gitblog_00140的博客 542

个人博客系统测试项目实战:从环境搭建到自动化验证

近年来,随着个人技术分享与内容创作需求的增长,博客系统作为典型的内容发布平台,逐渐成为开发者记录学习、输出观点的重要载体。一套体验良好的博客系统,背后需要覆盖用户登录鉴权、内容展示、内容发布、内容管理等多个环节的稳定支撑。本次实践项目所面向的,是一套基于系统覆盖用户登录、博客列表展示、博客发布、博客详情查看与注销等核心场景,采用JWT 令牌(存于 localStorage,请求时通过User-Token头携带)完成鉴权,未登录访问受保护页面时由前端统一拦截跳转登录页。

2301_80005578的博客 225

软件测试之自动化测试——python+selenium实例

因为每个系统的web构造不同,元素不同、流程不同,所以没有一一将代码贴出,希望测试人员能举一反三,根据思路进行实践。

2601_96229461的博客 153

【自动化项目实战】博客系统

这节文章我们讲解一个实战项目——博客系统。首先我们需要熟悉项目、针对核心流程设计测试用例(手工测试用例)、将手工测试用例转换成自动化测试、部署

m0_72161237的博客 3830

PCBA功能测试治具,怎么配合产线效率?

测试治具定位要快,操作员放板取板省时间。压合方式选对,是手动压还是气动压,看测试节拍。定位不准,探针接触不良,误判率就上去。测试点密集的板子,探针布局要避开干涉。探针压力均匀,接触电阻稳定。探针磨损后及时更换,接触不良导致的误判,排查起来费时间。治具设计不好,测试慢、误判多,产线效率被拖住。在PCBA加工中,测试治具按产线节拍和测试项目来设计。测试程序跟治具探针定义对齐,别出现程序里有的点治具没引出。测试结果自动记录,不良品标识清楚,别混入良品。探针清洁、压合机构润滑、定位销检查,纳入日常维护。

PCBA_AIT的博客 218
上一篇: Spring之IoC
下一篇: vue3项目快速创建
1无名之辈1
博客等级 码龄5年 4674粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1无名之辈1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值