Example #1
0
def send_email(filename, title):
    """
    发送邮件
    :param filename: 附件名称(路径)
    :param title: 邮件主题
    :return:
    """
    """连接smtp服务器,登录邮箱"""
    # 创建smtp服务器连接对象
    smtp = smtplib.SMTP_SSL(host=conf.get_data("email", "host"), port=conf.get_data("email", "port", "int"))
    # 登录邮箱
    smtp.login(user=conf.get_data("email", "user"), password=conf.get_data("email", "pwd"))

    """构建邮件内容"""
    # 创建一封带附件的邮件
    msg = MIMEMultipart()

    with open(filename, "rb") as f:
        content = f.read()
    # 正文内容
    text_msg = MIMEText(_text=content, _subtype="html", _charset="utf8")
    # 讲正文类容添加到正文中
    msg.attach(text_msg)
    # 邮件附件
    report_file = MIMEApplication(content)
    report_file.add_header('content-disposition', 'attachment', filename=filename)
    msg.attach(report_file)
    msg["Subject"] = title
    # 发件人
    msg["From"] = conf.get("email", "from_addr")
    # 收件人
    msg["To"] = conf.get("email", "to_addr")

    """发送邮件"""
    smtp.send_message(msg, from_addr=conf.get("email", "from_addr"), to_addrs=eval(conf.get("email", "to_addr")))
def sendemai(filename, title):
    smtp = smtplib.SMTP_SSL(host=conf.get('email', 'host'),
                            port=conf.getint('email', 'port'))
    smtp.login(user=conf.get('email', 'user'),
               password=conf.get('email', 'password'))
    #创建一个组件
    msg = MIMEMultipart()
    #第二步构建一个邮件
    with open(os.path.join(REPORTPATH, filename), 'rb') as f:
        content = f.read()
    #创建邮件文本内容
    text_msg = MIMEText(content, _subtype='html', _charset='utf8')
    #添加到多组件的邮件中
    msg.attach(text_msg)
    #创建附件
    report_msg = MIMEApplication(content)
    report_msg.add_header('content-disposition',
                          'attachment',
                          filename=filename)
    #将附件添加到多组件的邮件中
    msg.attach(report_msg)
    #主题
    msg['Subject'] = title
    #发件人
    msg['From'] = '*****@*****.**'
    #收件人
    msg['To'] = '*****@*****.**'
    #第三步发送邮件
    smtp.send_message(msg,
                      from_addr=conf.get('email', 'from_addr'),
                      to_addrs=eval(conf.get('email', 'to_addrs')))


#sendemai('result.html','测试报告')
Example #3
0
 def __init__(self):
     self.con = psycopg2.connect(
         host=conf.get('sql', 'host'),
         port=conf.getint('sql', 'port'),
         user=conf.get('sql', 'user'),
         password=conf.get('sql', 'password'),
         database=conf.get('sql', 'database'),
     )
     #创建游标
     self.cur = self.con.cursor()
Example #4
0
 def __init__(self):
     # 链接数据库
     self.con = pymysql.connect(host=conf.get('mysql', 'host'),
                                port=conf.getint('mysql', 'port'),
                                user=conf.get('mysql', 'user'),
                                password=conf.get('mysql', 'password'),
                                database=conf.get('mysql', 'database'),
                                charset='utf8')
     # 创建游标
     self.cur = self.con.cursor()
Example #5
0
 def __init__(self):
     # 数据库连接对象
     self.conn = pymysql.connect(host=conf.get("db", "host"),
                                 port=conf.getint("db", "port"),
                                 user=conf.get("db", "user"),
                                 password=conf.get("db", "pwd"),
                                 charset=conf.get("db", "charset"),
                                 cursorclass=pymysql.cursors.DictCursor)
     # 创建数据库游标对象
     self.cur = self.conn.cursor()
