Exemplo n.º 1
0
def pre_send_mail(report_name):
    """发送邮件预处理"""
    cfg = ReadIni(isPageView=False, file_name="Email_config.ini")
    message = MIMEMultipart("related")
    current_time = time.strftime("%Y-%m-%d %H:%M:%S",
                                 time.localtime(time.time()))
    to_addr = cfg.Read_config("Emailer", "To_addr")
    cc_addr = cfg.Read_config("Emailer", "Cc_addr")
    user_list = to_addr.split(',') + cc_addr.split(',')
    sub = "【请阅】固定资产UI自动化测试报告" + current_time
    user = send_user
    message['Subject'] = sub
    message['From'] = user
    message['To'] = to_addr
    message['Cc'] = cc_addr
    # 添加内容(或图片)到邮件正文中
    mail_content = """
            <p>您好,以下为固资平台UI自动化测试报告,详情请下载附件报告,推荐使用Chrome浏览器查看!</p>
            <p>ps:请将两个文件放在同一个目录下,再查看html报告,否则无法查看近十次测试统计图。</p>
            """
    # # 添加邮件正文信息
    mail_body = MIMEText(mail_content, _subtype='html', _charset='utf-8')
    message.attach(mail_body)
    # 添加附件1
    ctype, encoding = mimetypes.guess_type(report_name[0])
    if ctype is None or encoding is not None:
        ctype = "application/octet-stream"
    maintype, subtype = ctype.split("/", 1)
    att1 = MIMEImage((lambda f:
                      (f.read(), f.close()))(open(report_name[0], 'rb'))[0],
                     _subtype=subtype)
    att1.add_header("Content-Disposition",
                    "attachment",
                    filename=os.path.basename(report_name[0]))
    message.attach(att1)
    # 添加附件2
    ctype, encoding = mimetypes.guess_type(report_name[1])
    if ctype is None or encoding is not None:
        ctype = "application/octet-stream"
    maintype, subtype = ctype.split("/", 1)
    att2 = MIMEImage((lambda f:
                      (f.read(), f.close()))(open(report_name[1], 'rb'))[0],
                     _subtype=subtype)
    att2.add_header("Content-Disposition",
                    "attachment",
                    filename=os.path.basename(report_name[1]))
    message.attach(att2)
    # 发送邮件
    server = smtplib.SMTP()
    server.connect(email_host)
    server.login(send_user, password)
    server.sendmail(user, user_list, message.as_string())
    server.close()
Exemplo n.º 2
0
class LoginBusiness(BaseOperation):
    def __init__(self, driver):
        self.driver = driver
        self.efg = ReadIni(file_name='loginView.ini')
        self.cfg = ReadIni(isPageView=False)

    def openWeb(self):
        self.driver.get(self.cfg.Read_config('ALL_URL', 'test_url'))
        self.driver.maximize_window()

    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()
Exemplo n.º 3
0
class BaseOperation:
    """系统操作基础类"""
    def __init__(self, driver):
        self.driver = driver
        self.cfg = ReadIni(isPageView=False)
        self.efg = ReadIni(file_name='local_element.ini')

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

    def closeNotice(self):
        """系统公告通知的关闭"""
        btw = self.get_Elements('BaseControl', 'close_notice', self.efg,
                                5).click()
        return btw

    def closeWindow(self):
        """关闭系统窗口"""
        self.driver.close()
        self.driver.quit()
        logger.info('Test case finished, system close...')
##########################################################################

    def topView(self):
        """点击功能列表首页"""
        btw = self.get_Elements('BaseControl', 'funclist', self.efg, 0).click()
        return btw

    def stoRage(self):
        """点击功能列表资产入库"""
        btw = self.get_Elements('BaseControl', 'funclist1', self.efg,
                                1).click()
        return btw

    def productMgr(self):
        """点击功能列表资产管理"""
        btw = self.get_Elements('BaseControl', 'funclist2', self.efg,
                                0).click()
        return btw

    def checkMgr(self):
        """点击功能列表盘点管理"""
        btw = self.get_Elements('BaseControl', 'funclist1', self.efg,
                                9).click()
        return btw

    def analyzeReport(self):
        """点击功能列表分析报表"""
        btw = self.get_Elements('BaseControl', 'funclist2', self.efg,
                                1).click()
        return btw

    def settingMgr(self):
        """点击功能列表分析报表"""
        btw = self.get_Elements('BaseControl', 'funclist2', self.efg,
                                2).click()
        return btw

########################################################################

    def readNotice(self):
        """获取通知、提示"""
        res = self.get_element('BaseControl', 'warning', self.efg).text
        return res

########################################################################

    def get_element(self, section, key, efg):
        """@note:获取配置文件中的页面元素,@section:元素模块,@key:元素id,name,classname,xpath,@efg:页面元素,@return:返回找到的元素"""
        data = efg.Read_config(section, key)
        by = data.split('>')[0]
        value = data.split('>')[1]
        logger.info("locate by:[" + by + "] value:[" + value + ']')
        try:
            if by == 'id':
                return WebDriverWait(
                    self.driver,
                    10).until(lambda x: x.find_element_by_id(value))
            elif by == 'name':
                return WebDriverWait(
                    self.driver,
                    10).until(lambda x: x.find_element_by_name(value))
            elif by == 'classname':
                return WebDriverWait(
                    self.driver,
                    10).until(lambda x: x.find_element_by_class_name(value))
            else:
                return WebDriverWait(
                    self.driver,
                    10).until(lambda x: x.find_element_by_xpath(value))
        except Exception:
            raise

    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

    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

    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('页面滚动到选中元素位置')

########################################################################

    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

    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('数据保存成功')