Exemple #1
0
def hede_test(url, data, key):
    """
    和德创建保单
    测试秘钥(secret)为:b0a44d2ac9bb4196b8977360554f91bb
    正式秘钥(secret)为:6c6d55134dc74946aad0601cf1171808
    测试地址:http://apitest.dxtmobile.com/insure/channelPolicy/save
    正式地址:http://insure.hollardchina.com.cn/insure/channelPolicy/save
    :return:
    """
    timestamp = int(time.time() * 1000)
    headers = {
        "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
    }
    datas = dict(data)
    datas.update({"timestamp": timestamp})
    logger.info("传入数据: " + str(datas))
    data_list = sorted(datas.items(), key=lambda e: e[0], reverse=False)
    datas_str = "&".join(u"{}={}".format(k, v)
                         for k, v in data_list) + '&' + 'key' + '=' + key
    logger.info("加密前数据: " + datas_str)

    sign = MD5_tool(datas_str).upper()
    logger.info("签名数据: " + sign)

    datas.update({"sign": sign})
    res = requests.post(url=url, data=datas, headers=headers)
    logger.info("请求地址: " + url)
    logger.info("请求数据: " + json.dumps(datas))
    return res
Exemple #2
0
    def send(self):
        self.msg['Subject'] = self.title
        self.msg['From'] = self.sender
        self.msg['To'] = self.receiver

        # 邮件正文
        if self.message:
            self.msg.attach(MIMEText(self.message))

        # 添加附件,支持多个附件(传入list),或者单个附件(传入str)
        if self.files:
            if isinstance(self.files, list):
                for f in self.files:
                    self._attach_file(f)
            elif isinstance(self.files, str):
                self._attach_file(self.files)

        # 连接服务器并发送
        try:
            smtp_server = smtplib.SMTP(self.server)  # 连接sever
        except (gaierror and error) as e:
            logger.exception('发送邮件失败,无法连接到SMTP服务器,检查网络以及SMTP服务器. %s', e)
        else:
            try:
                smtp_server.login(self.sender, self.password)  # 登录
            except smtplib.SMTPAuthenticationError as e:
                logger.exception('用户名密码验证失败!%s', e)
            else:
                smtp_server.sendmail(self.sender, self.receiver.split(';'),
                                     self.msg.as_string())  # 发送邮件
            finally:
                smtp_server.quit()  # 断开连接
                logger.info('发送邮件"{0}"成功! 收件人:{1}。如果没有收到邮件,请检查垃圾箱,'
                            '同时检查收件人地址是否正确'.format(self.title, self.receiver))
Exemple #3
0
 def move_to_element(self, css):
     """
     鼠标越过元素
     """
     logger.info("-- move_to_element: %s" % css)
     self.element_wait(css)
     el = self.get_element(css)
     ActionChains(self.driver).move_to_element(el).perform()
Exemple #4
0
 def _attach_file(self, att_file):
     """将单个文件添加到附件列表中"""
     att = MIMEText(open('%s' % att_file, 'rb').read(), 'plain', 'utf-8')
     att["Content-Type"] = 'application/octet-stream'
     file_name = re.split(r'[\\|/]', att_file)
     att["Content-Disposition"] = 'attachment; filename="%s"' % file_name[-1]
     self.msg.attach(att)
     logger.info('attach file {}'.format(att_file))
Exemple #5
0
 def click(self, css):
     """
     点击
     """
     logger.info("-- click: %s" % css)
     self.element_wait(css)
     el = self.get_element(css)
     el.click()
Exemple #6
0
 def submit(self, css):
     """
     提交表单
     """
     logger.info("-- submit: %s" % css)
     self.element_wait(css)
     el = self.get_element(css)
     el.submit()
Exemple #7
0
 def double_click(self, css):
     """
     双击
     """
     logger.info("-- double_click: %s" % css)
     self.element_wait(css)
     el = self.get_element(css)
     ActionChains(self.driver).double_click(el).perform()
Exemple #8
0
 def right_click(self, css):
     """
     右键点击
     """
     logger.info("-- right_click: %s" % css)
     self.element_wait(css)
     el = self.get_element(css)
     ActionChains(self.driver).context_click(el).perform()
Exemple #9
0
 def type(self, css, text):
     """
     输入内容信息
     """
     logger.info("-- type: %s %s" % (css, text))
     self.element_wait(css)
     el = self.get_element(css)
     el.send_keys(text)
Exemple #10
0
 def clear(self, css):
     """
     清空
     """
     logger.info("-- clear: %s" % css)
     self.element_wait(css)
     el = self.get_element(css)
     el.clear()
