自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

sonnyuu的博客

热爱测试,不断学习中

  • 博客(72)
  • 收藏
  • 关注

原创 Python+Selenium框架篇10-封装一个自动发邮件测试报告功能系列-下

本文介绍如何封装一个自动发邮件测试报告功能系列在上两篇介绍了【发送带附件邮件】和【【找到最新的测试报告】的方法,接下来我介绍何如将自动发送邮件测试报告方法集成封装到自动化项目中层次结构如下:首先我们将这两个方法统一封装到公共包method.py方法类里,方便以后调取代码如下:import timeimport os.pathfrom email.mime.text import M...

2019-06-20 18:06:49 604

原创 Python+Selenium框架篇12-discover()-执行脚本方法 -加载不同模块(路径)下所有用例执行

本文补充unittest中discover()方法,加载不同模块(路径)下所有用例执行本编作为makeSuite()方法的一个补充,在实际项目中,我们调试阶段可能需要执行固定几个模块的用例(一个目录下个别模块,不是所有模块)。demo如下:上图YPT目录下是我们所有的用例的模块,但我们只想执行前三个模块,废话不多说代码如下:import unittestsuite = unittest.TestSuite() # 构造一个测试套件suiteloader = unittest.Test

2021-09-18 16:29:36 354

原创 Python练习篇27-ddt模块实现数据驱动自动化测试

本文介绍ddt模块实现数据驱动自动化测试首先我们需要介绍ddt三个方法:ddt : @ddt.ddt需要在测试类名上装饰,定义数据驱动的类data :@ddt.data需要装饰在测试用例上,接收动态传参,并对参数进行首次拆分。unpack:@ddt.unpack需要装饰在测试用例上使用的,是对上面的data接收的传参再进行拆分。# 导入包import ddt import unittest@ddt.ddtclass TestPrint(unittest.TestCase):

2021-01-04 10:05:59 327

原创 Python+Selenium练习篇15-如何抓取一闪而过的弹窗信息

本文介绍如何抓取一闪而过的弹窗信息我们在实际项目中经常会遇到非alert弹窗,前端页面弹窗一闪而过,无法去定位获取文本,类似于下面这种demo:由于不是alert弹窗,无法使用switch_to方法。只能使用元素定位去获取text(),为了避免我们正在获取时,元素就提前消失了,导致报错。可以先采用ActionChains模块的方法move_to_element()方法鼠标悬浮在弹窗上,这样弹窗就不会消失,然后我们再去稳妥的定位获取弹窗文本。代码如下:# coding=utf-8from sel

2020-12-29 18:12:29 3651 5

原创 Python+Selenium练习篇14-清空input标签的value值

本文介绍如何清空input标签的value值通常我们在编辑修改等操作前需要清理输入框默认值,都会使用到clear方法清空后,再编辑。但在有些项目中,经常会遇到使用clear清不掉的value值。demo如下:可以使用 Keys方法处理代码如下:# coding=utf-8from selenium.webdriver.common.keys import Keys #导包loc = driver.find_element_by_id('pageEnd') # 定位该元素loc.send_k

2020-12-28 11:46:09 4593

原创 Python+Selenium练习篇13-设置浏览器下载文件默认地址

本文介绍如何设置浏览器下载文件默认地址设置Selenium自动化下载的浏览器默认地址本人使用浏览器Chrome,python3.7代码如下:# coding=utf-8from selenium import webdriverdriver_path = (r'xx/chromedriver.exe') # 驱动位置prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': '默认

2020-12-28 11:19:35 3572

原创 Selenium中报错集合篇3-WebDriverException: Message: unknown error: cannot find Chrome binary

在Jenkins上运行自动化脚本时调用Chrome浏览器遇到该问题selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary由报错信息可以看出,是由于找不到你的chrome.exe程序文件启动不了Chrome浏览器。因此我们需要在调用Chrome浏览器时,先使用binary_location属性设定chrome.exe文件位置。修改代码如下:from seleniu

2020-11-27 15:20:22 3789 1

原创 python+requests练习篇3-下载保存文件及中文乱码转换输出

本文介绍如何使用requests下载保存文件及中文乱码转换输出一般下载都需要使用到get请求代码如下:# coding=utf-8# 导入requests包import requestsimport timeurl = "" # 下载文件的urlheaders = {} # 请求头参数data = {} # params传参,如有才写path = ""存放文件路径r = requests.get(url, headers=headers, params=data, str

2020-11-26 12:42:10 1658

原创 Python练习篇26-超大文件批量替换字符

