Exemple #1
0
    def test_YW_GGQQ_YWFSJHA_GU_181(self):
        title = '卖开(义务方开仓):FOK市价全成或撤销-全成再撤单(OMS)'
        #定义当前测试用例的期待值
        #期望状态:初始、未成交、部成、全成、部撤已报、部撤、已报待撤、已撤、废单、撤废、内部撤单
        #xtp_ID和cancel_xtpID默认为0,不需要变动
        case_goal = {
            '期望状态': '全成',
            'errorID': 11000343,
            'errorMSG': queryOrderErrorMsg(11000343),
            '是否生成报单': '是',
            '是否是撤废': '是',
            'xtp_ID': 0,
            'cancel_xtpID': 0,
        }
        logger.warning(title)
        # 定义委托参数信息------------------------------------------
        # 参数:证券代码、市场、证券类型、证券状态、交易状态、期望状态、Api
        stkparm = QueryStkPriceQty('999999', '1', '*', '1', '0', 'P',
                                   case_goal['期望状态'], Api)
        # 如果下单参数获取失败,则用例失败
        if stkparm['返回结果'] is False:
            rs = {
                '用例测试结果': stkparm['返回结果'],
                '测试错误原因': '获取下单参数失败,' + stkparm['错误原因'],
            }
            logger.error('查询结果为False,错误原因: {0}'.format(
                json.dumps(rs['测试错误原因'], encoding='UTF-8',
                           ensure_ascii=False)))
            self.assertEqual(rs['用例测试结果'], True)

        else:
            wt_reqs = {
                'business_type':
                Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_OPTION'],
                'order_client_id':
                2,
                'market':
                Api.const.XTP_MARKET_TYPE['XTP_MKT_SH_A'],
                'ticker':
                stkparm['证券代码'],
                'side':
                Api.const.XTP_SIDE_TYPE['XTP_SIDE_SELL'],
                'position_effect':
                Api.const.XTP_POSITION_EFFECT_TYPE['XTP_POSITION_EFFECT_OPEN'],
                'price_type':
                Api.const.XTP_PRICE_TYPE['XTP_PRICE_ALL_OR_CANCEL'],
                'price':
                stkparm['随机中间价'],
                'quantity':
                2
            }
            ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            CaseParmInsertMysql(case_goal, wt_reqs)
            rs = serviceTest(Api, case_goal, wt_reqs)
            if rs['用例测试结果']:
                logger.warning('执行结果为{0}'.format(str(rs['用例测试结果'])))
            else:
                logger.warning('执行结果为{0},{1},{2}'.format(
                    str(rs['用例测试结果']), str(rs['用例错误源']),
                    json.dumps(rs['用例错误原因'],
                               encoding='UTF-8',
                               ensure_ascii=False)))
            self.assertEqual(rs['用例测试结果'], True)  # 0
Exemple #2
0
    def test_YW_ETFSS_SHSG_003(self):
        # -----------ETF申购-------------
        title = '上海ETF申购--禁止现金替代:T-1日成分股可以申购1unitETF→T日申购ETF'
        # 定义当前测试用例的期待值
        # 期望状态:初始、未成交、部成、全成、部撤已报、部撤、已报待撤、已撤、废单、撤废、内部撤单
        # xtp_ID和cancel_xtpID默认为0,不需要变动
        case_goal = {
            'case_ID': 'ATC-202-03',
            '期望状态': '全成',
            'errorID': 0,
            'errorMSG': '',
            '是否生成报单': '是',
            '是否是撤废': '否',
            'xtp_ID': 0,
            'cancel_xtpID': 0,
        }
        logger.warning(title + ', case_ID=' + case_goal['case_ID'])
        unit_info = {
            'ticker': '590130',  # etf代码
            'etf_unit': 1,  # etf申购单位数
            'component_unit_sell': 1  # 成分股卖出单位数
        }

        # -----------查询ETF申购前成分股持仓-------------
        component_stk_info = etf_get_all_component_stk(unit_info['ticker'])

        # 参数:证券代码、市场、证券类型、证券状态、交易状态、买卖方向(B买S卖)、期望状态、Api
        stkparm = QueryEtfQty(unit_info['ticker'], '1', '14', '2', '0', 'B',
                              case_goal['期望状态'], Api)
        # 定义委托参数信息------------------------------------------
        # 如果下单参数获取失败,则用例失败
        if stkparm['返回结果'] is False:
            rs = {
                '用例测试结果': stkparm['返回结果'],
                '用例错误原因': '获取下单参数失败, ' + stkparm['错误原因'],
            }
            etf_query_log(case_goal, rs)
            self.assertEqual(rs['用例测试结果'], True)
        else:
            wt_reqs = {
                'business_type':
                Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_ETF'],
                'order_client_id':
                2,
                'market':
                Api.const.XTP_MARKET_TYPE['XTP_MKT_SH_A'],
                'ticker':
                stkparm['证券代码'],
                'side':
                Api.const.XTP_SIDE_TYPE['XTP_SIDE_PURCHASE'],
                'price_type':
                Api.const.XTP_PRICE_TYPE['XTP_PRICE_LIMIT'],
                'quantity':
                unit_info['etf_unit'] * stkparm['最小申赎单位'],
                'position_effect':
                Api.const.XTP_POSITION_EFFECT_TYPE['XTP_POSITION_EFFECT_INIT']
            }
            EtfParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            CaseParmInsertMysql(case_goal, wt_reqs)
            rs = etfServiceTest(Api, case_goal, wt_reqs, component_stk_info)
            etf_creation_log(case_goal, rs)

        # --------二级市场,卖出etf-----------
        quantity = unit_info['etf_unit'] * stkparm['最小申赎单位']  # 二级市场卖出的etf数量
        quantity_list = split_etf_quantity(quantity)
        # 查询涨停价
        limitup_px = getUpPrice(stkparm['证券代码'])
        rs = {}
        for etf_quantity in quantity_list:
            wt_reqs_etf = {
                'business_type':
                Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_CASH'],
                'order_client_id':
                2,
                'market':
                Api.const.XTP_MARKET_TYPE['XTP_MKT_SH_A'],
                'ticker':
                stkparm['证券代码'],
                'side':
                Api.const.XTP_SIDE_TYPE['XTP_SIDE_SELL'],
                'price_type':
                Api.const.XTP_PRICE_TYPE['XTP_PRICE_BEST5_OR_CANCEL'],
                'price':
                limitup_px,
                'quantity':
                etf_quantity,
                'position_effect':
                Api.const.XTP_POSITION_EFFECT_TYPE['XTP_POSITION_EFFECT_INIT']
            }
            ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            CaseParmInsertMysql(case_goal, wt_reqs)
            rs = serviceTest(Api, case_goal, wt_reqs_etf)
            if rs['用例测试结果'] is False:
                etf_sell_log(case_goal, rs)
                self.assertEqual(rs['用例测试结果'], True)
                return
        etf_sell_log(case_goal, rs)

        # ------------二级市场卖出成份股-----------
        case_goal['期望状态'] = '废单'
        case_goal['errorID'] = 11010121
        case_goal['errorMSG'] = queryOrderErrorMsg(11010121)
        etf_component_info = QueryEtfComponentsInfoDB(stkparm['证券代码'],
                                                      wt_reqs['market'])
        rs = {}
        for stk_info in etf_component_info:
            stk_code = stk_info[0]
            components_share = QueryEtfComponentsDB(stkparm['证券代码'], stk_code)
            limitup_px = getUpPrice(stk_code)
            wt_reqs = {
                'business_type':
                Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_CASH'],
                'market':
                Api.const.XTP_MARKET_TYPE['XTP_MKT_SH_A'],
                'ticker':
                stk_code,
                'side':
                Api.const.XTP_SIDE_TYPE['XTP_SIDE_SELL'],
                'price_type':
                Api.const.XTP_PRICE_TYPE['XTP_PRICE_BEST5_OR_CANCEL'],
                'price':
                limitup_px,
                'quantity':
                components_share * unit_info['component_unit_sell'],
                'position_effect':
                Api.const.XTP_POSITION_EFFECT_TYPE['XTP_POSITION_EFFECT_INIT']
            }
            ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            rs = serviceTest(Api, case_goal, wt_reqs)
            if rs['用例测试结果'] is False:
                etf_components_sell_log(case_goal, rs)
                self.assertEqual(rs['用例测试结果'], True)
        etf_components_sell_log(case_goal, rs)
        self.assertEqual(rs['用例测试结果'], True)
 def test_YW_GGQQ_YWFXJHA_GOU_125(self):
     title = '买平(义务方平仓):限价-验资(可用资金=0且下单导致可用资金减少)'
     # 定义当前测试用例的期待值
     # 期望状态:初始、未成交、部成、全成、部撤已报、部撤、已报待撤、已撤、废单、撤废、内部撤单
     # xtp_ID和cancel_xtpID默认为0,不需要变动
     case_goal = {
         '期望状态': '废单',
         'errorID': 11010120,
         'errorMSG': queryOrderErrorMsg(11010120),
         '是否生成报单': '是',
         '是否是撤废': '否',
         'xtp_ID': 0,
         'cancel_xtpID': 0,
     }
     logger.warning(title)
     # 定义委托参数信息------------------------------------------
     # 参数:证券代码、市场、证券类型、证券状态、交易状态、买卖方向(B买S卖)、期望状态、Api
     stkparm = QueryStkPriceQty('10001319', '1', '*', '1', '0', 'C',
                                case_goal['期望状态'], Api)
     # 如果下单参数获取失败,则用例失败
     if stkparm['返回结果'] is False:
         rs = {
             '用例测试结果': stkparm['返回结果'],
             '测试错误原因': '获取下单参数失败,' + stkparm['错误原因'],
         }
         logger.error('查询结果为False,错误原因: {0}'.format(
             json.dumps(rs['测试错误原因'], encoding='UTF-8',
                        ensure_ascii=False)))
         self.assertEqual(rs['用例测试结果'], True)
     else:
         wt_reqs = {
             'business_type':
             Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_OPTION'],
             'order_client_id':
             1,
             'market':
             Api.const.XTP_MARKET_TYPE['XTP_MKT_SH_A'],
             'ticker':
             stkparm['证券代码'],
             'side':
             Api.const.XTP_SIDE_TYPE['XTP_SIDE_BUY'],
             'position_effect':
             Api.const.
             XTP_POSITION_EFFECT_TYPE['XTP_POSITION_EFFECT_CLOSE'],
             'price_type':
             Api.const.XTP_PRICE_TYPE['XTP_PRICE_LIMIT'],
             'price':
             stkparm['涨停价'],
             'quantity':
             1
         }
         ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
         CaseParmInsertMysql(case_goal, wt_reqs)
         rs = serviceTest(Api, case_goal, wt_reqs)
         if rs['用例测试结果']:
             logger.warning('执行结果为{0}'.format(str(rs['用例测试结果'])))
         else:
             logger.warning('执行结果为{0},{1},{2}'.format(
                 str(rs['用例测试结果']), str(rs['用例错误源']),
                 json.dumps(rs['用例错误原因'],
                            encoding='UTF-8',
                            ensure_ascii=False)))
         self.assertEqual(rs['用例测试结果'], True)  # 4
