Пример #1
0
 def get_Elements(self, section, key, efg, index):
     """@note:获取配置文件中的页面元素,@section:元素模块,@key:元素id,name,classname,xpath,@efg:页面元素,@index:元素索引,@return 返回找到的元素集合"""
     data = efg.Read_config(section, key)
     by = data.split('>')[0]
     value = data.split('>')[1]
     logger.info("locate by:[" + by + "] value:[" + value + '] is number ' +
                 str(index + 1))
     try:
         if by == 'id':
             return WebDriverWait(
                 self.driver,
                 10).until(lambda x: x.find_elements_by_id(value)[index])
         elif by == 'name':
             return WebDriverWait(
                 self.driver,
                 10).until(lambda x: x.find_elements_by_name(value)[index])
         elif by == 'classname':
             return WebDriverWait(self.driver, 10).until(
                 lambda x: x.find_elements_by_class_name(value)[index])
         else:
             return WebDriverWait(
                 self.driver,
                 10).until(lambda x: x.find_elements_by_xpath(value)[index])
     except Exception:
         raise
Пример #2
0
def run(suite):
    report = ''
    test_description = "<p>[ORACLE 数据库]</p><p style='text-indent:0.5'><strong>DB_Connection:</strong> {}</p> " \
                       "<p style='text-indent:0.5'><strong>DB_User:</strong> {}</p> " \
                       "<strong><p style='text-indent:0.5'>DB_Password:</strong> {}</p> " \
                       "<br><p>[接口]</p> <p style='text-indent:0.5'><strong>Api:</strong> {}</p> " \
                       "<p style='text-indent:0.5'><strong>Api_Key:</strong> {}</p>"\
                        .format(database_connection_url, database_user, database_password, api_url, api_key)
    cur_time = time.strftime('%Y%m%d_%H%M%S', time.localtime())
    if report_path is '' or report_path is None:
        project_path = cur_path()
        mkdir(os.path.join(project_path, 'report'))
        report = os.path.join(
            project_path, 'report',
            'ESPOS82_Promotion_AutoTest_{}.html'.format(cur_time))
    elif not report_path.endswith('.html'):
        logger.info(
            'report path: {}配置有误,正确格式如: D:\\report.html'.format(report_path))
        return
    else:
        report = re.sub(r'\.html', '_{}.html'.format(cur_time), report_path)
    with open(report, 'wb') as fp:
        HTMLTestRunner(stream=fp,
                       verbosity=2,
                       title="测试报告",
                       description="",
                       test_description=test_description).run(suite)
Пример #3
0
 def setUp(self):
     logger.info('Test case running...')
     self.driver = setDriver()
     self.busiNess = LoginBusiness(self.driver)
     self.baseFunc = BaseOperation(self.driver)
     self.imgs = []
     self.busiNess.openWeb()
 def assemble(self):
     """
     according to different params to find self method to control
     """
     self_json = self.unit.base()
     if 'param_bc' in self.common_params and 'param_bx' in self.common_params:
         self.common_params.remove('param_bx')
         self.common_params.remove('param_bc')
         self.common_params.append('param_bc_bx')
     elif 'param_bc' in self.common_params:
         pass
     elif 'param_bx' in self.common_params:
         self.common_params.remove('param_bx')
     for param in self.common_params:
         if hasattr(self.unit, param):
             func = getattr(self.unit, param)
             self_json = func(self_json)
         else:
             param = param.upper()
             param = param.replace('PARAM_', '-')
             self.cls._testMethodDoc += "<br><font color='red' style='font-weight:bold'>confit.ini 中 " \
                                        "本程序没有提供对该参数 {} 的处理</font>".format(param)
             self.cls.skipTest('本程序没有提供对该参数 {} 的处理'.format(param))
     if 'param_bc_bx' in self.common_params:
         self.common_params.remove('param_bc_bx')
     self_json = json_dumps(self_json, indent=4)
     logger.info('REQUEST:\n {}'.format(self_json))
     return self_json
Пример #5
0
def send_email():
    """执行发送邮件"""
    report_path = os.path.dirname(os.path.dirname(__file__)) + '/report/'
    report_name = new_report(report_path)
    try:
        pre_send_mail(report_name)
        logger.info("自动化测试执行完成,邮件发送成功")
    except Exception as e:
        logger.info("邮件发送失败!" + e)
