精华内容
下载资源
问答
  • esb接口
    2021-02-13 00:49:41

    package com.ekingwin.bas.cloud.mobileErp.utils;

    import java.util.HashMap;

    import java.util.Map;

    import org.springframework.http.HttpEntity;

    import org.springframework.http.HttpHeaders;

    import org.springframework.http.HttpMethod;

    import org.springframework.http.MediaType;

    import org.springframework.http.ResponseEntity;

    import org.springframework.web.client.RestTemplate;

    import com.alibaba.fastjson.JSON;

    import com.alibaba.fastjson.JSONObject;

    /**

    * 向esb发送post请求工具类

    * @author yang

    *

    */

    public class HttpRestUtil {

    public static JSONObject  sendPost(Map map1,Map map2,String url) {

    //设置头信息

    HttpHeaders headers = new HttpHeaders();

    headers.setContentType(MediaType.APPLICATION_JSON);

    headers.set("Content-Type", "application/json;charset=UTF-8");

    headers.set("Accept", "application/json");

    //封装请求参数

    Map map=new HashMap();

    map.put("commonHeader", map1);

    map.put("LIST", map2);

    String mapJsonStr = JSON.toJSONString(map,true);

    JSONObject mapJson =  JSONObject.parseObject((String) JSON.toJSON(mapJsonStr));

    System.out.println("请求报文--------->>>>>>"+mapJson.toString());

    //发送请求

    HttpEntity> he = new HttpEntity>(map, headers);

    RestTemplate restTemplate = new RestTemplate();

    JSONObject responseJson=new JSONObject();

    try {

    ResponseEntity result = restTemplate.exchange(url,

    HttpMethod.POST, he, JSONObject.class);

    JSONObject body = result.getBody();

    Object object = body.get("LIST");

    JSONObject jsonObject=(JSONObject)JSON.toJSON(object);

    responseJson= (JSONObject)JSON.toJSON(jsonObject.get("o"));

    /*if(url.contains("Pipeline/querySaleTotalBySaler_PS")) {

    responseJson= (JSONObject)JSON.toJSON(jsonObject.get("o"));

    }else {

    responseJson= (JSONObject)JSON.toJSON(jsonObject.get("DATA"));

    }*/

    System.out.println("响应报文***********************" + body.toString());

    String code =responseJson.getString("code");

    if ("1".equals(code)) {

    System.out.println("接口调用成功" + responseJson.toString());

    } else {

    System.out.println("数据操作异常" + result.toString());

    }

    } catch (Exception e) {

    e.printStackTrace();

    System.out.println("接口调用失败"+e);

    }

    return responseJson;

    }

    /**

    * CONSUMER这个参数还没有赋值

    * @param BIZTRANSACTIONID 接口系统唯一标识

    * @return

    */

    public static Map setCommonHeaderMap(String BIZTRANSACTIONID) {

    Map map =new HashMap();

    map.put("BIZTRANSACTIONID", BIZTRANSACTIONID);

    map.put("COUNT", "1");

    map.put("SRVLEVEL", "");

    map.put("ACCOUNT", "");

    map.put("PASSWORD", "");

    map.put("CONSUMER", "");

    return map;

    }

    }

    分享到:

    更多相关内容
  • esb接口开发

    2017-07-26 20:24:23
    该文档详细介绍esb开发webservice服务的流程及测试
  • 本发明涉及企业信息管理领域,尤其涉及企业系统总线中ESB接口的自动化方法。背景技术:现有接口测试和回归测试是用传统接口工具SoapUI和Postman等工具进行人工测试。现阶段新增或修改一个ESB接口后,除了对该接口...

    本发明涉及企业信息管理领域,尤其涉及企业系统总线中ESB接口的自动化方法。

    背景技术:

    现有接口测试和回归测试是用传统接口工具SoapUI和Postman等工具进行人工测试。现阶段新增或修改一个ESB接口后,除了对该接口进行常规测试以外,还需要对同级接口服务下的其他接口进行回归测试(如新增用户信息接口的全填、必填、保存、查询等经常使用的功能实例等等),随着企业规模的扩大,ESB接口的数量将会越来越快地增加,接口需求频繁新增或修改,需要投入较多的测试工程师来加班加点完成接口回归工作。

    技术实现要素:

    为此,需要提供一种新的ESB接口的自动化测试方法,解决在新变动接口后对所有接口进行回归测试的问题。

    为实现上述目的,发明人研发了一种ESB接口自动化测试方法,包括如下步骤,读取配置文件,所述配置文件包含测试集文件;

    运行测试集文件获取其中对应接口的测试实例和地址,向接口的地址发送测试实例并将运行结果与预期结果进行比较,若预期结果符合运行结果则判定为通过,不符合预期结果则判定为不通过,计算该接口的测试实例通过数量或通过率。

    具体地,所述配置文件还包括接口权重值,还包括步骤,运行测试集文件获取其中各对应接口的测试实例和地址,根据各接口的权重值及实例通过数量或通过率调整各接口的最终影响得分。

    可选地,还包括步骤,根据接口访问次数及业务系数调整接口权重值。

    可选地,还包括步骤,根据接口权重值调整分配给各接口的测试实例数。

    一种ESB接口自动化测试存储介质,存储有计算机程序,所述计算机程序在被运行时执行包括如下步骤,读取配置文件,所述配置文件包含测试集文件;

    运行测试集文件获取其中对应接口的测试实例和地址,向接口发送测试实例并将运行结果与预期结果进行比较,若预期结果符合运行结果则判定为通过,不符合预期结果则判定为不通过,计算该接口的测试实例通过数量或通过率。

    具体地,所述配置文件还包括接口权重值,所述计算机程序在被运行时还执行步骤,运行测试集文件获取其中各对应接口的测试实例和地址,根据各接口的权重值及实例通过数量或通过率调整各接口的最终影响得分。

    可选地,所述计算机程序在被运行时还执行步骤,根据接口访问次数及业务系数调整接口权重值。

    可选地,所述计算机程序在被运行时还执行步骤,根据接口权重值调整分配给各接口的测试实例数。

    区别于现有技术,上述方案通过利用预先储备的测试实例,在需要新改动接口需要做回归测试的时候能够自动化地测试所有的接口,并给出通过实例数或通过率指标结果,可以辅助测试人员判断新改动ESB接口的良适性。

    附图说明

    图1为本发明具体实施方式所述ESB接口自动化测试方法流程图。

    具体实施方式

    为详细说明技术方案的技术内容、构造特征、所实现目的及效果,以下结合具体实施例并配合附图详予说明。

    在图1所示的实施例中,展示了一种ESB接口自动化测试方法,包括如下步骤,S100读取配置文件,所述配置文件包含测试集文件;

    S102运行测试集文件获取其中对应接口的测试实例和地址,向接口的地址发送测试实例并将运行结果与预期结果进行比较,若预期结果符合运行结果则判定为通过,不符合预期结果则判定为不通过,S104计算该接口的测试实例通过数量或通过率。

    在具体的实施例中,配置文件为可以被测试程序运行的文件,其中包含的测试集为预先存储完成的,可以用于测试ESB服务下接口的若干测试文件的集合,测试文件中包括若干的测试实例,在我们的方案中,测试实例为一个功能接口测试的方法和目标,一般包含测试方法、测试工具、测试内容、输入数据、执行步骤、测试脚本及预期结果,如对外接口中用户信息接口,则会存储若干的用户信息,如姓名、手机、身份证等,单个页面中全填、必填、保存、查询等经常使用的功能,可以看做一个测试实例。在预设的测试集中,可以通过人为设定一些正常的测试实例和非正常的测试实例,也就是预期结果,则测试结果是正常的非正常测试实例,显然就不匹配,那么在该实施例中,测试结果与预期结果不符,则测试实例为不通过。另一些情况下,预期结果也可以是返回值等数值、符号形式等多种形式,预期结果也因实际运行的情况不同而不同。最后在测试运行完毕后,能够获得测量的接口的通过测试实例数量及测试实例的通过率等指标,达到了自动化测试ESB总线中接口的技术效果。辅助用户判断新增改接口的良适性。

    在其他一些具体的实施例中需要测试的是同一ESB服务下的多个接口,在这里配置文件还包括多个接口的权重值,多个接口也可以对应不同的测试集文件,还包括步骤,运行上述多个测试集文件获取其中各对应接口的测试实例和地址,向接口的地址发送测试实例并将运行结果与预期结果进行比较,若预期结果符合运行结果则判定为通过,不符合预期结果则判定为不通过,根据各接口的权重值及测试实例通过数量或通过率调整各接口的最终影响得分。

    多个接口的接口权重值可以通过人工设计,其他一些可选的实施例中,还包括步骤,根据接口访问次数及业务系数调整接口权重值。

    a=部分接口权重值

    a=SUM(本集下单个接口访问次数\所有配置接口的调用次数)/本实例集接口数*业务系数。

    b是全部接口权重值

    接口集测试权重值=SUM(本集下单个接口访问次数\所有活跃接口的调用次数)/本实例集接口数*业务系数。

    也可以仅根据接口的访问次数调整接口权重值,在这种情况下,不考虑业务系数或将业务系数置为1即可:

    a=部分接口权重值

    a=SUM(本集下单个接口访问次数\所有配置接口的调用次数)/本实例集接口数。

    b是全部接口权重值

    接口集测试权重值=SUM(本集下单个接口访问次数\所有活跃接口的调用次数)/本实例集接口数。

    在其他一些可选的实施例中,还包括步骤,根据接口权重值调整分配给各接口的测试实例数。在这种情况下,多个接口可以对应同一个测试实例集合,其中的若干个测试实例根据接口的权重值分配给多各接口,每个接口分配到的测试实例数目等于其接口权重值,在最终计算的时候,本方法可以计算整个测试实例集合的通过数量和通过率,一样能够得到回归测试的可参考结果。

    在某些具体的实施例中,我们通过5个主要步骤进行接口回归的自动化测试步骤。

    步骤1:运行测试集的程序入口;

    在步骤1中,打开程序入口代码,代码会去读取【测试集配置文件】,并计算出实例集的权重比,来决定运行哪些测试集(也就是ESB服务,每个服务下有很多的接口)。

    注:【测试集配置文件】中配置测试集名称、业务系数、权重值,其中权重值可以设置固定值或使用公式建模生成权重值。

    步骤2:运行对应测试集下的接口;

    在步骤2中:根据步骤一生成的接口集权重值,运行测试集下的所有接口,每一个接口对应一个接口类,其中接口分成两种类型:wsdl和rest:如果运行的是wsdl对应接口类,就去读取【单个配置文件】拿到wsdl的准确地址并初始化;如果运行的是rest对应接口类,就去读取【单个配置文件】拿到该接口对应的url。

    步骤3:拿到初始化的wsdl实例和url地址后,读取测试实例发送请求。

    在步骤3中:根据上一步骤拿到wsdl实例和url地址,读取对应接口实例文件生成测试实例,注意实例和接口一样同样存在两种类型:wsdl接口实例和rest接口实例,如果运行的是wsdl接口的实例,系统会自动把实例中的json入参转化为xml的入参(也就是说实例文件中入参必须写json),并使用wsdl实例发送请求,并拿到运行结果,并将运行结果和实例中的预期结果(这里的运行结果是xml类型,因为wsdl本身就是以xml格式进行请求交互的)进行比较,如果实际结果包含预期结果,此实例就运行通过,反之运行失败;如果运行的是rest接口的实例,系统会拿到实例中的json入参(rest接口的入参也是json类型)和配置文件中url拿到自动发送请求,并拿到运行结果(这里的运行结果也是json类型,因为rest请求本身就是以json格式进行请求交互的),如果运行结果与实际结果一致,此实例就运行通过,反之运行失败。

    步骤4:把运行结果写入excel和html测试报告中;

    在步骤4中:每当运行完成一个接口后,就把该接口的测试结果保存至列表中,当所有结果运行结束后,就把列表内容写入excel文件以及测试报告html中;

    步骤5:运行结束后,会将结果文件保存至本地,方便查看;

    在步骤5中:当运行结束后,会将本次运行的结果,以(接口名,实例数,通过实例数,失败实例数,通过率)显示在控制台,并生成excel和测试报告保存至本地。

    一种ESB接口自动化测试存储介质,存储有计算机程序,所述计算机程序在被运行时执行包括如下步骤,读取配置文件,所述配置文件包含测试集文件;

    运行测试集文件获取其中对应接口的测试实例和地址,向接口发送测试实例并将运行结果与预期结果进行比较,若预期结果符合运行结果则判定为通过,不符合预期结果则判定为不通过,计算该接口的测试实例通过数量或通过率。

    具体地,所述配置文件还包括接口权重值,所述计算机程序在被运行时还执行步骤,运行测试集文件获取其中各对应接口的测试实例和地址,根据各接口的权重值及实例通过数量或通过率调整各接口的最终影响得分。

    可选地,所述计算机程序在被运行时还执行步骤,根据接口访问次数及业务系数调整接口权重值。

    可选地,所述计算机程序在被运行时还执行步骤,根据接口权重值调整分配给各接口的测试实例数。

    需要说明的是,尽管在本文中已经对上述各实施例进行了描述,但并非因此限制本发明的专利保护范围。因此,基于本发明的创新理念,对本文所述实施例进行的变更和修改,或利用本发明说明书及附图内容所作的等效结构或等效流程变换,直接或间接地将以上技术方案运用在其他相关的技术领域,均包括在本发明的专利保护范围之内。

    展开全文
  • 内容一:ESB接口编写目录结构 testxw包下: clone_vmware.py: ESB自定义接口编写文件 toolkit文件夹:ESB的配置文件和公共方法的文件 toolkit文件夹下: configs.py:配置文件 tools.py:引用的依赖等公共方法 注意...
    内容一:ESB接口编写目录结构

    testxw包下:
    clone_vmware.py: ESB自定义接口编写文件(组件模块)
    toolkit文件夹:为系统工具包,存储系统配置及共用方法
    toolkit文件夹下:
    configs.py: 为系统配置模块,配置系统名称、系统域名地址等
    tools.py:为系统共用方法模块
    在这里插入图片描述

    注意:1.SYSTEM_NAME代表系统名,ESB包名称也就是ESB的系统名的小写形式。
    	 2.HOST代表系统环境的域名地址,也可以是环境所在的机器IP地址
    
    内容二:ESB包引用的有依赖包

    通过xshell进入到ESB接口平台所在机器,进入esb虚拟环境,可以看出平台ESB接口引用的依赖包,如图:
    在这里插入图片描述
    如果引用了新的依赖,在esb虚拟环境中没用此依赖包,可以通过“pip install + 依赖包和版本”进行安装接口依赖包
    现在有的依赖包:
    在这里插入图片描述
    比如:pip install pyvim==0.0.21
    在这里插入图片描述
    pip list查看
    在这里插入图片描述
    在esb虚拟环境引入ESB包里的依赖,ESB包里的接口就能正常使用此依赖。

    内容三:ESB建立系统、注册通道

    在这有两种方法去实现:

    ①:手动在平台建立系统和注册系统通道
    ②:通过py文件进行建立系统和注册通道
    

    第一种方法:手动在平台建立系统和注册系统通道
    ①建立系统
    在这里插入图片描述
    建立通道完成:
    在这里插入图片描述
    ②注册通道
    在这里插入图片描述
    注册通道完成:
    在这里插入图片描述
    第二种方法:通过py文件进行建立系统和注册通道
    在这里插入图片描述
    ①编写config.py内容:

    # 文档分类
    SYSTEM_DOC_CATEGORY = [
        {
            'label': u'默认分类', # 分类
            'priority': 100,
            'systems': ['TESTXW']
        }
    ]
    
    # 系统
    SYSTEMS = [
        {
            # 系统名称
            'name': 'TESTXW',
            # 系统标签
            'label': u'虚拟机管理测试',
            # 系统接口负责人
            'interface_admin': 'admin',
            # 执行类超时时长
            'execute_timeout': 100,
            # 查询类超时时长
            'query_timeout': 100,
            # 备注
            'remark': u'虚拟机管理测试'
        }
    ]
    
    # 组件通道
    CHANNELS = [
        ('/testxw/clone_vmware/', {
            # 对应组件代码
            'comp_codename': 'generic.testxw.clone_vmware'   # 代号编码
        })
    ]
    

    ②将config.py 和 编写好的ESB包代码拷贝到平台ESB所在的机器“/data/bkee/open_paas/esb/components/generic/apis”目录下(根据各自公司使用目录环境不同,适当做出修改)

    # INSTALL_PATH 表示项目安装基准目录
    配置⽂件地址:[install*path]/open*paas/esb/components/generic/apis/conf.py
    

    ③进入平台ESB所在的机器,进入esb虚拟环境,执行命令如下:

    python manage.py sync_api_docs # 相当于编译读API文档
    python manage.py sync_system_and_channel_data [--force]  # 如果系统和通道都已经存在, force强制替换做出改变
    

    在这里插入图片描述
    查看平台建立情况
    建立系统:
    在这里插入图片描述
    注册通道:
    在这里插入图片描述
    指定API执行类型

    注意: 指定API执行类型(POST/GET)
    API_TYPE_OP  执行API
    API_TYPE_Q   查询API
    
    以内容一为例,在clone_vmware.py加入
    from common.constants import API_TYPE_OP
    
    再加入这个变量
    
    # 组件所属系统的系统名
    sys_name = configs.SYSTEM_NAME
    # 自定义系统和通道
    api_type = API_TYPE_OP
    

    具体如图:
    在这里插入图片描述

    内容四:编译ESB文档和重启ESB接口

    编译ESB文档:
    进入平台ESB所在的机器,进入esb虚拟环境,执行命令如下:

    python manage.py sync_api_docs
    

    在这里插入图片描述
    重启ESB接口:
    进入平台ESB所在的机器,进入open_paas虚拟环境,执行命令如下:

    # INSTALL_PATH 表示项目安装基准目录
    # 重启指令
    workon open_paas
    supervisorctl -c $INSTALL_PATH/etc/supervisor-open_paas.conf restart esb
    

    比如:supervisorctl -c /data/bkee/etc/supervisor-open_paas.conf restart esb
    在这里插入图片描述

    注意:
    ① 平台ESB所在的机器都需要作此操作,ESB接口才能使用。
    ② 自定义通道,需要把conf.pyc文件删除掉,防止命令运行后,平台esb信息不生效,其实是运行了pyc文件信息。
    
    内容五:需要注意的地方
    ① esb安装依赖包可以自己创建一个类似于requirements.txt的文件,存放要安装的依赖包信息,方便管理。
    ② 自定义系统和通道,生成系统和通道后,不要在平台进行修改系统和通道的任何相关信息,需要在conf.py文件内进行修改,
    用命令进行变更,防止以后用命令自定义系统和通道时,把平台修改的信息覆盖掉。
    conf.py 目录所在:
    # INSTALL_PATH 表示项目安装基准目录
    配置⽂件地址:[install*path]/open*paas/esb/components/generic/apis/conf.py
    ③ 如果paas所在的机器环境有多台,都需要进行包上传,再esb重启,不要之重启一部分机器,防止访问平台esb接口时成功时不成功。
    ④ ESB组件编写代码样例
    # -*- coding: utf-8 -*-
    import sys
    from django import forms
    from common.forms import BaseComponentForm, TypeCheckField
    from components.component import Component
    from common.constants import API_TYPE_Q
    from toolkit.tools import VmManage
    from .toolkit import configs
    
    reload(sys)
    sys.setdefaultencoding('utf8')
    
    
    # API_TYPE_OP  执行API
    # API_TYPE_Q   查询API
    
    # class类名 是py文件名的大写驼峰
    # 文件名字 clone_vmware.py  类名 CloneVmware
    # 如果自定义系统和通道,apiLabel代表通道名称
    class CloneVmware(Component):
        """
           apiLabel 克隆虚拟机测试 
           apiMethod  GET
    
           ### 功能描述
    
           克隆虚拟机测试
    
           ### 请求参数
    
           {{ common_args_desc }}
    
           #### 接口参数
    
           | 字段  |  类型 | 必选   |  描述     |
           |-----------|------------|--------|------------|
           | ip  |  str    | 是  | vcenter主机ip  |
           | user |  str  | 是  | vcenter用户名  |
           | password |  str  | 是  | vcenter密码  |
           | port |  int | 是  | vcenter端口  |
           | datacenter_name |  str | 是  | 数据中心名称  |
           | vm_exi_ip |  str | 否  | 宿主机IP  |
           | vm_name |  str | 是  | 虚拟机名称  |
           | template_name |  str | 是  | 模版名称  |
           | datastore_name |  str | 否  | 存储名称  |
           | vm_folder |  str | 否  | 虚拟机文件夹名称  |
           | cpu_num |  int | 否  | cpu大小  |
           | memory |  int | 否  | 内存大小(单位:G)  |
           | vm_disk |  int | 否  | 追加硬盘大小(单位:G)  |
           | ip_data |  dict | 否  | 虚拟机指定ip参数  |
    
           ### ip_data
    
           | 字段  |  类型 | 必选   |  描述     |
           |-----------|------------|--------|------------|
           | vm_hostname |  str | 是  | 虚拟机主机名  |
           | vm_ip |  str | 是  | 虚拟机ip  |
           | vm_subnetmask |  str | 是  | 子网掩码  |
           | vm_gateway |  str | 是  | 网关  |
           | vm_dns |  str | 否  | DNS  |
           | vm_domain |  str | 否  | 域名  |
    
    
           ### 请求参数示例
    
           ```python
           {
               "bk_app_code": "esb_test",
               "bk_app_secret": "xxx",
               "bk_token": "xxx-xxx-xxx-xxx-xxx",
               "ip": '192.169.10.1',
               "user": '66666@vsphere.local',
               "password": '123456',
               "port": 443,
               "datacenter_name": 'xxxx',
               "vm_exi_ip": '192.169.1.10',
               "vm_name": 'xxxx',
               "template_name": 'xxxx',
               "datastore_name": 'xxxx',
               "vm_folder": 'xxxx',
               "cpu_num": 1,
               "memory": 1024,
               "vm_disk": 100,
               "ip_data": {
                   "vm_ip": '192.168.1.1',
                   "vm_subnetmask": '255.255.255.0',
                   "vm_gateway": '192.168.1.0',
                   "vm_dns": 'xxx',
                   "vm_domain": 'xxx',
                   "vm_hostname": 'xxx'
               }
           }
           ```
    
           ### 返回结果示例
    
           ```python
           {
               "result": true,
               "code": 0,
               "message": "克隆虚拟机成功",
               "data": {}
           }
           ```
        """
        # 组件所属系统的系统名
        sys_name = configs.SYSTEM_NAME
        # 自定义系统和通道
        api_type = API_TYPE_Q
    
        class Form(BaseComponentForm):
    		# form验证 required 的值是false代表不必传或者true代表必穿
    		# form的类型  CharField、IntegerField、TypeCheckField(promise_type=dict、或者promise_type=list)、
    		# DefaultBooleanField、ListField,也可以用Django的form其他的类型
            ip = forms.CharField(label=u'vcenter主机ip', required=True)
            user = forms.CharField(label=u'vcenter用户名', required=True)
            password = forms.CharField(label=u'vcenter密码', required=True)
            port = forms.IntegerField(label=u'vcenter端口', required=True)
            datacenter_name = forms.CharField(label=u'数据中心名称', required=True)
            vm_name = forms.CharField(label=u'虚拟机名称', required=True)
            vm_exi_ip = forms.CharField(label=u'宿主机IP', required=True)
            template_name = forms.CharField(label=u'模版名称', required=True)
            datastore_name = forms.CharField(label=u'存储名称', required=False)
            vm_folder = forms.CharField(label=u'虚拟机文件夹名称', required=False)
            cpu_num = forms.IntegerField(label=u'cpu大小', required=False)
            memory = forms.IntegerField(label=u'内存大小', required=False)
            vm_disk = forms.IntegerField(label=u'追加硬盘大小', required=False)
            ip_data = TypeCheckField(label=u'虚拟机指定ip数据', promise_type=dict, required=False)
    
            # clean方法返回的数据可通过组件的form_data属性获取
            # 进行数据清洗
            def clean(self):
                return self.get_cleaned_data_when_exist(
                    keys=['ip', 'user', 'password', 'port',
                          'datacenter_name', 'vm_name',
                          'template_name', 'datastore_name', 'vm_folder', 'vm_exi_ip',
                          'cpu_num', 'memory', 'vm_disk', 'ip_data'])
    
        # 组件处理入口,
        def handle(self):
            data = self.form_data # 获取form表单的数据
    		# 必传取值方式
            ip = data['ip']
            user = data['user']
            password = data['password']
            port = data['port']
            datacenter_name = data['datacenter_name']
            vm_name = data['vm_name']
            template_name = data['template_name']
            # 不必传取值方式
            datastore_name = data.get('datastore_name')
            vm_folder = data.get('vm_folder')
            vm_exi_ip = data.get('vm_exi_ip')
            cpu_num = data.get('cpu_num')
            memory = data.get('memory')
            vm_disk = data.get('vm_disk')
            ip_data = data.get('ip_data')
            vm_ip = None
            vm_subnetmask = None
            vm_gateway = None
            vm_dns = None
            vm_domain = None
            vm_hostname = None
            ip_result = True
    
            response = {}
            try:
                vm = VmManage(host=ip,
                              user=user,
                              password=password,
                              port=port, ssl=None)
    
                if ip_data:
                    vm_ip = ip_data.get('vm_ip', None)
                    vm_subnetmask = ip_data.get('vm_subnetmask', None)
                    vm_gateway = ip_data.get('vm_gateway', None)
                    vm_dns = ip_data.get('vm_gateway', None)
                    vm_domain = ip_data.get('vm_domain', None)
                    vm_hostname = ip_data.get('vm_hostname', None)
                    if vm_ip is None or vm_ip == '':
                        response['message'] = '虚拟机IP [vm_ip] This field is required.'
                        ip_result = False
                    elif vm_subnetmask is None or vm_subnetmask == '':
                        response['message'] = '子网掩码 [vm_subnetmask] This field is required.'
                        ip_result = False
                    elif vm_gateway is None or vm_gateway is '':
                        response['message'] = '网关 [vm_gateway] This field is required.'
                        ip_result = False
                    elif vm_hostname is None or vm_hostname is '':
                        response['message'] = '虚拟机主机名 [vm_hostname] This field is required.'
                        ip_result = False
                    else:
                        ip_result = True
                if ip_result:
                    data = vm.clone(
                        template_name=template_name,
                        vm_name=vm_name,
                        datacenter_name=datacenter_name,
                        datastore_name=datastore_name,
                        vm_folder=vm_folder,
                        vm_exi_ip=vm_exi_ip,
                        cup_num=cpu_num,
                        memory=memory,
                        vm_disk=vm_disk,
                        vm_ip=vm_ip,
                        vm_subnetmask=vm_subnetmask,
                        vm_gateway=vm_gateway,
                        vm_dns=vm_dns,
                        vm_domain=vm_domain,
                        vm_hostname=vm_hostname
                    )
                    response = data
                    if data['result']:
                        response['code'] = 0
                else:
                    response['code'] = 1
                    response['result'] = False
            except Exception, e:
                response = {
                    'code': 500,
                    'message': e.message,
                    'result': False,
                    'data': {}
                }
            # 返回信息数据
            self.response.payload = response
    
    
    内容六:通过中控机进入PAAS机器环境

    先连接进入中控机
    在这里插入图片描述
    进入第一个有paas的机器
    在这里插入图片描述

    注意:
    ① PAAS_IP   有多台paas时,从PAAS_IP0开始 代表机器台数从第一台开始 ,第二台就是PAAS_IP1,类似于数组。
    ② 进入到paas机器后,如果要切换到其他的中控机下的机器,一定要exit退出当前所在的paas环境
    

    在这里插入图片描述

    展开全文
  • ESB接口调用异常汇总

    千次阅读 2020-08-17 10:17:55
    文章目录一、ESB接口前置知识1. ESB接口简述2. 生成的代码组成部分二、常见的异常汇总2.1. 场景1:不能解析某域名2.2. 场景2:调用服务连接超时三、调用服务前异常3.1. 异常描述3.2. CXF相关的jar和jdk的rt.jar中...

    一、ESB接口前置知识
    1. ESB接口简述

    第三方厂商或内部系统提供webservice服务地址,消费端根据服务端的服务地址生成客户端代码。

    2. 生成的代码组成部分

    主要有2部分:第一部分:与之交互的报文标签,用于消费端按照此标签嵌套方式组装报文;第二部分就是调用服务端的地址,只需要添加客户端地址即可。消费端编写处理类,负责把查询出来的数据,把数据填充到指定的报文标签中,调用提供的逻辑层代码即可。

    二、常见的异常汇总
    2.1. 场景1:不能解析某域名

    调用服务不能解析某域名(例如:esb1)
    导致出现以上的原因是:在代码中服务端地址在是以域名的形式存在的,调用服务在没有任何配置的情况下,会出现此异常。
    解决方案:
    需要在服务器或者本地电脑的hosts文件中配置域名和ip的映射关系

    2.2. 场景2:调用服务连接超时

    导致出现以上的原因有2种:
    第一种:服务端地址本身就有问题。
    例如:开发之前,服务端和消费端约定好服务端地址,但是,服务端服务尚未开发完成,消费端这时去调用服务端地址会出现连接超时的现象。
    解决方案:通过邮件或者其它方式联系甲方,向甲方汇报此现象,寻求甲方协助。
    第二种:就是服务端地址正常,但是,系统处没有开发连接或者某端口权限
    解决方案:
    通过邮件或者其它方式联系甲方,向甲方汇报此现象,寻求甲方协助。
    注:以上2种解决方案,不在开发职责范围之内,应该寻求甲方负责人协助

    三、调用服务前异常

    前言声明:esb接口用的是jdk内部的jar依赖,不需要额外的jar

    3.1. 异常描述
    3.2. CXF相关的jar和jdk的rt.jar中冲突
    3.3. 异常现象

    在调用esb服务地址之前,new PayCommitSrvBindingQSService()时,触发异常。

    3.4. 异常日志

    在这里插入图片描述

    3.5. 异常日志分析

    从日志中可以看出,本来应该创建javax.xml.ws.Service.(Service.java:77),但是,org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service.

    3.6. 代码异常定位

    在这里插入图片描述
    在这里插入图片描述

    3.7. 解决方案

    因为esb接口调用依赖属于jdk内部的rt.jar内部对象。因此,建议在评估风险影响范围之后,删除cxf相关的jar即可

    3.8. 类似场景

    这样的异常集成xfire的相关的jar也会出现

    展开全文
  • java跨系统调用esb接口,json形式,rest接口分析访客阅读:5222020-07-05 13:01:51评论:0package com.ekingwin.bas.cloud.mobileErp.utils;import java.util.HashMap;import java.util.Map;import org.spring...
  • WEBSERVICE调试工具-ESB消息统一推送接口调用说明,内附调试工具,开发webservice接口的同学可以下载
  • 调用esb接口,实现数据定时同步

    千次阅读 2020-06-29 09:52:48
    调用esb接口,实现数据定时同步 ** springboot项目中的定时器 1.yml文件的配置 #========= Scheduled 配置 ==========# jobs: sendGasJob: corn: "0 0 1 * * ?" 2.Scheduler类 @Component("sendGasJob") @...
  • 杂项:ESB接口

    2018-09-13 11:30:00
    ylbtech-杂项:ESB接口 ESB全称为Enterprise Service Bus,即企业服务总线。它是传统中间件技术与XML、Web服务等技术结合的产物。ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素。ESB的出现...
  •  * 向esb发送post请求工具类  * @author yang  *  */ public class HttpRestUtil {  public static JSONObject sendPost(Map, Object> map1,Map, Object> map2,String url) {  //设置头信息  ...
  • esb接口测试
  • 泛微OA抛转erp esb操作文档
  • 从功能上看,ESB提供了事件驱动和文档导向的处理模式,以及分布式的运行管理机制,它支持基于内容的路由和过滤,具备了复杂数据的传输能力,并可以提供一系列的标准接口,但是ESB并没有http请求效率高。废话就不多说...
  • ESB接入接出技术规范(超实用),包含服务端和客户端的详细配置说明,以及文档附有服务端和客户端样例代码
  • 采用webservice作统一接口实现esb的方法【技术领域】[0001]本发明涉及的是信息系统中的B/S架构中SOA领域的实现模型,具体地说是利用WEBSERVICE的AXIS2技术实现ESB总线,在其基础上发布空的服务,实现统一接口、服务...
  • 技术特征:1....配置ESB模拟业务流程,以获取并解析所述ESB接口的请求报文得到消费者标识信息;根据所述消费者标识信息获取用于对所述请求报文进行加解密的密钥;调用所述客户端API,以通过所述客户...
  • ESB开发WebService接口

    万次阅读 2017-05-12 16:44:52
    首先简单介绍一下,ESB全称为Enterprise Service Bus,即企业服务总线。它是传统中间件技术与XML、Web服务等技术结合的产物。ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素。ESB的出现改变了传统...
  • WebService&ESB入门

    2013-07-17 11:55:02
    ESB减少了你的SOA体系中的接口的数量,大小和复杂度。 ESB在请求者和服务之间实现了: 路由服务间的消息 转化请求者和服务之间的传输协议 转换请求者和服务之间的消息格式 处理分离资源间的业务事件
  • 基于ESB的业务集成业务梳理

    千次阅读 2022-03-23 09:17:49
    企业服务总线ESB在实际项目中一般有两个重要应用模式,一是数据总线,二是服务总线。本文基于ESB的业务集成业务进行梳理。
  • ESB开发源码和说明

    2020-05-14 11:33:24
    本项目是用mule3.9.0版本来做的一个服务与服务之间调用的demo。包括完整的项目源码和部署开发说明文档。测试服务项目和数据库。
  • ESB 开发测试流程(Rest)

    2022-03-04 08:54:10
    在工程目录下创建项目所需的 package包结构 Bussiness:业务服务模块: 下游系统使用的接口 PepiLines:管道逻辑模块: 根据上游请求,通过管道里面逻辑组件转换成下游所需格式,下游接受到请求后,做出响应,然后返回上游...
  • ESB部署WebService接口.doc
  • ESB DEMO

    2019-04-23 01:23:52
    NULL 博文链接:https://fkueje001.iteye.com/blog/2164592
  • (完整版)接口测试用例

    千次阅读 2020-12-23 06:31:50
    编制人薛郝审定人时间用例名称添加组织接口名称urn:orgservice项目名称C919大型客机客户服务应用系统集成平台编号/版本参考信息C919大型客机客户服务应用系统集成平台详细设计V2.1测试目的测试通过该接口能否正确...
  • 基于ESB的系统集成

    2021-09-18 13:57:28
    各业务系统调用ESB接口的方式和错误处理方式都不同,很有可能造成许多未知的问题。当ESB停止响应时,所有业务系统都会报错。在ESB尚未恢复期间可能有大量的数据丢失,且难以恢复。 另外一点,现在个业务系统都被动的...
  • MB PI 九恒星到SAP的POS过账及冲销接口 异步 创建步骤

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,252
精华内容 5,300
关键字:

esb接口

友情链接: steering!.zip