Exemple #4
0
    def test_YW_ETFSS_SZSG_036(self):
        # -----------ETF申购-------------
        title = '深圳ETF申购--可现金替代:(T-1日+T日)部分成分股&' \
                '资金足额&计算现金比例<最大现金比例→T日申购ETF'
        # 定义当前测试用例的期待值
        # 期望状态:初始、未成交、部成、全成、部撤已报、部撤、已报待撤、已撤、废单、撤废、内部撤单
        # xtp_ID和cancel_xtpID默认为0,不需要变动
        case_goal = {
            'case_ID': 'ATC-202-36',
            '期望状态': '全成',
            'errorID': 0,
            'errorMSG': '',
            '是否生成报单': '是',
            '是否是撤废': '否',
            'xtp_ID': 0,
            'cancel_xtpID': 0,
        }
        logger.warning(title + ', case_ID=' + case_goal['case_ID'])
        unit_info = {
            'ticker': '169122',  # etf代码
            'component_unit_buy': 100,  # 成分股买入数量或单位,大于等于100为数量,否则为份数
            'etf_unit': 1,  # etf申购单位数
            'component_unit_sell': 100  # 成分股卖出数量或单位,大于等于100为数量,否则为份数
        }

        # -----------T日买入成分股-------------
        etf_basket_add(Api, Api.const.XTP_MARKET_TYPE['XTP_MKT_SZ_A'],
                       unit_info['ticker'], unit_info['component_unit_buy'])

        # -----------查询ETF申购前成分股持仓-------------
        component_stk_info = etf_get_all_component_stk(unit_info['ticker'])

        # -----------ETF申购-------------
        # 参数:证券代码、市场、证券类型、证券状态、交易状态、买卖方向(B买S卖)、期望状态、Api
        stkparm = QueryEtfQty(unit_info['ticker'], '2', '14', '2', '0', 'B',
                              case_goal['期望状态'], Api)

        # 定义委托参数信息------------------------------------------
        # 如果下单参数获取失败,则用例失败
        if stkparm['返回结果'] is False:
            rs = {
                '用例测试结果': stkparm['返回结果'],
                '用例错误原因': '获取下单参数失败, ' + stkparm['错误原因'],
            }
            etf_query_log(case_goal, rs)
            self.assertEqual(rs['用例测试结果'], True)
        else:
            wt_reqs = {
                'business_type':
                Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_ETF'],
                'market':
                Api.const.XTP_MARKET_TYPE['XTP_MKT_SZ_A'],
                'ticker':
                stkparm['证券代码'],
                'side':
                Api.const.XTP_SIDE_TYPE['XTP_SIDE_PURCHASE'],
                'price_type':
                Api.const.XTP_PRICE_TYPE['XTP_PRICE_LIMIT'],
                'quantity':
                int(unit_info['etf_unit'] * stkparm['最小申赎单位']),
            }
            EtfParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            CaseParmInsertMysql(case_goal, wt_reqs)
            rs = etfServiceTest(Api, case_goal, wt_reqs, component_stk_info)
            etf_creation_log(case_goal, rs)

        # --------二级市场,卖出etf-----------
        quantity = int(unit_info['etf_unit'] *
                       stkparm['最小申赎单位'])  # 二级市场卖出的etf数量
        quantity_list = split_etf_quantity(quantity)
        # 查询涨停价
        limitup_px = getUpPrice(stkparm['证券代码'])
        rs = {}
        for etf_quantity in quantity_list:
            wt_reqs_etf = {
                'business_type':
                Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_CASH'],
                'market':
                Api.const.XTP_MARKET_TYPE['XTP_MKT_SZ_A'],
                'ticker':
                stkparm['证券代码'],
                'side':
                Api.const.XTP_SIDE_TYPE['XTP_SIDE_SELL'],
                'price_type':
                Api.const.XTP_PRICE_TYPE['XTP_PRICE_BEST5_OR_CANCEL'],
                'price':
                limitup_px,
                'quantity':
                etf_quantity,
            }
            ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            CaseParmInsertMysql(case_goal, wt_reqs)
            rs = serviceTest(Api, case_goal, wt_reqs_etf)
            if rs['用例测试结果'] is False:
                etf_sell_log(case_goal, rs)
                self.assertEqual(rs['用例测试结果'], True)
                return
        etf_sell_log(case_goal, rs)

        # ------------二级市场卖出成份股-----------
        case_goal['期望状态'] = '废单'
        case_goal['errorID'] = 11010121
        case_goal['errorMSG'] = queryOrderErrorMsg(11010121)
        etf_component_info = QueryEtfComponentsInfoDB(stkparm['证券代码'],
                                                      wt_reqs['market'])
        rs = {}
        for stk_info in etf_component_info:
            stk_code = stk_info[0]
            components_share = QueryEtfComponentsDB(stkparm['证券代码'], stk_code)
            components_total = unit_info['component_unit_sell'] \
                if unit_info['component_unit_sell'] >= 100 \
                else int(components_share * unit_info['component_unit_sell'])
            quantity = get_valid_amount(components_total)
            limitup_px = getUpPrice(stk_code)
            wt_reqs = {
                'business_type':
                Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_CASH'],
                'market':
                Api.const.XTP_MARKET_TYPE['XTP_MKT_SZ_A'],
                'ticker':
                stk_code,
                'side':
                Api.const.XTP_SIDE_TYPE['XTP_SIDE_SELL'],
                'price_type':
                Api.const.XTP_PRICE_TYPE['XTP_PRICE_BEST5_OR_CANCEL'],
                'price':
                limitup_px,
                'quantity':
                quantity,
            }
            ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            rs = serviceTest(Api, case_goal, wt_reqs)
            if rs['用例测试结果'] is False:
                etf_components_sell_log(case_goal, rs)
                self.assertEqual(rs['用例测试结果'], True)
        etf_components_sell_log(case_goal, rs)
        self.assertEqual(rs['用例测试结果'], True)