class TestCaseWithdraw(unittest.TestCase):
    readexcel = ReadExcel(filename=os.path.join(DATAPATH,
                                                conf.get('workbook', 'name')),
                          sheetname=conf.get('workbook', 'sheet04'))
    cases = readexcel.read_excel()
    send = SendRequest()
    headers = eval(conf.get('env', 'headers'))
    base_url = conf.get('env', 'url')
    connet = Connet()
    sql = 'select leave_amount from futureloan.member WHERE  mobile_phone = {}'.format(
        conf.get('env', 'phone'))
    replacedata = ReplaceData()

    @data(*cases)
    def testcase_withdraw(self, case):
        # case_id  title  method  url  data  expected  result  chk_sql interface
        row = case['case_id'] + 1
        method = case['method']
        url = self.base_url + case['url']
        data = case['data']
        data = eval(self.replacedata.replacedata(data))
        expected = eval(case['expected'])
        chk_sql = case['chk_sql']
        if chk_sql:
            sql_data_start = self.connet.select_data(sql=self.sql)
            leave_amount_start = sql_data_start['leave_amount']
        res_info = self.send.sendrequest(method=method,
                                         url=url,
                                         headers=self.headers,
                                         json=data)
        res_info = res_info.json()
        if case['interface'] == 'login':
            print(res_info)
            ReplaceData.member_id = jsonpath.jsonpath(res_info, '$..id')[0]
            token = jsonpath.jsonpath(res_info, '$..token')[0]
            token_type = jsonpath.jsonpath(res_info, '$..token_type')[0]
            self.headers['Authorization'] = '{} {}'.format(token_type, token)
        try:
            print('实际结果:{}'.format(res_info))
            print('期望结果:{}'.format(expected))
            if chk_sql:
                sql_data_end = self.connet.select_data(sql=self.sql)
                leave_amount_end = sql_data_end['leave_amount']
                self.assertEqual(Decimal(str(data['amount'])),
                                 (leave_amount_start - leave_amount_end))
            self.assertEqual(expected['code'], res_info['code'])
            self.assertEqual(expected['msg'], res_info['msg'])
            self.readexcel.write_excel(row=row, column=8, value='pass')
            log.info('{}用例测试通过'.format(case['title']))
        except AssertionError as e:
            self.readexcel.write_excel(row=row, column=8, value='fail')
            log.error('{}用例测试不通过'.format(case['title']))
            log.exception(e)
            raise e
    def __init__(self):

        # 连接数据库
        self.con = pymysql.connect(host=conf.get("mysql", "host"),
                                   port=conf.getint("mysql", "port"),
                                   user=conf.get("mysql", 'user'),
                                   password=conf.get("mysql", "password"),
                                   database=conf.get("mysql", "database"),
                                   charset="utf8")
        # 创建游标
        self.cur = self.con.cursor()
Example #8
0
 def __init__(self):
     # 连接数据库
     self.con = pymysql.connect(
         host=conf.get("mysql", "host"),
         # 端口号必须为整型int
         port=conf.getint("mysql", "port"),
         user=conf.get("mysql", "user"),
         password=conf.get("mysql", "password"),
         database=conf.get("mysql", "database"),
         charset="utf8")
     # 创建游标,通过游标来查询sql语句
     self.cur = self.con.cursor()
Example #9
0
 def __init__(self):
     self.host = conf.get('mysql', 'host')
     self.port = conf.getint('mysql', 'port')
     self.user = conf.get('mysql', 'user')
     self.password = conf.get('mysql', 'password')
     self.charset = conf.get('mysql', 'charset')
     self.connot = pymysql.connect(host=self.host,
                                   port=self.port,
                                   user=self.user,
                                   password=self.password,
                                   charset=self.charset,
                                   cursorclass=pymysql.cursors.DictCursor)
     self.cursor = self.connot.cursor()
Example #10
0
 def __init__(self):
     host = conf.get('jdcs_database', 'host')
     user = conf.get('jdcs_database', 'user')
     password = conf.get('jdcs_database', 'password')
     port = int(conf.get('jdcs_database', 'port'))
     # 创建连接
     self.mysql = pymysql.connect(host=host,
                                  user=user,
                                  password=password,
                                  port=port,
                                  charset='utf8')
     # 设置返回字典
     self.cursor = self.mysql.cursor(pymysql.cursors.DictCursor)  # 创建游标
