コード例 #1
0
def mail():
    try:
        # 创建一个带附件的实例
        message = MIMEMultipart()
        message['From']=formataddr([usernmae,sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
        log1.info('发件人姓名:%s' % usernmae)
        log1.info('发件人邮箱:%s' % sender)
        message['To']=';'.join(addressed_eamils)    # 括号里的对应收件人邮箱昵称、收件人邮箱账号
        log1.info('收件人邮箱:' + ';'.join(addressed_eamils))
        message['Subject']=rq + "接口自动化测试报告.html"    # 邮件的主题,也可以说是标题

        # 邮件正文内容
        message.attach(MIMEText('附件为接口自动化测试报告.html', 'plain', 'utf-8'))

        # 构造附件1,传送当前目录下的 test.txt 文件
        att1 = MIMEText(open(file, 'rb').read(), 'base64', 'utf-8')
        log1.info('读取附件')
        att1["Content-Type"] = 'application/octet-stream'
        # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
        att1.add_header("Content-Disposition", "attachment", filename=("gbk", "", "接口自动化测试报告.html"))
        # 附件名称非中文时的写法
        # att["Content-Disposition"] = 'attachment; filename="test.html")'
        message.attach(att1)
        log1.info('添加附件')

        server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,端口是25
        log1.info('连接QQ邮箱smtp服务')
        server.login(sender,password)  # 括号中对应的是发件人邮箱账号、邮箱密码
        log1.info('连接成功')
        server.sendmail(sender, addressed_eamils, message.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
        server.quit()  # 关闭连接
        log1.info("邮件发送成功")
    except Exception:  # 如果 try 中的语句没有执行,则会执行下面的 ret=False
        log1.error("邮件发送失败",exc_info=1)
コード例 #2
0
 def switch_frame(self):
     iframe = self.find_element('classname=>embed-responsive-item')
     try:
         self.driver.switch_to_frame(iframe)
         # logger.info("The element \' %s \' was clicked." % iframe.text)
     except NameError as e:
         log1.error("Failed to click the element with %s" % e)
コード例 #3
0
 def open_browser(self):
     """打开浏览器,访问url"""
     browser = config.config_read('environment', 'browser')
     log1.info('读取浏览器配置,值为%s' % browser)
     url = config.config_read('environment', 'url')
     log1.info('读取url,值为%s' % url)
     # noinspection PyBroadException
     try:
         if browser == 'chrome':
             option = webdriver.ChromeOptions()
             option.add_argument('disable-infobars')
             self.driver = webdriver.Chrome(chrome_options=option)
             log1.info('打开chrome浏览器')
         elif browser == 'firefox':
             self.driver = webdriver.Firefox()
             log1.info('打开firefox浏览器')
         else:
             log1.error('浏览器配置有误,应为chrome或firefox')
         self.driver.get(url)
         log1.info('访问url')
         self.driver.maximize_window()
         log1.info('浏览器最大化')
         self.driver.implicitly_wait(3)
         log1.info('设置静态等待时间3秒')
         return self.driver
     except BaseException:
         log1.error('浏览器打开报错', exc_info=1)
コード例 #4
0
 def download(self, company, downfile_path):
     down_file_path = downfile_path + "{}.zip".format(self.down_file_name)
     for ii in range(n0):
         y = 463 + (len(self.dict["TIVIEW"])//15)*20
         pyautogui.moveTo(x=156, y=y, duration=w3, tween=pyautogui.linear)
         pyautogui.click()
         sleep(w4)
         code_path = self.base_dir + "\\code_pic\\download-showPic.jpg"
         self.remove_down_file(code_path)
         pyautogui.moveTo(x=650, y=517, duration=w3, tween=pyautogui.linear)
         pyautogui.rightClick()
         sleep(w2)
         pyautogui.typewrite(['down', 'down', 'enter'])
         sleep(w2)
         # 将地址以及文件名复制
         pyperclip.copy(code_path)
         sleep(0.8)
         pyautogui.hotkey('ctrlleft', 'V')
         pyautogui.press('enter')
         sleep(w2)
         try:
             code = discern_code(code_path)
         except:
             pyautogui.moveTo(x=914, y=570, duration=w3, tween=pyautogui.linear)
             pyautogui.click()
             continue
         if not code:
             break
         # code = input("code:")
         pyautogui.moveTo(x=572, y=517, duration=w3, tween=pyautogui.linear)
         pyautogui.click()
         pyperclip.copy(code)
         sleep(0.8)
         pyautogui.hotkey('ctrlleft', 'V')
         pyautogui.moveTo(x=972, y=570, duration=w3, tween=pyautogui.linear)
         pyautogui.click()
         sleep(w4)
         pyperclip.copy(down_file_path)
         sleep(0.8)
         pyautogui.hotkey('ctrlleft', 'V')
         pyautogui.press('enter')
         sleep(w1)
         # 判断下载是否成功
         if not os.path.exists(down_file_path):
             sleep(w1)
             pyautogui.moveTo(x=914, y=570, duration=w3, tween=pyautogui.linear)
             pyautogui.click()
             self.dr.refresh()
             sleep(2)
             continue
         else:
             break
     if not os.path.exists(down_file_path):
         log1.info("{}下载失败".format(self.down_file_name))
     else:
         try:
             send_mail.run(self.dict)  # 发送邮件
             log1.info("邮件发送OK")
         except Exception as e:
             log1.error("{}{}邮件发送失败:{}".format(company, self.dict["ID"], e))
コード例 #5
0
 def get_element(self, selector):
     """定位元素"""
     by = selector[0]
     value = selector[1]
     bys = ['id', 'name', 'class', 'tag', 'link', 'plink', 'css', 'xpath']
     element = None
     if by in bys:
         try:
             if by == 'id':
                 element = self.driver.find_element_by_id(value)
             elif by == 'name':
                 element = self.driver.find_element_by_name(value)
             elif by == 'class':
                 element = self.driver.find_element_by_class_name(value)
             elif by == 'tag':
                 element = self.driver.find_element_by_tag_name(value)
             elif by == 'link':
                 element = self.driver.find_element_by_link_text(value)
             elif by == 'plink':
                 element = self.driver.find_element_by_partial_link_text(
                     value)
             elif by == 'css':
                 element = self.driver.find_element_by_css_selector(value)
             elif by == 'xpath':
                 element = self.driver.find_element_by_xpath(value)
             log1.info('元素定位成功。定位方式:%s,使用的值:%s' % (by, value))
             return element
         except NoSuchElementException:
             log1.error('没有定位到元素,定位方式:%s,使用的值:%s' % (by, value), exc_info=1)
             self.get_img()  # 调用截图
     else:
         log1.error(
             '元素定位方式错误,请使用id,name,class,tag,link,plink,css,xpath为定位方式参数')
コード例 #6
0
 def move_to_elenmt(self, selector):
     try:
         above = self.find_element(selector)
         ActionChains(self.driver).move_to_element(above).perform()
         log1.info("元素定位成功:%s" % selector)
     except BaseException:
         log1.error("元素定位失败:%s" % selector)
         self.get_img()
コード例 #7
0
 def use_js(self, js):
     """调用js"""
     # noinspection PyBroadException
     try:
         self.driver.execute_script(js)
         log1.info('js执行成功,js内容为:%s' % js)
     except BaseException:
         log1.error('js执行报错', exc_info=1)
コード例 #8
0
ファイル: Base_test.py プロジェクト: a-tuna/selenium
 def mobile_num(self):
     '''随机生成手机号'''
     try:
         lis = ['189','159','187','136','176','134']
         var = random.choice(lis)+''.join(str(random.choice(range(10)))for i in range(8))
         print('号码%s'%var)
         return var
     except BaseException as e:
         log1.error("生成失败!",exc_info=1)
コード例 #9
0
 def click(self, selector):
     '''点击元素'''
     element = self.find_element(selector)
     try:
         element.click()
         log1.info('点击元素成功')
     except BaseException:
         log1.error('点击元素报错', exc_info=1)
         self.get_img()
コード例 #10
0
 def switch_ifarme(self, selector):
     """切换farm"""
     element = self.get_element(selector)
     # noinspection PyBroadException
     try:
         self.driver.switch_to.frame(element)
         log1.info('切换frame成功')
     except BaseException:
         log1.error('切换frame报错', exc_info=1)
コード例 #11
0
ファイル: Base_test.py プロジェクト: zjtM/request_demo
 def post(self,url,data=None,headers=None,files=None):
     try:
         result = requests.post(url,data=data,headers= headers,files = files)
         log1.info('请求内容:%s' %data)
         log1.info('响应码:%d' %result.status_code)
         response_json = result.json()
         log1.info('响应体:%s' %response_json)
         return response_json,result.status_code
     except BaseException as e:
         log1.error("请求失败!", exc_info=1)
コード例 #12
0
 def save_data(self, dict):  # 保存数据
     try:
         apd = dict["APD"]
         APD_Date = datetime.strptime(apd, "%Y.%m.%d")
         if self.m_apd and (self.m_apd - APD_Date).days >= 0:
             return True
         insert_db(dict)
     except Exception as e:
         log1.error(e)
         return True
コード例 #13
0
 def select(self, id):
     select1 = self.find_element(id)
     try:
         options_list = select1.find_elements_by_tag_name('option')
         del options_list[0]
         s1 = choice(options_list)
         Select(select1).select_by_visible_text(s1.text)
         log1.info("随机选的是:%s" % s1.text)
     except NameError as e:
         log1.error("Failed to click the element with %s" % e)
コード例 #14
0
ファイル: Base_test.py プロジェクト: zjtM/request_demo
 def get(self,url,params=None,headers=None,files=None):
     '''封装get方法,return响应码和相应内容'''
     try:
         result = requests.get(url,params=params,headers=headers,files=files)
         log1.info('请求内容:%s' %params)
         log1.info('响应码:%d' % result.status_code)
         response_json = result.json()
         log1.info('响应内容:%s' % response_json)
         return result.status_code, response_json
     except BaseException as e:
         log1.error('请求失败', exc_info=1)
コード例 #15
0
 def inqut(self, selector, value):
     '''输入内容'''
     element = self.find_element(selector)
     element.clear()
     log1.info('清空输入内容')
     try:
         element.send_keys(value)
         log1.info('输入的内容:%s' % value)
     except BaseException:
         log1.error('内容输入报错', exc_info=1)
         self.get_img()
コード例 #16
0
 def get_img(self):
     '''截图'''
     path = os.path.join(getcwd.get_cwd(), 'screenshots/')  # 拼接截图保存路径
     rq = time.strftime('%Y%m%d%H%M',
                        time.localtime(time.time()))  # 按格式获取当前时间
     screen_name = path + rq + '.png'  # 拼接截图文件名
     try:
         self.driver.get_screenshot_as_file(screen_name)
         log1.info("截图保存成功")
     except BaseException:
         log1.error("截图失败", exc_info=1)
コード例 #17
0
 def type(self, selector, value):
     """往输入框输入内容"""
     element = self.get_element(selector)
     element.clear()
     # noinspection PyBroadException
     try:
         element.send_keys(value)
         log1.info('输入的内容:%s' % value)
     except BaseException:
         log1.error('内容输入报错', exc_info=1)
         self.get_img()
コード例 #18
0
ファイル: Base_test.py プロジェクト: zjtM/request_demo
 def post_json(self,url,data=None,headers=None):
     try:
         data = json.dumps(data).encode('utf-8')# python数据类型转化成json类型
         result = requests.post(url,data=data,headers=headers)
         log1.info('请求内容:%s' %data)
         log1.info('响应代码:%d' %result.status_code)
         response_json = result.json()
         log1.info('响应体:%s' %response_json)
         return response_json,result.status_code
     except BaseException as e:
         log1.error('请求失败!', exc_info=1)
コード例 #19
0
 def get_img(self):
     jt_path = os.path.join(getcwd.get_cwd(), 'img/')  #拼接截图保存路径
     rq = time.strftime('%Y%m%d%H%M',
                        time.localtime(time.time()))  #按格式获取当前时间
     img_name = jt_path + rq + '.png'  #拼接截图文件名
     # noinspection PyBroadException
     try:
         self.driver.get_screenshot_as_file(img_name)
         log1.info('截图保存成功')
     except BaseException:
         log1.error('截图失败', exc_info=1)
コード例 #20
0
ファイル: Base_test.py プロジェクト: a-tuna/requests
 def post(self, url, data=None, headers=None, files=None):
     '''封装post请求,return响应码和响应内容'''
     try:
         r = requests.post(url, data=data, headers=headers, files=files)
         log1.info("请求的内容:%s" % data)
         status_code = r.status_code  # 获取返回的状态码
         log1.info("获取返回的状态码:%d" % status_code)
         response_json = r.json()  # 响应内容,json类型转化成python数据类型
         log1.info("响应内容:%s" % response_json)
         return status_code, response_json  # 返回响应码,响应内容
     except BaseException as e:
         log1.error("请求失败!", exc_info=1)
コード例 #21
0
 def get(url, params=None, headers=None, files=None):
     # return response code and content #
     try:
         r = requests.get(url, params=params, headers=headers, files=files)
         log1.info("request content:%s" % params)
         status_code = r.status_code  # status code
         log1.info("get status code:%d" % status_code)
         response_json = r.json()  # response content
         log1.info("response content:%s" % response_json)
         return status_code, response_json
     except BaseException as e:
         log1.error("request fail!", exc_info=1)
コード例 #22
0
 def post_json(url, data=None, headers=None):
     # send value via json,return response code and content
     try:
         data = json.dumps(data).encode('utf-8')
         r = requests.post(url, data=data, headers=headers)
         log1.info("requests content:%s" % data)
         status_code = r.status_code  # response code
         log1.info("status code:%d" % status_code)
         response = r.json()
         log1.info("response content:%s" % response)
         return status_code, response  # return response code and content
     except BaseException as e:
         log1.error("request fail!", exc_info=1)
コード例 #23
0
 def test_login3(self):
     """密码不正确"""
     case_name = '密码不正确'
     log1.info("执行测试用例:%s" % case_name)
     login = LoginPage(self.driver)
     login.login('xuhaixiang1993', ' 12314')
     error_text = login.get_login_error()
     try:
         self.assertEqual(error_text, 'Incorrect username or password.')
         log1.info("测试用例执行成功:%s" % case_name + '\n')
     except AssertionError:
         log1.error("测试用例执行失败:%s" % case_name + '\n')
         raise
コード例 #24
0
 def test_login2(self):
     """密码为空"""
     case_name = '密码为空'
     log1.info("执行测试用例:%s" % case_name)
     login = LoginPage(self.driver)
     login.login('LJDY1077', '')
     error_text = login.get_login_error()
     try:
         self.assertEqual(error_text, '密码不能为空。')
         log1.info("测试用例执行成功:%s" % case_name + '\n')
     except AssertionError:
         log1.error("测试用例执行失败:%s" % case_name + '\n')
         raise
コード例 #25
0
 def test_login3(self):
     """密码不正确"""
     case_name = '密码不正确'
     log1.info("执行测试用例:%s" % case_name)
     login = LoginPage(self.driver)
     login.login('WQ68', '12314')
     error_text = login.get_login_error2()
     try:
         self.assertEqual(error_text, '用户名或密码错误,再输错4次该用户将被锁定15分钟。')
         log1.info("测试用例执行成功:%s" % case_name + '\n')
     except AssertionError:
         log1.error("测试用例执行失败:%s" % case_name + '\n')
         raise
コード例 #26
0
ファイル: Base_test.py プロジェクト: a-tuna/requests
 def post_json(self, url, data=None, headers=None):
     '''封装post方法,并用json格式传值,return响应码和响应内容'''
     try:
         data = json.dumps(data).encode('utf-8')  # python数据类型转化为json数据类型
         r = requests.post(url, data=data, headers=headers)
         log1.info("请求的内容:%s" % data)
         status_code = r.status_code  # 获取返回的状态码
         log1.info("获取返回的状态码:%d" % status_code)
         response = r.json()  # 响应内容,json类型转化成python数据类型
         log1.info("响应内容:%s" % response)
         return status_code, response  # 返回响应码,响应内容
     except BaseException as e:
         log1.error("请求失败!", exc_info=1)
コード例 #27
0
 def test_login1(self):
     """用户名为空"""
     case_name = '用户为空'
     log1.info("执行测试用例:%s" % case_name)
     login = LoginPage(self.driver)
     login.login(' ', '12324')
     error_text = login.get_login_error()
     try:
         self.assertEqual(error_text, 'Incorrect username or password.')
         log1.info("测试用例执行成功:%s" % case_name + '\n')
     except AssertionError:
         log1.error("测试用例执行失败:%s" % case_name + '\n')
         raise
コード例 #28
0
    def post(url, data=None, headers=None, files=None):
        # return response code and content #
        try:
            r = requests.post(url, data=data, headers=headers, files=files)
            log1.info("requests content:%s" % data)
            status_code = r.status_code
            log1.info("status code:%d" % status_code)
            response_json = r.json()
            log1.info("response content:%s" % response_json)
            return status_code, response_json  # return response code and content #

        except BaseException as e:
            log1.error("requests fail", exc_info=1)
コード例 #29
0
 def test_login4(self):
     """登录成功"""
     # 想要执行成功,需使用GitHub账号和密码
     case_name = '登录成功'
     log1.info("执行测试用例:%s" % case_name)
     login = LoginPage(self.driver)
     login.login('username', 'password')
     login_title = login.get_title()
     try:
         self.assertEqual(login_title, 'GitHub')
         log1.info("测试用例执行成功:%s" % case_name + '\n')
     except AssertionError:
         log1.error("测试用例执行失败:%s" % case_name + '\n')
         raise
コード例 #30
0
 def switch_menue(self, parentelement, secelement, targetelement):
     """三级菜单切换"""
     self.my_sleep(3)
     # noinspection PyBroadException
     try:
         self.driver.switch_to_default_content()
         self.click(parentelement)
         log1.info('成功点击一级菜单:%s' % parentelement)
         self.click(secelement)
         log1.info('成功点击二级菜单:%s' % secelement)
         self.click(targetelement)
         log1.info('成功点击三级菜单:%s' % targetelement)
     except BaseException:
         log1.error('切换菜单报错', exc_info=1)