測试jbpm6.2使用的基础类

方便了解jbpm6.2功能我们能够建立一个測试项目,在当中构建一个測试基础类,详细过程例如以下所看到的。

在集成了插件org.drools.updatesite-6.2.0.Final.zip的eclipse中新建jbpm project。插件在參考链接1中jbpm-6.2.0.Final-installer-full.zip内已包括。

将此项目引入依赖的jbpm所须要的jar——在安装的jbpm6.2-installer-full\runtime中,參见上节jbpm6.2 installer安装过程。

在项目文件夹src\main\resources\META-INF中添加persistence.xml文件。此JPA文件里配置測试JBPM功能的必要entity。persistence.xml文件内容例如以下所看到的。


<persistence 

  version="2.0"

  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd

                      http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"

  xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xmlns="http://java.sun.com/xml/ns/persistence">

 

  <persistence-unit name="org.jbpm.persistence.jpa" transaction-type="JTA">

    <provider>org.hibernate.ejb.HibernatePersistence</provider>

    <jta-data-source>jdbc/jbpm-ds</jta-data-source>        

    

        <mapping-file>META-INF/JBPMorm.xml</mapping-file>

        <mapping-file>META-INF/Taskorm.xml</mapping-file>

        <mapping-file>META-INF/TaskAuditorm.xml</mapping-file>

 

        <class>org.drools.persistence.info.SessionInfo</class>

        <class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class>

        <class>org.drools.persistence.info.WorkItemInfo</class>

        <class>org.jbpm.persistence.correlation.CorrelationKeyInfo</class>

        <class>org.jbpm.persistence.correlation.CorrelationPropertyInfo</class>

 

        <class>org.jbpm.process.audit.ProcessInstanceLog</class>

        <class>org.jbpm.process.audit.NodeInstanceLog</class>

        <class>org.jbpm.process.audit.VariableInstanceLog</class>

 

        <!-- manager -->

        <class>org.jbpm.runtime.manager.impl.jpa.ContextMappingInfo</class>

 

        <class>org.jbpm.services.task.impl.model.AttachmentImpl</class>

        <class>org.jbpm.services.task.impl.model.ContentImpl</class>

        <class>org.jbpm.services.task.impl.model.BooleanExpressionImpl</class>

        <class>org.jbpm.services.task.impl.model.CommentImpl</class>

        <class>org.jbpm.services.task.impl.model.DeadlineImpl</class>

        <class>org.jbpm.services.task.impl.model.DelegationImpl</class>

        <class>org.jbpm.services.task.impl.model.EscalationImpl</class>

        <class>org.jbpm.services.task.impl.model.GroupImpl</class>

        <class>org.jbpm.services.task.impl.model.I18NTextImpl</class>

        <class>org.jbpm.services.task.impl.model.NotificationImpl</class>

        <class>org.jbpm.services.task.impl.model.EmailNotificationImpl</class>

        <class>org.jbpm.services.task.impl.model.EmailNotificationHeaderImpl</class>

        <class>org.jbpm.services.task.impl.model.PeopleAssignmentsImpl</class>

        <class>org.jbpm.services.task.impl.model.ReassignmentImpl</class>

 

        <class>org.jbpm.services.task.impl.model.TaskImpl</class>

        <class>org.jbpm.services.task.impl.model.TaskDataImpl</class>

        <class>org.jbpm.services.task.impl.model.UserImpl</class>

 

        <!--BAM for task service -->

        <class>org.jbpm.services.task.audit.impl.model.BAMTaskSummaryImpl</class>

 

        <!-- Event Classes -->

        <class>org.jbpm.services.task.audit.impl.model.TaskEventImpl</class>

 

        <!-- Task Audit Classes -->

        <class>org.jbpm.services.task.audit.impl.model.AuditTaskImpl</class>

 

    <properties>

      <property name="hibernate.max_fetch_depth" value="3"/>

      <property name="hibernate.show_sql" value="true" />	

 

      <!-- BZ 841786: AS7/EAP 6/Hib 4 uses new (sequence) generators which seem to cause problems -->      

      <property name="hibernate.id.new_generator_mappings" value="false" />            

 

      <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.BitronixJtaPlatform" />

    </properties>        

  </persistence-unit>

    

</persistence>

建立測试基础类。在此类中构建数据源、JBPM RuntimeManager(载入待測试流程),代码例如以下所看到的。


package com.chenwd.jbpm.test.base;

 

import java.util.HashMap;

import java.util.Map;

import java.util.Properties;

 

import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.Persistence;

 

import org.jbpm.process.audit.strategy.StandaloneJtaStrategy;

import org.jbpm.runtime.manager.impl.RuntimeEnvironmentBuilder;

import org.jbpm.services.task.identity.JBossUserGroupCallbackImpl;

import org.junit.After;

import org.junit.Before;

import org.kie.api.io.ResourceType;

import org.kie.api.runtime.manager.RuntimeEnvironment;

import org.kie.api.runtime.manager.RuntimeManager;

import org.kie.api.runtime.manager.RuntimeManagerFactory;

import org.kie.api.task.UserGroupCallback;