Example #11
0
    def test_register_success(self, case):
        allure.dynamic()
        with allure.step("第一步:准备数据"):
            with allure.step("接口地址"):
                url = conf.get("env", "host") + case["url"]
                allure.attach(
                    body=url,
                    name="接口请求地址")  # , extension=allure.attachment_type.TEXT
            with allure.step("请求方法"):
                method = case["method"]
                allure.attach(body=method,
                              name="接口请求方法",
                              extension=allure.attachment_type.TEXT)
                headers = eval(conf.get("env", "headers"))
            with allure.step("请求数据"):
                case["data"] = replace_data(case["data"])
                json = case["data"]
                allure.attach(body=json,
                              name="用例数据",
                              extension=allure.attachment_type.JSON)
            with allure.step("预期结果"):
                expected = eval(case["expected"])
                allure.attach(body=case["expected"],
                              name="预期结果",
                              extension=allure.attachment_type.TEXT)
            row = case["case_id"] + 1
            # 发送请求

        with allure.step("第二步:获取响应结果"):
            response = self.request.send_request(url=url,
                                                 method=method,
                                                 headers=headers,
                                                 json=eval(json))
            allure.attach(str(response.json()), "响应结果",
                          allure.attachment_type.JSON)
        res = response.json()
        with allure.step("第三步:测试结果"):
            try:
                assert expected["code"] == res["code"]
                assert expected["msg"] == res["msg"]
            except AssertionError as e:
                self.excel1.write_data(row=None, column=8, value="未通过")
                log.error(f"用例{case['title']},测试未通过")
                log.exception(e)
                raise e
            else:
                self.excel1.write_data(row=row, column=8, value="通过")
                log.info(f"用例{case['title']},测试通过")
                allure.attach(f"{case['title']}用例测试通过", "测试结果",
                              allure.attachment_type.TEXT)
Example #12
0
def data_replace(data):
    """
    :param data: 用例的参数
    :return: 替换之后的结果
    """

    # 提取请求数据#中间的字符, 当请求参数有#时才执行下方代码,替换完成后使用相同的变量名,再次做出判断,即可退出循环

    while re.search(p, data):
        key = re.search(p, data).group(1)
        try:
            value = conf.get("test_data", key)      # 与配置文件匹配
        except:
            if "loanid" in data:
                value = getattr(ConText, "loanid")      # 提供Content类,可以先设置属性再来获取
            elif "phone1" in data:
                while True:
                    value = rand_phone(eval(data)["mobilephone"][6:9])  # 获取请求数据的mobilephone后面的手机号段,组合成随机号码
                    # 查询数据库有无该随机号码
                    count = db.find_count("SELECT Id FROM member WHERE MobilePhone={}".format(value))

                    print(count)

                    # 数据库中无此随机号码,就不用继续随机生成,直接使用该随机号码
                    if count == 0:
                        break
            else:
                return "请求参数有误"
        data = re.sub(p, value, data, count=1)    # 将data的#号之间的数字,用value进行替换,替换成功后没有#就退出循环
    return data