Exemple #5
0
    def test_YCHF_KCBYCHF_OMS_202(self):
        title = 'OMS断网(沪A五档即成转限价:买入最低特殊费用=0)'
        # 定义当前测试用例的期待值
        # 期望状态:初始、未成交、部成、全成、部撤已报、部撤、已报待撤、已撤、废单、撤废、内部撤单
        # xtp_ID和cancel_xtpID默认为0,不需要变动

        case_goal = {
            '期望状态': '全成',
            'errorID': 0,
            'errorMSG': queryOrderErrorMsg(0),
            '是否生成报单': '是',
            '是否是撤废': '否',
            # '是否是新股申购': '否',
            'xtp_ID': 0,
            'cancel_xtpID': 0,
        }
        logger.warning(title)
        # 定义委托参数信息------------------------------------------
        # 参数:证券代码、市场、证券类型、证券状态、交易状态、买卖方向(B买S卖)、期望状态、Api
        stkparm = QueryStkPriceQty('688000', '1', '4', '2', '0', 'B',
                                   case_goal['期望状态'], Api)
        # 如果下单参数获取失败,则用例失败
        if stkparm['返回结果'] is False:
            rs = {
                '报单测试结果': stkparm['返回结果'],
                '测试错误原因': '获取下单参数失败,' + stkparm['错误原因'],
            }
            print(stkparm['错误原因'])
            self.assertEqual(rs['报单测试结果'], True)
        else:
            wt_reqs = {
                'business_type':
                Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_CASH'],
                'order_client_id':
                2,
                'market':
                Api.const.XTP_MARKET_TYPE['XTP_MKT_SH_A'],
                'ticker':
                stkparm['证券代码'],
                'side':
                Api.const.XTP_SIDE_TYPE['XTP_SIDE_BUY'],
                'price_type':
                Api.const.XTP_PRICE_TYPE['XTP_PRICE_BEST5_OR_LIMIT'],
                'price':
                stkparm['涨停价'],
                'quantity':
                300,
                'position_effect':
                Api.const.XTP_POSITION_EFFECT_TYPE['XTP_POSITION_EFFECT_INIT']
            }

            rs = serviceTest(Api, case_goal, wt_reqs)
            logger.warning('执行结果为' + str(rs['报单测试结果']) + ',' +
                           str(rs['用例错误源']) + ',' + str(rs['用例错误原因']))

            ## 还原费率表
            sql_transfer = SqlData_Transfer()
            sql_transfer.transfer_xtp_default_fee_rate('YW_KCB_BAK_000')
            oms_restart()

            self.assertEqual(rs['报单测试结果'], True)  # 212
    def test_YW_ETFSS_SZSH_018(self):
        # -----------ETF赎回-------------
        title = '深圳ETF赎回--允许现金替代:T-1日无ETF持仓→T日赎回ETF'
        # 定义当前测试用例的期待值
        # 期望状态:初始、未成交、部成、全成、部撤已报、部撤、已报待撤、已撤、废单、撤废、内部撤单
        # xtp_ID和cancel_xtpID默认为0,不需要变动
        case_goal = {
            'case_ID': 'ATC-204-018',
            '期望状态': '废单',
            'errorID': 11010121,
            'errorMSG': queryOrderErrorMsg(11010121),
            '是否生成报单': '是',
            '是否是撤废': '否',
            'xtp_ID': 0,
            'cancel_xtpID': 0,
        }
        logger.warning(title + ', case_ID=' + case_goal['case_ID'])
        unit_info = {
            'ticker': '189901',  # etf代码
            'etf_unit': 1,  # etf赎回单位数
            'etf_unit_sell': 1,  # etf卖出单位数
            'component_unit_sell': 1  # 成分股卖出单位数
        }

        # -----------ETF赎回-------------
        # 参数:证券代码、市场、证券类型、证券状态、交易状态、买卖方向(B买S卖)、期望状态、Api
        stkparm = QueryEtfQty(unit_info['ticker'], '2', '14', '2', '0',
                              'B', case_goal['期望状态'], Api)

        # 定义委托参数信息------------------------------------------
        # 如果下单参数获取失败,则用例失败
        if stkparm['返回结果'] is False:
            rs = {
                '用例测试结果': stkparm['返回结果'],
                '用例错误原因': '获取下单参数失败, ' + stkparm['错误原因'],
            }
            etf_query_log(case_goal, rs)
            self.assertEqual(rs['用例测试结果'], True)
        else:
            wt_reqs = {
                'business_type':
                    Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_ETF'],
                'market':
                    Api.const.XTP_MARKET_TYPE['XTP_MKT_SZ_A'],
                'ticker':
                    stkparm['证券代码'],
                'side':
                    Api.const.XTP_SIDE_TYPE['XTP_SIDE_REDEMPTION'],
                'price_type':
                    Api.const.XTP_PRICE_TYPE['XTP_PRICE_LIMIT'],
                'quantity':
                    int(unit_info['etf_unit'] * stkparm['最小申赎单位']),
            }
            EtfParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            CaseParmInsertMysql(case_goal, wt_reqs)
            rs = etfServiceTest(Api, case_goal, wt_reqs)
            etf_creation_log(case_goal, rs)

        # --------二级市场,卖出etf-----------
        quantity = int(unit_info['etf_unit_sell'] *
                       stkparm['最小申赎单位'])  # 二级市场卖出的etf数量
        quantity_list = split_etf_quantity(quantity)
        # 查询涨停价
        limitup_px = getUpPrice(stkparm['证券代码'])
        rs = {}
        for etf_quantity in quantity_list:
            wt_reqs_etf = {
                'business_type':
                    Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_CASH'],
                'market':
                    Api.const.XTP_MARKET_TYPE['XTP_MKT_SZ_A'],
                'ticker':
                    stkparm['证券代码'],
                'side':
                    Api.const.XTP_SIDE_TYPE['XTP_SIDE_SELL'],
                'price_type':
                    Api.const.XTP_PRICE_TYPE['XTP_PRICE_BEST5_OR_CANCEL'],
                'price':
                    limitup_px,
                'quantity':
                    etf_quantity,
            }
            ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            CaseParmInsertMysql(case_goal, wt_reqs)
            rs = serviceTest(Api, case_goal, wt_reqs_etf)
            if rs['用例测试结果'] is False:
                etf_sell_log(case_goal, rs)
                self.assertEqual(rs['用例测试结果'], True)
                return
        etf_sell_log(case_goal, rs)

        # ------------二级市场卖出成份股-----------
        etf_component_info = QueryEtfComponentsInfoDB(stkparm['证券代码'],wt_reqs['market'])
        rs = {}
        for stk_info in etf_component_info:
            stk_code = stk_info[0]
            components_share = QueryEtfComponentsDB(stkparm['证券代码'],
                                                    stk_code)
            components_total = int(
                components_share * unit_info['component_unit_sell'])
            quantity = get_valid_amount(components_total)
            limitup_px = getUpPrice(stk_code)
            wt_reqs = {
                'business_type':
                    Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_CASH'],
                'market':
                    Api.const.XTP_MARKET_TYPE['XTP_MKT_SZ_A'],
                'ticker':
                    stk_code,
                'side':
                    Api.const.XTP_SIDE_TYPE['XTP_SIDE_SELL'],
                'price_type':
                    Api.const.XTP_PRICE_TYPE['XTP_PRICE_BEST5_OR_CANCEL'],
                'price':
                    limitup_px,
                'quantity':
                    quantity,
            }
            ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            rs = serviceTest(Api, case_goal, wt_reqs)
            if rs['用例测试结果'] is False:
                etf_components_sell_log(case_goal, rs)
                self.assertEqual(rs['用例测试结果'], True)
        etf_components_sell_log(case_goal, rs)
        self.assertEqual(rs['用例测试结果'], True)
