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','测试报告')
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()
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()
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()
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()
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()
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) # 创建游标
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)
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
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()
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)
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>")
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')
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)
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()
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
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]
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
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:无法发送邮件')
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
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
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
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()
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')
#!/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()