MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

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

2025-01-13 14:22 huorong 精选文章 5 ℃ 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;
  }

  判断出删除逻辑:

  ·单据状态=已完成,则不可删除

  · 单据已定计划,则不可删除

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

  · 删除单据和关联的通知,同时删除外接系统中对应的数据

  · 删除权限

  (二)分析需求后编写测试方案

  测试用例的编写笔者就不在这列出了,从测试方案中加以充实即可。

  四、小结

  通过初步的代码修改点分析,可以较快较准确地划出本次需求的影响范围,为测试用例的编写和执行提供指南。当然更深入的技术笔者还在继续探索中,后续再聊,欢迎大家一起分享和交流。

文末了,我邀请你进入我们的软件测试学习交流群,大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,了解测试行业的最新趋势,助你快速进阶Python自动化测试/测试开发,稳住当前职位同时走向高薪之路。

最后:

1)关注+私信回复:“测试”,可以免费领取一份10G软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!

2)关注+私信回复:"入群" 就可以邀请你进入软件测试群学习交流~~

Tags:@apioperation

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言