Giter VIP home page Giter VIP logo

sofa-acts's Introduction

ACTS

Build Status codecov License

ACTS 是基于数据模型驱动测试引擎的的新一代测试框架,它的数据以 YAML 为载体,在此上构建基于数据模型的驱动引擎,适配 TestNg+SOFABoot 的测试上下文环境;支持高效、标准化构建用例,可视化编辑测试数据,精细化校验结果数据和自动清理 DB 数据,可以有效降低人工录入用例数据的成本,同时支持 API 重写提高测试代码的可扩展可复用性,提供特有注解提高测试代码编排的灵活性。

一、背景

保证代码质量、提高测试效率一直以来是测试人员关注的重点。目前现有测试框架依赖人工编写大量代码来组织测试数据、调度业务、控制校验点和清理DB数据,使得数据和代码耦合在一起,难以达到精细化校验,同时测试代码体积膨胀过快,可复用性降低,开发测试人员编写测试用例的效率难以提升。 为了提高测试用例编写效率和数据校验的完整、准确和精细化,蚂蚁金服基于 TestNg 研发了 ACTS 测试框架来解决上述问题。

二、功能简介

ACTS 提供了下面的能力:

2.1 数据可视化编辑

框架实现了测试数据与测试代码的分离,同时配套提供可视化编辑器 ACTS IDE,通过 ACTS IDE 可以快速地录入、查看和管理用例数据,有效减少重复性的数据准备代码。

2.2 精细化校验

为了提高方法返回值、DB 变更数据等期望数据值的填写效率和减少检验点遗漏,框架提供了预跑返填功能;在 ACTS 规则标签的标记下,实现期望 DB 数据、期望结果等精细化校验。

2.3 丰富的数据API

ACTS 数据自定义 API 接口封装于 ActsRuntimeContext 类里,可快速获取和设置自定义参数、用例入参、期望结果等,满足用户对用例数据的自定义操作;

2.4 自定义引擎各阶段

为了提高 ACTS 的灵活可扩展性,框架的 ActsTestBase 测试基类对外暴露各个执行阶段方法,包括 prepare,execute,check,clear 等,例如在测试类中,通过重写 process 方法可将整个测试脚本重新编排。

2.5 统一配置能力

配置文件中提供丰富的配置能力以定制化框架的个性需求。

三、快速开始

请查看文档中的快速开始来了解如何快速上手使用 ACTS。

四、如何贡献

在贡献代码之前,请阅读参与贡献来了解如何向 ACTS 贡献代码。 ACTS 的编译环境的要求为 JDK7 或者 JDK8,需要采用 Apache Maven 3.2.5 或者更高的版本进行编译。

五、感谢

ACTS 源于蚂蚁金服内部众多测试技术人员的经验总结,同时汲取了蚂蚁内部其他优秀白盒测试产品的设计优点,感谢这些工作者们的辛勤付出。

六、示例

ACTS 入门使用示例

七、文档

请参考 ACTS 用户使用手册

sofa-acts's People

Contributors

dependabot[bot] avatar duan-0916 avatar elseifer avatar louismillsdiffblue avatar nobodyiam avatar ujjboy avatar zhuyanli99 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sofa-acts's Issues

能提供eclipse的插件吗?

我们企业里面大量的公司产品是基于ecilpse平台上的二次开发的工具, 要是能够集成到eclipse中就好了。

通过对象模型生成的复合对象无法编辑修改

创建一个复合对象类ResultSupport,通过该类方法生成模型对象,修改测试脚本里选择通过模板创建自定义参数,保存后复合对象直接被设置为null

image

public class ResultSupport implements Serializable {
private static final long serialVersionUID = 1L;
private boolean success = false;
private SubmitAlipayOrderResultDTO dataObject;
private String code;
private String message;

public boolean isSuccess() {
    return this.success;
}

}

可用性差

2018.2 用不了,没有官网的一些选项。

