在 Windows 下搭建 Appium + Android 自动化测试环境
Appium 是移动端自动化测试的必学内容。 前言 本来并不打算写这么一篇文章,但是实践下来发现网上的各种教程里大致有两个问题。一是文章有些跟不上时代,目前 android 开发和测试的技术更新都比较快,内容有些过期。二是细节部分不是太完整,拼拼凑凑也能完成,但对新手来说就比较痛苦。那么,我也来试着总结一下自己踩过的坑。 备注:Android 自动化测试环境和开发环境并不完全相同,...
Appium 是移动端自动化测试的必学内容。 前言 本来并不打算写这么一篇文章,但是实践下来发现网上的各种教程里大致有两个问题。一是文章有些跟不上时代,目前 android 开发和测试的技术更新都比较快,内容有些过期。二是细节部分不是太完整,拼拼凑凑也能完成,但对新手来说就比较痛苦。那么,我也来试着总结一下自己踩过的坑。 备注:Android 自动化测试环境和开发环境并不完全相同,...
PyCharm 是很多 Python 开发者优先选择的 IDE,功能强大,跨平台,提供免费社区版,非常良心。如果你想自己给 PyCharm 添加一些功能怎么办呢? 有两个办法: 通过提需求实现,到 JetBrains 的 github 去提 issue 或者自己发 Pull Request 请他们 merge。 通过安装插件实现,你可以查找现有的插件仓库,或者,自己写一个。...
在 Windows 平台部署基于 Python 的网站是一件非常折腾的事情,Linux/Unix 平台下有很多选择,本文记录了 Flask 部署到 IIS 的主要步骤,希望对你有所帮助。 涉及工具和平台 Windows 7 x64 Python 3.4+ Flask 完成 Hello Flask 网站 这是一个最简单的 Flask 网站: # hello.py ...
你确定自己会git diff 吗? 在 git 提交过程中,存在三大环节: working tree index file (staged) commit 这三大环节中,你应该有一个大概的了解: working tree:就是你所工作在的目录,每当你在代码中进行了修改,working tree 的状态就改变了。 index file:是索引文件,它是连接...
Pypi 的发布实践。 本文仅讨论上传相关的步骤,关于如何给写一个setup.py 请参阅官方文档: https://docs.python.org/2/distutils/setupscript.html 上传前的注意事项 假设你的包已经开发完成,并且根目录必须要有一个setup.py。 最好有一个README.rst 用来描述你的轮子,虽然这不是必须的,但文...
Do we want to move on to Python 3? Well, what is your concerns? Here is a slide made by me probably can help you out. (Use the left/right arrow key to navigate back/forward.) Slides Resourc...
异常处理在任何一门编程语言里都是值得关注的一个话题,良好的异常处理可以让你的程序更加健壮,清晰的错误信息更能帮助你快速修复问题。 在Python中,和不部分高级语言一样,使用了try/except/finally语句块来处理异常,如果你有其他编程语言的经验,实践起来并不难。 异常处理语句 try…excpet…finally 实例代码 def div(a, b): try:...
如果你需要录制截屏并保存成 gif 图片格式,那么你一定不能错过 GifCam 这个神奇的小工具。它虽然只有 600K,但功能不可小觑。 GifCam (Gif 相机) 是一款免费且非常优秀的视频录制/剪辑的 GIF 动画制作软件,它的使用非常简单直观,譬如想要将某一小段视频录制成 Gif 图片,你只需将其窗口的取景框拖放到视频播放的区域,然后按下录制按钮即开始录制。它就像一个摄像机一...
之前有比较系统介绍过 Python 的装饰器(请查阅《详解 Python 装饰器》),本文算是一个补充。今天我们一起探讨一下装饰器的另类用法。 语法回顾 开始之前我们再将 Python 装饰器的语法回顾一下。 @decorate def f(...): pass 等同于: def f(...): pass f = decorate(f) @语法的好处在于...
Python 中的装饰器是你进入 Python 大门的一道坎,不管你跨不跨过去它都在那里。 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye()两个函数。 def say_hello(): print "hello!" def say_goodbye(): print "hello!" # bug here if __na...