Appium 求帮忙看下 appium 并发为何这里拿不到 driver 的值

Time · 2021年05月10日 · 最后由 Time 回复于 2021年05月10日 · 2560 次阅读



起始在 setUp 调 devices_start_sync(),print 打出来的日志拿不到 driver 的 return 值。求解答!!

共收到 13 条回复 时间 点赞

猜测可能是多进程之间内存不共享导致的

你的 Self.driver = devices_start_sync()但是 devices_start_sync 这个并没有返回值啊,只是起了两个子进程而已

而且并发不是这么做的吧。,, 正常的流程应该是起多个子进程 然后每个子进程里面执行命令去获取 driver 跑脚本什么的

Time #10 · 2021年05月10日 Author
咸鱼菜鸡 回复

devices_start_sync 函数起了进程以后是走到 appium_desire 函数里的,在这里面有返回 driver。但是这里面的值 return 出来在 unittest 框架里拿不到值

Time 回复

我不觉得你这么写能拿到这个返回值。。。你这个 setup 应该是在子进程里面,而不是在外面

Time #6 · 2021年05月10日 Author
咸鱼菜鸡 回复

那如果不是放在 setUp 的话,我不能保证每次执行用例前重新构建两个 driver 了

Time 回复

没搞清楚你的需求是什么,每个用例起两个 driver 一起跑吗

Time #8 · 2021年05月10日 Author
咸鱼菜鸡 回复

嗯是的,不同的手机需要用不同的 driver 驱动把,所以要构建多个。现在是能够同时进入主页,但是找不到 driver 不能跑后面的用例了

Time 回复

感觉这个思路怪怪的,你这里的并发是多用例并行执行还是啥?

如果是多用例并行执行,那每个用例自己管理自己的 driver 就好,用不着搞个 devices_start_sync 来做。框架只需要起几个固定线程,线程一空闲就去全局的待执行用例列表拉用例执行就好。

如果是镜像执行(用例里每一个操作每个 driver 都操作一遍),那应该在 driver 外层封装一个类,用例用这个类,类里面的方法都会自动遍历内部持有的所有 driver 每个执行一遍。

不过这种比较少见,而且也很难处理中间单个设备出现的异常引起的问题。所以更多见到的情况是保障每个设备都有执行过全量用例就行。实现上是多用例并行执行的基础上,把待执行用例列表从一个公共列表,变为每个线程都有一个独立的列表就好了。

PS:这两种模式的并行执行用例,都比较常见,印象中 pytest 有自带这方面的功能。如果要省力,可以考虑看看 pytest 自带的功能是否满足

Time 回复

你不应该这么设计,多个设备的话你应该根据设备号,每个设备起一个子进程,在这个子进程里面去跑你的用例呀

Time #11 · 2021年05月10日 Author
陈恒捷 回复

现在是想做的是,比如 1000 个用例。我一台手机的话得跑 1000 次才能执行完,我现在搞两台手机去跑,划分下他们各自执行的部分,每台手机跑 500 条,然后跑完的报告输出在一个 HTML 里。这看起来像是你说的第一种

Time 回复

可以看下 Pytest 的并行是否满足?

不过多设备的话,不同设备用不同 driver ,这个还是得小改造下用例里获取 driver 的方法的。用 appium 并行 搜索了下,找到几篇应该有借鉴意义的文章:
http://testerhome.com/topics/1944
http://testerhome.com/topics/12331

你也可以自己搜索下,这块社区以前有不少同学分享过。

Time #13 · 2021年05月10日 Author
陈恒捷 回复

嗯好的谢谢,后面确实考虑转 pytest 框架去实现。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册