ITPub博客

首页 > 自动化运维 > 大规模网络运维 > 我的精准测试实战笔记,从这两个项目需求开始!

我的精准测试实战笔记,从这两个项目需求开始!

原创 大规模网络运维 作者:Atstudy技术社区 时间:2025-01-14 09:37:44 0 删除 编辑

         最近一直在思考如何提高测试效率,又要保证测试不遗漏,于是练习精准测试,边学习边记录,本文仅个人实践所得,尽管记录时经过仔细斟酌,仍有不足之处欢迎你们参与讨论。

   一、什么是精准测试?
  通常呢,针对开发的代码变更处以及关联的地方进行测试,我们称之为精准测试。百度查到,精准测试的核心特性是在黑盒测试过程中,由计算机软件去采集程序执行逻辑以及其他测试数据的过程,完成测试用例和代码的自动观联,将功能测试直接映射到代码层。
  精准测试的提出,实现了测试用例和代码的双向追溯,可以理解为这是一种把传统的黑盒测试与白盒测试相结合的模式,能引导测试有针对性的完善用例。
  实施精准测试需要结合源代码变更分析的技术手段,以提高测试的效率和准确性。与传统测试相比,精准测试通过智能化的测试指导,显著提高了测试的质量和效率。
  下面以参与的两个项目需求测试为引子,来初步探讨精准测试之道。
   二、子流程调整需求测试
  本次需求是对五家单位的审核增加子流程分支判断,单位总部走原分支A,下属单位走分支B。
  分析需求,画出简易流程图如下:
  进行测试用例编写:    查询数据表获取测试账号:
SELECT company_name,create_user
  FROM apply_Table
  where company_name like '%单位%'
  得到十个申请人的测试账号。
  对五家单位总部及下属单位,共计十个测试流程一一进行了测试,借用postman工具快速新建申请表单,简化了测试过程,但仍未达到精准测试的目的。
   小结:
  测试结束后进行复盘,在流程中心查看迁移条件可以得出,本次需求调整了五家单位,首先检查流程变量表达式中单位个数及单位ID是否符合要求,可以在冒烟测试阶段更精准地发现bug。
  然后从这五家单位中挑出一家进行重点测试正、反向审核流程:
   ·如果一家单位没有问题,则可以结束测试;
   · 如果一家单位有问题,则能推测剩余四家有问题的概率较大,复现bug并反馈。
   三、删除需求精准测试尝试
  由于需求就一句话“支持删除”,故而尝试从代码获取影响范围。
   (一)从代码中获取影响范围
   1.ApplyController.java
  @ApiOperation("删除")
      @GetMapping("/forcedDelByIdList")
      public Result forcedDelByIdList(@RequestParam("id") String id,@RequestParam("type") String type){
          return ApplyService.forcedDelByIdList(id,type);
  
  可判断影响范围在申请模块。
   2.ApplyParam.java
 @Data
  public class ApplyParam {
      @ApiModelProperty(value = "类型1:申请2:发通知3:定计划")
      private String type;
      @ApiModelProperty(value = "申请ID")
      private List<String> IdList;
  
  再根据关联函数,判断出涉及三种删除类型。
   3.ApplyVO.java
  @ApiModelProperty(value = "审核状态 1待提交,2审核中,3审核通过")
  private Integer Status;
  private String itemNum
  判断出影响范围涉及到表单状态。
   4.ApplyMapper.java
 public interface ApplyMapper extends BaseMapper<Apply> {
      List<ApplyVO> page(ApplyQueryParam ApplyQueryParam);
      List<ApplyVO> companyPage(ApplyQueryParam ApplyQueryParam);
      /**
       * 根据类型和分组统计数量
       * @param statistiaram
       */
      List<YearPlanExecuteVo> selectApplyCountGroupByTypeAndUnit(Statistiaram statistiaram);
      List<InfoVO> selectList(@Param("param") StatisticsVO param);
      ApplyVO apple(@Param("id") String id);
  
  可判断影响范围还有统计功能。
   5.InformationMapper.java
@Mapper
  public interface InformationMapper extends BaseMapper<MotifInformation> {
  
  可判断影响范围还在通知模块。
   6.SendToNotification.java
 @ApiModelProperty(value = "其他编码")
  private String ggGroupCode
  判断出影响范围还涉及到外接模块。
   7.ApplyServiceImpl.java
  @Transactional(rollbackFor = Exception.class)
      public Result forcedDelByIdList(String id,String forceType){
          String authorization = baseUtils.getAuthorization();
          UserPO userPO = userServiceFeignClient.getCurrentLoginedUser(authorization);
          //判断角色
          List<RolePO> loginUserRoles = userServiceFeignClient.getLoginUserRoles(userPO.getId(),authorization);
          boolean forcedDelAttendant = loginUserRoles.stream().anyMatch(item -> item.getCode().equals("force-delete"));
          if(!forcedDelAttendant){
              return Result.error("无权限,请联系管理员");
          }
     
          if(type > 1){
              Notification Notification = (Notification) map.get("Notification").get("Notification");
              if(Notification != null){
                  
                  String operType = "del";
                  NotificationParam param = (NotificationParam)map.get("Notification").get("param");
                  SendToNotification sendToNotification = DirectorServiceImpl.convertNotification(param, Notification.getId(), operType);
          }
     
          
          Apply Apply = (Apply) map.get("Apply").get("Apply");
          this.removeById(Apply.getId());
          return Result.success();
      }
        
                if(Plan != null)
                              Plan.setDelFlag(1);
                          PlanMap.put("Plan",Plan);                       
                      }
                  }catch (Exception e){
                      log.error("获取删除资源错误!");
                  }
              }else {
                  HashMap<String,Object> hashMap = new HashMap<>();
                  hashMap.put("date_type_log","审核完或已定计划不可删除");
                  map.put("dateTypeLog",hashMap);
              }
          }
          
      public List<InstanceVO> clearingProcess(String Id){
          List<InstanceVO> InstanceVO = new ArrayList<>();
          try {
              CommonResult res = sServiceFeignClient.getChildProcessesByBusiness(Id,baseUtils.getAuthorization());
              String code = JSON.toJSONString(res.get("code"));
              if(code.equals("200")){
                  InstanceVO = JSON.parseArray(JSON.toJSONString(res.get("data")),InstanceVO.class);
              }
          }catch (Exception e){
              e.printStackTrace();
          }
          return InstanceVO;
  
  判断出删除逻辑: 
   ·单据状态=已完成,则不可删除
   · 单据已定计划,则不可删除

   · 删除单据,同时删除业务流程(主流程、子流程、并行流程)

        · 可以到我的个人号:atstudy-js,可以免费领取一份10G软件测试工程师面试宝典文档资料。同时我邀请你进入我们的软件测试学习交流平台,大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,了解测试行业的最新趋势,助你快速进阶Python自动化测试/测试开发,稳住当前职位同时走向高薪之路。

   · 删除单据和关联的通知,同时删除外接系统中对应的数据
   · 删除权限
   (二)分析需求后编写测试方案
  测试用例的编写笔者就不在这列出了,从测试方案中加以充实即可。
  四、小结
  通过初步的代码修改点分析,可以较快较准确地划出本次需求的影响范围,为测试用例的编写和执行提供指南。当然更深入的技术笔者还在继续探索中,后续再聊,欢迎大家一起分享和交流。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70034708/viewspace-3064902/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2023-10-23

  • 博文量
    99
  • 访问量
    96500