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
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
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)
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)
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)
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)
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)
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