zoukankan      html  css  js  c++  java
  • 写了一下 micropython 的文件系统单元测试

    直接上代码。

    主要是测 ram 、rom 、还有 剩余空间、目录管理、文件管理、分区边界测试,还是要结合自身的需求补充更多测试的。

    比如没有做完整的读写正确性测试,擦除次数测试等等。

    
    ### 获取芯片的 ram 大小
    #def print_mem_free():
        #import gc
        #print('ram total : ' + str(gc.mem_free() / 1024) + ' kb')
    
    #print_mem_free()
    #gc.collect()
    #print_mem_free()
    
    # 文件系统测试
    
    import os
    FLASH = '/flash'
    
    ## 获取 spiffs 映射的 flash 分区大小
    def print_flash_size(FLASH):
        statvfs_fields = ['bsize', 'frsize', 'blocks', 'bfree', 'bavail', 'files', 'ffree', ]
        info = dict(zip(statvfs_fields, os.statvfs(FLASH)))
        # print(info)
        print('flash total : ' + str(info['bsize'] * info['bfree'] / 1024) + ' kb')
    
    ## 格式化 flash 文件系统
    def unit_test_fs_format():
        os.flash_format()
    
    #unit_test_fs_format()
    #print_flash_size(FLASH)
    
    ## 测试目录相关函数 不支持 # NotImplementedError: SPIFFS not support
    def unit_test_fs_dir_mk_and_rm(FLASH):
        assert(0 == len(os.listdir(FLASH)))
        os.mkdir('test')
        os.rmdir('test')
        assert(0 == len(os.listdir(FLASH)))
    
    #unit_test_fs_dir_mk_and_rm(FLASH)
    #print_flash_size(FLASH)
    
    ## 测试文件相关函数 open stat remove rename
    def unit_test_fs_file_function(FLASH):
        name, info = 't.txt', b'0123456789ABCDEF'
        # 创建文件
        few = open(name, "wb")
        few.write(info)
        #assert(os.stat(name)[6] == 0) # 可以在 menuconfig 中取消 cache 机制
        print(os.stat(name))
        # 文件应该存在了,但内容还未写入,此时则证明有 write cache 工作。
        assert(name in os.listdir(FLASH))
        few.close()
        # 检查文件是否存在,且文件大小为 len(info) 。
        assert(os.stat(name)[6] == len(info))
        # 确认文件读取
        fer = open(name, "rb")
        assert(fer.read() == info)
        fer.close()
        # 确认 rename 工作
        tmp = 'rename.txt'
        os.rename(name, tmp)
        assert(tmp in os.listdir(FLASH))
        os.rename(tmp, name)
        assert(name in os.listdir(FLASH))
        os.remove(name)
        assert(name not in os.listdir(FLASH))
    
    unit_test_fs_file_function(FLASH)
    print_flash_size(FLASH)
    
    ## 测试文件的边界与重入 file write read close
    
    def unit_test_fs_file(FLASH):
    
        ### 追加写入测试。
    
        name, info = 't.txt', b'0123456789ABCDEF'
        if (name in os.listdir(FLASH)):
            os.remove(name)
        few = open(name, "wb")
        few.write(info)
        few.close()
    
        ### 测试内容
        few = open(name, "ab")
        assert(few.read() == info)
        few.write(name)
        few.close()
    
        few = open(name, "ab")
        assert(few.read() == info + name)
        few.close()
    
        if (name in os.listdir(FLASH)):
            os.remove(name)
    
        ## 边界检查
        import time, gc
        count, tm = 0, time.ticks_ms()
        info = info * 10240
        print(len(info), time.ticks_diff(time.ticks_ms(), tm))
        gc.collect()
        try:
            few = open(name, "wb")
            while True:
                print(few.write(info)) # 使用的是无 spiffs cache 的固件写入速度较慢。
                #print(few.flush())
                count = count + 1
                print(count * len(info))
                print_flash_size(FLASH)
            few.close()
        except Exception as e:
            print(e)
        finally:
            print(count * len(info), time.ticks_diff(time.ticks_ms(), tm))
            print_flash_size(FLASH)
            few.close()
        ## 数据检查
    
        ## 写入重入
    
    unit_test_fs_file(FLASH)
    print_flash_size(FLASH)
    
    
  • 相关阅读:
    Developers’ Musthave: the new Microsoft AllInOne Code Framework Sample Browser and 3500+ samples
    8774
    DCOM
    9个最棒的代码片段资源网站
    WCF中的几种地址总结
    如何用C#编写DCOM服务器
    C++ DCOM服务器和C#客户端互操作完全解释
    理解Prism中MVVM的Command与CommandParameter
    WCF REST 基础教程
    细说ASP.NET Forms身份认证
  • 原文地址:https://www.cnblogs.com/juwan/p/12446306.html
Copyright © 2011-2022 走看看