本文介绍超大文件批量替换字符一般遇到超大文件读取,最好使用line去一行行读取,不然直接读取全部,内容过大,容易死机。代码如下:# coding=utf-8file_path = "" # 文件路径with open(file_path, "r", encoding="utf-8") as f: for line in f: print(line)这样的话文件就是一行行读取打印。下面我们将代码进行封装,读取的文件一行行去批量替换字符,再将替换好的新文本写入。代码如

2020-07-02 11:15:47 1291

原创 python+requests练习篇1-下载保存图片

本文介绍如何使用requests下载保存图片一般下载都需要使用到get请求代码如下:# coding=utf-8# 导入requests包import requestsimport timeurl = "" # 下载照片的urlfile_path = ""存放照片路径new = time.strftime('%Y-%m-%d %H_%M_%S', time.localtime(time.time())) # 当前日期# 设置照片格式及存放路径file = file_path +

2020-07-01 15:27:54 453

原创 python+requests练习篇2-上传图片或文件

本文介绍如何使用requests上传图片或文件一般上传都需要使用到post请求,使用files参数上传图片或文件代码如下# coding=utf-8# 导入requests包import requestsurl = "" # 上传文件的接口地址header = {"Content-Type":"", "Cookie":"" } # 请求头部信息data= {} # data传参(部分接口需要data传参)file_path = "" # 图片或文件的绝对路径file = {"

2020-07-01 14:54:03 2671

原创 Python报错集合篇10-NameError: name 'namee' is not defined

本文介绍如何处理报错–NameError: name ‘namee’ is not defined源代码:name = "Jack"print(namee)运行报错如下:Traceback (most recent call last): File "D:/Program Files/PycharmProjects/pycharmPrj/zzz/lx/lx2.py", lin...

2020-01-03 10:22:27 3417

原创 MySQL数据库练习篇2-建表语句

本篇介绍MySQL建表基本操作1、建表格式首先介绍建表关键词 create table 表名格式如下:create table 表名(列名1 数据类型,列名2 数据类型,……列名n 数据类型);其中,表名、列名可以由字母、数字和下划线组成,必须以字母开头,不能是系统关键字2、数据类型数字类型:int 整数tinyint 范围从0到255之间的整数float(m,n)...

2019-09-26 17:43:26 529

原创 Python练习篇25-re模块利用正则匹配提取网页邮箱并保存