Example #13
0
 def test_register(self, case):
     #{"username":"******","email":"#email#","password":"******","password_confirm":"#username#"}
     #method   url  data  expected  is_num
     method = case['method']
     url = conf.get('env', 'url') + case['url']
     expected = eval(case['expected'])
     ReplaceData.username = random_str(case['is_num'])
     ReplaceData.email = random_email()
     data = case['data']
     data = eval(self.replace.replacedata(data))
     #print(data)
     res_info = self.send.sendrequest(method=method, url=url,
                                      json=data).json()
     #print(res_info)
     try:
         print('预期结果:{}'.format(expected))
         print('实际结果:{}'.format(res_info))
         if case['case_id'] < 3:
             self.assert_dict_in(expected, res_info)
         else:
             self.assert_dict_notin(expected, res_info)
         print('用例:{}通过'.format(case['title']))
     except AssertionError as e:
         raise e
         print('用例:{}未通过'.format(case['title']))
 def testcount(self, case):
     #{"username":"******","email":"#email#","password":"******","password_confirm":"#username#"}
     #method   url  data  expected  is_num
     method = case['method']
     data = case['data']
     is_num = case['is_num']
     print(is_num)
     if case['is_num']:
         ReplaceData.username = random_str(case['is_num'])
         print(ReplaceData.username)
     else:
         ReplaceData.username = getattr(ReplaceData, 'username')
     data = self.replace.replacedata(data)
     url = conf.get('env', 'url') + data
     #data=eval(self.replace.replacedata(data))
     expected = eval(self.replace.replacedata(case['expected']))
     res_info = self.send.sendrequest(method=method, url=url).text
     try:
         print('期望结果:{}'.format(expected))
         print('实际结果:{}'.format(res_info))
         if case['case_id'] < 3:
             self.assert_str_in(expected, res_info)
         else:
             self.assert_str_notin(expected, res_info)
         print('用例{}测试通过'.format(case['title']))
     except AssertionError as e:
         raise e
         print('用例{}测试未通过'.format(case['title']))
    def test_get_list(self, case):
        if "#nomemberid#" in case.request_data:
            memberid = self.db.find_one("SELECT MAX(Id) FROM member")[0] + 1
            case.request_data = case.request_data.replace(
                "#nomemberid#", str(memberid))

        if "#noloanid#" in case.request_data:
            loanid = self.db.find_one("SELECT MAX(Id) FROM loan")[0] + 1
            case.request_data = case.request_data.replace(
                "#noloanid#", str(loanid))

        case.request_data = data_replace(case.request_data)

        # 拼接url地址,发送请求
        url = conf.get("env", "url") + case.url
        self.row = case.case_id + 1
        response = self.request.request(method=case.method,
                                        url=url,
                                        data=eval(
                                            case.request_data))  # 将str转换成dict

        if case.check_mysql:
            if "MemberId=#memberid6#" in case.check_mysql:
                case.check_mysql = data_replace(case.check_mysql)
                loanid = self.db.find_one(case.check_mysql)[0]
                setattr(ConText, "loanid", str(loanid))
    def send_qq_file_mail(title, message, file_path):

        # 创建一个SMTP对象并连接smtp服务
        s = smtplib.SMTP_SSL("smtp.qq.com", 465)

        # 登录SMTP服务器
        sender = conf.get("mail", "sender")
        password = conf.get("mail", "password")

        # str转换成list
        recipient = eval(conf.get("mail", "recipient"))

        s.login(user=sender, password=password)

        # 构建邮件内容
        # message = "这是W1935的自动化测试报告,请注意查收!"
        # 创建一个邮件,文本类型
        content = MIMEText(message, _charset='utf8')

        # 构造附件
        part = MIMEApplication(open(file_path, 'rb').read(), _subtype=False)
        # part = MIMEApplication(open('20190629135418_report.html', 'rb').read(), _subtype=False)
        part.add_header('content-disposition',
                        'attachment',
                        filename='report18.html')  # 自定义文件名称

        # 封装邮件添加邮件主题
        msg = MIMEMultipart()
        # 添加文本内容和附件
        msg.attach(content)
        msg.attach(part)

        msg['Subject'] = Header(title, 'utf-8')
        msg['From'] = sender  # 可以修改成任意名称
        msg['To'] = ','.join(recipient)

        # 发送邮件
        try:
            s.sendmail(from_addr=sender,
                       to_addrs=msg["To"].split(','),
                       msg=msg.as_string())
            print("Send qq_email successfully")
        except Exception as e:
            print("Send qq_mail failed")
            raise e
        finally:
            s.quit()
