# UnitAuto **Repository Path**: APIJSON/UnitAuto ## Basic Information - **Project Name**: UnitAuto - **Description**: 机器学习单元测试平台,零代码、全方位、自动化 测试 方法/函数 的正确性和可用性。本仓库为副本,请给原仓库右上角点亮 ⭐️ Star - **Primary Language**: JavaScript - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://github.com/TommyLemon/UnitAuto - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2020-01-18 - **Last Updated**: 2024-07-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

UnitAuto

☀️ 机器学习零代码单元测试平台

零代码、全方位、自动化 测试 方法/函数 的正确性、可用性和性能

使用文档 视频教程 在线体验

--- 机器学习零代码单元测试平台,零代码、全方位、自动化 测试 方法/函数 的正确性、可用性和性能。
用户包含 腾讯 IEG 互动娱乐事业群、腾讯 WXG 微信事业群、快手广告、某市值 4000亿+ 500 强巨头 等。 已被 互联网教育智能技术及应用国家工程实验室 收录。 https://github.com/TommyLemon/APIAuto/issues/19 image image image image image image ### 特点优势 相比 JUnit, JTest, Mockito, Mockk 等一堆 Compiling testing 工具:
1.其它工具需要每个方法都写一大堆测试代码,需要开发成本、需要解决测试代码的 bug、业务代码更改后需要同步修改测试代码等;
UnitAuto 不需要写任何代码,直接读取方法的属性,自动注入参数,拿到返回值和类成员变量,机器学习自动化校验。

2.UnitAuto 这种 Runtime testing 工具无需 Mock 环境(Application, Context 等),
更不用为 无法有效地 Mock 环境相关类、第三方登录未提供 Mock 支持 等而头疼,
只要被测方法满足 有 return 值、有 interface 回调、改变成员变量 field 这 3 点中至少一点就能测。 #### 腾讯内先后被 微信支付部门、IEG 工具开发组、CDG 金融支付组、IEG PC 游戏平台部 邀请分享了 * 零代码测试工具与实践(API•单元•UI) * 零代码开发和测试(API测试•单元测试•API开发) * 零代码开发和测试(API测试•单元测试•API开发) * 零代码开发和测试(接口测试•单元测试•接口开发) #### 质效无双线上技术访谈-零代码智能测试工具实践介绍-第11期 https://testwo.cn1.quickconnect.cn/vs/sharing/iiP8VK1C#!aG9tZV92aWRlby0xMQ== ![https://testwo.cn1.quickconnect.cn/vs/sharing/iiP8VK1C#!aG9tZV92aWRlby0xMQ==](https://user-images.githubusercontent.com/5738175/179578082-0c72a715-c9b3-49f7-bf1c-45f963c6eb4f.png)

### 原理说明 被测项目不需要写任何单元测试代码(逻辑代码、注解代码等全都不要),
UnitAuto 会自动生成测试参数,并执行方法,拿到返回值等进行校验。
泛型、接口等自动模拟,异步执行方法自动记录回调过程,都是零代码。

