[email protected]:~$

  • 用社区公认最佳工具链完成python测试

    一名有经验的开发者应该明白测试的重要性。 当产品经理提出一个个新需求,老板一遍遍的催促着提高效率。 在欣赏凌晨四点美丽的夜景隔日,拖着疲惫的身心晃到公司门口,伴随着咖啡的振奋告诉自己今天也要努力工作,此时传来的一声 “怎么又出BUG了!!XXX过来看一下”,我相信着对于任何一个程序员都是崩溃的,尤其是当实现新功能时,正享受着解决者一个又一个问题的膨胀感,却突然被打断,面对着项目经理头顶的反光惭愧的低下头,今天剩下的时间很有可能就要花在修复bug上,更恐怖的是修复又带来新的bug,新功能怎么办?加班,于是又开始重复着日复一日的轮回.. 残酷的资产阶级不会体谅程序员的艰辛,只会一遍遍的榨压和责怪,身为弱势群体,我们唯有自己保护自己,而测试就是保护我们不受打断的工具! 笔者最近使用python,因为没能找到关于python测试较好的简介,我选择了几个github上的明星项目来学习它们的测试实践,对于所用的工具链,结果惊人的一致 pytest pytest 是一个兼容 unittest 和 nosetest 的测试框架,结果输出非常友好 在 assert a == b 语句中如果测试失败会在结果中打印 a 和 b 的值,并会标注字符串中哪些字符不同,列表中的第几项错误等等.. 并且提供了 fixture 等测试必备功能 https://github.com/pytest-dev/pytest pytest本身的测试非常完善,可以参考该项目的各种配置及测试方法 tox tox 是个为 python 准备不同运行环境的工具,通过不同配置可以使用不同的版本解释器来执行代码,很多项目利用 tox 和 travic-ci 来测试对不同版本 python 的支持 最佳实践请见 pytest https://testrun.org/tox/latest/ 笔者最近在开发一个自动生成测试的工具也是使用了上述两个库,测试虽然表面上花费了时间,但长远看是非常必要的,无论是对程序稳定性的保证,还是对未来重构工作的铺垫,有着完善的测试都是非常有利的 但如果某些程序员实在懒到了一行测试都不写,也是有解决方法的(毕竟程序员最讨厌的就是写测试和文档,其次讨厌别人不写测试不写文档) zerotest 推荐下前几日我做的测试工具 zerotest 这是个懒人用的 API 集成测试生成工具,如果适合您的需求的话欢迎使用(也很欢迎提issue)...

  • G的悲剧

    到公司后就被同事抓到,表示交付的软件有bug。我第一反应很惊讶,这不科学啊!昨天还是好的/在我机器上还是好的 ,怎么可能莫名奇妙的出现bug? 我考虑了下,前几天merge了下upstream,然后升级了开发环境,难道是merge的代码有问题?逐行对比下发现涉及到的代码没有任何merge,反复重试了几次还是有问题。因为这段代码会download到受限的客户端执行,所以很难debug。 这时想起了之前对开发环境做过快照,立刻恢复,重试。正常工作!再次把更新后的代码覆盖上,重试,出错! 已经能够重现错误!这就代表错误就在更新的代码中!对比了下代码….崩溃..没有变化… 没错..之前用到的代码根本没更新,代码是一样的..怎会出错? 没办法了..只能祭出法宝。 波若波若密!!恢复快照!! 这次是有备而来,apt-get install git 切换到项目目录, git init 覆盖更新的代码 没错!这次我打算用git来对比更新前后的代码,比肉眼靠谱得多,在这里我用了git的gui工具tig 用tig查看发现…代码看上去都一样!!但是git diff却显示不同.. 用cmp -b byte by byte试着比较了两个文件..发现换行符不同.. 结论就是windows下得换行符导致代码在受限客户端运行出错.. WTF!!?为什么之前的程序可以正常工作?我在windows下得开发环境没换过啊 这时看了眼sourceTree突然明白问题所在.. git有个autocrlf的选项,设置后git会把提交的代码的换行符从dos style转换为unix style所以之前的代码正常运行 但是我在更新代码时因为机器连不到git server,所以我在windows上直接打成tar包。这时造成打包的代码没有经过git,所以没有被转换,保留了\r\n的换行符,造成bug。 正确的做法是我应该找一台可以连接到git server的*nix机器,在上面clone 然后打包。 终于找到了bug原因,我眼角湿润,望着上海凌晨四点的街景(此处夸张!)感叹,老子这一天就被这么浪费了…. bug的原因因为git的crlf被掩盖,而我又用到了git来debug,真是成也git,败也git.. 遂效仿各大”悲剧”系列,以G的悲剧为题..

  • 通过Razor管理Virtual box虚拟机

    打算在mac上用虚拟机玩下云。之前工作中用到了Razor,于是萌生了用Razor来管理虚拟机的想法(顺便试验下最近很火的docker)。 为了让开发机尽量保持”干净”,决定用docker来做个razor-server的镜像(docker pull jjy0/razor 可以下载到) 制作镜像还算顺利,没想到在虚拟机的网络配置和IPXE boot上栽了跟头,记录在此引以为戒,同时期望能帮助到他人(没接触过PXE boot或Razor的朋友就此别过!) 用docker启动 razor-server非常简单 docker run -d -p 8080:8080 jjy0/razor start 在本地安装razor-clientgem install razor-client 已经完成了razor的安装! 接下来根据官方教程配置PXE boot VMware Fusion的坑 刚开始我使用的是Vmware Fusion,在一台虚拟机中设置好了razor和DHCP server,却无法被同网络其他机器探测到。 没能找到解决办法,之后使用Vmware自带的DHCP server redirect到razor,发现Vmware自导的dhcpd版本过低(2.x)不支持chain命令,只好作罢 Virtual Box的坑 转战到Virtual Box 我搜索了一番,发现已有前人尝试过比较简单的方法(把dhcp-server假设在host上)。决定使用这种方法 先按照上文链接中得做法建立host-only net 查看现有dhcp serverVBoxManage list dhcpservers 禁用相应网络的dhcp serverVBoxManage modify --netname HostInterfaceNetworking-vboxnet0 --disable 按链接中方法配置dhcp server...