Example #17
0
    def test_register(self, case):
        # 筛选用例的请求数据中做了#register__phone#标记的数据
        if "#register_phone#" in case.request_data:
            while True:
                # 生成随机号码
                mobile_phone = rand_phone("133")
                # 查询数据库有无该随机号码
                count = self.db.find_count(
                    "SELECT Id FROM member WHERE MobilePhone={}".format(
                        mobile_phone))
                # 数据库中无此随机号码,就不用继续随机生成,直接使用该随机号码
                if count == 0:
                    break
            # 将用例中的#register__phone#替换成随机生成的手机号码
            case.request_data = case.request_data.replace(
                "#register_phone#", mobile_phone)

        # 从数据库中查询一个已注册号码给用例
        elif "#exists_phone#" in case.request_data:
            # 从数据库获取第一条号码,给用例参数
            mobile_phone = self.db.find_one(
                "SELECT MobilePhone FROM member LIMIT 1")[0]
            # 用从数据库获取的号码替换掉请求数据中的标记#exists_phone
            case.request_data = case.request_data.replace(
                "#exists_phone#", mobile_phone)

        # 替换各号段的手机号码
        case.request_data = data_replace(case.request_data)

        # 拼接url地址
        url = conf.get("env", "url") + case.url
        # 行数等于用例编号+1
        self.row = case.case_id + 1
        response = self.request.request(method=case.method,
                                        url=url,
                                        data=eval(case.request_data))

        # 该打印的内容会显示在报告中
        print("请求数据--> {}".format(case.request_data))
        print("期望结果--> {}".format(case.expected_data))
        print("服务器响应数据--> {}".format(response.json()))

        res = response.json()

        try:
            self.assertEqual(eval(case.expected_data), res)
        except AssertionError as e:
            result = 'FAIL'
            my_log.exception(e)  # 将异常信息记录到日志
            raise e
        else:
            result = 'PASS'
            my_log.info("预期结果:{}, 实际结果:{}, 断言结果:{}".format(
                eval(case.expected_data), res, result))
        finally:
            # 向Excel回写服务器返回结果
            self.wb.write_data(row=self.row, column=9, value=str(res))
            # 向Excel回写断言结果
            self.wb.write_data(row=self.row, column=10, value=result)
Example #18
0
 def get(self):
     self.response.headers["Content-Type"] = "text/html"
     self.response.out.write("<html><body><h2>turtle servicemon</h2><ul>")
     for hostname in conf.get("hostnames"):
         self.response.out.write('<li><a href="report/%s">%s</a>' % (hostname, hostname))
     self.response.out.write("</ul>\n")
     self.response.out.write("<br/><p><a href='mon/'>measure</a></p>\n")
     self.response.out.write("</body></html>")
Example #19
0
    def test_customer(self, case):
        # 获取用例在execl中的位置
        self.row = case.case_id + 1

        # 修改url
        if '?' in case.url:
            case.url = conf.get('env', 'open_url') + case.url + getattr(
                TestCaseData, 'accessToken')
Example #20
0
    def test_addProduct(self, case):
        #准备数据
        url = conf.get('env', 'url') + case.url
        case.data = replace(case.data)

        # 判断sql语句是否为空
        if case.check_sql:
            case.check_sql = replace(case.check_sql)
Example #21
0
    def send_qq_file_email(title, message, file_path):
        # 创建一个smtp对象,并连接smtp服务
        s = smtplib.SMTP_SSL("smtp.qq.com", 465)

        # 登录smtp服务器
        sender = conf.get("email", "sender")
        password = conf.get("email", "password")
        s.login(user=sender, password=password)

        # 将str类型转换成list
        recipient = eval(conf.get("email", "recipient"))

        # 构建邮件内容
        # 创建一个邮件文本类型
        content = MIMEText(message, _charset="utf8")

        # 构造附件
        part = MIMEApplication(open(file_path, "rb").read(),
                               _subtype=False)  # rb是只读二进制文件
        part.add_header("content-disposition",
                        "attachment",
                        filename="report.html")

        # 封装邮件,添加邮件主题
        msg = MIMEMultipart()

        # 添加文本内容和附件
        msg.attach(content)
        msg.attach(part)

        msg["Subject"] = Header(title, "utf8")
        msg["From"] = sender
        msg["To"] = ",".join(recipient)

        # 发送邮件
        try:
            s.sendmail(from_addr=sender,
                       to_addrs=msg["To"].split(","),
                       msg=msg.as_string())
            logging.info("发送邮件成功")
        except Exception as e:
            logging.info("发送邮件失败")
            raise e
        finally:
            s.quit()