Exemple #7
0
    def test_YW_ETFSS_SZSG_027(self):
        # -----------ETF申购-------------
        title = '深圳ETF申购--可现金替代:T-1日部分成分股' \
                '&资金不足&计算现金比例<最大现金比例→T日申购ETF'
        # 定义当前测试用例的期待值
        # 期望状态:初始、未成交、部成、全成、部撤已报、部撤、已报待撤、已撤、废单、撤废、内部撤单
        # xtp_ID和cancel_xtpID默认为0,不需要变动
        case_goal = {
            'case_ID': 'ATC-202-27',
            '期望状态': '废单',
            'errorID': 11010120,
            'errorMSG': queryOrderErrorMsg(11010120),
            '是否生成报单': '是',
            '是否是撤废': '否',
            'xtp_ID': 0,
            'cancel_xtpID': 0,
        }
        logger.warning(title + ', case_ID=' + case_goal['case_ID'])
        unit_info = {
            'ticker': '169113',  # etf代码
            'etf_unit': 1,  # etf申购单位数
            # 成分股卖出单位数, 为方便测试, T-1日买入成分股和T日卖出成分股数量取0.5unit
            'component_unit_sell': 100
        }

        # -----------ETF申购-------------
        # 参数:证券代码、市场、证券类型、证券状态、交易状态、买卖方向(B买S卖)、期望状态、Api
        stkparm = QueryEtfQty(unit_info['ticker'], '2', '14', '2', '0', 'B',
                              case_goal['期望状态'], Api)

        # 定义委托参数信息------------------------------------------
        # 如果下单参数获取失败,则用例失败
        if stkparm['返回结果'] is False:
            rs = {
                '用例测试结果': stkparm['返回结果'],
                '用例错误原因': '获取下单参数失败, ' + stkparm['错误原因'],
            }
            etf_query_log(case_goal, rs)
            self.assertEqual(rs['用例测试结果'], True)
        else:
            wt_reqs = {
                'business_type':
                Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_ETF'],
                'market':
                Api.const.XTP_MARKET_TYPE['XTP_MKT_SZ_A'],
                'ticker':
                stkparm['证券代码'],
                'side':
                Api.const.XTP_SIDE_TYPE['XTP_SIDE_PURCHASE'],
                'price_type':
                Api.const.XTP_PRICE_TYPE['XTP_PRICE_LIMIT'],
                'quantity':
                int(unit_info['etf_unit'] * stkparm['最小申赎单位']),
            }
            EtfParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            CaseParmInsertMysql(case_goal, wt_reqs)
            rs = etfServiceTest(Api, case_goal, wt_reqs)
            etf_creation_log(case_goal, rs)

        # --------二级市场,卖出etf-----------
        case_goal['errorID'] = 11010121
        case_goal['errorMSG'] = queryOrderErrorMsg(11010121)
        quantity = int(unit_info['etf_unit'] *
                       stkparm['最小申赎单位'])  # 二级市场卖出的etf数量
        quantity_list = split_etf_quantity(quantity)
        # 查询涨停价
        limitup_px = getUpPrice(stkparm['证券代码'])
        rs = {}
        for etf_quantity in quantity_list:
            wt_reqs_etf = {
                'business_type':
                Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_CASH'],
                'market':
                Api.const.XTP_MARKET_TYPE['XTP_MKT_SZ_A'],
                'ticker':
                stkparm['证券代码'],
                'side':
                Api.const.XTP_SIDE_TYPE['XTP_SIDE_SELL'],
                'price_type':
                Api.const.XTP_PRICE_TYPE['XTP_PRICE_BEST5_OR_CANCEL'],
                'price':
                limitup_px,
                'quantity':
                etf_quantity,
            }
            ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            CaseParmInsertMysql(case_goal, wt_reqs)
            rs = serviceTest(Api, case_goal, wt_reqs_etf)
            if rs['用例测试结果'] is False:
                etf_sell_log(case_goal, rs)
                self.assertEqual(rs['用例测试结果'], True)
                return
        etf_sell_log(case_goal, rs)

        # ------------二级市场卖出成份股-----------
        case_goal['期望状态'] = '全成'
        case_goal['errorID'] = 0
        case_goal['errorMSG'] = ''
        etf_component_info = QueryEtfComponentsInfoDB(stkparm['证券代码'],
                                                      wt_reqs['market'])
        rs = {}
        for stk_info in etf_component_info:
            stk_code = stk_info[0]
            limitup_px = getUpPrice(stk_code)
            wt_reqs = {
                'business_type':
                Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_CASH'],
                'market':
                Api.const.XTP_MARKET_TYPE['XTP_MKT_SZ_A'],
                'ticker':
                stk_code,
                'side':
                Api.const.XTP_SIDE_TYPE['XTP_SIDE_SELL'],
                'price_type':
                Api.const.XTP_PRICE_TYPE['XTP_PRICE_BEST5_OR_CANCEL'],
                'price':
                limitup_px,
                'quantity':
                unit_info['component_unit_sell'],
            }
            ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            rs = serviceTest(Api, case_goal, wt_reqs)
            if rs['用例测试结果'] is False:
                etf_components_sell_log(case_goal, rs)
                self.assertEqual(rs['用例测试结果'], True)
        etf_components_sell_log(case_goal, rs)
        self.assertEqual(rs['用例测试结果'], True)