Пример #6
0
 def is_exist(self, method, exp):
     """@note: 判断元素是否存在, @method:定位方法, @exp:元素路径或名称"""
     try:
         self.driver.find_element(by=method, value=exp)
         logger.info('查找到%s元素' % exp)
     except NoSuchElementException:
         logger.info('未找到%s元素' % exp)
         return False
     else:
         return True
Пример #7
0
 def save_csv_data(self, filename, data):
     """保存数据到.csv文件中"""
     path = os.path.dirname(os.path.dirname(__file__))
     data_path = path + '/data/' + filename
     logger.info('写入数据到%s中' % filename)
     with open(data_path, 'w', encoding='utf-8', newline='') as p:
         csv_write = csv.writer(p)
         for i in data:
             csv_write.writerow(i)
         logger.info('数据保存成功')
Пример #8
0
 def get_csv_data(self, filename, line):
     """读取.csv文件中的数据"""
     path = os.path.dirname(os.path.dirname(__file__))
     data_path = path + '/data/' + filename
     logger.info('读取%s中的测试数据' % filename)
     with open(data_path, 'r', encoding='utf-8') as p:
         reader = csv.reader(p)
         for index, row in enumerate(reader, 1):
             if index == line:
                 return row
Пример #9
0
 def test_03_login_pwd_error(self):
     """输入错误的密码登录系统"""
     try:
         self.busiNess.loginAction(3)
         time.sleep(2)
         assert self.baseFunc.readNotice() == '密码错误'
         assert self.baseFunc.is_exist('name', 'user') == True
         logger.info('Test case 03 pass')
     except AssertionError as e:
         self.imgs.append(self.driver.get_screenshot_as_base64())
         logger.info('Test case 03 fail' + e)
         raise
Пример #10
0
 def loginAction(self, line):
     """登录的操作"""
     data = self.get_csv_data('testLogin.csv', line)
     account = self.get_element('loginView', 'user', self.efg)
     pwd = self.get_element('loginView', 'pwd', self.efg)
     account.clear()
     account.send_keys(data[0])
     logger.info('输入测试数据' + data[0])
     pwd.clear()
     pwd.send_keys(data[1])
     logger.info('输入测试数据' + data[1])
     self.get_element('loginView', 'button', self.efg).click()
Пример #11
0
 def scoll(self, element, index=None):
     """@note:滚动页面, @path:滚动时参考的元素,路径或者元素对象,@index:up 元素在最上,down 元素在最下"""
     if index == 'up':
         self.driver.execute_script("arguments[0].scrollIntoView(true);",
                                    element)
     elif index == 'down':
         self.driver.execute_script("arguments[0].scrollIntoView(false);",
                                    element)
     else:
         self.driver.execute_script("arguments[0].scrollIntoView();",
                                    element)
     logger.info('页面滚动到选中元素位置')
Пример #12
0
 def test_01_user_login(self):
     """输入正确的信息登录系统"""
     try:
         self.busiNess.loginAction(1)
         time.sleep(2)
         assert self.baseFunc.readNotice() == '登录成功'
         time.sleep(2)
         assert self.baseFunc.is_exist('name', 'user') == False
         logger.info('Test case 01 pass')
     except AssertionError as e:
         self.imgs.append(self.driver.get_screenshot_as_base64())
         logger.info('Test case 01 fail' + e)
         raise
Пример #13
0
 def test_all(self):
     """
     @note:执行testSuite目录下以test开头的测试用例
     """
     # 执行用例路径
     logger.info('')
     base_path = os.path.dirname(os.path.dirname(__file__))
     case_path = os.path.join(base_path, "testSuite")
     suite = unittest.defaultTestLoader.discover(case_path, 'test*.py')
     # 写入测试报告
     # report_name = "Report_" + datetime.datetime.now().strftime("%Y-%m-%d") + ".html"
     report_name = "JC_AutoTest_Report.html"
     file_path = os.path.join(base_path + "/report/" + report_name)
     report_title = "自动化测试报告"
     with open(file_path, 'wb') as test_report:
         runner = HTMLTestRunner_Chart.HTMLTestRunner(stream=test_report, title=report_title, verbosity=2, retry=0,
                                                      save_last_try=True)
         runner.run(suite)