几点建议

  1. 文档步骤能不能详细点呢?建议从初始化工程到一个用例run成功每一步都有描述
  2. 能不能有初始化的包名,启动类名自定义选项?
    image
  3. 一键模型化显示”Select Test Bundle“,步骤无法往下进行
    image
  4. FAQ太少了

白盒和我们要的单元测试的区别?

  1. sofa-acts 提供的,白盒和我们曾经做的的单元测试功能上主要有什么更强大功能呢?
  2. sofa-acts 的 yaml ,不支持无参构造函数的 参数的 实例化,必须使用代码形式的注入,显得不伦不类的。。。
  3. idea 2019。3 生成的没有 yaml
  4. sofa-acts 对静态方法没有很好的测试方法。比如我的静态工具类里边的静态方法,如何很好的测试。
  5. 我们用 acts 来做单元测试还是集成测试呢?
    因为我们当我们的很多个方法进行测试的时候,偏向于单元测试,这样子更快的编写,因为我们有时候,业务的链路比较长的时候,我们不断的,mock ,更加的难于写测试,可能

一个 public 方法,调用自身的很多个 private 方法。
这时候,我们能够 mock 掉自身的 private 方法,让我们,只关注于当前方法的 测试。这个功能如何去做呢?

  1. 如何 mock 掉工具类的静态方法。

生成测试用例报错

java.lang.NullPointerException
at com.alipay.acts.helper.core.dialog.GenScriptDialog.onOK(GenScriptDialog.java:184)
at com.alipay.acts.helper.core.dialog.GenScriptDialog.access$000(GenScriptDialog.java:48)
at com.alipay.acts.helper.core.dialog.GenScriptDialog$1.actionPerformed(GenScriptDialog.java:80)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at com.chrisrm.idea.ui.MTButtonUI$ButtonHighlighter.mouseReleased(MTButtonUI.java:383)
at java.awt.Component.processMouseEvent(Component.java:6550)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3325)
at java.awt.Component.processEvent(Component.java:6315)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4899)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4721)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
at java.awt.Container.dispatchEventImpl(Container.java:2283)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4721)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:766)
at java.awt.EventQueue.access$500(EventQueue.java:98)
at java.awt.EventQueue$3.run(EventQueue.java:715)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:739)
at java.awt.EventQueue$4.run(EventQueue.java:737)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:736)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:747)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:692)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:391)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
at java.awt.Dialog.show(Dialog.java:1077)
at java.awt.Component.show(Component.java:1681)
at java.awt.Component.setVisible(Component.java:1633)
at java.awt.Window.setVisible(Window.java:1014)
at java.awt.Dialog.setVisible(Dialog.java:998)
at com.alipay.acts.helper.core.action.GenScriptAction.actionPerformed(GenScriptAction.java:67)
at com.intellij.openapi.actionSystem.ex.ActionUtil$1.run(ActionUtil.java:260)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:277)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.lambda$actionPerformed$0(ActionMenuItem.java:292)
at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:283)
at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:107)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:282)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$0(ActionMenuItem.java:111)
at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:88)
at com.intellij.openapi.application.TransactionGuardImpl.lambda$submitTransaction$1(TransactionGuardImpl.java:111)
at com.intellij.openapi.application.TransactionGuardImpl.submitTransaction(TransactionGuardImpl.java:120)
at com.intellij.openapi.application.TransactionGuard.submitTransaction(TransactionGuard.java:121)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:111)
at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:524)
at com.intellij.ui.plaf.beg.BegMenuItemUI.access$300(BegMenuItemUI.java:35)
at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:546)
at java.awt.Component.processMouseEvent(Component.java:6550)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3325)
at java.awt.Component.processEvent(Component.java:6315)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4899)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4721)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
at java.awt.Container.dispatchEventImpl(Container.java:2283)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4721)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:766)
at java.awt.EventQueue.access$500(EventQueue.java:98)
at java.awt.EventQueue$3.run(EventQueue.java:715)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:739)
at java.awt.EventQueue$4.run(EventQueue.java:737)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:736)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:747)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:692)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:391)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

生成测试用例目录错误