Exemple #8
0
    def test_YW_ETFMM_SZSJ_393_K(self):
        title = '交易日对方最优转限价卖-T+0买→T+0卖失败(已持有证券代码)'
        # 定义当前测试用例的期待值
        # 期望状态:初始、未成交、部成、全成、部撤已报、部撤、已报待撤、已撤、废单、撤废、内部撤单
        # xtp_ID和cancel_xtpID默认为0,不需要变动
        # 撤废:期望状态+是否是撤废=撤废类型。全成+是=oms全成后再撤单废单,未成交+是=交易所撤废,部撤+是=oms部撤后再撤单撤废,废单+是=废单后再撤废,已撤+是=oms已撤后再撤废
        case_goal = {
            '期望状态': '全成',
            'errorID': 0,
            'errorMSG': '',
            '是否生成报单': '是',
            '是否是撤废': '否',
            'xtp_ID': 0,
            'cancel_xtpID': 0,
        }
        # 定义委托参数信息------------------------------------------
        # 参数:证券代码、市场、证券类型、证券状态、交易状态、买卖方向(B买S卖)、期望状态、Api
        stkparm = QueryStkPriceQty('158267', '2', '15', '2', '0', 'S',
                                   case_goal['期望状态'], Api)
        # 如果下单参数获取失败,则用例失败
        if stkparm['返回结果'] is False:
            rs = {
                '用例测试结果': stkparm['返回结果'],
                '测试错误原因': '获取下单参数失败,' + stkparm['错误原因'],
            }
            self.assertEqual(rs['用例测试结果'], True)
        wt_reqs = {
            'business_type':
            Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_CASH'],
            'order_client_id':
            2,
            'market':
            Api.const.XTP_MARKET_TYPE['XTP_MKT_SZ_A'],
            'ticker':
            stkparm['证券代码'],
            'side':
            Api.const.XTP_SIDE_TYPE['XTP_SIDE_BUY'],
            'price_type':
            Api.const.XTP_PRICE_TYPE['XTP_PRICE_REVERSE_BEST_LIMIT'],
            'price':
            stkparm['随机中间价'],
            'quantity':
            100,
            'position_effect':
            Api.const.XTP_POSITION_EFFECT_TYPE['XTP_POSITION_EFFECT_INIT']
        }

        # T+0买
        title = '深圳A股交易日对方最优转限价卖(已持有证券代码)-T+0买'
        logger.warning(title)

        ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
        CaseParmInsertMysql(case_goal, wt_reqs)
        rs = serviceTest(Api, case_goal, wt_reqs)
        logger.warning('执行结果为' + str(rs['用例测试结果']) + ',' + str(rs['用例错误源']) +
                       ',' + str(rs['用例错误原因']))
        self.assertEqual(rs['用例测试结果'], True)
        # T+0卖
        title = '深圳A股交易日对方最优转限价卖(已持有证券代码)-T+0卖'
        logger.warning(title)
        wt_reqs['side'] = Api.const.XTP_SIDE_TYPE['XTP_SIDE_SELL']
        wt_reqs['quantity'] = 10100
        case_goal['期望状态'] = '废单'
        case_goal['errorID'] = 11010121
        case_goal['errorMSG'] = queryOrderErrorMsg(11010121)

        ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
        CaseParmInsertMysql(case_goal, wt_reqs)
        rs = serviceTest(Api, case_goal, wt_reqs)
        logger.warning('执行结果为' + str(rs['用例测试结果']) + ',' + str(rs['用例错误源']) +
                       ',' + str(rs['用例错误原因']))
        self.assertEqual(rs['用例测试结果'], True)
