def send_email(email_path): from config.config import host, port, password, sender, receiver message = MIMEMultipart() #邮件内容 text = """ 请输入你想说的邮件内容 """ message.attach(MIMEText(_text=text, _subtype='plain', _charset="utf-8")) #需要发送的附件的路径 with open(email_path, 'rb') as f: content = f.read() att1 = MIMEText(content, "base64", "utf-8") att1["Content-Type"] = 'application/octet-stream' att1['Content-Disposition'] = 'attachment; filename = "report.xlsx"'#发送相应格式html或者xlsx message.attach(att1) #邮件主题 message["Subject"] = Header("柠檬web商城", "utf-8").encode() message["From"] = Header("tianmeng", "utf-8") message["To"] = Header('tianmeng_wxk', "utf-8") try: smtp = smtplib.SMTP() #smtp = smtplib.SMTP_SSL('smtp.163.com', 465) smtp.connect(host=host, port=port) smtp.login(user=sender, password=password) sender = sender receiver = [receiver] smtp.sendmail(sender, receiver, message.as_string()) Logger().log().info("发送邮件成功") return email_path except smtplib.SMTPException as e: Logger().log().info("发送邮件失败,失败信息:{}".format(e))
def setup(self) -> None: Logger().log().info("开始执行前置条件setup")#对日志配置文件还不熟,使用的还是原来的日志形式 Logger().log().info("正在打开app...") self.driver = start_app() self.driver.implicitly_wait(10) self.lp = Login(self.driver) self.rp = Register(self.driver)
def send_email(self,email_path): message = MIMEMultipart() #邮件内容 text = """ 请输入你想说的邮件内容 """ message.attach(MIMEText(_text=text, _subtype='plain', _charset="utf-8")) #需要发送的附件的路径 with open(email_path, 'rb') as f: content = f.read() att1 = MIMEText(content, "base64", "utf-8") att1["Content-Type"] = 'application/octet-stream' att1['Content-Disposition'] = 'attachment; filename = "report.html"' message.attach(att1) #邮件主题 message["Subject"] = Header("主题", "utf-8").encode() message["From"] = Header("tianmeng", "utf-8") message["To"] = Header('tianmeng_wxk', "utf-8") try: smtp = smtplib.SMTP() #smtp = smtplib.SMTP_SSL('smtp.163.com', 465) smtp.connect(host="smtp.qq.com", port=587) smtp.login(user="******", password="******") sender = "*****@*****.**" receiver = ['*****@*****.**'] smtp.sendmail(sender, receiver, message.as_string()) Logger().log().info("发送邮件成功") except smtplib.SMTPException as e: Logger().log().info("发送邮件失败,失败信息:{}".format(e))
def assert_text(loc_type, loc_ex, expect): try: reality = find_element(loc_type, loc_ex).text assert reality == expect Logger().log().info("流程正确,断言成功!") return True except Exception as e: Logger().log().info("流程正确,断言失败!失败信息:{}".format(e)) return False
def assert_text(self, loc_type, value, expect): reality = self.locator(loc_type, value).text try: assert reality == expect Logger().log().info("流程正确,断言成功!") return True except Exception as e: Logger().log().info("流程正确,断言失败!失败信息:{}".format(e)) return False
def cance(self): Logger().log().info("检查是否有取消按钮") try: cance = self.loc(self.cance_bt) except NoSuchElementException: Logger().log().info("没有取消按钮") else: Logger().log().info("点击取消按钮") cance.click()
def skip(self): Logger().log().info("检查是否有跳过按钮") try: skip = self.loc(self.skip_bt) except NoSuchElementException: Logger().log().info("没有跳过按钮") else: skip.click() Logger().log().info("点击跳过按钮")
def assert_text(self, **kwargs): try: reality = self.locator(**kwargs).text assert reality == kwargs['expect'] Logger().log().info("流程正确,断言成功!") return True except Exception as e: Logger().log().info("流程正确,断言失败!失败信息:{}".format(e)) return False
def assert_text(self, loc_type, value, expect): try: reality = self.driver.find_element(getattr(By, loc_type.upper()), value) assert reality == expect Logger().log().info("加入购物车流程正确,断言成功!") return True except Exception as e: Logger().log().info("加入购物车流程正确,断言失败!") return False
def login(self, username, password): self.cance() self.skip() # driver = start_app() # Common(driver).cance() # Common(driver).skip() Logger().log().info("开始登录") self.loc(self.uname).send_keys(username) self.loc(self.upwd).send_keys(password) self.loc(self.loginbt).click() Logger().log().info("结束登录")
def register(self, username, password, email): self.cance() self.skip() Logger().log().info("开始注册") self.loc(Login.regis).click() WebDriverWait(self.driver, 5).until(lambda el: el.find_element(*self.uname)) self.loc(self.uname).send_keys(username) self.loc(self.upwd).send_keys(password) self.loc(self.email).send_keys(email) self.loc(self.regisbt).click() Logger().log().info("注册完成")
def open_browser(browser_type): try: if browser_type == 'CHR': Logger().log().info('正常启动浏览器中......') driver = webdriver.Chrome(options=Options().options_conf()) else: driver = getattr(webdriver, browser_type)() except Exception as e: Logger().log().info("输入浏览器类型错误,默认调用谷歌浏览器,错误信息{}".format(e)) driver = webdriver.Chrome() return driver
def assert_txt(self): msg = "注册成功" message = '//*[@text=\'{}\']'.format(msg) try: toast_element = WebDriverWait( self.driver, 5).until(lambda el: el.find_element_by_xpath(message)) Logger().log().info("断言成功,找到断言元素,元素的text属性为:{}".format( toast_element.text)) return True except: Logger().log().info("断言失败,未找到断言元素") return False
def browser_type(type): type = type.upper() if type == "CHR": Logger().log().info('正常启动谷歌浏览器中......') driver = webdriver.Chrome(options=Options().options_conf()) elif type == "IE": Logger().log().info('正常启动IE浏览器中......') driver = webdriver.Ie() elif type == "FF": Logger().log().info('正常启动火狐浏览器中......') driver = webdriver.Firefox() else: Logger().log().info('输入浏览器类型失败,默认启用chrome浏览器') driver = webdriver.Chrome() return driver
def assert_text(self,loc_type,value,expect): try: #获取到总的搜索内容 items = self.driver.find_elements(getattr(By,loc_type.upper()),value) print(items) reality = [] #遍历出一个个商品的内容 for itme in items: reality.append(itme.text) Logger().log().info("搜索出的商品列表:", reality) assert expect in reality Logger().log().info("搜索流程正确,断言成功!") return True except Exception as e: Logger().log().info("搜索流程正确,断言失败!") return False
def assert_txt(self): error_message = "用户名或密码错误,你还可以尝试1次" limit_message = "验证失败次数过多,请15分钟后再试" message = '//*[@text=\'{}\']'.format(limit_message) # message='//*[@text=\'{}\']'.format(limit_message) # 显示等待lambda匿名函数,如果获取不到会超时报错 try: toast_element = WebDriverWait( self.driver, 5).until(lambda el: el.find_element_by_xpath(message)) Logger().log().info("断言成功,找到断言元素,元素的text属性为:{}".format( toast_element.text)) return True except: Logger().log().info("断言失败,未找到断言元素") return False
def test_login(): excel = LoadExcel(path) for rownum in range(2, excel.get_max_row() + 1): operator_name1 = excel.get_cell_value(rownum, operator_name) keyword1 = excel.get_cell_value(rownum, keyword) loc_type1 = excel.get_cell_value(rownum, loc_type) loc_ex1 = excel.get_cell_value(rownum, loc_ex) operator_value1 = excel.get_cell_value(rownum, operator_value) expect1 = excel.get_cell_value(rownum, expect) if keyword1 == 'ivercode': func = keyword1 + "()" func = eval(func) Logger().log().debug("操作描述:{}".format(operator_name1)) # sheet.cell(row, 9).value = "pass" Logger().log().debug("func值为:{}".format(func)) excel.set_cell_value(rownum + 1, operator_value, func) elif "assert" in keyword1: func = '{}("{}","{}","{}")'.format(keyword1, loc_type1, loc_ex1, expect1) Logger().log().debug("操作描述:{}".format(operator_name1)) status = eval(func) if status == True: # excel.set_cell_value(rownum, result, "pass") # excel.get_cell_value(rownum,result).fill = PatternFill('solid', fgColor='66ff00') # excel.get_cell_value(rownum, result).font = Font(bold=True) excel.sheet.cell(rownum, result).value = "pass" excel.sheet.cell(rownum, result).fill = PatternFill('solid', fgColor='66ff00') excel.sheet.cell(rownum, result).font = Font(bold=True) else: # excel.set_cell_value(rownum, result, "false") # excel.get_cell_value(rownum,result).fill = PatternFill('solid', fgColor='FF0000') # excel.get_cell_value(rownum, result).font = Font(bold=True) excel.sheet.cell(rownum, result).value = "false" excel.sheet.cell(rownum, result).fill = PatternFill('solid', fgColor='FF0000') excel.sheet.cell(rownum, result).font = Font(bold=True) else: if loc_type1 == loc_ex1 == operator_value1 == None: func = keyword1 + "()" Logger().log().debug("操作描述:{}".format(operator_name1)) elif operator_value1 == None: func = '{}("{}","{}")'.format(keyword1, loc_type1, loc_ex1) Logger().log().debug("操作描述:{}".format(operator_name1)) elif loc_type1 == loc_ex1 == None: func = '{}("{}")'.format(keyword1, operator_value1) Logger().log().debug("操作描述:{}".format(operator_name1)) else: func = '{}("{}","{}","{}")'.format(keyword1, loc_type1, loc_ex1, operator_value1) Logger().log().debug("操作描述:{}".format(operator_name1)) eval(func) excel.save_excel(path)
def send_mail(self,mail_path): with open(mail_path, 'rb') as f: content = f.read() host = "smtp.qq.com" port = 587 sender = "*****@*****.**" password = "******" receiver = "*****@*****.**" message = MIMEText(content, "HTML", "UTF-8") message["Subject"] = "考研帮APPUI自动化测试" message["From"] = sender message["To"] = receiver try: smtp = smtplib.SMTP(host, port) smtp.login(sender, password) smtp.sendmail(sender, receiver, message.as_string()) Logger().log().info("发送邮件成功") except smtplib.SMTPException as e: Logger().log().info("发送邮件失败,失败信息:{}".format(e))
def send_mail(email_path): from config.config import host, port, password, sender, receiver with open(email_path, 'rb') as f: content = f.read() host = host port = port sender = sender password = password receiver = receiver message = MIMEText(content, "HTML", "UTF-8") message["Subject"] = "接口测试" message["From"] = sender message["To"] = receiver try: smtp = smtplib.SMTP(host, port) smtp.login(sender,password) smtp.sendmail(sender, receiver, message.as_string()) Logger().log().info("发送邮件成功") except smtplib.SMTPException as e: Logger().log().info("发送邮件失败,失败信息:{}".format(e))
def locator(self, **kwargs): # v1.0 # if loc_type is 'xpath': # return self.driver.find_element_by_xpath(value) # elif loc_type is 'id': # return self.driver.find_element_by_id(value) try: return self.driver.find_element( getattr(By, kwargs['type'].upper()), kwargs['value']) except Exception as e: Logger().log().info("定位元素出现异常,异常信息:\n{}".format(e))
class UIHandle(): logger = Logger() # 构造方法,用来接收selenium的driver对象 @classmethod def __init__(cls, driver): cls.driver = driver # 输入地址 @classmethod def get(cls, url): cls.logger.loginfo(url) cls.driver.get(url) # 关闭浏览器驱动 @classmethod def quit(cls): cls.driver.quit() # element对象(还可加入try,截图等。。。) @classmethod def element(cls, page, element): # 加入日志 cls.logger.loginfo(page) # 加入隐性等待 # 此处便可以传入config_o1中的dict定位参数 el = WebDriverWait(cls.driver, 10).until( EC.presence_of_element_located(locat_config[page][element])) # 加入日志 cls.logger.loginfo(page + 'OK') return el # element对象(还未完成。。。) def elements(cls, page, element): # 加入日志 cls.logger.loginfo(page) # 加入隐性等待 WebDriverWait(cls.driver, 10) els = cls.driver.find_elements(*locat_config[page][element]) # 注意返回的是list return els # send_keys方法 @classmethod def Input(cls, page, element, msg): el = cls.element(page, element) el.send_keys(msg) # click方法 @classmethod def Click(cls, page, element): el = cls.element(page, element) el.click()
14 class UIHandle(): 15 logger = Logger() 16 17 # 构造方法,用来接收selenium的driver对象 18 @classmethod 19 def __init__(cls, driver): 20 cls.driver = driver 21 22 # 输入地址 23 @classmethod 24 def get(cls, url): 25 cls.logger.loginfo(url) 26 cls.driver.get(url) 27 28 # 关闭浏览器驱动 29 @classmethod 30 def quit(cls): 31 cls.driver.quit() 32 33 # element对象(还可加入try,截图等。。。) 34 @classmethod 35 def element(cls, page, element): 36 # 加入日志 37 cls.logger.loginfo(page) 38 # 加入隐性等待 39 # 此处便可以传入config_o1中的dict定位参数 40 el = WebDriverWait(cls.driver, 10).until(EC.presence_of_element_located(locat_config[page][element])) 41 # 加入日志 42 cls.logger.loginfo(page+'OK') 43 return el 44 # element对象(还未完成。。。) 45 def elements(cls, page, element): 46 # 加入日志 47 cls.logger.loginfo(page) 48 # 加入隐性等待 49 WebDriverWait(cls.driver, 10) 50 els = cls.driver.find_elements(*locat_config[page][element]) 51 # 注意返回的是list 52 return els 53 54 # send_keys方法 55 @classmethod 56 def Input(cls, page, element, msg): 57 el = cls.element(page, element) 58 el.send_keys(msg) 59 60 # click方法 61 @classmethod 62 def Click(cls, page, element): 63 el = cls.element(page, element) 64 el.click()
class MFB_Center(unittest.TestCase): """ MFB_Center类用于满分班购课中心(web端)测试用例的管理 """ log = Logger().get_logger().info('开始执行测试用例') yaml_path = '../config/data.yml' key1 = 'webui' key2 = 'mfb_file' def test_visit(self): """ 访问购课中心url """ return self
class RunTest: def __init__(self): self.cmd = Command() self.email_util = EmailUtil() self.alert = Alert() self.logger = Logger().get_logger() def main(self): time_stamp = str(int(time.time())) file_path = BASE_DIR + '/report/html_report/' + time_stamp + ".html" test_dir = BASE_DIR + '/test_cases' allure_reports = BASE_DIR + '/report/allure_reports' allure_report = BASE_DIR + '/report/allure_report' pytest.main([ test_dir, '-v', '-s', '--html=' + file_path, '--alluredir=' + allure_reports, '--reruns', '1', '--reruns-delay', '3' ]) # 本地生成allure报告,jenkins配置allure, 不需要执行命令 # cmd = "allure generate "+allure_reports+" -o "+allure_report + " --clean" # result = self.cmd.execute_result_cmd(cmd) self.email_util.send_email(file_path) self.alert.send_text("ui测试完成, 已发送邮件") self.logger.info("ui测试完成,邮件已发送")
def test_inputPhone(self): phone_input = self.driver.find_element_by_id('J-m-user') logger = Logger().get_logger() for x in self.number: phone_input.clear() print('正在输入手机号',x) phone_input.send_keys(str(self.number)) text = self.driver.find_element_by_xpath('//*[@id="J-m-user"]').text #print('text:',text) if text is '请输入手机号': logger.warning('输入手机号失败') else: logger.info('输入手机号成功') print('点击按钮')
class Excel_conf: # 创建日志对象 log = Logger().get_logger() # 定义Excel格式 def cell_write(self, value, sheet, row): bold = Font(bold=True) if value == 'pass': fill = PatternFill('solid', fgColor='AACF91') elif value == 'false': fill = PatternFill('solid', fgColor='FF0000') else: pass sheet.cell(row=row, column=8).value = value.upper() sheet.cell(row=row, column=8).fill = fill sheet.cell(row=row, column=8).font = bold # 读取配置文件中的信息,获取excel路径,基于yaml获取文件 def load_yaml(self, yaml_path): file = open(yaml_path, 'r', encoding='utf-8') file_data = yaml.load(file, Loader=yaml.FullLoader) return file_data # openpyxl 打开excel用例 def open_excel(self, excel_path): # 读取excel的内容 excel = openpyxl.load_workbook(excel_path) return excel # 获取excel的所有sheet def get_sheets(self, excel): sheets = excel.sheetnames return sheets # 关闭excel文件,释放资源 def close(self, excel): excel.close() # 保存excel def excel_save(self, excel, path): excel.save(path)
#! /usr/bin/env python3 import random from log.log import Logger from enums.player_role_enum import PlayerRoleEnum from common.card_utils import CardUtil logger = Logger.getLog(__file__) class Player: def __init__(self, name, role=PlayerRoleEnum.DEFAULT): """ name : a specified name for current player role : the role of player """ if role == PlayerRoleEnum.DEFAULT: raise Exception('Please specified the role of this player,' \ 'ref <PlayerRoleEnum>') logger.info(f'Current Player is [{name}({role.value})]') self.name = name self.role = role def obtain_init_card(self, exclude_card=None): """ Obatain cards at first time in one episode """ card_num = 17 if self.role == PlayerRoleEnum.LAND_OWNER: card_num = 20
def __init__(self): self.cmd = Command() self.email_util = EmailUtil() self.alert = Alert() self.logger = Logger().get_logger()
sys.setdefaultencoding('utf-8') import random import json import time import requests from threading import Thread from Queue import Queue from lxml import etree from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from util import Basic from log.log import Logger L = Logger("task.AddTime") class Conphantomjs(object): phantomjs_max = 10 ##同时开启phantomjs个数 jiange = 0.01 ##开启phantomjs间隔 def __init__(self): self.q_phantomjs = Queue() self.resQue = Queue() def getbody(self, asinDict): driver = self.q_phantomjs.get() url = asinDict[asinDict.keys()[0]][-1] try: driver.get(url)
# __**__ coding=utf-8 __**__ # 作者:calm_zn # 日期:2020/6/29 14:40 # 工具:PyCharm # Python版本:3.7 from keywords.keywords import Keywords from log.log import Logger from excel.excel_excutor import Excel_excutor if __name__ == '__main__': log = Logger().get_logger().info('开始执行测试用例') yaml_path = '../config/data.yml' key1 = 'webui' key2 = 'file' Excel_excutor().excute_web(yaml_path, key1, key2)