生成的用例路径在 .idea 目录下,正确情况应该是应用目录。
环境:
1.spring boot
2.Gradle
3.多级子工程项目

同样的项目,已测试Maven下没有问题。

ACTS 一键初始化问题

环境信息:
使用IDEA 2018.2.2 版本

jdk版本:
C:\Users\Administrator>java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

安装开源的IDEA com.alipay.sofa.andromeda-1.0.0-beta.zip 插件
没有一键初始化ACTS 功能。

1

想问下ACTS IDEA 插件的源码是否有开源计划?

非常感谢。

生成DB表结构模板名称错误

问题1:
表名:xxx_123123123
实际模板名:xxx_.csv
期望模板名:xxx_123123123.csv

问题2:
生成的模板中的comment字段,没有获取到DB表的备注信息

环境:
maven:3.5
idea:201801
系统:windows 10

sofa-acts按照快速开始搭建测试 case 报错

##sofa-acts按照快速开始搭建测试 case 报错

你好,按照sofa-acts的框架准备和快速开始搭建之后,找到需要生成用例的接口,点击右键,点击生成测试用例之后,报NPE,
以下是 stack
java.lang.NullPointerException
at com.alipay.acts.helper.core.dialog.GenScriptDialog.onOK(GenScriptDialog.java:184)
at com.alipay.acts.helper.core.dialog.GenScriptDialog.access$000(GenScriptDialog.java:48)
at com.alipay.acts.helper.core.dialog.GenScriptDialog$1.actionPerformed(GenScriptDialog.java:80)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6550)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3325)
at java.awt.Component.processEvent(Component.java:6315)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4899)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4721)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
at java.awt.Container.dispatchEventImpl(Container.java:2283)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4721)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:766)
at java.awt.EventQueue.access$500(EventQueue.java:98)
at java.awt.EventQueue$3.run(EventQueue.java:715)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:739)
at java.awt.EventQueue$4.run(EventQueue.java:737)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:736)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:757)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:702)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:375)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
at java.awt.Dialog.show(Dialog.java:1077)
at java.awt.Component.show(Component.java:1681)
at java.awt.Component.setVisible(Component.java:1633)
at java.awt.Window.setVisible(Window.java:1014)
at java.awt.Dialog.setVisible(Dialog.java:998)
at com.alipay.acts.helper.core.action.GenScriptAction.actionPerformed(GenScriptAction.java:67)
at com.intellij.openapi.actionSystem.ex.ActionUtil$1.run(ActionUtil.java:261)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:278)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.lambda$actionPerformed$0(ActionMenuItem.java:292)
at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:283)
at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:107)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:282)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$0(ActionMenuItem.java:111)
at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:88)
at com.intellij.openapi.application.TransactionGuardImpl.lambda$submitTransaction$1(TransactionGuardImpl.java:111)
at com.intellij.openapi.application.TransactionGuardImpl.submitTransaction(TransactionGuardImpl.java:120)
at com.intellij.openapi.application.TransactionGuard.submitTransaction(TransactionGuard.java:121)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:111)
at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:524)
at com.intellij.ui.plaf.beg.BegMenuItemUI.access$300(BegMenuItemUI.java:35)
at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:546)
at java.awt.Component.processMouseEvent(Component.java:6550)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3325)
at java.awt.Component.processEvent(Component.java:6315)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4899)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4721)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
at java.awt.Container.dispatchEventImpl(Container.java:2283)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4721)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:766)
at java.awt.EventQueue.access$500(EventQueue.java:98)
at java.awt.EventQueue$3.run(EventQueue.java:715)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:739)
at java.awt.EventQueue$4.run(EventQueue.java:737)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:736)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:757)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:702)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:375)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

以下是搭建框架的截图,左侧是测试工程,右侧是需要测试的接口,帮忙看看具体是什么问题,期待回复

image
image
image
image

ACTS2.0开源

蚂蚁内部好像已经在使用2.0版本的ACTS了,这个2.0的版本有开源的计划吗?

无法选择test bundle