Exemple #9
0
    def test_YW_ETFSS_SHSH_049(self):
        # -----------ETF赎回-------------
        title = 'T-1日购买ETF-T日赎回ETF-用T日赎回得到的成分股申购ETF-卖T日赎回的ETF'
        # 定义当前测试用例的期待值
        # 期望状态:初始、未成交、部成、全成、部撤已报、部撤、已报待撤、已撤、废单、撤废、内部撤单
        # xtp_ID和cancel_xtpID默认为0,不需要变动
        case_goal = {
            'case_ID': 'ATC-204-049',
            '期望状态': '全成',
            'errorID': 0,
            'errorMSG': '',
            '是否生成报单': '是',
            '是否是撤废': '否',
            'xtp_ID': 0,
            'cancel_xtpID': 0,
        }
        logger.warning(title + ', case_ID=' + case_goal['case_ID'])
        unit_info = {
            'ticker': '580460',  # etf代码
            'etf_unit': 1,  # etf赎回单位数
            'etf_unit_sell': 1,  # etf卖出单位数
            'component_unit_sell': 1  # 成分股卖出单位数
        }

        # -----------ETF赎回-------------
        # 参数:证券代码、市场、证券类型、证券状态、交易状态、买卖方向(B买S卖)、期望状态、Api
        stkparm = QueryEtfQty(unit_info['ticker'], '1', '14', '2', '0', 'B',
                              case_goal['期望状态'], Api)

        # -----------查询ETF赎回前成分股持仓-------------
        component_stk_info = etf_get_all_component_stk(unit_info['ticker'])

        # 定义委托参数信息------------------------------------------
        # 如果下单参数获取失败,则用例失败
        if stkparm['返回结果'] is False:
            rs = {
                '用例测试结果': stkparm['返回结果'],
                '用例错误原因': '获取下单参数失败, ' + stkparm['错误原因'],
            }
            etf_query_log(case_goal, rs)
            self.assertEqual(rs['用例测试结果'], True)
        else:
            wt_reqs = {
                'business_type':
                Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_ETF'],
                'order_client_id':
                2,
                'market':
                Api.const.XTP_MARKET_TYPE['XTP_MKT_SH_A'],
                'ticker':
                stkparm['证券代码'],
                'side':
                Api.const.XTP_SIDE_TYPE['XTP_SIDE_REDEMPTION'],
                'price_type':
                Api.const.XTP_PRICE_TYPE['XTP_PRICE_LIMIT'],
                'quantity':
                int(unit_info['etf_unit'] * stkparm['最小申赎单位']),
            }
            EtfParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            CaseParmInsertMysql(case_goal, wt_reqs)
            rs = etfServiceTest(Api, case_goal, wt_reqs, component_stk_info)
            etf_creation_log(case_goal, rs)

        # -----------ETF申购-------------
        # -----------查询ETF赎回前成分股持仓-------------

        case_goal['期望状态'] = '废单'
        case_goal['errorID'] = 11010121
        case_goal['errorMSG'] = queryOrderErrorMsg(11010121)
        # 如果下单参数获取失败,则用例失败
        wt_reqs = {
            'business_type':
            Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_ETF'],
            'market': Api.const.XTP_MARKET_TYPE['XTP_MKT_SH_A'],
            'ticker': stkparm['证券代码'],
            'side': Api.const.XTP_SIDE_TYPE['XTP_SIDE_PURCHASE'],
            'price_type': Api.const.XTP_PRICE_TYPE['XTP_PRICE_LIMIT'],
            'quantity': int(unit_info['etf_unit'] * stkparm['最小申赎单位']),
        }
        EtfParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
        CaseParmInsertMysql(case_goal, wt_reqs)
        rs = etfServiceTest(Api, case_goal, wt_reqs)
        etf_creation_log(case_goal, rs)

        # ------------二级市场卖出成份股-----------
        case_goal['期望状态'] = '全成'
        case_goal['errorID'] = 0
        case_goal['errorMSG'] = ''
        etf_component_info = QueryEtfComponentsInfoDB(stkparm['证券代码'],
                                                      wt_reqs['market'])
        rs = {}
        for stk_info in etf_component_info:
            if stk_info[1] != 2:
                stk_code = stk_info[0]
                components_share = QueryEtfComponentsDB(
                    stkparm['证券代码'], stk_code)
                components_total = int(components_share *
                                       unit_info['component_unit_sell'])
                quantity = get_valid_amount(components_total)
                limitup_px = getUpPrice(stk_code)
                wt_reqs = {
                    'business_type':
                    Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_CASH'],
                    'order_client_id':
                    2,
                    'market':
                    Api.const.XTP_MARKET_TYPE['XTP_MKT_SH_A'],
                    'ticker':
                    stk_code,
                    'side':
                    Api.const.XTP_SIDE_TYPE['XTP_SIDE_SELL'],
                    'price_type':
                    Api.const.XTP_PRICE_TYPE['XTP_PRICE_BEST5_OR_CANCEL'],
                    'price':
                    limitup_px,
                    'quantity':
                    quantity,
                }
                ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
                rs = serviceTest(Api, case_goal, wt_reqs)
                if rs['用例测试结果'] is False:
                    etf_components_sell_log(case_goal, rs)
                    self.assertEqual(rs['用例测试结果'], True)
        etf_components_sell_log(case_goal, rs)
        self.assertEqual(rs['用例测试结果'], True)
    def test_YW_ETFSS_SHSG_046(self):
        # -----------ETF申购-------------
        title = '上海ETF申购真实ETF-资金充足,申购所需的成分股不足(可现金替代的比例>最大现金替代比例)'
        # 定义当前测试用例的期待值
        # 期望状态:初始、未成交、部成、全成、部撤已报、部撤、已报待撤、已撤、废单、撤废、内部撤单
        # xtp_ID和cancel_xtpID默认为0,不需要变动
        case_goal = {
            'case_ID': 'ATC-202-46',
            '期望状态': '废单',
            'errorID': 11010203,
            'errorMSG': queryOrderErrorMsg(11010203),
            '是否生成报单': '是',
            '是否是撤废': '否',
            'xtp_ID': 0,
            'cancel_xtpID': 0,
        }
        logger.warning(title + ', case_ID=' + case_goal['case_ID'])
        unit_info = {
            'ticker': '570130',  # etf代码
            'optional_unit': 100,  # 买入允许现金替代成分股份数或者数量,大于等于100为买入数量
            'forbidden_unit': 1,  # 买入禁止现金替代成分股份数
            'etf_unit': 1,  # etf申购单位数
        }

        # -----------T日买入成分股-------------
        etf_basket_add_real(
            Api,
            Api.const.XTP_MARKET_TYPE['XTP_MKT_SH_A'],
            'B',
            unit_info,
            case_goal,
        )
        time.sleep(3)

        # -----------ETF申购-------------
        # 参数:证券代码、市场、证券类型、证券状态、交易状态、买卖方向(B买S卖)、期望状态、Api
        stkparm = QueryEtfQty(unit_info['ticker'], '1', '14', '2', '0', 'B',
                              case_goal['期望状态'], Api)

        # 定义委托参数信息------------------------------------------
        # 如果下单参数获取失败,则用例失败
        if stkparm['返回结果'] is False:
            rs = {
                '用例测试结果': stkparm['返回结果'],
                '用例错误原因': '获取下单参数失败, ' + stkparm['错误原因'],
            }
            etf_query_log(case_goal, rs)
            self.assertEqual(rs['用例测试结果'], True)
        else:
            wt_reqs = {
                'business_type':
                Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_ETF'],
                'market':
                Api.const.XTP_MARKET_TYPE['XTP_MKT_SH_A'],
                'ticker':
                stkparm['证券代码'],
                'side':
                Api.const.XTP_SIDE_TYPE['XTP_SIDE_PURCHASE'],
                'price_type':
                Api.const.XTP_PRICE_TYPE['XTP_PRICE_LIMIT'],
                'quantity':
                int(unit_info['etf_unit'] * stkparm['最小申赎单位']),
                'position_effect':
                Api.const.XTP_POSITION_EFFECT_TYPE['XTP_POSITION_EFFECT_INIT']
            }
            EtfParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            CaseParmInsertMysql(case_goal, wt_reqs)
            rs = etfServiceTest(Api, case_goal, wt_reqs)
            etf_creation_log(case_goal, rs)
        time.sleep(2)
