博客
关于我
写了一下 micropython 的文件系统单元测试
阅读量:432 次
发布时间:2019-03-06

本文共 2910 字,大约阅读时间需要 9 分钟。

直接上代码。

主要是测 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 osFLASH = '/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 supportdef 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 renamedef 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 closedef 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)

转载地址:http://inbyz.baihongyu.com/

你可能感兴趣的文章
Mysql学习总结(80)——统计数据库的总记录数和库中各个表的数据量
查看>>
Mysql学习总结(81)——为什么MySQL不推荐使用uuid或者雪花id作为主键?
查看>>
Mysql学习总结(82)——MySQL逻辑删除与数据库唯一性约束如何解决?
查看>>
Mysql学习总结(83)——常用的几种分布式锁:ZK分布式锁、Redis分布式锁、数据库分布式锁、基于JDK的分布式锁方案对比总结
查看>>
Mysql学习总结(84)—— Mysql的主从复制延迟问题总结
查看>>
Mysql学习总结(85)——开发人员最应该明白的数据库设计原则
查看>>
Mysql学习总结(8)——MySql基本查询、连接查询、子查询、正则表达查询讲解
查看>>
Mysql学习总结(9)——MySql视图原理讲解与使用大全
查看>>
Mysql学习笔记 - 在Centos7环境下离线安装Mysql
查看>>
MySQL学习笔记十七:复制特性
查看>>
Mysql学习第一课-mysql的定义及sql语句
查看>>
mysql安全模式: sql_safe_updates
查看>>
mysql安装,卸载,连接
查看>>
MySQL安装之没有配置向导
查看>>
mysql安装出现 conflicts with mysql*的解决办法
查看>>
mysql安装卡在最后一步解决方案(附带万能安装方案)
查看>>
mysql安装和启动命令小结
查看>>
Mysql安装教程(命令行)
查看>>
mysql安装版安装
查看>>
MySQL安装配置教程(非常详细),从零基础入门到精通,看完这一篇就够了
查看>>