
写了一下 micropython 的文件系统单元测试
发布日期:2021-05-09 04:06:39
浏览次数:9
分类:博客文章
本文共 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)
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年03月31日 23时15分37秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
vue项目通过vue.config.js配置文件进行proxy反向代理跨域
2021-05-08
android:使用audiotrack 类播放wav文件
2021-05-08
ACM/NCPC2016 C Card Hand Sorting(upc 3028)
2021-05-08
SLAM学习笔记-求解视觉SLAM问题
2021-05-08
程序员应该知道的97件事
2021-05-08
shell编程(六)语言编码规范之(变量)
2021-05-08
vimscript学习笔记(二)预备知识
2021-05-08
Android数据库
2021-05-08
HTML基础,块级元素/行内元素/行内块元素辨析【2分钟掌握】
2021-05-08
23种设计模式一:单例模式
2021-05-08
三层框架+sql server数据库 实战教学-徐新帅-专题视频课程
2021-05-08
【单片机开发】智能小车工程(经验总结)
2021-05-08
【单片机开发】基于stm32的掌上游戏机设计 (项目规划)
2021-05-08
C++&&STL
2021-05-08
微信js-sdk使用简述(分享,扫码功能等)
2021-05-08
基于单片机简易脉搏测量仪系统设计-毕设课设资料
2021-05-08
Javascript中String支持使用正则表达式的四种方法
2021-05-08
Servlet2.5的增删改查功能分析与实现------删除功能(四)
2021-05-08
spring启动错误:Could not resolve placeholder
2021-05-08
invalid byte sequence for encoding
2021-05-08