Exemple #11
0
    def test_YW_ETFSS_SZSH_047_2(self):
        # -----------ETF赎回-------------
        title = '深圳ETF赎回--交易时间对状态为“全成”进行撤单'
        # 定义当前测试用例的期待值
        # 期望状态:初始、未成交、部成、全成、部撤已报、部撤、已报待撤、已撤、废单、撤废、内部撤单
        # xtp_ID和cancel_xtpID默认为0,不需要变动
        case_goal = {
            'case_ID': 'ATC-204-046',
            '期望状态': '全成',
            'errorID': 11000343,
            'errorMSG': queryOrderErrorMsg(11000343),
            '是否生成报单': '是',
            '是否是撤废': '否',
            'xtp_ID': 0,
            'cancel_xtpID': 0,
        }
        logger.warning(title + ', case_ID=' + case_goal['case_ID'])
        unit_info = {
            'ticker': '179770',  # etf代码
            'etf_unit': 1,  # etf赎回单位数
            'etf_unit_buy': 1,  # etf买入单位数
        }

        # -----------ETF赎回-------------
        # 参数:证券代码、市场、证券类型、证券状态、交易状态、买卖方向(B买S卖)、期望状态、Api
        stkparm = QueryEtfQty(unit_info['ticker'], '2', '14', '2', '0', 'B',
                              case_goal['期望状态'], Api)

        # -----------查询ETF赎回前成分股持仓-------------
        component_stk_info = etf_get_all_component_stk(unit_info['ticker'])

        # 定义委托参数信息------------------------------------------
        # 如果下单参数获取失败,则用例失败
        if stkparm['返回结果'] is False:
            rs = {
                '用例测试结果': stkparm['返回结果'],
                '用例错误原因': '获取下单参数失败, ' + stkparm['错误原因'],
            }
            etf_query_log(case_goal, rs)
            self.assertEqual(rs['用例测试结果'], True)
        else:
            wt_reqs = {
                'business_type':
                Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_ETF'],
                'order_client_id':
                2,
                'market':
                Api.const.XTP_MARKET_TYPE['XTP_MKT_SZ_A'],
                'ticker':
                stkparm['证券代码'],
                'side':
                Api.const.XTP_SIDE_TYPE['XTP_SIDE_REDEMPTION'],
                'price_type':
                Api.const.XTP_PRICE_TYPE['XTP_PRICE_LIMIT'],
                'quantity':
                int(unit_info['etf_unit'] * stkparm['最小申赎单位']),
            }
            EtfParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            CaseParmInsertMysql(case_goal, wt_reqs)
            rs = etfServiceTest(Api, case_goal, wt_reqs, component_stk_info,
                                self.py_name)
            etf_creation_log(case_goal, rs)
    def test_YW_ETFSS_SHSG_038(self):
        # -----------ETF申购-------------
        title = '上海ETF申购--现金替代比例边界值验证(最大现金比例+0.00001)'
        # 定义当前测试用例的期待值
        # 期望状态:初始、未成交、部成、全成、部撤已报、部撤、已报待撤、已撤、废单、撤废、内部撤单
        # xtp_ID和cancel_xtpID默认为0,不需要变动
        case_goal = {
            'case_ID': 'ATC-202-38',
            '期望状态': '废单',
            'errorID': 11010203,
            'errorMSG': queryOrderErrorMsg(11010203),
            '是否生成报单': '是',
            '是否是撤废': '否',
            'xtp_ID': 0,
            'cancel_xtpID': 0,
        }
        logger.warning(title + ', case_ID=' + case_goal['case_ID'])
        unit_info = {
            'ticker': '590520',  # etf代码
            'component_unit_buy': 100,  # 成分股买入数量或单位,大于等于100为数量,否则为份数
            'etf_unit': 1,  # etf申购单位数
            # 成分股卖出单位数, 为方便测试, T-1日买入成分股和T日卖出成分股数量取0.5unit
            'component_unit_sell': 0.5
        }

        # -----------T日买入成分股-------------
        etf_basket_add(Api, Api.const.XTP_MARKET_TYPE['XTP_MKT_SH_A'],
                       unit_info['ticker'], unit_info['component_unit_buy'])

        # -----------ETF申购-------------
        # 参数:证券代码、市场、证券类型、证券状态、交易状态、买卖方向(B买S卖)、期望状态、Api
        stkparm = QueryEtfQty(unit_info['ticker'], '1', '14', '2', '0', 'B',
                              case_goal['期望状态'], Api)

        # 定义委托参数信息------------------------------------------
        # 如果下单参数获取失败,则用例失败
        if stkparm['返回结果'] is False:
            rs = {
                '用例测试结果': stkparm['返回结果'],
                '用例错误原因': '获取下单参数失败, ' + stkparm['错误原因'],
            }
            etf_query_log(case_goal, rs)
            self.assertEqual(rs['用例测试结果'], True)
        else:
            wt_reqs = {
                'business_type':
                Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_ETF'],
                'market':
                Api.const.XTP_MARKET_TYPE['XTP_MKT_SH_A'],
                'ticker':
                stkparm['证券代码'],
                'side':
                Api.const.XTP_SIDE_TYPE['XTP_SIDE_PURCHASE'],
                'price_type':
                Api.const.XTP_PRICE_TYPE['XTP_PRICE_LIMIT'],
                'quantity':
                int(unit_info['etf_unit'] * stkparm['最小申赎单位']),
                'position_effect':
                Api.const.XTP_POSITION_EFFECT_TYPE['XTP_POSITION_EFFECT_INIT']
            }
            EtfParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            CaseParmInsertMysql(case_goal, wt_reqs)
            rs = etfServiceTest(Api, case_goal, wt_reqs)
            etf_creation_log(case_goal, rs)

        # --------二级市场,卖出etf-----------
        case_goal['errorID'] = 11010121
        case_goal['errorMSG'] = queryOrderErrorMsg(11010121)
        quantity = int(unit_info['etf_unit'] *
                       stkparm['最小申赎单位'])  # 二级市场卖出的etf数量
        quantity_list = split_etf_quantity(quantity)
        # 查询涨停价
        limitup_px = getUpPrice(stkparm['证券代码'])
        rs = {}
        for etf_quantity in quantity_list:
            wt_reqs_etf = {
                'business_type':
                Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_CASH'],
                'market':
                Api.const.XTP_MARKET_TYPE['XTP_MKT_SH_A'],
                'ticker':
                stkparm['证券代码'],
                'side':
                Api.const.XTP_SIDE_TYPE['XTP_SIDE_SELL'],
                'price_type':
                Api.const.XTP_PRICE_TYPE['XTP_PRICE_BEST5_OR_CANCEL'],
                'price':
                limitup_px,
                'quantity':
                etf_quantity,
                'position_effect':
                Api.const.XTP_POSITION_EFFECT_TYPE['XTP_POSITION_EFFECT_INIT']
            }
            ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            CaseParmInsertMysql(case_goal, wt_reqs)
            rs = serviceTest(Api, case_goal, wt_reqs_etf)
            if rs['用例测试结果'] is False:
                etf_sell_log(case_goal, rs)
                self.assertEqual(rs['用例测试结果'], True)
                return
        etf_sell_log(case_goal, rs)

        # ------------二级市场卖出成份股-----------
        etf_component_info = QueryEtfComponentsInfoDB(stkparm['证券代码'],
                                                      wt_reqs['market'])
        rs = {}
        for stk_info in etf_component_info:
            stk_code = stk_info[0]
            limitup_px = getUpPrice(stk_code)
            components_share = QueryEtfComponentsDB(stkparm['证券代码'], stk_code)
            components_total = int(components_share *
                                   unit_info['component_unit_sell'])
            quantity = get_valid_amount(components_total)
            wt_reqs = {
                'business_type':
                Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_CASH'],
                'market':
                Api.const.XTP_MARKET_TYPE['XTP_MKT_SH_A'],
                'ticker':
                stk_code,
                'side':
                Api.const.XTP_SIDE_TYPE['XTP_SIDE_SELL'],
                'price_type':
                Api.const.XTP_PRICE_TYPE['XTP_PRICE_BEST5_OR_CANCEL'],
                'price':
                limitup_px,
                'quantity':
                quantity,
                'position_effect':
                Api.const.XTP_POSITION_EFFECT_TYPE['XTP_POSITION_EFFECT_INIT']
            }
            ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            rs = serviceTest(Api, case_goal, wt_reqs)
            if rs['用例测试结果'] is False:
                etf_components_sell_log(case_goal, rs)
                self.assertEqual(rs['用例测试结果'], True)
        etf_components_sell_log(case_goal, rs)
        self.assertEqual(rs['用例测试结果'], True)
    def test_YW_KCB_HASPRICELIMIT_GPMM_SHSJ_WDZX_134(self):
        title = '交易日五档即成转限价卖-第一笔卖出大于200且含个股数量;第二笔卖出剩余小于200部分'
        # 定义当前测试用例的期待值
        # 期望状态:初始、未成交、部成、全成、部撤已报、部撤、已报待撤、已撤、废单、撤废、内部撤单
        # xtp_ID和cancel_xtpID默认为0,不需要变动

        case_goal = {
            '期望状态': '全成',
            'errorID': 0,
            'errorMSG': queryOrderErrorMsg(0),
            '是否生成报单': '是',
            '是否是撤废': '否',
            # '是否是新股申购': '',
            'xtp_ID': 0,
            'cancel_xtpID': 0,
        }
        logger.warning(title)
        # 定义委托参数信息------------------------------------------
        # 参数:证券代码、市场、证券类型、证券状态、交易状态、买卖方向(B买S卖)、期望状态、Api
        stkparm = QueryStkPriceQty('688007', '1', '4', '2', '0', 'S',
                                   case_goal['期望状态'], Api)
        # 如果下单参数获取失败,则用例失败
        if stkparm['返回结果'] is False:
            rs = {
                '用例测试结果': stkparm['返回结果'],
                '测试错误原因': '获取下单参数失败,' + stkparm['错误原因'],
            }
            print(stkparm['错误原因'])
            self.assertEqual(rs['用例测试结果'], True)
        else:
            wt_reqs = {
                'business_type':
                Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_CASH'],
                'order_client_id':
                2,
                'market':
                Api.const.XTP_MARKET_TYPE['XTP_MKT_SH_A'],
                'ticker':
                stkparm['证券代码'],
                'side':
                Api.const.XTP_SIDE_TYPE['XTP_SIDE_SELL'],
                'price_type':
                Api.const.XTP_PRICE_TYPE['XTP_PRICE_BEST5_OR_LIMIT'],
                'price':
                stkparm['涨停价'],
                'quantity':
                300,
                'position_effect':
                Api.const.XTP_POSITION_EFFECT_TYPE['XTP_POSITION_EFFECT_INIT']
            }
            ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            CaseParmInsertMysql(case_goal, wt_reqs)
            rs = serviceTest(Api, case_goal, wt_reqs)
            logger.warning('第一单执行结果为' + str(rs['用例测试结果']) + ',' +
                           str(rs['用例错误源']) + ',' + str(rs['用例错误原因']))
            #self.assertEqual(rs['用例测试结果'], True) # 217

            ## 下第二单:
            title = '下第二单:'

            logger.warning(title)
            wt_reqs["quantity"] = 199

            ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            CaseParmInsertMysql(case_goal, wt_reqs)
            rs_second = serviceTest(Api, case_goal, wt_reqs)
            logger.warning('第二单执行结果为' + str(rs_second['用例测试结果']) + ',' +
                           str(rs_second['用例错误源']) + ',' +
                           str(rs_second['用例错误原因']))
            if rs['用例测试结果'] == True:
                self.assertEqual(rs_second['用例测试结果'], True)  #
            else:
                self.assertEqual(rs['用例测试结果'], True)  #
    def test_YW_PGJK_SHKCB_013(self):
        title = '上海配股缴款--多次配股(超出总配股数)'
        # 定义当前测试用例的期待值
        # 期望状态:初始、未成交、部成、全成、部撤已报、部撤、已报待撤、已撤、废单、撤废、内部撤单
        # xtp_ID和cancel_xtpID默认为0,不需要变动

        case_goal = {
            '期望状态': '全成',
            'errorID': 0,
            'errorMSG': queryOrderErrorMsg(0),
            '是否生成报单': '是',
            '是否是撤废': '否',
            '是否是新股申购': '否',
            'xtp_ID': 0,
            'cancel_xtpID': 0,
        }
        case_goal.pop("是否是新股申购")
        logger.warning(title)
        # 定义委托参数信息------------------------------------------
        # 参数:证券代码、市场、证券类型、证券状态、交易状态、买卖方向(B买S卖)、期望状态、Api
        ticker = '785013'
        # '1', '0', '2', '0', 'B'
        # 如果下单参数获取失败,则用例失败

        wt_reqs = {
            'business_type':
            Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_ALLOTMENT'],
            'order_client_id':
            2,
            'market':
            Api.const.XTP_MARKET_TYPE['XTP_MKT_SH_A'],
            'ticker':
            ticker,
            'side':
            Api.const.XTP_SIDE_TYPE['XTP_SIDE_BUY'],
            'price_type':
            Api.const.XTP_PRICE_TYPE['XTP_PRICE_BEST5_OR_LIMIT'],
            # 'price': 1,
            'quantity':
            800,
            'position_effect':
            Api.const.XTP_POSITION_EFFECT_TYPE['XTP_POSITION_EFFECT_INIT']
        }
        # 第一次下单
        title = '上海 配股--多次配股-第一次下单'
        logger.warning(title)

        ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
        rs = serviceTest(Api, case_goal, wt_reqs)
        logger.warning('执行结果为' + str(rs['用例测试结果']) + ',' + str(rs['用例错误源']) +
                       ',' + str(rs['用例错误原因']))
        self.assertEqual(rs['用例测试结果'], True)  # 208

        # 第二次下单
        title = '上海 配股--多次配股-第二次下单'
        logger.warning(title)

        case_goal['期望状态'] = '废单'
        case_goal['errorID'] = 11010121
        case_goal['errorMSG'] = queryOrderErrorMsg(11010121)
        wt_reqs['quantity'] = 2000

        ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
        rs = serviceTest(Api, case_goal, wt_reqs)
        logger.warning('执行结果为' + str(rs['用例测试结果']) + ',' + str(rs['用例错误源']) +
                       ',' + str(rs['用例错误原因']))
        self.assertEqual(rs['用例测试结果'], True)  # 0

        # 第三次下单
        title = '上海 配股--多次配股-第三次下单'
        logger.warning(title)

        case_goal['期望状态'] = '废单'
        case_goal['errorID'] = 11010121
        case_goal['errorMSG'] = queryOrderErrorMsg(11010121)
        wt_reqs['quantity'] = 2000

        ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
        rs = serviceTest(Api, case_goal, wt_reqs)
        logger.warning('执行结果为' + str(rs['用例测试结果']) + ',' + str(rs['用例错误源']) +
                       ',' + str(rs['用例错误原因']))
        self.assertEqual(rs['用例测试结果'], True)  # 0
    def test_YW_KCB_HASPRICELIMIT_GPMM_SHSJ_WDZX_143(self):
        title = '分笔成交-累积成交金额 >= 手续费 且手续费大于最小值'
        # 定义当前测试用例的期待值
        # 期望状态:初始、未成交、部成、全成、部撤已报、部撤、已报待撤、已撤、废单、撤废、内部撤单
        # xtp_ID和cancel_xtpID默认为0,不需要变动

        case_goal = {
            '期望状态': '全成',
            'errorID': 0,
            'errorMSG': queryOrderErrorMsg(0),
            '是否生成报单': '是',
            '是否是撤废': '否',
            # '是否是新股申购': '',
            'xtp_ID': 0,
            'cancel_xtpID': 0,
        }
        logger.warning(title)
        # 定义委托参数信息------------------------------------------
        # 参数:证券代码、市场、证券类型、证券状态、交易状态、买卖方向(B买S卖)、期望状态、Api
        stkparm = QueryStkPriceQty('688011', '1', '4', '2', '0', 'S',
                                   case_goal['期望状态'], Api)
        # 如果下单参数获取失败,则用例失败
        if stkparm['返回结果'] is False:
            rs = {
                '用例测试结果': stkparm['返回结果'],
                '测试错误原因': '获取下单参数失败,' + stkparm['错误原因'],
            }
            print(stkparm['错误原因'])
            self.assertEqual(rs['用例测试结果'], True)
        else:
            wt_reqs = {
                'business_type':
                Api.const.XTP_BUSINESS_TYPE['XTP_BUSINESS_TYPE_CASH'],
                'order_client_id':
                5,
                'market':
                Api.const.XTP_MARKET_TYPE['XTP_MKT_SH_A'],
                'ticker':
                stkparm['证券代码'],
                'side':
                Api.const.XTP_SIDE_TYPE['XTP_SIDE_SELL'],
                'price_type':
                Api.const.XTP_PRICE_TYPE['XTP_PRICE_BEST5_OR_LIMIT'],
                'price':
                stkparm['涨停价'],
                'quantity':
                30000,
                'position_effect':
                Api.const.XTP_POSITION_EFFECT_TYPE['XTP_POSITION_EFFECT_INIT']
            }
            ParmIni(Api, case_goal['期望状态'], wt_reqs['price_type'])
            CaseParmInsertMysql(case_goal, wt_reqs)
            rs = serviceTest(Api, case_goal, wt_reqs)
            logger.warning('执行结果为' + str(rs['用例测试结果']) + ',' +
                           str(rs['用例错误源']) + ',' + str(rs['用例错误原因']))
            ## 还原可用资金
            sql_transfer = SqlData_Transfer()
            sql_transfer.transfer_fund_asset('YW_KCB_BAK_000')
            oms_restart()

            self.assertEqual(rs['用例测试结果'], True)  # 203