Пример #14
0
def loop_query(ip, pause_second, force_loop):
    """
    轮训
    """

    if api.connect(ip, 7709):
        logger.info("connected. ip=%s, pause_second=%ss start loop query " %
                    (ip, pause_second))
        while True:

            # 非强制模型下(正常情况),不是交易时间停止查询
            if force_loop is False and is_trading_hour() is False:
                time.sleep(10)
                return

            execute_query(api)

            time.sleep(pause_second)

        api.disconnect()
        logger.info("disconnected...  ")
    else:
        logger.info("connect %s failed." % ip)
Пример #15
0
def execute_query(api):
    """
    执行查询
    :param api:
    :return:
    """
    logger.info("get_security_quotes start ")
    start = time.time()
    data = api.get_security_quotes([(0, '000001'), (1, '600300')])
    end = time.time()
    logger.info("get_security_quotes finished, cost=" +
                str(int((end - start) * 1000)) + "ms")
    data_df = api.to_df(data)

    display_columns = [
        'code',
        'reversed_bytes0',
        'active1',
        'price',
        'last_close',
    ]

    logger.info("\r\n" + str(data_df[display_columns]))
Пример #16
0
            time.sleep(pause_second)

        api.disconnect()
        logger.info("disconnected...  ")
    else:
        logger.info("connect %s failed." % ip)


if __name__ == '__main__':

    ip = '119.147.212.81'  # 默认轮训服务器地址
    second = 0.5  # 500ms一次轮训
    force_loop = False  # 非强制查询的时候会在停盘期间停止轮训
    opts, args = getopt.getopt(sys.argv[1:], '-i:-s:-f')
    for opt_name, opt_value in opts:
        if opt_name == '-i':
            ip = opt_value
        if opt_name == '-s':
            second = int(opt_value)
        if opt_name == '-f':
            force_loop = True

    while True:
        try:
            logger.info("start loop query")
            loop_query(ip, second, force_loop)
            time.sleep(1)
            logger.info("finish loop query")
        except Exception as e:
            logger.error("something wrong...", e)
