• 基于testng的自动化测试框架,自动化集成测试框架,自动本地集成测试框架,自动化单测框架


    父文章

       人人都是测试专家- testCase怎么写,才能完备._个人渣记录仅为自己搜索用的博客-CSDN博客_测试case怎么写

    基于testng的自动化测试框架,自动化集成测试框架,自动本地集成测试框架,自动化单测框架

    阿里云doom双引擎自动回归服务阿里录制回放平台(Doom)试用记录(未完待续) - 简书
    小公司

    最终选择 GoReplay

    tcpdump 大炮打蚊子

    go

    流量录制与回放技术实践_洞之蝉的博客-CSDN博客_流量录制回放

    如何通过GoReplay进行线上流量录制与回放 - 腾讯云开发者社区-腾讯云

    开源

    jvm-sandbox-

    repeater

    java流量录制回放平台探索_流量回放平台_不变的我的博客-CSDN博客
    爱奇艺

    ui自动化

    ocr能力.

    开源工具如Appium,airtest,以及uiautomator等,做很多工程服务化的搭建,进行二次封装,开发出贴合自身业务的自动化系统。

    效能篇 | APP的自动化录制回放系统 全云化处理新体验_51CTO博客_录制回放的自动化软件
    美团自研ui自动化- AlphaTest自动化测试在美团外卖的实践与落地_测试界的彭于晏的博客-CSDN博客

    客户端ui自动化调研

    Appium、网易游戏Airtest Project、SoloPi

    微信小程序的ui录制

    微信小程序自动化测试——录制回放_WXMiniTest的博客-CSDN博客_微信小程序 用例录制

    微信小程序自动化测试——录制回放-CSDN博客

    底层技术-可读性差应用层录制: Nginx插件-ngx_http_mirror_moudle、tcpdump, Java-sandbox  网络协议栈录制: goReplay、tcpCopy、tcpReplayC

    自动化测试之流量回放技术「建议收藏」 - 腾讯云开发者社区-腾讯云

    流量录制与回放技术实践_流量录制回放_洞之蝉的博客-CSDN博客

    vivo

    流量录制与回放在vivo的落地实践_流量录制回放_vivo互联网技术的博客-CSDN博客

    国产开源一款流量回放平台产品,无侵入线上流量录制和流量回放平台 - 腾讯云开发者社区-腾讯云

    OKR之剑·实战篇06:OKR致胜法宝-氛围&业绩双轮驱动(下)_vivo互联网技术的博客-CSDN博客



    Moonbox(月光宝盒)是一个无侵入的线上流量录制 和流量回放平台,沿用了jvm-sandbox-repeater的SPI设计,并提供了大量的常用插件,同时也提供数据统计和存储能力。通过Moonbox可以实现自动化测试、线上问题追踪、和业务监控等能力
    得物订单流量录制与回放探索实践 - 腾讯云开发者社区-腾讯云

    前端录制回放

    1. 新老代码端到端执行平台.

          新代码跑一遍, 老代码跑一遍. 两个结果进行验证. 本质上也是录制和回放,校验.

           优点是

             1. 可以检测兼容性数据.

                   1.1 老代码上线前的单测  + 老代码新代码上线前的回归 + 新代码上线前的数据, 三者比对.

                  1.2. 不需要通过review进行兼容性检测. 能自动在soft和strong间检测切换.   详见ddd[理论]领域驱动设计 DDD 是啥,cqrs是啥_个人渣记录仅为自己搜索用的博客-CSDN博客_ddd和cqrs

             中一节 " ext中的value bean不能随意重构. " 中的解决方案.

           2. 能够实现新增功能后的回归.

            传统的单系统执行 , 新的功能上线后, 基于录制的mock返回老的数据,可能导致新代码无法正常执行. 因为有了新的功能.  除非手动修正result信息.

    微信小程序录制和回放

        录制回放 | 微信开放文档

    2. SOFAACTS 1.0 acts

        框架适配 TestNg+Spring 的测试上下文环境,以 YAML 为数据载体并在此上构建数据模型驱动,具有契合快速互联网发展和复杂分布式金融系统特点的优良特性:

        模型驱动和标准执行引擎;

      精细化校验和数据的自动回写;

      具有灵活的可扩展性;

      用例可视化维护。 (缺点,内部已废弃) 2.

      我需要一个 话术

         录制回放框架三连问, 具有下文. 细化功能, 正常白话文.

    我开始阅读我们项目中使用微服务的Mountebank框架。根据我最近几天的学习,Mountebank主要基于使用服务虚拟化的概念测试微服务。 那么,Mountebank和Rest Assured之间的主要区别和相似之处是什么? 我不确定是否可以将Mountebank和RestAssured进行比较。

    还推荐了pact 

    3. 自研单测框架

        利用spring的拦截,自动化mock调用. 使用verify 而不是使用 mockito doanswer ,能支持 void

       录制自研框架实现,序列化,反序列化的新老代码兼容性问题 [理论]领域驱动设计 DDD 是啥,cqrs是啥_个人渣记录仅为自己搜索用的博客-CSDN博客_ddd和cqrs

      录制 (预跑反填)亮点: 

             1. 对string的解析成map或者properties,递归解析并替换成正则 等(不对string整体替换)

                    通用正则,path正则, 特定规则 ( Date today,StringDateStrToToday,messageId array)
             2. 对jsonStr和propertiesStr的每个item. 进行换行. 转成treeMap. 使用Comparetor接口的默认stringCompare方法 先split然后join成groovy代码. 利于新老代码录制进行对比.
            3. flag概念.  也作为case配置在xml或者yaml中 , groovy 中.  本质上就是xx.xx.xx 是正则,还是data还是today,还是lengStr. 或者自定义flag.  例如某个key 的flag是json,且里面又可以配置为flag. 

                或者放弃flag概念. 如亮点1, 自动flag

            check亮点. 对对string的解析成map或者properties,递归check

        4. 递归解析的fieldPath 带类型 很关键, 录制和回放校验时可以 配置tag . 也能支持复杂的json. 即properties里包含json里包含json .  如果没有路径,那么只能 整个字段自定义tag, 2022.10.10号的 act 2.0 内网版本 支持了, 区别是,需要整体都要手动写代码解析. 

         5. 利用 mockito的 verify 进行录制 预跑反填 ,而不是用 doAnswer  因为不支持void.  

              抽取通用 RpcCallMock , 反射调用 , 动态化mock. 只需要传参数 , 接口, 方法 和 templateKey即可.

         6. 拦截所有rpc调用,抛错.

       1. 操作集 (

            每次操作要含有

            1. 基于主键填充的信息
                    主键来自于上游链路上下文中. 本系统生命周期的东西都需要创立. 不建议通过insert一条当前操作需要的数据. 因为代码会经常重构. 上游的操作也会经常变更.
            2. 和本次操作自有的参数. 
            3. 下游调用的mock返回数据
            4. 接口请求校验数据和本次操作完的db数据校验.

         DB对应的表是哪个数据库,要有配置. db的表要配置主键和占位符, 这样通过上下文中的占位符可以进行查询,删除.避免数据越来越多.           

        2. 用例集. 将每个业务的操作集串起来就是本系统的用例集, 依赖业务的配置.  

       1.录制

            (可通过预跑反填,要确保参数不变,有些动态变化的通过正则进行匹配. 反填的字段通过_REGEX_ 或者 today等特殊字段替代.) 最难的就是这里. 把一个正则扩展成x个, 用于替换不能递归拆解的string类型. 正则一次转义, json一次转义, 再一次转义. 例如DB里的string. 变成字符串转义. 即^要替换成 \^ \要替换成\. 

            DB里的String解析. 要try json解析或者 properties解析成map进一步递归. 转义完再整体序列化成String.

             path很关键. 类型是弱下放. 一个包+简单类名

                    payReq_1(request_PayReq).payeeInfo[1](pay_Detail).amount

             配置共有三种. 优先级分别为, 1. 全局有效的正则,必须含有分组. 录制的时候append上_group(1)_ .  checker的时候和actual 正则取的group要一致. 2. 字段有效的正则 3.特定的非正则规则. 例如 字符串的yyyyMMdd ,字符串的currentMillions

     

    难点:

          1.groovy 输出时,每个object解析完需要生成 赋值语句 方法语句. 故需要输入上一个节点的类名称 才能赋值. escape和 1.1每次得到的语句都需要groovy 反转义 ^要替换成 \^ \要替换成\.  \n要换成\\n. 用正则的话\\\\代表 一个, 用普通replace的话两个\\代表一个. 

              异步: 每个方法都计数, 但要记录当前线程的次数. 故还需要知道现在的线程名和执行次数. 这个需要线程切换的时候记录下来. 整个执行的线程路径和第几次调用. 上个线程切换本次线程的第几次切换. 需改造线程切换的类.    

          难点2:  class.isArray  class.isPrimity guava.primitives.wrap 转成array Object[]

            正则String.replaceAll里的 regex和后面的replace都有各自的转义字符. replace后面一个仅 \和$ (group分组)需要转义 代码详见 java.util.regex.Matcher.appendReplacement

            santizer 去毒和escape区别?  所有用户文本都是纯文本. 文本即代码?

        难点3: 序号

         1. 在插入list之前,先把当前list的size得到. int currentIndex = getErrorData().size() + 1;

         2.   自动将子校验中的错误加上序号.

         

    玩转 Sanitizer,给你的 DOM 消消毒-技术圈

         难点3: value是jsonStr或者 properties的str. 如何进行替换. 遇到这个那么就序列化,递归,直到不可反序列化为止. 进行正则替换. 注意需要对用户配置的正则. 判断是否有^和$. 

             不要通过整个String进行替换. 因为你不知道替换的字符串的斜杆需要转义几次. json和properties的转义字符是不同的.

          再次序列化回去还需要关注原来是不是null值也序列化的. 有没有丢失 int,long的类型.转成了string. 原来可能是gson/fastjson现在序列化回去会不会有不同. Date类型的序列化.? 比较的时候Date类型应该如何比较. toString格式也不同,会不会出错?

       2.回放     

       2.  assert内录制/验证一体,通过record字段配置.

       3. 测试脚本使用groovy. 返回一个testDatea数据集. 内含配置,传参,结果,验证. 四大块. 录制最终也反填回groovy脚本. 通过testng得到用例名称, 结合约定得到文件名.  ( 约定大于配置 )

       需要一些配置. 哪些表使用什么jdbcTemplate 可以自动生成sql.  select * from xxx.   

      4. 将对象录制成map.

       特殊的字段回填成正则. 录制的时候需要填入 List 这样录制的时候变成.

       或者有对应的配置值. xx.xx.xx.gmtCreate="today"

       如果一个方法被调用多次,需要技术. 通过计数来确定request的name.. 并自动append到groovy文本后. 不需要填写标签. 自动生成标签.

    /** /
    /** /

    testData["request"]["xxRequest"]=xxxx(){}

    static def xxxx(){

    }

    /**  */
    /** /
    
    
    需要一个对象生成groovy 的生成工具类. 自动生成groovy代码. 记得进行groovy转义.  对特殊字符转义  例如 换行 \n 转义成 \n.  

     5. 验证的逻辑. 使用bean的field判断递归(使用beanUtils). 和try判断,

         是否是jsonStr, joinStr,joinKvStr, properties. 进一步递归. 然后遇到正则开头的str就正则判断.

       线程切换,线程异步,异步线程, 上下文 传递, threadLocal的处理_个人渣记录仅为自己搜索用的博客-CSDN博客

    4. WinTestNG

    基于TestNG开发的自动化测试框架,自动化测试平台后端接口参考项目:WinTestNG-platform-api

    概述

    • 适用于HTTP接口测试
    • 测试数据维护在DB
    • 支持Redis、Mongo、Mysql等操作
    • 支持测试模板设置,可抽象通用功能、
    • 全局变量设置
    • 支持断言
    • 使用FreeMarker作为模板引擎
    • 生成测试报告数据存储在DB
    • 涉及测试概念:测试用例、数据驱动、断言、测试报告、接口测试、自动化测试、测试模板
    • 建表语句: wintestng-core/src/resources/WinTestNG.sql

    WinTestNG: 基于testNG开发的自动化测试基础框架

  • 相关阅读:
    Linux驱动开发入门记录——(三)虚拟输入设备
    vs code 和 hbuilder 历史记录查询
    ReentrantLock的功能详解与理解
    Vue 插槽的理解与基础应用
    少儿编程竞赛概览
    final关键字
    抓包整理外篇fiddler————了解工具栏[一]
    【MySQL】MySQL索引的定义、分类、Explain、索引失效和优化
    StarRocks简介及安装
    【Vue3】Vue3中监视watch和watchEffect使用(图文+代码)
  • 原文地址:https://blog.csdn.net/fei33423/article/details/126394307