Example #22
0
 def random_phone(self):
     """
     生成随机的电话号码
     :return:random_phone
     """
     pefixlist = eval(conf.get("rand_number", "random_tp"))
     le = str(random())[2:10:]
     random_phone = "".join((choice(pefixlist), le))
     return random_phone
Example #23
0
 def setUpClass(cls):
     #登录并创建项目
     #普通用户登录
     login_api = 'http://api.lemonban.com/futureloan/member/login'
     headers=eval(conf.get('env','headers'))
     login_data ={'mobile_phone':conf.getint('soso','phone'), 'pwd':conf.get('soso','pwd')}
     login_res=cls.send.sendrequest(method='post',url=login_api,headers=headers,json=login_data)
     login_resp=login_res.json()
     token = jsonpath.jsonpath(login_resp,'$..token')[0]
     token_type = jsonpath.jsonpath(login_resp,'$..token_type')[0]
     headers['Authorization']='{} {}'.format(token_type,token)
     member_id=jsonpath.jsonpath(login_resp,'$..id')[0]
     #普通用户添加项目
     add_api = 'http://api.lemonban.com/futureloan/loan/add'
     add_data ={"member_id":member_id,"title":"添加001","amount":6300.00,"loan_rate":"12.0","loan_term":12,"loan_date_type":1,"bidding_days":1}
     add_res=cls.send.sendrequest(method='post',url=add_api,headers=headers,json=add_data)
     add_resp=add_res.json()
     ReplaceData.loan_id=jsonpath.jsonpath(add_resp,'$..id')[0]
Example #24
0
 def test_invest(self,case):
     #登录
     title =case['title']
     row=case['case_id']
     method=case['method']
     url=conf.get('env','url')+case['url']
     chk_sql =case['chk_sql']
     data = case['data']
     data=eval(self.replacedata.replacedata(data))
     expected=eval(case['expected'])
     #chk_sql=case['chk_sql']
     if  case['case_id'] ==2 :
         send_audit =SendRequest()
         print('不审批,进行投资')
         print(title,url,data)
         res_info=send_audit.sendrequest(method=method,url=url,headers=self.headers_admin,json=data)
         res_info=res_info.json()
     elif case['case_id'] == 3:
         send_audit =SendRequest()
         print('审批:投资------先审批,再投资')
         audit_data='{"loan_id":#loan_id#,"approved_or_not":"true"}'
         audit_url='http://api.lemonban.com/futureloan//loan/audit'
         audit_data=eval(self.replacedata.replacedata(audit_data))
         res_audit=send_audit.sendrequest(method='PATCH',url=audit_url,headers=self.headers_admin,json=audit_data)
         print('审批数据:',audit_data)
         print('审批结果:',res_audit.json())
         print(title,url,data)
         res_info=send_audit.sendrequest(method=method,url=url,headers=self.headers_admin,json=data)
         res_info=res_info.json()
     else:
         send_audit =SendRequest()
         print('投资或登录------')
         print(title,url,data)
         res_info=send_audit.sendrequest(method=method,url=url,headers=self.headers_admin,json=data)
         res_info=res_info.json()
     if case['interface'] == 'login':
         print('审核账号登录:',res_info)
         ReplaceData.member_id=jsonpath.jsonpath(res_info,'$..id')[0]
         token = jsonpath.jsonpath(res_info,'$..token')[0]
         token_type = jsonpath.jsonpath(res_info,'$..token_type')[0]
         self.headers_admin['Authorization']='{} {}'.format(token_type,token)
     try :
         print('实际结果:{}'.format(res_info))
         print('期望结果:{}'.format(expected))
         if chk_sql :
             sql_data_end=self.connet.select_data(sql=self.sql)
             leave_amount_end=sql_data_end['leave_amount']
             #self.assertEqual(Decimal(str(data['amount'])),(leave_amount_start-leave_amount_end))
         self.assertEqual(expected['code'],res_info['code'])
         self.assertEqual(expected['msg'],res_info['msg'])
         self.readexcel.write_excel(row=row,column=8,value='pass')
         log.info('{}用例测试通过'.format(case['title']))
     except AssertionError as e :
         self.readexcel.write_excel(row=row,column=8,value='fail')
         log.error('{}用例测试不通过'.format(case['title']))
         log.exception(e)
         raise  e
