def test_with_stage(env, stock_market, stock_code, stock_type, queue, log_file): result = [] stage_info = youyu.parser_yff_basic(basicConfig.env_stage, stock_market, stock_code, stock_type) live_info = youyu.parser_yff_basic(basicConfig.env_live, stock_market, stock_code, stock_type) util.add_message_file( log_file, "[%s]Market: %s Code: %s Response:%s" % (util.get_time(datetime.datetime.now()), stock_market, stock_code, str(live_info))) for key in stage_info.keys(): if stage_info.get(key) == live_info.get(key): result.append([ key, stage_info.get(key), live_info.get(key), basicConfig.test_pass ]) else: result.append([ key, stage_info.get(key), live_info.get(key), basicConfig.test_fail ]) queue.put({ "stock_market": stock_market, "stock_code": stock_code, "stock_type": stock_type, "result": util.test_result(result), "data": result }) return result
def test_by_thread(env, test_target, start_index, test_stocks): result = [] threads = [] # 获取每个子线程返回数据结果 q = Queue.Queue() test_stocks_length = len(test_stocks) if start_index + basicConfig.thread_num > test_stocks_length: end_index = test_stocks_length else: end_index = start_index + basicConfig.thread_num for n in xrange(start_index, end_index): threads.append( threading.Thread(target=test_target, args=(env, test_stocks[n][0], test_stocks[n][1], test_stocks[n][2], q, LOG))) for t in threads: t.start() for t in threads: t.join() while not q.empty(): result.append(q.get()) print "[%s] Progress: %s/%s" % (util.get_time( datetime.datetime.now()), str(end_index), str(test_stocks_length)) return result
def test_compare_other(env, stock_market, stock_code, stock_type, queue, log_file): youyu_result = youyu.parser_yff_basic(env, stock_market, stock_code, stock_type) sina_result = sina.parser_sina_basic(stock_market, stock_code) futu_result = futu.parser_futu_basic(stock_market, stock_code) util.add_message_file( log_file, "[%s]Market: %s Code: %s Response:%s" % (util.get_time(datetime.datetime.now()), stock_market, stock_code, str(youyu_result))) data = [] fail_item = [] for item in basicConfig.compare_other_data: youyu_num = str(youyu_result[item]) sina_num = str(sina_result[item]) futu_num = str(futu_result[item]) if util.check_error_code(sina_num) and util.check_error_code(futu_num): data.append( [item, youyu_num, sina_num, futu_num, basicConfig.test_skip]) elif sina_num == "None" and util.check_error_code(futu_num): data.append( [item, youyu_num, sina_num, futu_num, basicConfig.test_skip]) else: # ------------------------ 异常数据处理 ------------------------ # 处理 -- if youyu_result[item] == "--": sina_num = "--" futu_num = "--" # 处理不带单位的情况下,保留位数不一致,统一向有鱼股票看齐 if util.check_not_contain_chinese(youyu_num): sina_num = util.decimal_format(youyu_num, sina_num) futu_num = util.decimal_format(youyu_num, futu_num) # --------------------------- 结束 ---------------------------- if youyu_num == sina_num or youyu_num == futu_num: data.append([ item, youyu_num, sina_num, futu_num, basicConfig.test_pass ]) else: fail_item.append(item) data.append([ item, youyu_num, sina_num, futu_num, basicConfig.test_fail ]) queue.put({ "stock_market": stock_market, "stock_code": stock_code, "stock_type": stock_type, "result": util.test_result(data), "fail_item": fail_item, "data": data }) return data
def create(report_type, test_data, html_file, start_file): html_report = html_file if os.path.exists(html_report): os.remove(html_report) f = open(html_report, "a+") # 读取HTML头部信息 f_start = open(start_file, "r") start = f_start.readlines() for start_item in start: f.write(start_item) f_start.close() f.write("<body>") # 测试报告统计 statistic_test_result(f, test_data) # 失败个数统计 statistic_test_fail(f, test_data.get("statistics")) # 测试报告一级数据 report_first_page(f, test_data, report_type) # 测试报告二级数据 report_second_page(f, test_data, report_type) f.write("</body></html>") print "[%s] Report Address = %s" % (util.get_time(datetime.datetime.now()), html_file)
def test_compare_finance(env, stock_market, stock_code, stock_type, queue, log_file): youyu_result = youyu.parser_yff_finance(env, stock_market, stock_code) tencent_result = tencent.parser_tencent_financial(stock_market, stock_code) util.add_message_file( log_file, "[%s]Market: %s Code: %s Response:%s" % (util.get_time(datetime.datetime.now()), stock_market, stock_code, str(youyu_result))) data = [] for item in basicConfig.finance_hk: youyu_num = str(youyu_result[item]) tencent_num = str(tencent_result[item]) # ------------------------ 异常数据处理 ------------------------ # 处理 自选股中带 , if "," in tencent_num: tencent_num = tencent_num.replace(",", "") # --------------------------- 结束 ---------------------------- if util.check_error_code(youyu_num) \ or util.check_error_code(tencent_num) \ or tencent_num == "0.00": data.append([item, youyu_num, tencent_num, basicConfig.test_skip]) else: if youyu_num == tencent_num or youyu_num in tencent_num: data.append( [item, youyu_num, tencent_num, basicConfig.test_pass]) else: data.append( [item, youyu_num, tencent_num, basicConfig.test_fail]) queue.put({ "stock_market": stock_market, "stock_code": stock_code, "stock_type": "", "result": util.test_result(data), "data": data }) return data
def test(env, market, job, choose): # 初始化测试环境 html_pass = [] html_fail = [] html_skip = [] html = [] start_time = time.clock() data_center = dataCenter.PullData() test_stocks = data_center.get_data(market) util.clear_file(LOG) test_start_index = 0 # test_end_index = 1000 test_end_index = len(test_stocks) # 执行测试 print "[%s] Start Test Time" % util.get_time(datetime.datetime.now()) for i in xrange(test_start_index, test_end_index, basicConfig.thread_num): if choose == basicConfig.stage: html += test_by_thread(env, testCaseCompareWithStage.test_with_stage, i, test_stocks) elif choose == basicConfig.finance: html += test_by_thread(env, testCaseCompareFinance.test_compare_finance, i, test_stocks) else: html += test_by_thread(env, testCaseCompareWithOther.test_compare_other, i, test_stocks) # 将测试结果进行划分, 划分为:1.测试通过 2.测试跳过 3.测试失败 for item in html: if item["result"] == basicConfig.test_pass: html_pass.append(item) elif item["result"] == basicConfig.test_skip: html_skip.append(item) else: html_fail.append(item) # 统计测试失败的测试每个指数失败的数目 fail_total_item = [] for item in html_fail: fail_total_item += item.get("fail_item") fail_total_item_num = util.get_reply_num(fail_total_item) # 生成测试报告 end_time = time.clock() print "[%s] Create Html Report" % util.get_time(datetime.datetime.now()) if choose == basicConfig.stage: title = basicConfig.stageReportTitle html_file = basicConfig.stageReport elif choose == basicConfig.finance: title = basicConfig.financeReportTitle html_file = basicConfig.financeReport else: title = basicConfig.otherReportTitle html_file = basicConfig.otherReport html_data = { # 标题 "title": title + u" 时间: " + util.get_time(datetime.datetime.now()), # 测试统计 "total": str(test_end_index - test_start_index), "pass": str(util.test_result_num(html, "Pass")), "skip": str(util.test_result_num(html, "Skip")), "fail": str(util.test_result_num(html, "Fail")), "time": u"%.0f 秒" % (end_time - start_time), # 失败个数统计 "statistics": fail_total_item_num, # 失败详情数据 "data": html_fail } createReport.create(choose, html_data, "%s/TestReports/%s" % (os.getcwd(), html_file), HTML) # 将生成的html测试报告上传到MySQL print "[%s] Push Report To MySQL" % util.get_time(datetime.datetime.now()) if job != "test": if choose == basicConfig.stage: data_center.push_report( "compare_execute", job, str(util.test_result_num(html, "Pass")) + "/" + str(len(test_stocks)), os.getcwd() + "/TestReports/reportCompareWithStage.html") if choose == basicConfig.other: data_center.push_report( "compare_execute_myself", job, str(util.test_result_num(html, "Pass")) + "/" + str(len(test_stocks)), os.getcwd() + "/TestReports/reportCompareWithOther.html") else: print "[%s] Not Need Commit to MySQL" % util.get_time( datetime.datetime.now()) print "[%s] End Test Time" % util.get_time(datetime.datetime.now())