按照文档,添加插件后,出现下面的问题:
1.初始化acts时,提示错误,wrong clicked position ,但是点解确认后,紧接着会提示初始化成功。
2.在类上面选择 模板生成,弹出的选择框是空的,没法选择test bundle。
3,在接口上面选择 生成测试用例,可以正常选择test bundle。点解确认后,test代码可以生成的,但是idea会提示一个异常:
加载模板报错,先跳过: RoomInfo

环境:
maven:3
idea:2017.2.5
企业微信截图_df8755ba-5a41-431c-923a-f1d18f49d8c33
企业微信截图_c786adae-d97f-4632-808b-6be8ead8bf282
atcs报错

argument type mismatch

debug生成的测试用例时,发现参数不匹配的异常。经排查发现是VirtualObject中object属性的类型与objClass描述的类型不一致(如下图所示)。
图片
尝试把参数由0改为0L也未能解决。

日志上显示的实际值和期望值一样,但实际会被判断成不一致

我测试的接口如下:
Long addTeacher(ShopTeacherVO teacher)
就是简单的往数据库中插入一条记录,然后将主键值返回。
测试代码都是通过插件工具生成的。没有做修改。

测试用例的yaml配置如下:

ShopTeacherService_addTeacher_caseID_001: !!com.alipay.test.acts.model.PrepareData
  args:
    description: null
    inputArgs:
    - description: teacher
      flags:
        com.diantaoke.shop.school.base.api.domain.vo.ShopTeacherVO: {birthday: Y}
      nodeDesc: null
      nodeGroup: null
      objBaseDesc: teacher
      objBaseName: ShopTeacherVO
      objClass: com.diantaoke.shop.school.base.api.domain.vo.ShopTeacherVO
      object: !!com.diantaoke.shop.school.base.api.domain.vo.ShopTeacherVO {birthday: 1473230397944,
        createTime: 1536049910000, idcardNum: null, instId: -1, introduction: test_introduction,
        name: test, phone: '180xx24xx01', photoUrl: 'http://pic.xxxx.com/1fffff.gif',
        sex: 1, sorts: !!java.math.BigDecimal '1', summary: test_summary, teacherId: 1,
        teacherStatus: 1, updateTime: 1536049910000}
  depDataSet:
    description: null
    virtualTables: []
  description: 新增ShopTeacherService_addTeacher_TemplateCase
  expectDataSet:
    description: null
    virtualTables:
    - dataObjClazz: null
      flags: {teacher_id: C, inst_id: Y, name: Y, phone: Y, sex: Y, birthday: Y, summary: Y,
        teacher_status: Y, idcard_num: Y, photo_url: Y, introduction: N, sorts: N,
        create_time: Y, update_time: Y}
      nodeDesc: null
      nodeGroup: null
      tableBaseDesc: t_shop_teacher
      tableData:
      - {teacher_id: '1', inst_id: '-1', name: test, phone: '180xx24xx01', sex: '1',
        birthday: '1473230397944', summary: test_summary, teacher_status: '1', idcard_num: '',
        photo_url: 'http://pic.xxxx.com/1fffff.gif',
        introduction: test_introduction, sorts: '1', create_time: '1536049910000',
        update_time: '1536049910000'}
      tableName: t_shop_teacher
  expectEventSet:
    description: null
    virtualEventObjects: []
  expectException:
    description: null
    exceptionClass: null
    expectException:
      description: null
      flags: {}
      nodeDesc: null
      nodeGroup: null
      objBaseDesc: null
      objBaseName: null
      objClass: null
      object: null
    expectExceptionObject: null
  expectResult:
    description: null
    result:
      description: null
      flags: {}
      nodeDesc: null
      nodeGroup: null
      objBaseDesc: null
      objBaseName: null
      objClass: java.lang.Long
      object: 1
    resultClazz: java.lang.Long
  virtualParams:
    description: null
    params: {}

设置了期望db数据和期望结果校验。

执行单元测试后,数据库期望校验通过了,但是返回结果的校验失败了。日志如下:

2019-03-22 10:26:15,197] [] [INFO ] main <c.a.t.a.c.h.TestUnitHandler> -Checking DB, tables checked(TestUnitHandler.java:checkExpectDbData:240)
[2019-03-22 10:26:15,197] [] [INFO ] main <c.a.t.a.c.h.TestUnitHandler> -t_shop_teacher(TestUnitHandler.java:checkExpectDbData:246)
[2019-03-22 10:26:15,225] [] [INFO ] main <c.a.t.a.c.d.DBDatasProcessor> -Executing sql:select teacher_id as teacher_id,inst_id as inst_id,name as name,phone as phone,sex as sex,birthday as birthday,summary as summary,teacher_status as teacher_status,idcard_num as idcard_num,photo_url as photo_url,introduction as introduction,sorts as sorts,create_time as create_time,update_time as update_time from t_shop_teacher where (teacher_id = ?  ) ,parameters:1,(DBDatasProcessor.java:doSelectAndCompare:562)
[2019-03-22 10:26:15,232] [] [INFO ] main <c.a.t.a.c.d.DBDatasProcessor> -The comparison of the db fields is successful, table:t_shop_teacher ,key:teacher_id ,value is 1 expect vaule is 1(DBDatasProcessor.java:doSelectAndCompare:788)
.......
[2019-03-22 10:26:15,242] [] [INFO ] main <c.a.t.a.c.h.TestUnitHandler> -Checking Events(TestUnitHandler.java:checkExpectEvent:298)
[2019-03-22 10:26:15,243] [] [INFO ] main <c.a.t.a.c.h.TestUnitHandler> -Skip event check in rpc mode(TestUnitHandler.java:checkExpectEvent:379)
[2019-03-22 10:26:15,243] [] [INFO ] main <c.a.t.a.c.h.TestUnitHandler> -Checking invocation result:(DetailCollectUtils.java:appendAndLog:52)
[2019-03-22 10:26:15,243] [] [INFO ] main <c.a.t.a.c.h.TestUnitHandler> -
expect:1
actual:1(TestUnitHandler.java:checkExpectResult:275)
[2019-03-22 10:26:15,244] [] [INFO ] main <c.a.t.a.u.ObjectCompareUtil> -
expect:1
actual:1(DetailCollectUtils.java:appendAndLog:52)
[2019-03-22 10:26:15,249] [] [INFO ] main <acts-sql-logger> -Finish acts_caseId=ShopTeacherService_addTeacher_caseID_001(ActsTestBase.java:process:433)
........
java.lang.AssertionError: 
check failed, actual value:1
Expected value:1 
Expected :true
Actual   :false
 <Click to see difference>


	at org.testng.Assert.fail(Assert.java:89)
	at org.testng.Assert.failNotEquals(Assert.java:489)
	at org.testng.Assert.assertTrue(Assert.java:37)
	at com.alipay.test.acts.utils.ObjectCompareUtil.compare(ObjectCompareUtil.java:61)
	at com.alipay.test.acts.component.handler.TestUnitHandler.checkExpectResult(TestUnitHandler.java:281)
	at com.alipay.test.acts.template.ActsTestBase.check(ActsTestBase.java:531)
	at com.alipay.test.acts.template.ActsTestBase.process(ActsTestBase.java:418)

日志上显示actual value和Expected value是一样的,但是被判定为不一致了。

测试用例yaml里的long无法识别导致反射调用失败

被测方法:submitXXX(Long id)

测试用例里:
inputArgs:
- description: applyId
flags: {}
nodeDesc: null
nodeGroup: null
objBaseDesc: applyId
objBaseName: Long
objClass: java.lang.Long
object: 1

报错:
java.lang.IllegalArgumentException: argument type mismatch

想咨询下怎么让prepareData从yaml里读取到的类型是Long?

acts-bom依赖找不到

com.alipay.sofa.acts acts-bom 1.0.0 pom 依赖添加完成后,下载不下来jar包,咋回事呀

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.