Exemple #11
0
 def switch_to_frame(self, css):
     """
     切换到指定的frame
     """
     self.element_wait(css)
     iframe_el = self.get_element(css)
     self.driver._switch_to.frame(iframe_el)
     logger.info("-- switch_to_frame: %s" % css)
Exemple #12
0
 def get_display(self, css):
     """
     判断元素是否存在
     """
     self.element_wait(css)
     el = self.get_element(css)
     logger.info("-- get_display: %s" % css)
     return el.is_displayed()
Exemple #13
0
 def get_text(self, css):
     """
     获取元素文本信息
     """
     self.element_wait(css)
     el = self.get_element(css)
     txt = el.text
     logger.info("-- get_text: %s %s" % (css, txt))
     return txt
 def action_hede(self, case_id, case_name, login_url, login_data, identity,
                 base_url, base_date, from_url, from_data, assertion):
     logger.info(u" ====== 【" + case_id + u":" + case_name + u"】 ====== ")
     action_page = http_update_hepei(login_url, eval(login_data), identity,
                                     base_url, eval(base_date), from_url,
                                     eval(from_data))
     logger.info(u"返回数据:  " + action_page.text)
     self.assertEqual(action_page.json()["message"], assertion,
                      action_page.text)
Exemple #15
0
    def js(self, script):
        """
        执行 JavaScript 脚本

        使用方法:
        driver.js("window.scrollTo(200,1000);")
        """
        logger.info("-- js: %s" % script)
        self.driver.execute_script(script)
Exemple #16
0
    def get_attribute(self, css, attribute):
        """
        获取元素属性值

        使用方法:
        driver.get_attribute("css=>#el","type")
        """
        el = self.get_element(css)
        logger.info("-- get_attribute: %s %s" % (css, el.get_attribute(attribute)))
        return el.get_attribute(attribute)
Exemple #17
0
 def drag_and_drop(self, el_css, ta_css):
     """
     拖动某个元素到某个距离,然后将其删除。
     """
     logger.info("-- drag_and_drop: %s %s" % el_css, ta_css)
     self.element_wait(el_css)
     element = self.get_element(el_css)
     self.element_wait(ta_css)
     target = self.get_element(ta_css)
     ActionChains(driver).drag_and_drop(element, target).perform()
Exemple #18
0
 def element_size(self, css, scss):
     """
     获取表格元素的集合
     :param css:
     :param scss:
     :return:
     """
     x = self.driver.find_element_by_id(css).find_elements_by_tag_name(scss)
     # rowall = [rowall.text for rowall in x]
     logger.info("-- element_size: %s" % x)
     return x
Exemple #19
0
 def open_new_window(self, css):
     """
     创建新窗口,并指定到新窗口
     """
     original_windows = self.driver.current_window_handle
     el = self.get_element(css)
     el.click()
     all_handles = self.driver.window_handles
     for handle in all_handles:
         if handle != original_windows:
             self.driver._switch_to.window(handle)
     logger.info("-- open_new_window: %s" % css)
