就在 qc 里面用过 vb,写的很痛苦。。。
用过 perl,各大 linux,unix 系统(aix,hpux,solaris), os x 上 都预装,win 上只需要安装个 active perl 就可以。
脚本都能通用了。
曾经在台企呆过近 2 年,现在看到繁体突然好亲切。。。
每个案例之前做 dr 的初始化,最后用 dr.close_app() 和 dr.quit() 应该就可以了吧。
慢的话,要看慢在哪里,看看和 appium 的交互,脚本本身或许有可以优化的地方。
cpu 占用比较高,看看是什么进程,我曾经发现过,用命令行起 appium 比用 gui 的方式启动 appium 占用的 cpu 低很多。
最后楼上说的换机器,换 mac 和换 6s 肯定有用,呵呵。。。
我是在用户的 home 目录中,配置.bash_profile 文件,里面写 export 的方式实现的。
目前亲测可用,包括 py 和 Android 的环境变量。
py 代码参考如下。
def ex_cmd(cmd):
fh = os.popen(cmd)
res = list()
for line in fh.readlines():
line = line.strip()
if line != '':
res.append(line)
return res
再来一个假设,一个手机银行的 app,后台有个服务器。app 和后台的服务器必然会遵循一种接口规范。
现在我们需要测试这个手机银行的 APP。
两种方法:
1:基于 gui,不管你用人点,还是用 gui 的自动化,流程上都是通过 app 连接到后台的服务器。
2:基于接口,模拟 app 给后台服务器发送报文。
第二种就属于接口测试,但这样的接口测试会存在一局限性,有时候接口是好的,app 端的处理逻辑存在问题,则这样的缺陷是发现不了的。
所以,最合理的方式,就是 基于 gui+ 基于接口的方式,接口可做为 gui 的前置测试,接口都存在问题,gui 的就不用做了,但接口的没有问题,并不能代表 gui 没有问题。 我个人的看法是,接口一般比较简单,覆盖大部分就可以了。
以上,都可以自动化,接口的自动化有时候更加有效,因为接口不会经常变动。gui 的自动化维护成本太高,很多时候然并卵。
所以,我个人的看法是,覆盖 90% 以上的接口 + 覆盖 30% 左右核心功能的 gui。剩下的,交给手工把。
以上为个人看法,供参考。
我的理解是这样的,假设一个系统对外提供服务,如银行的 ESB 系统,提供 webservices 接口,没有任何 gui 界面可供直接调用。
现在我们要对这个系统做测试。
1:功能测试:没有 gui,我们只有通过发送报文的形式进行测试,很多人用 soapui。这也是接口测试,属于接口的功能测试。
2:性能测试:通过 lr 或 jmeter 并发发送报文,这也是接口测试,属于接口的性能测试。
以上为我的理解。
#57 楼 @lihuazhang 顺便试了下,遨游,可以拖拽上传图片。
#57 楼 @lihuazhang 多谢回复,我在想,能不能通过设置 charles 代理,在 charles 里面模拟丢包,延迟等。但这样,2g,3g,4g 该模拟什么值,就成了问题。
请教下,2g,3g,4g 是如何模拟的,是通过模拟丢包率和延迟来做的吗。
现在用 adb install 命令通过 pc 都无法直接安装 apk,手机要点击确认一下,否则会提示安装失败。
自动化的一些操作都无法执行了。所以现在我们不用小米的跑这个。
感谢分享,虽然没用过 soapui,但任何工具的原理都是一样的。
lr 中会自动处理这类操作。
如果自己写脚本也是需要按需处理 http header 的。
#9 楼 @tongshanshanshan 判断返回值是不是 200,是一种方式,返回的 json 数据里面有 status 等字段,也可以判断。
正常情况下,driver 的 close_app ,quit 方法也会 delete session,不用手动操作。
和 appium 没有关系,是利用 adb 命令做一些事情。还是点赞。
在第 2 点中,判断 appium 是否开启,我使用的是 http get 这个 url: http://127.0.0.1:4723/wd/hub/status ,可以获取到 appium 的状态,如果在执行中,还可以得到正在执行的手机的 udid 等信息。
第 3 点钟,杀进程没关系,不放心可以在案例的最后 delete session。
#1 楼 @lihuazhang 我的手机版本是 8.4.1,亲测可安装 app,appium 能够驱动 app
如果证书没有问题的话,把 appium 的超时时间改大点试试。
第 3 个用过,效果明显。其他还未尝试。
def tmp_page(self):
temp = self.dr.page_source
fh = codecs.open(self.tmp_source_file, "w", "utf-8")
fh.write(temp)
fh.close()
self.dr.page_source 有坑,要小心,一旦用了这个方法,有些元素的 el.is_enabled() and el.is_displayed() 可能会发生变化,导致后续的一个 click , clear 会失败。当时 debug 了很久,所以这个方法少用。具体你们可以试试。
我们也遇到了这个问题。
在打包的时候,将日志关闭即可解决。
在生产发布包的时候,一般也会关闭日志。
@happystone ,我们好像认识。。。