[UnitAuto-Admin](https://github.com/TommyLemon/UnitAuto/tree/master/UnitAuto-Admin) 是类似 [APIAuto](https://github.com/TommyLemon/APIAuto) 的机器学习零代码测试工具(查看、上传、执行、测试 后端项目中的方法等),
[UnitAuto-Java](https://github.com/TommyLemon/UnitAuto/tree/master/UnitAuto-Java) 提供扫描所有方法、执行某个方法两个 API (主要引入 [MethodUtil.java](https://github.com/TommyLemon/UnitAuto/blob/master/UnitAuto-Java/src/main/java/unitauto/MethodUtil.java) 这个类,里面已实现)。

##### 通过扫描项目中的可访问的 package, class, method 来生成和导入测试用例


##### HTTP 远程调用被测服务/App,转至内部 构造/获取 实例来 invoke 动态执行方法


##### 获取参数、成员变量等前后状态,拦截方法被调用过程并可视化展示


##### 通过简单配置自动调整参数组合,拿到返回结果后通过 前后结果对比 或 机器学习校验模型 来自动断言


##### 后端不再需要像以下示例一样编写和维护大量单元测试用例代码(逻辑代码、注解代码等):


##### 客户端可作为 HTTP Server 来为 UnitAuto 网页工具 提供远程调用的接口,效果同样:



### 示例项目 [UnitAuto Java 后端 Server](https://github.com/TommyLemon/UnitAuto/tree/master/UnitAuto-Java-Demo) 在线 [测试](http://apijson.cn:8081)
[APIJSON Java 后端 Server](https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONBoot) 在线 [测试](http://apijson.cn/unit/)
[UnitAuto Android 客户端 App](https://github.com/TommyLemon/UnitAuto/tree/master/UnitAuto-Android) 直接 [下载](https://github.com/TommyLemon/UnitAuto/releases/download/2.6.0/UnitAutoApp.apk) (第一次可能失败,返回报错 JSON,一般重试一次就可以)
[APIJSON Android 客户端 App](https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Android/APIJSONTest) 直接 [下载](https://github.com/TommyLemon/UnitAuto/releases/download/2.5.0/APIJSONTest.apk) (第一次可能失败,返回报错 JSON,一般重试一次就可以)

### 演讲视频 UnitAuto-机器学习自动化单元测试平台简介
https://www.bilibili.com/video/BV1Tk4y1R7Yo

UnitAuto-异步回调方法的零代码单元测试
https://www.bilibili.com/video/BV1kk4y1z7bW
其它 https://search.bilibili.com/all?keyword=UnitAuto
### 集成到被测项目 #### Java 后端 Server ##### 1.依赖 unitauto.jar 放到你 [启动 Application 所在项目的 libs 目录](https://github.com/TommyLemon/UnitAuto/tree/master/UnitAuto-Java-Demo/libs),然后 Eclipse Add to Build Path 或 Idea Add as Library
https://github.com/TommyLemon/UnitAuto/tree/master/UnitAuto-Java-Demo/libs

##### 2.依赖 unitauto-jar.jar 如果不打 jar/war 包,则可以跳过这个步骤。
依赖方式同步骤 1。
https://github.com/TommyLemon/UnitAuto/tree/master/UnitAuto-Java-Demo/libs
依赖后需要在 [Application static 代码块](https://github.com/TommyLemon/UnitAuto/blob/master/UnitAuto-Java-Demo/src/main/java/unitauto/demo/DemoApplication.java) 中初始化 ```java static { UnitAutoApp.init(); } ```
##### 3.提供接口给 UnitAuto 后台管理工具 Controller 提供两个 POST application/json 格式的 HTTP API,分别是 ``` /method/list 动态扫描方法,可以单纯接收入参并转发到 MethodUtil.listMethod(String request) /method/invoke 动态执行方法,可以单纯接收入参并转发到 MethodUtil.invokeMethod(String request, Object instance, Listener listener) ``` 参考 [DemoController](https://github.com/TommyLemon/UnitAuto/blob/master/UnitAuto-Java-Demo/src/main/java/unitauto/demo/controller/DemoController.java)

##### 4.配置环境相关类及自定义处理逻辑 拦截 [MethodUtil](https://github.com/TommyLemon/UnitAuto/blob/master/UnitAuto-Java/src/main/java/unitauto/MethodUtil.java) 类中的 INSTANCE_GETTER, JSON_CALLBACK, CLASS_LOADER_CALLBACK 等 interface 的回调方法,
可以支持获取 Context 等环境相关类的实例、转 JSON 对象时过滤特定类、其它自定义逻辑处理,参考 [DemoApplication](https://github.com/TommyLemon/UnitAuto/blob/master/UnitAuto-Java-Demo/src/main/java/unitauto/demo/DemoApplication.java)


#### Android 客户端 App ##### 1.依赖 UnitAuto-Apk 把 [UnitAuto-Apk](https://github.com/TommyLemon/UnitAuto/tree/master/UnitAuto-Android/UnitAuto-Apk) 导入到你项目 [app moudule 所在目录](https://github.com/TommyLemon/UnitAuto/tree/master/UnitAuto-Android),[settings.gradle](https://github.com/TommyLemon/UnitAuto/tree/master/UnitAuto-Android/settings.gradle) 中 ```groovy include ':UnitAuto-Apk' ``` [app moudule 目录](https://github.com/TommyLemon/UnitAuto/tree/master/UnitAuto-Android/app),[build.gradle](https://github.com/TommyLemon/UnitAuto/tree/master/UnitAuto-Android/app/build.gradle) 中 ```groovy dependencies { api project(':UnitAuto-Apk') } ```
##### 2.初始化 UnitAuto 在 [Application onCreate 方法](https://github.com/TommyLemon/UnitAuto/blob/master/UnitAuto-Android/app/src/main/java/unitauto/demo/DemoApp.java) 中初始化 ```java @Override public void onCreate() { super.onCreate(); UnitAutoApp.init(this); } ```
##### 3.提供 UnitAuto 管理界面入口 在 [AndroidManifest.xml](https://github.com/TommyLemon/UnitAuto/blob/master/UnitAuto-Android/app/src/main/AndroidManifest.xml) 中注册 [UnitAutoActivity](https://github.com/TommyLemon/UnitAuto/blob/master/UnitAuto-Android/UnitAuto-Apk/src/main/java/unitauto/apk/UnitAutoActivity.java) ```xml ``` 可在你项目的任何界面新增一个按钮或其它形式的入口,仅 DEBUG 模式下展示 ```xml