Example #25
0
class Sendemail:
    """
    自定义发送email类:
    """
    # 第三方SMTP服务
    # mail_host = 'smtp.exmail.qq.com'
    # mail_user = '******'
    # mail_pw = 'P0ssW@rd'
    mail_host = conf.get('email', 'mail_host')
    mail_user = conf.get('email', 'mail_user')
    mail_pw = conf.get('email', 'mail_pw')

    sender = '*****@*****.**'
    receivers = ['*****@*****.**', '*****@*****.**']

    # 创建一个带附件的实例
    message = MIMEMultipart()
    message['from'] = '*****@*****.**'  # 发送者,最好要与发送者一致,其他可能出错哦
    message[
        'to'] = '[email protected], [email protected]'  # 接收者,最好也要一致: 应该是要以邮件后缀名结束,前面名字不影响
    subject = '测试发送邮件带附件5'
    message['Subject'] = Header(subject, 'utf-8')

    # 邮件正文
    message.attach(MIMEText('这是测试正文', 'plain', 'utf-8'))

    # 构造附件1:传送当前目录下的report.html文件   要添加多个文件,重复该不在则可
    att1 = MIMEText(
        open(report_dir + r'/report.html', 'rb').read(), 'base64', 'utf-8')
    att1['Content-Type'] = 'application/octet-stream'
    # 这里的filename写什么名字,邮件中显示什么名字
    att1[
        "Content-Disposition"] = 'attachment; filename="report.html"'  # filename尽量还是写要发送的文件及其格式
    message.attach(att1)
    try:
        smtpObj = smtplib.SMTP_SSL(mail_host)
        smtpObj.connect(mail_host, 465)
        smtpObj.login(mail_user, mail_pw)
        smtpObj.sendmail(sender, receivers, message.as_string())
        print('邮件发送成功')
        smtpObj.quit()
    except smtplib.SMTPException:
        print('Error:无法发送邮件')
Example #26
0
 def replacedata(self, strs):
     while re.search(pattern=self.pattern, string=strs):
         res = re.search(r'#(\w*)#', strs)
         res2 = res.group(1)
         try:
             value = conf.get('env', res2)
         except:
             value = str(getattr(ReplaceData, res2))
         finally:
             strs = strs.replace(res.group(), value)
     return strs
Example #27
0
class TestLogin(unittest.TestCase):
    userorpwd = ReadExcel(filename=os.path.join(DATAPATH,
                                                conf.get('workbook', 'name')),
                          sheetname=conf.get('workbook', 'sheet01'))
    cases = userorpwd.read_excel()
    print(cases)

    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.get('http://120.78.128.25:8765/Index/login.html')

    def tearDown(self):
        self.driver.quit()

    @data(*cases)
    def test_login_or(self, case):
        data = eval(case['data'])
        phone = data['phone']
        pwd = data['pwd']
        expect = data['expect']
        loginpage = LoginPage(self.driver)
        loginpage.login(username=phone, pwd=pwd)
        homepage = HomePage(self.driver)
        if case['error'] == '1':
            actual = loginpage.login_userorpwd_error()
            try:
                self.assertEqual(actual, expect)
            except AssertionError as e:
                raise e
        elif case['error'] == '2':
            actual = loginpage.login_userandpwd_error()
            try:
                self.assertEqual(actual, expect)
            except AssertionError as e:
                raise e
        elif case['error'] == '3':
            actual = homepage.login_success()
            try:
                self.assertEqual(actual, expect)
            except AssertionError as e:
                raise e
Example #28
0
def get_token(request_data):
    request = HTTPRequest()
    url = conf.get("env", "url") + "/api/private/v1/login"

    response = request.request(method="post", url=url, data=request_data)
    token = response.json()['data']["token"]
    request.close()
    print("")
    print("登录请求参数--> {}".format(request_data))
    print("登录结果--> {}".format(response.json()))
    time.sleep(1)
    return token