Пример #17
0
 def test_demo(cls, testcaseid):
     testcase_sql = "select * from testcase where testcaseid = '{}' order by serialno".format(
         testcaseid)
     testcase = oracle.dict_fetchall(testcase_sql)
     testcase_desci = '<font style="font-weight:bold">[CASE DESCRIPTION]:' + '&nbsp' * 2 + '</font>'
     promparam_desci = '<font style="font-weight:bold">[PROMPARAMETER]:' + '&nbsp' * 2 + '</font>'
     promid_desci = '<font style="font-weight:bold">[PROMID DESCRIPTION]:' + '&nbsp' * 2 + '</font>'
     remarks = "<font style='font-weight:bold'>[REMARK]:</font>&nbsp&nbsp" \
               "<font color='CC0066' style='font-weight:bold'>"
     caseid = ''
     casedesci_count = 0
     remarks_count = 0
     if prom_param == '':
         prom_param_ = 'BC,BX'
     else:
         prom_param_ = prom_param + ',BC,BX'
     for i, case in enumerate(testcase):
         if case['TESTCASEDESCI'] is not None and case[
                 'TESTCASEDESCI'] != '':
             if casedesci_count == 0:
                 testcase_desci += case['TESTCASEDESCI']
             casedesci_count += 1
         if case['REMARKS'] is not None and case['REMARKS'] != '':
             if remarks_count == 0:
                 remarks += case['REMARKS']
             remarks_count += 1
             casedesci_count += 1
         if case['PROMPARAMETER'] is not None and case[
                 'PROMPARAMETER'] != '':
             promparam_desci += case['PROMPARAMETER'] + ';&nbsp&nbsp'
         if case['PROMLESSDETAIL'] is None:
             caseid = 'None'
         else:
             caseid = re.sub(r'=\d+[.]?\d*', '', case['PROMLESSDETAIL'])
         if i == len(testcase) - 1:
             promid_desci += 'ITEMCODE={}, PROMIDS={}'.format(
                 case['ITEMCODE'], caseid)
         else:
             promid_desci = promid_desci + 'ITEMCODE={}, PROMIDS={}&nbsp&nbsp||&nbsp&nbsp '\
                 .format(case['ITEMCODE'], caseid)
     space = '&nbsp' * 41
     remarks = '{}</font>'.format(remarks)
     testcase_desci = """{}<br>{} ;<br>{}<br>{}""".format(
         promid_desci, testcase_desci, promparam_desci, remarks)
     cls._testMethodDoc = testcase_desci
     if only_test_caseids != '':
         only_test_case(cls, testcaseid, only_test_caseids,
                        cls._testMethodDoc)
     elif skip_caseids != '':
         exclude_case(cls, testcaseid, skip_caseids)
     # TODO START CHANGE
     # to extract common promtion param list
     _promless_detail = {}
     prom_param_list = []
     tmp = []
     for case in testcase:
         if case['PROMLESSDETAIL'] != None:
             tmp.append(case['PROMLESSDETAIL'])
     promless_str = ','.join(tmp)
     # _promless_detail['PROMLESSDETAIL'] = promless_str
     tmp = to_dict(cls, 'PROMLESSDETAIL', promless_str)
     if tmp is not None:
         promids = list(tmp.keys())
         prom_param_list = param_extractors(promids, prom_param_)
     else:
         if prom_param_list == []:
             if 'PROMPARAMETER' in testcase[0]:
                 promparam_str = ''
                 for case in testcase:
                     if case['PROMPARAMETER'] is None:
                         pass
                     elif case['PROMPARAMETER'].strip() == '':
                         pass
                     else:
                         promparam_str += case['PROMPARAMETER']
                 prom_param_list = param_extractor(promparam_str,
                                                   prom_param_)
     exclude_param_case(cls, exclude_promparam, prom_param_list)
     # TODO END
     # add description for testcase
     # TODO 增加 promparam description
     # promparam_desci = ''
     # if 'PROMPARAMETER' in testcase[0]:
     #     for desci in testcase:
     #         if desci is not None or desci.stirp() != '':
     #             promparam_desci = desci['PROMPARAMETER']
     # testcase_desci = """{} ;<br>【PROMPARAMETER】: {}""".format(testcase_desci, promparam_desci)
     # # testcase_desci = """{} ;""".format(testcase_desci)
     # cls._testMethodDoc = testcase_desci
     # assemble a complete request json
     assembler = Assembler(cls, testcase, prom_param_list)
     request_json = assembler.assemble()
     res = cls.requester.post(request_json)
     response = ''
     if res.status_code != 200:
         cls.fail('【 response status_code :{}, response text: {} 】'.format(
             res.status_code, res.text))
     try:
         response = json.dumps(json.loads(res.text),
                               indent=4,
                               ensure_ascii=False)
     except Exception:
         cls.fail('【Response】: {}'.format(res.text))
     logger.info('================================================')
     logger.info('RESPONSE:\n {}'.format(response))
     checker = Checker(cls)
     checker.check(testcaseid, response, prom_param_list)
Пример #18
0
 def closeWindow(self):
     """关闭系统窗口"""
     self.driver.close()
     self.driver.quit()
     logger.info('Test case finished, system close...')
Пример #19
0
 def OpenSystem(self):
     """AW: 登录系统"""
     try:
         efg = ReadIni(file_name='loginView.ini')
         url = self.cfg.Read_config('ALL_URL', 'test_url')
         user = self.cfg.Read_config('test_account', 'user_name')
         pd = self.cfg.Read_config('test_account', 'pass_word')
         self.driver.get(url)
         self.driver.maximize_window()
         account = self.get_element('loginView', 'user', efg)
         pwd = self.get_element('loginView', 'pwd', efg)
         account.clear()
         account.send_keys(user)
         logger.info('输入账号信息')
         pwd.clear()
         pwd.send_keys(pd)
         logger.info('输入密码信息')
         self.get_element('loginView', 'button', efg).click()
         time.sleep(5)
         try:
             self.closeNotice()
             time.sleep(3)
             logger.info('关闭公告弹窗')
             logger.info('成功登陆系统')
         except:
             logger.info('无弹窗,成功登陆系统')
     except Exception as e:
         logger.info('系统登陆失败' + e)