Exemple #20
0
def api_test(url, datas, key):
    """
    将数据排序,使用MD5加密,拼接后post请求
    :param url: 
    :param data: 
    :param key: 
    :return: r.json()
    """
    timestamp = int(time.time())
    data = dict(datas)
    data.update({"timestamp": timestamp})
    data_list = sorted(data.items(), key=lambda e: e[0], reverse=False)
    data_str = "&".join(u"{}={}".format(k, v) for k, v in data_list) + '&' + key
    logger.info("加密前数据: " + data_str)

    md5 = hashlib.md5()  # 使用MD5加密模式
    md5.update(data_str.encode("utf8"))  # 将参数字符串传入
    sign = md5.hexdigest()
    data.setdefault('sign', sign)
    logger.info("签名数据: " + sign)

    r = requests.post(url + json.dumps(data))
    logger.info("请求地址: " + url)
    logger.info("请求数据: " + json.dumps(data))

    return r
    def test_remove_2(self):
        '''测试正常删除单个空文件夹'''
        self.lib.Raysync_SetRemoveCallback(self.instance, RemoveResult_cb)
        #设置创建文件夹回调,在public中设置回调时的格式
        files = (ctypes.c_char_p * 2)()
        # 将上传文件转化为c的数组,ctyps.c_char_p * 文件数量 + 1
        files[0] = ctypes.c_char_p(b'AutoTestMkdir')
        # 格式化167-mov.mov 文件

        self.lib.Raysync_Remove(self.instance, "/", files)
        while not remove_task.valid:
            time.sleep(1)
        self.assertTrue(remove_task.remove_result == 0)
        if remove_task.remove_result != 0:
            logger.info("删除失败")
 def test_remove_1(self):
     '''测试正常删除单个文件'''
     self.lib.Raysync_SetRemoveCallback(self.instance, RemoveResult_cb)
     #设置创建文件夹回调,在public中设置回调时的格式
     self.lib.Raysync_SetListCallback(self.instance, ls_cb)
     #设置回调,在public中设置回调时的格式
     files = (ctypes.c_char_p * 2)()
     # 将上传文件转化为c的数组,ctyps.c_char_p * 文件数量 + 1
     files[0] = ctypes.c_char_p(b'burpsuite_community_windows-x64_v1_7_36.exe')
     # 格式化167-mov.mov 文件
     self.lib.Raysync_Remove(self.instance, "/", files)
     while not remove_task.valid:
         time.sleep(1)
     self.assertTrue(remove_task.remove_result == 0)
     if remove_task.remove_result != 0:
         logger.info("删除失败")
 def test_remove_5(self):
     '''测试删除单个不存在的文件'''
     self.lib.Raysync_SetRemoveCallback(self.instance, RemoveResult_cb)
     #设置创建文件夹回调,在public中设置回调时的格式
     self.lib.Raysync_SetListCallback(self.instance, ls_cb)
     #设置回调,在public中设置回调时的格式
     files = (ctypes.c_char_p * 2)()
     # 将上传文件转化为c的数组,ctyps.c_char_p * 文件数量 + 1
     files[0] = ctypes.c_char_p(b'NotExist.mov')
     # 格式化167-mov.mov 文件
     self.lib.Raysync_Remove(self.instance, "/", files)
     while not remove_task.valid:
         time.sleep(1)
     self.assertTrue(remove_task.remove_result != 0)
     if remove_task.remove_result == 0:
         logger.info("文件已存在,正常删除")
    def test_task_2(self):
        '''正常开始单个文件上传传输'''
        self.lib.Raysync_SetTaskListCallback(self.instance, TaskInfo_cb)
        #设置任务列表回调,获取任务ID
        self.lib.Raysync_SetTaskStateChangedCallback(self.instance,
                                                     statechanged_func)
        self.lib.Raysync_SetRemoveCallback(self.instance, RemoveResult_cb)
        #设置文件删除回调
        files = (ctypes.c_char_p * 2)()
        # 将上传文件转化为c的数组,ctyps.c_char_p * 文件数量 + 1
        files[0] = ctypes.c_char_p(
            b'burpsuite_community_windows-x64_v1_7_36.exe')
        # 格式化167-mov.mov 文件
        try:
            self.lib.Raysync_Remove(self.instance, '/', files)
            while not remove_task.valid:
                time.sleep(1)
        except:
            logger.info('服务器不存在该文件,无需删除')
        self.lib.Raysync_Upload(self.instance,
                                bytes(UPLOAD_PATH, encoding='utf8'), '/',
                                files, None, 'upload_task_2')
        # 上传单个167-mov.mov 文件
        self.lib.Raysync_GetTaskList(self.instance)

        while True:
            if task.TaskID != 0:
                break
            else:
                time.sleep(1)
        #循环获取taskID,如果不为0则退出循环
        self.lib.Raysync_StopTask(self.instance, task.TaskID)
        #停止任务
        time.sleep(2)
        self.assertTrue(upload_task.task_state == 9)
        self.lib.Raysync_StartTask(self.instance, task.TaskID)
        time.sleep(2)
        #开始任务
        while True:
            if upload_task.task_state >= 9:
                break
            else:
                time.sleep(1)
        self.assertTrue(upload_task.task_state == 10)
    def test_remove_4(self):
        '''测试正常删除多个文件'''
        self.lib.Raysync_SetRemoveCallback(self.instance, RemoveResult_cb)
        #设置创建文件夹回调,在public中设置回调时的格式

        remove_files = ['167_MPG.mpg','英文max-webm.webm','中文maya_mp4格式.mp4','中文maya—WNV.wmv']

        files = (ctypes.c_char_p * (len(remove_files) + 1))()
        a = 0
        for i in remove_files:
                b = i
                files[a] = ctypes.c_char_p(bytes(b, encoding='utf8'))
                a = a + 1
        # 将上传文件转化为c的数组,ctyps.c_char_p * 文件数量 + 1
        self.lib.Raysync_Remove(self.instance, "/", files)
        while not remove_task.valid:
            time.sleep(1)
        self.assertTrue(remove_task.remove_result == 0)
        if remove_task.remove_result != 0:
            logger.info("删除失败")
    def setUp(self):
        self.instance = self.lib.Raysync_CreateRaysyncInterface()
        #创建实例
        try:
            self.lib
        except:
            logger.info("dll文件不存在")
        #确认是否存在dll文件
        try:
            self.lib.Raysync_Connect(self.instance, 500)
        except:
            logger.info("Raysync_Connect 失败")
        #与dll文件建连
        try:
            self.lib.Raysync_Login(self.instance,
                                   bytes(self.URL, encoding='gbk'), self.port,
                                   bytes(self.username, encoding='gbk'),
                                   bytes(self.password, encoding='gbk'))
            #登录客户端,地址,端口号,用户名,密码可在config.yml中修改
            #登录server
        except:
            logger.info('登录失败,请检查服务器地址/端口/用户名/密码是否正确')

        rename_task.valid = False
        mkdir_task.valid = False
        self.lib.Raysync_List(self.instance, "/")
        #list操作
        time.sleep(2)
 def setUp(self):
     self.instance = self.lib.Raysync_CreateRaysyncInterface()
     try:
         self.lib
     except:
         logger.info("dll文件不存在")
     #确认是否存在dll文件
     try:
         self.lib.Raysync_Connect(self.instance, 500)
     except:
         logger.info("Raysync_Connect 失败")
     #与dll文件建连
     try:
         self.lib.Raysync_Login(self.instance,
                                bytes(self.URL, encoding='gbk'), self.port,
                                bytes(self.username, encoding='gbk'),
                                bytes(self.password, encoding='gbk'))
     except:
         logger.info('登录失败,请检查服务器地址/端口/用户名/密码是否正确')
         #登录客户端,地址,端口号,用户名,密码可在config.yml中修改
         #登录server
     upload_task.task_state = 0  # 初始化upload_task.task_state = 0
     self.lib.Raysync_List(self.instance, "/")
     #list操作
     time.sleep(2)
     self.lib.Raysync_DeleteAllTask(self.instance)  #清空传输列表
     time.sleep(1)
 def action_login(self, case_id, case_name, username, password, *arge):
     # ***** 【登录模块】 *****
     login_page = LoginPage.LoginPage(self.driver, self.url)
     logger.info(u"===== 【" + case_id + u"】" + case_name + u" =====")
     logger.info("用户名:" + username + "  密码:" + password)
     # 调用用户名输入组件
     login_page.test_user_login(username, password)
     time.sleep(2)
     saveScreenshot.saveScreenshot(self.driver, "登录模块")
     try:
         self.assertEqual(self.driver.get_title(), u"系统")
         logger.info(u"***** 【登录成功】 *****")
     except:
         logger.info(u"***** 【登录失败】 *****")
 def test_task_3(self):
     '''正常暂停单个文件夹上传传输'''
     self.lib.Raysync_SetTaskStateChangedCallback(self.instance,
                                                  statechanged_func)
     #设置任务状态回调
     self.lib.Raysync_SetTaskListCallback(self.instance, TaskInfo_cb)
     #设置任务列表回调,获取任务ID
     self.lib.Raysync_SetRemoveCallback(self.instance, RemoveResult_cb)
     #设置文件删除回调
     files = (ctypes.c_char_p * 2)()
     # 将上传文件转化为c的数组,ctyps.c_char_p * 文件数量 + 1
     files[0] = ctypes.c_char_p(b'upload_task')
     # 格式化upload_task
     try:
         self.lib.Raysync_Remove(self.instance, '/', files)
         while not remove_task.valid:
             time.sleep(1)
     except:
         logger.info('服务器不存在该文件,无需删除')
     time.sleep(1)
     self.lib.Raysync_Upload(self.instance, bytes(BASE_PATH,
                                                  encoding='utf8'), '/',
                             files, None, 'upload_task_3')
     self.lib.Raysync_GetTaskList(self.instance)
     while True:
         if task.TaskID != 0:
             break
         else:
             time.sleep(1)
     # 上传单个167-mov.mov 文件
     time.sleep(5)
     self.lib.Raysync_StopTask(self.instance, task.TaskID)
     #停止任务
     while True:
         if upload_task.task_state >= 9:
             break
         else:
             time.sleep(1)
     self.assertTrue(upload_task.task_state == 9)
 def test_upload_2(self):
     '''正常上传单个文件夹'''
     self.lib.Raysync_SetTaskStateChangedCallback(self.instance,
                                                  statechanged_func)
     files = (ctypes.c_char_p * 2)()
     # 将上传文件转化为c的数组,ctyps.c_char_p * 文件数量 + 1
     files[0] = ctypes.c_char_p(b'upload_task')
     try:
         self.lib.Raysync_Remove(self.instance, '/', files)
         while not remove_task.valid:
             time.sleep(1)
             break
     except:
         logger.info('服务器不存在该文件,无需删除')
     self.lib.Raysync_Upload(self.instance, bytes(BASE_PATH,
                                                  encoding='utf8'), '/',
                             files, None, 'upload_task_2')
     #上传upload_task目录
     while True:
         if upload_task.task_state >= 9:
             break
         else:
             time.sleep(1)
     self.assertTrue(upload_task.task_state == 10)