本文介绍requests模块提取网页邮箱并保存提取网页邮箱我们需要用到re模块(下载方法:打开cmd,输入pip install 包名),负责去匹配邮箱数据。本篇我们演示下提取百度邮箱(http://home.baidu.com/contact.html)图例如下:只提取红框里面邮箱数据代码如下#提取网页邮箱并保存import requestsimport xlwt impor...

2019-09-20 11:42:23 1545

原创 Python练习篇24-bs4模块抓取网页数据并保存

本文介绍requests模块抓取网页信息为了方便查找抓取数据和保存数据,还需要一个bs4模块和xlwt模块(下载方法:打开cmd,输入pip install 包名)本篇我们演示下抓取豆瓣音乐排行榜(https://music.douban.com/chart)图例如下:点击F12打开HTML源码,我们可以看出每个标签下都有一个a标签的电影名,因此我们可以定位搜索电影名了。代码如下:#...

2019-09-20 10:47:23 1041

原创 Python练习篇23-os模块获取路径

本文介绍os模块获取路径方法首先我们需要导入os模块代码如下:#os模块import os#os.getcwd()获取当前路径current_path = os.getcwd()print(current_path)#os.path.abspath(name)获取绝对路径,name可以是文件名或目录my_path = os.path.abspath('test.ini') ...

2019-09-17 17:08:00 425

原创 Python练习篇22-os模块增删改查目录

本文介绍os模块增删改查目录首先我们需要导入os模块写个类封装代码如下:#os模块import osimport timeclass OS_dir(object): def __init__(self): self.path = os.getcwd()#当前路径 self.time = time.strftime('%Y-%m-%d',...

2019-09-09 17:40:49 196

原创 Python练习篇21-MySQL数据库的链接及增删查改操作

本文介绍Python对MySQL数据库的链接操作首先我们需要下载第三方包:pymasql(下载方法:打开cmd,输入pip install 包名)写个类封装代码如下:import pymysql #导入pymysql模块class PyMySQL(object): #初始化链接服务器 def __init__(self, host, user, pwd, db):...

2019-09-09 15:53:03 257

原创 Python练习篇20-类的继承

本文介绍类的继承上一篇介绍了什么是类,这一篇介绍类的继承。继承可以使子类拥有父类的各种属性和方法,不用重新编写。下面实例说明下:class A(): def __init__(self): print('我是a的初始化属性') def fun1(self): print('我是a的方法')class B(A): def __in...

2019-09-06 15:08:41 817

原创 Python练习篇19-类的介绍

本文介绍类根据前几篇已经接触了类,简单明了的理解类就是属性+方法的集合。格式语法如下:class ClassName(object): #class关键字 +加class名称 def __init__(self, x=1 ): #初始化属性(变量)x=1为默认值 self.x = x def fun1(self): #方法(函数) return self.x...

2019-09-06 14:39:32 133

原创 Python练习篇18-yaml文件读写操作

本文介绍如何读写操作yaml文件首先我们需要下载第三方包:yaml(下载方法:打开cmd,输入pip install 包名)写个类封装yaml文件的读写方法代码如下:import yaml #导入yaml模块#封装一个类方法class RWyaml(object): def __init__(self, file_name): self.y = yaml...

2019-09-05 16:59:52 818

原创 Python练习篇17-ini文件读写操作

本文介绍如何读写操作ini文件首先我们需要下载第三方包:configparser(下载方法:打开cmd,输入pip install 包名)写个类封装ini文件的读写方法代码如下:import configparser as cp #导入模块#封装一个类方法class RWini(object): def __init__(self, file_name): ...

2019-09-05 14:36:29 199

原创 Python练习篇16-Excel表格读写操作

本文介绍如何读写操作Excel表格首先我们需要下载第三方包:xlwt和xlrd,这两个模块很强的,xlwt负责写入Excel,xlrd负责读出Excel。下面我们先介绍xlwt写入Excel操作代码如下:import xlwt #首先导入xlwt模块#自定义字体样式,根据自己需要调整,也可以不要def set_style(): style = xlwt.XFStyle(...

2019-09-04 16:55:09 539 1

原创 Python练习篇15-with语句介绍

本文介绍with语句介绍及使用代码如下:with语句会自动处理文件的打开和关闭,中途出现异常后,会自动清理代码,确保文件关闭。妈妈再也不用担心我粗心打开文件后忘记关闭了,嘻嘻。代码如下:#打开一个文件with open('text.txt', 'w') as f: f.write('Hello\nWorld')#打开多个文件with open('text1.txt', ...

2019-09-03 16:36:45 127

原创 Python练习篇13-try语句使用及异常处理

本文介绍try语句介绍及使用代码如下:try: print(int('try')) #异常不执行 except: print('except') #try语句出现异常才会执行 else: #try语句下面无异常才执行 print('else') finally: #必须执行的语句 print()执行如下:except...

2019-09-03 15:59:53 436

原创 Python练习篇12-txt文件处理

本文介绍文件的操作代码如下:import osfile_name = 'text.txt' #文件名,只能打开当前路径下文件,其他路径文件需改为对应路径#write()方法写入text = 'Hello World' #文本f = open(file_name, 'w') #‘w’,表示开放写的权限,写入内容会覆盖之前内容f.write(text) #写入text文本f....

2019-09-03 15:08:28 470

原创 Python练习篇11-集合

本文介绍集合的使用和方法上一篇介绍了字典,这边接着介绍集合的使用,跟字典一样同样也是用大括号“{}”括起来的数据。集合有什么特征呢?1.元素唯一性,不可能有两个相同元素;2.无序,不可通过列表属性索引下面我们实际来介绍下集合吧代码如下:#集合set1 = {1, 2, 3, 2, 3}#打印类型print(type(set1)) #<class 'set'>...

2019-09-02 17:40:29 196

原创 Python练习篇10-字典

本文介绍字典的使用和方法什么是字典?我们可以理解成,使用大括号 “{}” 括起来的 关系数组(键值对组合)代码如下:#字典d = {1:'one',2:'two',3:'three'}print(type(d)) #打印类型#<class 'dict'>#打印对应的值print('1对应的英文是:'d[1]) #1代表字典键1#1对应的英文是:'one'...

2019-09-02 17:13:27 1025

原创 Python练习篇9-递归的介绍和使用

本文介递归的介绍和使用首先来介绍下什么是递归?1.表现为函数调用自身的一个行为;2.设计正确有效的返回条件。下面我们来举例说明代码如下:#递归求阶乘def Factorial(n): if n == 1: #设置返回条件 return 1 else: return n * Factorial(n-1)print('5的阶乘是:',...

2019-09-02 16:03:46 169

原创 Python练习篇8-匿名函数:lambda表达式

本文介匿名函数:lambda表达式lambda表达式适用于一次函数的使用,比如不经常使用的函数,我们就没必要去单独定义它,用lambda表达式创建,简洁明了提高代码可读性。下面有个普通函数,我们尝试将其转变为匿名函数代码如下:#普通函数def MyAdd(x, y): return x + y print('普通函数MyAdd:', MyAdd(3, 5))#匿名...

2019-09-02 15:39:21 378

原创 Python练习篇7-函数

本文介Python的函数定义和使用首选介绍函数的格式,如下为:def Myfunction(): #--------def + 函数名 +(可加参数) + “:” #函数体 #统一的缩进 #函数体 Myfunction() #调用函数 下面我们写个完成的函数,并试着调用看看def Myfunction(x): '''这是函数的文档''' ...

2019-09-02 15:23:03 1344

原创 Python练习篇6-while循环

本文介while循环的使用while循环中需要注意退出机制,不然会发生死循环,直到内存耗尽,Ctrl+c可以手动停止。循环打印1-5代码如下:n = 0while True: if n == 5: #首选设置退出条件 break n += 1 print(n) 利用while循环写一个数字游戏代码如下:import random...

2019-08-30 17:36:29 333

原创 Python练习篇5-for循环

本文介for循环的使用for循环语句常用在迭代打印代码如下:for i in range(3): #打印0-3,不包括3 print(i)'''输出:012'''for i in range(1,3): #打印1-3,不包括3 print(i)'''输出:12'''for i in range(1,5,2): #打印1-5,不包括5,步数为2...

2019-08-30 16:39:52 614

原创 Python练习篇4-if分支语句

本文介if分支语句if分支语句的使用主要有三种,if–if,if–else和if–elif—else。第一种:if–if代码如下:l = [1, 2]if 1 in l: print('Pass')if 3 not in l: print('Fail') if 1 and 2 in l: print('Pass') 运行结果如下:Pass...

2019-08-30 15:50:20 254

原创 Python练习篇3-元祖介绍

本文介元祖的常见操作首先介绍下向什么是元祖?----可以理解成:元祖就是封闭的列表,一旦定义,就不可改变(不能添加、删除或修改)----适用于数据不被轻易改写的场景下,相反与可以轻松频繁修改数据的列表那么既然说元祖是封闭的列表,那能使用列表的内置方法吗?----答案是,可以使用,但仅仅是两个方法可以,其他都不适用。那究竟是哪两个方法呢,下面介绍下代码如下:# t = (1,2,3,3...

2019-08-30 14:43:22 206

原创 Python练习篇2-列表常见操作

本文介列表的常见操作首先介绍下向列表增加元素的三种方法:appent()、extent()、insert()代码如下:#列表l = [1,2,3,3]#appent()方法是将参数作为一个元素增加到列表的末尾l.appent(4)print(l)#输出:[1,2,3,3,4]l.appent([4,5])print(l)#输出:[1,2,3,3,4,[4,5]]#e...

2019-08-30 12:42:36 350

原创 Python练习篇1-字符串输出格式

本文介绍字符串使用和输出格式#字符串s = 'Hello'print(type(s)) #打印类型#输出结果:#<class 'str'>#插入s = s + 'World' #用加号尾部链接print(s)#输出结果:#HelloWorlds = s[:5] + ',Python,' + s[5:] #中间插入str[:n] + str +...

2019-08-29 14:22:45 840

原创 Python报错集合篇9-SyntaxError: positional argument follows keyword argument

本文介绍如何处理报错–SyntaxError: positional argument follows keyword argument源代码:def fun(x, y): print(x, y)fun(x=1, 2)运行报错如下:C:\Python37\python.exe "D:/Program Files/PycharmProjects/pycharmPrj/zzz/...

2019-08-28 16:19:00 19663 2

原创 Python报错集合篇8-UnboundLocalError: local variable 'x' referenced before assignment

本文介绍如何处理报错–UnboundLocalError: local variable ‘x’ referenced before assignment源代码:def fun1(): x = 2 def fun2(): # nonlocal x x *= x return x return fun2()print(fu...

2019-08-28 16:09:43 1109

原创 Python报错集合篇7-KeyError: 1

本文介绍如何处理报错–KeyError: 1源代码:dict1 = {}key = 1print(dict1[key])运行报错如下:Traceback (most recent call last): File "D:/Program Files/PycharmProjects/pycharmPrj/zzz/Python/lx0.py", line 49, in <mo...

2019-08-28 15:17:06 13019

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除