美文网首页软件测试Python接口测试自动化测试之路
python学习科普--文件、异常、单元测试

python学习科普--文件、异常、单元测试

作者: orange_ade | 来源:发表于2020-02-26 11:46 被阅读0次
    一、文件
    • 目录结构如下图: 微信截图_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

    相关文章

      网友评论

        本文标题:python学习科普--文件、异常、单元测试

        本文链接:https://www.haomeiwen.com/subject/nuxvnctx.html