Example #29
0
def main():
    scheduler = BlockingScheduler()
    # 每天24:00:00触发
    scheduler.add_job(job,
                      'cron',
                      day_of_week='0-6',
                      hour=0,
                      minute=0,
                      second=0)
    app_name = conf.get('app', 'name')
    print(app_name + ' is running!')
    scheduler.start()
Example #30
0
    def creat_logger():
        """
        创建日志收集器
        :return: log (日志收集器)
        """
        """创建日志收集器"""
        # 获取日志
        log = logging.getLogger(conf.get("log", "log_name"))
        # 设置获取日志等级
        log.setLevel(conf.get("log", "level"))
        """设置日志输出渠道"""
        # 输出到控制台
        console = logging.StreamHandler()
        console.setLevel(conf.get("log", "console_level"))
        log.addHandler(console)
        # 输出到日志文件

        fp = logging.FileHandler(filename=os.path.join(
            LOGDIR, conf.get("log", "log_file_name")),
                                 encoding=conf.get("log", "encoding"))
        fp.setLevel(conf.get("log", "fp_level"))
        log.addHandler(fp)
        """设置日志输出格式"""
        # 日志输出格式
        formater = "%(asctime)s - [%(filename)s-->line:%(lineno)d] - %(levelname)s: %(message)s"
        fm = logging.Formatter(formater)
        # 绑定日志输出格式到日志输出渠道
        console.setFormatter(fm)
        fp.setFormatter(fm)
        return log
    def test_audit(self, case):
        # 准备数据
        url = conf.get('env', 'url') + case.url
        case.data = replace(case.data)

        # 测试用例中有*mloanId*需要替换,用例为标的为不存在
        sql = "select max(id) from member;"
        if "*loanId*" in case.data:
            # 获取数据库中最大的标id进行加一,然后进行替换
            memberId = self.db.find_one(sql)[0]
            memberId += 1
            # 替换
            case.data = case.data.replace("*loanId*", str(loanId))

        # 发送请求获取结果
        response = self.request.request(method=case.method,
                                        url=url,
                                        data=eval(case.data))
        code = response.json()['code']

        if response.json()['msg'] == "加标成功":
            sql = "select id from loan where memberId=#memberId# order by id desc limit 1;"
            replace(sql)
            loan_id = self.db.find_one(sql)
            setattr(ConText, "loan_id", str(loan_id))

        # 对比结果
        try:
            self.assertEqual(str(case.excepted), code)

            # 获取加标后标的数量
            if case.check_sql:
                # 获取加标前的标数量
                case.check_sql = replace(case.check_sql)
                status = self.db.find_count(case.check_sql)
                self.assertEqual(eval(case.data)['status'], status)

        except AssertionError as e:
            # 测试未通过,输出日志
            logger.error(e)
            # 在excel用例中写入结果
            self.wb.write_data(row=case.case_id + 1,
                               column=9,
                               msg=response.text)
            self.wb.write_data(row=case.case_id + 1, column=8, msg='failed')
            raise e
        else:
            self.wb.write_data(row=case.case_id + 1,
                               column=9,
                               msg=response.text)
            # 在excel用例中写入结果
            self.wb.write_data(row=case.case_id + 1, column=8, msg='pass')
Example #32
0
#!/usr/bin/python
# .- coding: utf-8 -.
import httplib, sys, time, os
from google.appengine.api import urlfetch
import urllib2

from common.config import conf

if __name__ == "__main__":
    print "Content-Type: text/plain\n"
    print "measuring .. "

    aobj = {}
    for hostname in conf.get("hostnames"): # .values[0]:
        url = conf.get("baseurl") + "/mon/http/%s" % hostname
        print "host: %s - %s" % (hostname, url)

        #aobj[hostname] = urlfetch.create_rpc()

        #urlfetch.make_fetch_call( aobj[hostname], url)
        try:
            #urllib2.urlopen( url )
            urlfetch.fetch( url ) 
        except Exception, e:
            print "Error: %s" % e
        #print r
        #print dir(aobj[hostname])

    #for key, val in aobj.items():
    #    try: 
    #        m = val.get_result()