import org.kie.internal.io.ResourceFactory;

 

import bitronix.tm.resource.jdbc.PoolingDataSource;

 

public class jbpmTestBase {

 

 

    protected static EntityManagerFactory emf;

    protected static StandaloneJtaStrategy persistenceStrategy;

    protected static EntityManager em;

    private static PoolingDataSource ds;

 

    @Before

    public void setup() {

    	 ds = setupDataSource();

    	 

        Map configOverrides = new HashMap();

        configOverrides.put("hibernate.hbm2ddl.auto", "none");

        configOverrides.put("hibernate.dialect", "org.hibernate.dialect.MySQL5InnoDBDialect");

        emf = Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa", configOverrides);

        if(emf != null){

        	persistenceStrategy = new StandaloneJtaStrategy(emf);

        	em = persistenceStrategy.getEntityManager();

        }

    }

 

    @After

    public void teardown() {

        if (ds != null) {

            ds.close();

        }

    }

    

    protected static void out(Object o){

    	System.out.println(String.valueOf(o));

    }

    

    private static RuntimeManager getRuntimeManager(String process) {

        Properties properties = new Properties();

        properties.setProperty("krisv", "");

        properties.setProperty("mary", "");

        properties.setProperty("john", "");

        UserGroupCallback userGroupCallback = new JBossUserGroupCallbackImpl(properties);

 

        RuntimeEnvironment environment = RuntimeEnvironmentBuilder.getDefault().persistence(true)

                .entityManagerFactory(emf).userGroupCallback(userGroupCallback)

                .addAsset(ResourceFactory.newClassPathResource(process), ResourceType.BPMN2)

                .get();

        return RuntimeManagerFactory.Factory.get().newPerProcessInstanceRuntimeManager(environment);

 

    }

    

    

    private static PoolingDataSource setupDataSource() {

        PoolingDataSource pds = new PoolingDataSource();

        pds.setUniqueName("jdbc/jbpm-ds");

        pds.setClassName("bitronix.tm.resource.jdbc.lrc.LrcXADataSource");

        pds.setMaxPoolSize(5);

        pds.setAllowLocalTransactions(true);

        pds.getDriverProperties().put("user", "root");

        pds.getDriverProperties().put("password", "root");

        pds.getDriverProperties().put("url", "jdbc:mysql://localhost:3306/jbpm2");

        pds.getDriverProperties().put("driverClassName", "com.mysql.jdbc.Driver");

        pds.init();

        return pds;

    }

}

在上面的类中,getRuntimeManager方法载入的用户的数量有限。在使用它做试验时可以动态设置task
actorid的账号比較少,并且没有group。我们能够在构建RuntimeEnvironment时自己实现userGroupCallback接口,这样能够对用户和组进行java编码验证。例如以下所看到的。


private static RuntimeManager getRuntimeManager(String process) {

        RuntimeEnvironment environment = RuntimeEnvironmentBuilder.getDefault().persistence(true)

                .entityManagerFactory(emf).userGroupCallback(new UserGroupCallback() {

        			public List<String> getGroupsForUser(String userId, List<String> groupIds, List<String> allExistingGroupIds) {

        				List<String> result = new ArrayList<String>();

        				if ("chenwd".equals(userId)) {

        					result.add("group1");

        				} 

        				return result;

        			}

        			public boolean existsUser(String arg0) {

        				return true;

        			}

        			public boolean existsGroup(String arg0) {

        				return true;

        			}

        		})

                .addAsset(ResourceFactory.newClassPathResource(process), ResourceType.BPMN2)

                .get();

        return RuntimeManagerFactory.Factory.get().newPerProcessInstanceRuntimeManager(environment);

 

    }

在此方法中chenwd为group1的成员。假设处理group task能够採用这样的构建方式进行測试。

之后我们的详细測试类能够继承这个类。获取kieSession和taskServcie进行流程发起和task处理。示比例如以下所看到的。


public class JbpmTest extends JbpmTestBase{

 

    @Test

    public void testStartProcess() throws Exception {

 

        try {

 

            RuntimeManager manager = getRuntimeManager("sample.bpmn");

            RuntimeEngine runtime = manager.getRuntimeEngine(EmptyContext.get());

            KieSession ksession = runtime.getKieSession();

 

 

            //设置流程variables。发起流程

            Map<String, Object> params = new HashMap<String, Object>();

            ProcessInstance pi = ksession.startProcess("com.sample.bpmn.hello", params);

 

 

            manager.disposeRuntimeEngine(runtime);

 

        } catch (Throwable th) {

            th.printStackTrace();

        }

    }

}

參考

1. jbpm6.2公布内容

http://sourceforge.net/projects/jbpm/files/jBPM%206/jbpm-6.2.0.Final/

2. jbpm6.2 user guide

http://docs.jboss.org/jbpm/v6.2/userguide/

3. jbpm6.2 API

http://docs.jboss.org/jbpm/v6.2/javadocs/

时间: 2024-10-06 01:14:45

測试jbpm6.2使用的基础类的相关文章

关于迭代測试的一些思考

