Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 4
0
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
Exemplo n.º 6
0
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())