一、文件
- 目录结构如下图: 微信截图_20200226113755.png
-
打开文件参数解析:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
file: 必需,文件路径(相对或者绝对路径)。
mode: 可选,文件打开模式
buffering: 设置缓冲
encoding: 一般使用utf8
errors: 报错级别
newline: 区分换行符
closefd: 传入的file参数类型
opener: 暂不清楚 -
数据输入、输出、存储简单实例
# -*- coding: UTF-8 -*-
import struct
import unittest
import linecache
class TestInput(unittest.TestCase):
def test_input(self):
vivid = input("请输入:")
# 之前Python2是可以使用raw_input的,后面将其整合成了input,其接受任意输入, 将所有输入默认为字符串处理,并返回字符串类型
print(vivid)
def test_input_int(self):
vivid = int(input("请输入:"))
# 这里给输入内容指定了类型,如果类型不对会报错
print(vivid)
def test_input_write(self):
filename = "write.py"
vivid = input("请输入:")
f = open(filename, mode='w', encoding='utf-8')
w = f.write(vivid)
print("共写入%d个字节到 %s" % (w, filename))
f.close()
- wenjian.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import struct
import unittest
import linecache
class TestFile(unittest.TestCase):
# 以只读方式打开文件,(mode = 'rb') 一般用于非文本文件如图片等
# 如果使用:mode = 'rb' 是读取二进制文件,非人工书写的数据如.jpeg等这些。那么读取出来的内容不会换行显示,可以试试
def test_read_only(self):
filename = "denglu.py"
try:
f = open(filename, mode = 'rb') # r默认模式,以只读方式打开文件,文件的指针将会放在文件的开头
print("%s 文件打开成功" % filename) # 意思是%作为一个替代,将后面的‘filename’字符串替换到%s位置,%s一般是替换字符串
r = f.read() # 读取所有内容
# r = f.readline() # 读取一行
# r = linecache.getline(filename, 10) # 读取文件中的某一行
print(r)
f.close() # 使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。
except IOError:
print("文件打开失败,或%s文件不存在" % filename)
def test_write_read(self):
filename = "denglu.py"
try:
f = open(filename, mode = 'r+', encoding = 'utf-8') # r+既可以读取还可以写入,不会把原先存在txt中的东西清空
print("%s 文件打开成功" % filename) # 意思是%作为一个替代,将后面的‘filename’字符串替换到%s位置,%s一般是替换字符串
r = f.read() # 读取所有内容
print(r)
w = f.write("\n测试\r哈哈哈") # \r:换行,光标在上一行;\n:回车,光标在下一行
print("共写入%d个字节到 %s" % (w, filename))
f.close() # 使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。
except IOError:
print("文件打开失败,或%s文件不存在" % filename)
# 打开文件后,写入内容,(mode = 'wb') 一般用于非文本文件如图片等
# 如果使用:mode = 'wb' 是写入二进制文件,非人工书写的数据如.jpeg等这些。读取如果使用wb就会报错,因为它要以二进制写入
def test_write_only(self):
filename = "write.py"
# 或者:with open("D:\文档管理\联系脚本\write.py", "w") as f:
try:
f = open(filename, mode = 'wb')
# w表示打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
print("%s 文件打开成功" % filename) # 意思是%作为一个替代,将后面的‘filename’字符串替换到%s位置,%s一般是替换字符串
# print(f.read()) # 这里不能使用read读取文件内容,否则会报错
# w = f.write('write_only\n\rvivid') # \r:换行,光标在上一行;\n:回车,光标在下一行
w = f.write(struct.pack('b', 1)) # 以二进制写入
print("共写入%d个字节到 %s" % (w, filename)) # %d一般是替换数字,%s一般是替换字符串
f.close()
except IOError:
print("文件打开失败,或%s文件不存在" % filename)
# 打开文件后,读取并写入内容(如果上面的w执行 print(f.read())会报错,因为w不能读取)
def test_read_write(self):
filename = "write.py"
try:
f = open(filename, mode = 'w+', encoding = 'utf-8')
# w+表示打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
print("%s 文件打开成功" % filename) # 意思是%作为一个替代,将后面的‘filename’字符串替换到%s位置,%s一般是替换字符串
# r = f.read() #这里是读取不到任何内容的
# print(r)
w = f.write('a = user')
f.seek(0) # 回到初始位置然后开始读
# 如果先读的话是读不出任何东西的,因为w+也是纯粹的覆盖写,在未使用写操作前文档是完全空白的,无论之前该文件里有什么。所以只能先写后读。
print(f.read(w))
print("共写入%d个字节到 %s" % (w, filename)) # %d一般是替换数字,%s一般是替换字符串
f.close()
except IOError:
print("文件打开失败,或%s文件不存在" % filename)
# 打开文件后,读取write.py中的文件内容写入到write2.py
def test_read_and_write(self):
sourcefilename = "write.py"
destfilename = "write2.py"
try:
fsource = open(sourcefilename, mode = 'r', encoding = 'utf-8')
print("%s 文件打开成功" % sourcefilename)
content = fsource.read()
fsource.close()
fdest = open(destfilename, mode = 'w', encoding = 'utf-8')
w = fdest.write(content) #将上面读取到的write.py文件中的内容写入write2.py文件,并给到变量w
print("共写入%d个字节到 %s" % (w, destfilename)) # %d一般是替换数字,%s一般是替换字符串
fdest.close()
except IOError:
print("文件打开失败,或文件不存在")
# 打开文件后,追加内容,(mode = 'ab') 一般用于非文本文件如图片等
# 如果使用:mode = 'ab' 是读取二进制文件,非人工书写的数据如.jpeg等这些。读取如果使用ab就会报错,因为它要以二进制追加
def test_append(self):
filename = "write2.py"
try:
f = open(filename, mode='a', encoding='utf-8')
# 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
print("%s 文件打开成功" % filename) # 意思是%作为一个替代,将后面的‘filename’字符串替换到%s位置,%s一般是替换字符串
# print(f.read()) # 这里不能使用read读取文件内容,否则会报错(暂时没找到其他差别)
a = f.write('\r\nb = vivid') # \r:换行,光标在上一行;\n:回车,光标在下一行
# a = f.write(struct.pack('b', 123)) # 以二进制追加,为啥加进来是个大括号
print("共写入%d个字节到 %s" % (a, filename)) # %d一般是替换数字,%s一般是替换字符串
f.close()
except IOError:
print("文件打开失败,或%s文件不存在" % filename)
# 打开文件后,读取并追加内容(如果上面的a执行 print(f.read())会报错,因为a不能读取)
def test_write_append(self):
filename = "write2.py"
try:
f = open(filename, mode='a+', encoding='utf-8')
# 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
print("%s 文件打开成功" % filename) # 意思是%作为一个替代,将后面的‘filename’字符串替换到%s位置,%s一般是替换字符串
f.seek(0)
print(f.read()) # 这里为什么不能打印出读取到的内容
a = f.write('\r\nb = vivid') # \r:换行,光标在上一行;\n:回车,光标在下一行
print("共写入%d个字节到 %s" % (a, filename)) # %d一般是替换数字,%s一般是替换字符串
f.close()
except IOError:
print("文件打开失败,或%s文件不存在" % filename)
if __name__ == '__main__':
unittest.main()
二、异常:即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。
class TestError(unittest.TestCase):
def test_one(self):
a = 0
b = 2
v =b/a
print(v) # 0不能作为被除数,否则会报错。类似于这种语法错误或者其他规则错误,运行时就会报错,也就是异常
def test_two(self):
while True:
try:
x = int(input("请输入一个数字: "))
print(x)
break
except ValueError:
print("您输入的不是数字,请再次尝试输入!") # 为了捕捉到这种异常,我们可以采用try、expect来处理,有异常的时候就输出expect后面的返回
# 还有很多其他情况我们会遇到不同的报错返回,我们都称为异常,可以通过编写各种条件语句返回不同情况下的异常,根据返回的异常我们可以定位到对应出现问题的
# 代码位置及其原因,从而节省问题查找时间,提高效率。
if __name__ == '__main__':
unittest.main()
三、单元测试:
1、单元测试是软件测试的一种类型。顾名思义,单元测试就是测试的对象是程序中的最小单元的测试。程序的最小单元可以是一个函数,一个类,也可以是函数的组合,类的组合。
2、单元测试是软件测试中最低级别的测试活动,与之相对的更高级别的测试有模块测试,集成系统和系统测试等。单元测试一般由软件开发者而不是独立的测试工程师完成。
3、另外,单元测试有一个隐含的性质,那就是单元测试天然就是自动化的,单元测试属于自动化测试。
4、Python单元测试框架有很多,unittest是Python标准库中自带的单元测试框架(unittest有一个很重要的特性:它通过类(class)的方式,将测试用例组织在一起。)
5、 nose是Python的一个第三方单元测试框架。如果要使用nose,需要先显式安装它。与unittest不同的是,nose的测试用例并不限制于类。任何函数和类,
6、只要名称匹配一定的条件(例如,以test开头或以test结尾等),都会被自动识别为测试用例。
7、pytest是Python另一个第三方单元测试库。特点:支持用简单的assert语句实现丰富的断言,无需复杂的self.assert*函数;自动识别测试模块和测试函数
8、兼容unittest和nose测试集,支持Python3和PyPy3,丰富的插件生态,已有300多个各式各样的插件,和活跃的社区
9、详情区别可以查看:https://testerhome.com/topics/19467
网友评论