作者:朱金灿 来源:http://blog.csdn.net/clever101 一个软件的功能的越来越多,怎样建立一个规范的測试流程来保证对开发的功能进行充分的測试,是摆在我们面前的难题.在改动bug中经常会出现一种"按下葫芦浮起瓢"情形--改动了A模块的bug,却造成了原来測试没有问题的B模块出现了新的问题.这就促使我们思考:怎样保证測试的百分百的覆盖率.为此我设想一种迭代測试和迭代公布的流程.这个流程详细是这种:全部功能測试分为常规功能測试和新功能測试.所谓常规功能測试是指之前測

Selenium2 Python 自己主动化測试实战学习笔记(五)

7.1 自己主动化測试用例 无论是功能測试.性能測试和自己主动化測试时都须要编写測试用例,測试用例的好坏能准确的体现了測试人员的经验.能力以及对项目的深度理解. 7.1.1 手工測试用例与自己主动化測试用例 手工測试用例是针对手工測试人员.自己主动化測试用例是针对自己主动化測试框架.前者是手工測试用例人员应用手工方式进行用例解析,后者是应用脚本技术进行用例解析. 前者具有较好的异常处理能力,并且可以基于測试用例,制造各种不同的逻辑推断,并且人工測试步步跟踪,可以仔细定位问题.后者全然依照測试用例

手机測试总结----经验总结三

我对之前做的一个(手机)模块略微总结了一下. camera部分.所以也是在这个feature 的角度去考虑的.仅供參考. 1.       測试的项目在bring up阶段或者做feature 阶段 首先.须要澄清.像camera 这种feature 是个非常独立的feature,初期阶段问题非常多.可是一旦稳定了,就问题非常少了. 2.       与开发的紧密合作 与开发的紧密合作和沟通是不可缺少的.一方面能够学到非常多专业知识.还有一方面,不管是定位问题.还是分析问题.測试重点的分析,这些

Tensorflow MNIST 数据集測试代码入门

本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50614444 測试代码已上传至GitHub:yhlleo/mnist 将MNIST数据集,下载后复制到目录Mnist_data中,假设已经配置好tensorflow环境,基本的四个測试代码文件,都能够直接编译执行: mnist_softmax.py: MNIST机器学习入门 mnist_deep.py: 深入MNIST fully_co

Swift,Objective-C语言性能对照測试

原文发表于踏得网 Swift包括了非常多现代语言特性尤其是从一些脚本语言如Javascript/Ruby中汲取了营养. 此外苹果公布Swift时,使用特别选用的一些样例来宣称Swift性能对于Ojbective C的大幅提升(40~50%),如复杂对象排序, Apple并未声称Swift APP比Objective-C APP性能优越,通过精心挑选的个例(也许是利用已知的Objective-C语言的缺陷), 却巧妙的留下了总体性能提升的印象.可是开发人员实际測试出来的情况却相反. 开发人员Kei

软件測试技术概述

1.等价类划分法 根据需求对输入的范围进行细分,然后再分出的每个区域内选取一个有代表性的測试数据开展測试. 2.边界值分析法 边界值分析法是对输入或输出的边界值进行測试的一种測试方法.通常边界值分析法是作为对等价类划分法的补充. 3.因果图法 因果图法是从需求中找出因(输入条件)和果(输出或程序状态的改变),通过因果图转化成判定表. 4.决策表法 决策表法能把复杂逻辑关系和多条件组合情况表达得较明白 5.错误猜測法 基于经验和直觉猜測程序中全部可能存在的各种错误, 从而有针对性的设计測试用例的方

Appium - WebView測试(Android)

Appium - WebView測试 作者: Max.Bai 时间: 2015/07 Appium - WebView測试(Android) 如今App都是混合型的.有原生的也包括WebView的,appium測试的时候就须要在原生和WebView之间切换才干完毕測试. 1. 查看全部context 查看当前全部的窗体 Set<String> contextNames = driver.getContextHandles(); System.print(contextNames); 结果包括眼

Redis安装及简单測试

摘要: Redis是眼下业界很受到欢迎的一个内存数据库,一般用作系统的中间缓存系统,用以提升总体商业系统的吞吐量和响应速度.本文将简要介绍安装的主要过程以及给出一个简要的測试代码. 1.  系统环境和版本号说明 操作系统选用Ubuntu 14.04, Redis的版本号选取眼下的最新稳定版本号2.8.9. client选用了Redis的Java版本号jedis 2.4.2. 2.  Redis的安装步骤 a. 下载Redis的安装包 wget http://download.redis.io/r

软件測试基本方法(六)之集成測试和系统測试

在软件开发中.常常会遇到这种情况.单元測试时确认每一个模块都能单独工作,但这些模块集成在一起之后会出现有些模块不能正常工作.比如,在chrome环境下用js写了一个实时捕捉video中特定区域的模块,正常工作:利用worker线程进行webgl场景渲染,也正常.但是当两个运算合并时.出现一个模块不能正常执行,原因在于两个模块不适合在worker线程中结合.基于worker本身的局限性,仅仅能有一个模块正常工作. 所以,非常有必要进行集成測试. (1)集成測试定义: 集成測试是将软件集成起来,对模