《任务测试》是一款由腾讯开发并发行的生存射击类游戏。玩家需要在各种复杂的地形中进行生存挑战,完成各种任务来取得嘉奖和提升自己的能力。游戏中有丰富的武器和设备可以选择,同时也有多种模式供玩家选择,如单人、团队等。游戏画面精美,音效逼真,给玩家带来极致的游戏体验。

任务测试用例-任务测试

如何测试@Async异步任务

spring3支持@Async注解的异步任务,之前大家都是通过使用如线程池来完成,spring3也是使用这种方式,但更简单。

其具体实现在org.springframework.aop.interceptor.AsyncExecutionInterceptor,是一个方法拦截器,其invoke方法的部分代码如下

Java代码

Future<> result = determineAsyncExecutor(specificMethod).submit(

new Callable<Object>() {

public Object call() throws Exception {

try {

Object result = invocation.proceed();

if (result instanceof Future) {

return ((Future<>) result).get();

}

}

catch (Throwable ex) {

ReflectionUtils.rethrowException(ex);

}

return null;

}

});

即把当前任务的调用提交给线程池,很简单。

1、测试无事务的异步任务

这个相对来说比较简单

1.1、设置任务的返回值为Future

Java代码

public Future sendSystemMessage(Long[] receiverIds, Message message);

1.2、调用future.get();等待任务结束。

Java代码

Future future = messageApi.sendSystemMessage(userIds, message);

future.get();

这个很简单。

2、测试带事务的异步任务

因为是带事务的,所以异步任务肯定要启动一个线程来执行任务,所以无法在主线程回滚,造成数据会commit到数据库,这在集成测试时肯定是不行的;解决方案是移除异步任务

2.1、使用spring profile,在测试环境下不执行<task:annotation-driven>即可。

2.2、使用我提供的工具类,在测试时移除异步支持即可

Java代码

//移除异步支持

if(AopProxyUtils.isAsync(messageApi)) {

AopProxyUtils.removeAsync(messageApi);

}

测试类可以参考MessageApiServiceIT.java

工具类下载 AopProxyUtils.java

3、包级别测试

Java代码

@Async

public void sendSystemMessage() {

sendSystemMessageInner();

}

void sendSystemMessageInner() {

//测试时测试这个方法即可

}

这样测试时测试这个包级别的sendSystemMessageInner方法即可

其实更好的做法是spring内部提供支持,支持这样异步调用的测试。

测试流程依次如下

1.需求阅读需求,理解需求,与客户、开发、架构多方交流,深入了解需求。--testing team

2.测试计划: 根据需求估算测试所需资源(人力、设备等)、所需时间、功能点划分、如何合理分配安排资源等。---testing leader or testing manager

3.用例设计根据测试计划、任务分配、功能点划分,设计合理的测试用例。---testing leader, senior tester

4.执行测试根据测试用例的详细步骤,执行测试用例。--every tester(主要是初级测试人员)

5.执行结果记录和bug记录对每个case记录测试的结果,有bug的在测试管理工具中编写bug记录。--every tester(主要是初级测试人员)

6.defect tracking追踪leader分配给你追踪的bug.直到 bug fixed。--every tester

7.测试报告通过不断测试、追踪,直到被测软件达到测试需求要求,并没有重大bug.

8.用户体验、软件发布等……

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。