python常用测试库
python的标准库:安装python自带的库
1、正则表达式库 re 使用于文本处理和搜索
匹配:
text = re.compile('abc')
text.match('abc')
正则表达式的主要元字符: . ^ $ * + ? {M} {M,N} [ ] \ \d \D \s () ^$ .*?
. 匹配任意字符
import re
p = re.compile('ca.t')
print(p.match('caat'))
* 前边的一个字符出现了一次或多次
^ 以什么开头
$ 以什么结尾 'jpg$' 以jpg结尾的图片文件
+ 前边的字符出现了一个或多次
? 前面出现了0次或一次
{} 出现次数 {m,n} 出现次数的范围值
[] 中括号中只要有一个被匹配到
import re
p = re.compile('c[abc]t')
print(p.match('cat'))
print(p.match('cbt'))
| 字符选择左面或右面 或的意思
\ 转义
\d 任意数字出现了多次[0-9]+
\D 非数字
\s 任意字符
() 分组
^$ 匹配空行
.*? 非贪婪匹配 .*贪婪匹配
import re
p = re.compile(r'(\d+)-(\d+)-(\d+)') #r 是把后面的内容原样输出,不要转义
print(p.match('2019-09-08').group(1)) group(1)取出第一部分 groups取出所有部分
#match只用于匹配字符串,如果被匹配的字符串出现了特殊情况,match匹配不到,可以使用
#search进行搜索匹配
p1 = re.compile(r'(\d+)-(\d+)-(\d+)')
print (p1.search('aa2019-09-09uuuu')
phone = '123-456-789 #这是我电话'
p=re.sub(r'#.*$','',phone) #sub 按照正则规则替换某些文本
print(p)
p2 = re.sub(r'\D','',p)
print(p2)
2、处理日期和时间类型数据 time datatime
import datetime
import time
print(datetime.datetime.now())
newtime = datetime.timedelta(minutes=10)
print(datetime.datetime.now()+ newtime)
one_day=datetime.datetime(2019,07,17)
new_date=datetime.timedelta(days=10)
print( one_day + new_date)
print(time.strftime('%Y-%m-%d(%H:%M)'))
2019-07-15 12:17:34.304183
2019-07-15 12:27:34.304238
2019-07-27 00:00:00
2019-07-15(12:17)
3、数字和数学类型的处理math random
random.uniform(1,20) #随机获取1到10中一个浮点数
random.randint(1,20) #随机获取1到20中的一个整数
random.choice(seq) #随机获取seq中的一个元素
random.sample(seq,k) #随机获取seq中的K个元素
random.shuffle(list) #打乱list元素顺序
4、文件和目录访问 pathlib os.path system
import os
print( os.path.abspath('..')) #当前所在根目录的上级目录
print( os.path.exists('/Users')) #/User 是否存在该目录
print( os.path.isdir('/Users')) #是否是目录
print( os.path.isfile('/User')) #是否是文件
print(os.path.join('/User/wangjianqing/','b/c')) #路径的拼接
from pathlib import Path
p = Path('..') #把点封装成p
print (list(x for x in p.iterdir() if x.is_dir())) #查看当前上级有哪些目录,并列举
print ( p.resolve()) #查看当前目录
p.is_dir()
q = Path('/wangjianqing/a/b/c')
Path.mkdir(q,parents=True) #新建一个目录 目录中间不存在的部分会被自动创建
import os
print(os.listdir()) #返回指定目录下的所有文件和文件名,不包括字目录。
print(os.getcwd()) #放回当前python中正在工作的目录
print(os.stat('./hanshu.py')) #获取文件属性,文件大小,创建时间,最后访问时间
os.removedirs("/XXX/XXX") #删除多个目录
os.system() #运行shell命令
os.path.join(path,name) #链接目录与文件名或目录 兼容win和linux os.seq 分隔符不一样
os.mkdir(name) #创建目录
os.path.basename(path) #返回文件名 如果传如路径没有文件存在 返回为空
os.path.exists("") #判断某文件存不存在
os.path.isfile("") #判断是不是文件
import sys
print(sys.path) #返回当前PYTHONPATH的列表
print(sys.argv) #返回当前命令行参数
print(sys.exit) # 退出当前python进程
print(sys.platform) #获取当前系统平台
print(sys.stdin) #标准输入流
print(sys.stdout) #标准输出流
print(sys.stderr) #标准错误输出
5、数据压缩和归档 tarfile
6、通用操作 logging argparse
logging参考文章: https://cuiqingcai.com/6080.html
logging.basicConfig(level=logging.DEBUG,
filename='output.log',
datefmt='%Y/%m/%d %H:%M:%S',
format='%(asctime)s - %(name)s - %(levelname)s - %(lineno)d - %(module)s - %(message)s')
logger = logging.getLogger(__name__)
logger.info('This is a log info')
logger.debug('Debugging')
logger.warning('Warning exists')
logger.info('Finish')
7、多线程 threading queue
8、Internet 数据处理的base64 urllib
9、结构化标记处理工具 html xml
10、开发工具的 unitest
11、调试工具timeit
12、软件包发布 venv
13、MysqlDB pymysql
import numpy as np
import pandas as pd
from pandas import DataFrame,Series
import pymysql
import pymysql.cursors
#---------------------数据连接---------------------------#
def connection(database_key):
mysql = {'host': '', 'port': 3306, 'user': 'root', 'passwd': '', 'db': '', 'charset': 'utf8'}
if database_key == 'test':
mysql['host'] = 'localhost'
mysql['passwd'] = '123456'
mysql['db'] = 'mytest'
return mysql
# 创建连接
conn = pymysql.connect(**connection('test'))
# 创建游标
cursor = conn.cursor()
# 执行SQL,并返回收影响行数
effect_row = cursor.execute("select * from user3")
print(cursor.fetchone())
# 执行SQL,并返回受影响行数
effect_row = cursor.execute("update user3 set name='ss' where symbol = 2")
print(effect_row)
# 执行SQL,并返回受影响行数,执行多次
effect_row = cursor.executemany("insert into user3(symbol,name) values(%s,%s)", [(20,"kloh"),(40,'bolo')])
print(effect_row)
#提交,不然无法保存新建或者修改的数据
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
14、shutil
是一种高层次的文件操作工具, 代替一些shell命令
类似于高级API,而且主要强大之处在于其对文件的复制与删除操作更好的支持。
import shutil
# 将文件内容拷贝到另一个文件中
shutil.copyfileobj(open('old.txt', 'r'), open('new.txt', 'w'))
# 拷贝文件
shutil.copyfile('old.txt', 'old1.txt')
# 仅拷贝权限。内容、组、用户均不变
shutil.copymode('old.txt', 'old1.txt')
# 复制权限、最后访问时间、最后修改时间
shutil.copystat('old.txt', 'old1.txt')
# 复制一个文件到一个文件或一个目录
shutil.copy('old.txt', 'old2.txt')
# 在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了
shutil.copy2('old.txt', 'old2.txt')
# 把olddir拷贝一份newdir,如果第3个参数是True,则复制目录时将保持文件夹下的符号连接,如果第3个参数是False,则将在复制的目录下生成物理副本来替代符号连接
shutil.copytree('C:/Users/xiaoxinsoso/Desktop/aaa', 'C:/Users/xiaoxinsoso/Desktop/bbb')
# 移动目录或文件
shutil.move('C:/Users/xiaoxinsoso/Desktop/aaa', 'C:/Users/xiaoxinsoso/Desktop/bbb') # 把aaa目录移动到bbb目录下
# 删除一个目录
shutil.rmtree('C:/Users/xiaoxinsoso/Desktop/bbb') # 删除bbb目录
#打包压缩文件
shutil.make_archive(base_name,format)15、json库
import json
json.load() #将json字符串转化成python对象
json.dumps() #将python对象转化成json字符串
16、python3. subporcess 子进程管理模块
subporcess 模块允许你产生新的进程,并且可以把输入,输出, 错误 直接连接到管道,最后获取结果,python也有俩个比较功能不是那么太全的内置模块<os.system, os.spawn..>等这些,总之这家伙的出现就是代替那些的
17、ConfigParser模块
用来解析类似.ini的文件
[tomcat_server]
Ip_address:192.168.22.10
account:testerhome
password:123456
Config实例常用方法
config.get("Section","options"):获取指定section下对应的options值
config.sections() 获取配置文件中的sections
config.has_section('section') 判断配置文件中是否有对应的section
config.has_option('section','option'):判断对应的section是否有对应的option
18、Requests库