热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Appiumgridappium的并行化测试

知道seleniumgrid2可以提供并行化。可是怎么把它应用到Appium上啊,研究了一个礼拜一筹莫展。希望大家能给点儿思路,谢谢~并行

知道selenium grid2 可以提供并行化。
可是怎么把它应用到Appium上啊,研究了一个礼拜一筹莫展。
希望大家能给点儿思路,谢谢~
并行化做的好痛苦啊!!

----------目前的一些进展,初步实现并行化---------
---希望对大家有所帮助---
步骤:
1.下载 selenium-server-standalone-2.41.0.jar
地址:http://selenium-release.storage.googleapis.com/index.html?path=2.41/
2.启动配置nodeconfig.json
3.启动命令行启动hub(已经安装了java jdk)java -jar selenium-server-standalone-2.41.0.jar -role hub
4.启动appium server
5.能在 http://localhost:4444/grid/consolehub上注册的node中找到
6.执行测试脚本。

detail:
1.如何配置nodeconfig.json
感谢 @seveniruby 在3楼提供重要思路---修改nodeconfig文件。
感谢 @arnox 在9楼提到 
{
Grid node config file:
https://github.com/appium/appium/blob/master/docs/en/grid.md 
}
ps:官方的文档grid.md中"host": ,没有加上双引号的,估计是它的疏漏。应改为"host": ""

感谢 @vigossjjj 在19楼的nodeconfig.json源码

2.测试脚本修改
self.driver = webdriver.Remote(
command_executor='http://*.*.*.*:4723/wd/hub',
desired_capabilities={
'browserName': '',
'device': 'iPhone Simulator',
'platform': 'Mac',
'version': '7.1',
'app': app_remote
})
ps:command_executor 中 *.*.*.*写的是要执行此测试用例的node(appium server)的ip地址.

存在的问题:
1.hub端不知道如何获取node的测试信息
2.如果执行的测试用例触发app漏洞,如何定位app出错位置 愁人啊!
希望大家给点思路。


本帖已被设为精华帖!

喜欢 二维码


共收到 42 条回复

662
lucktail 1楼 · 9月前 喜欢

需要对Appium的源码进行更改吗?



662
lucktail 2楼 · 9月前 喜欢


104
seveniruby 3楼 · 9月前 喜欢

nodeconfig参数可以做到. 不过比较坑的是, 因为appium会固定占用2个端口, 所以几个pc理论上只能用来同时控制一个手机.
所以为了避免冲突, 你需要调整对应的端口数字, 4723和4724. 这两个端口在参数里面貌似不能完全修改, 所以还需要修改代码
当然不知道新版本怎么样了



662
lucktail 4楼 · 9月前 喜欢

#3楼 @seveniruby 虽然不是很懂,不过先谢谢。。……^_^
我想法是一个Server(hub) 然后 有多个Client,每个Client控制一个手机或者模拟器。n个client分别执行不同的测试用例......以达到并行测试的目的。
所以不是很明白“几个pc理论上只能用来同时控制一个手机”是什么意思?
我是用appium.dmg安装的,不是通过命令行,这样还可以修改nodeconfig参数 或者修改代码吗?(是不是最好修改了代码后通过命令行安装?)
并行化这个问题纠结了好久,实在是不知道从何下手,谢谢了~



662
lucktail 5楼 · 9月前 喜欢

是这个文件吗?可是找不到它啊


104
seveniruby 6楼 · 9月前 喜欢

#4楼 @lucktail 写错了, 是理论上一个pc只能控制一个手机, 修改代码才能实现一个pc控制多个手机.
在grid模式下, 你可以认为appium server就变成了grid里面的client. 这块内容appium设计的不太好, 希望后续会有所改善.



104
seveniruby 7楼 · 9月前 喜欢

下个月等1.0放出来, 我会做个完整的grid模型给大家做参考.



662
lucktail 8楼 · 9月前 喜欢

#7楼 @seveniruby 嗯~ 太好了!
因为马上就是毕设的中期检查,所以想抓紧把并行化做出来。我只是想实现一台PC一部手机就好。如果appium server是 grid里的client ,那hub的角色由谁来充当呢?



C322baafcdb45a1d3f09efcdfa1590c3
arnox 9楼 · 9月前 喜欢

Grid node config file:

https://github.com/appium/appium/blob/master/docs/en/grid.md



C322baafcdb45a1d3f09efcdfa1590c3
arnox 10楼 · 9月前 喜欢

Grid Hub 你需要自己启用啊,和selenium Grid2.0 hub启用一样的



104
seveniruby 11楼 · 9月前 喜欢

#10楼 @arnox 是的 因为selenium和appium在协议上一致, 所以grid可以通用



209
vigossjjj 12楼 · 9月前 喜欢

#11楼 @seveniruby 不用改代码 我一直用的好好的 #11楼 @seveniruby



104
seveniruby 13楼 · 9月前 喜欢

#12楼 @vigossjjj 你是通过参数配置修改端口的吗



662
lucktail 14楼 · 9月前 喜欢

#9楼 @arnox 太好了!! 我学习一下



662
lucktail 15楼 · 9月前 喜欢

#10楼 @arnox 恩恩,因为以前没有接触过selenium 所以都不知道从何下手。我去看看selenium grid2.0 thx~



662
lucktail 16楼 · 9月前 喜欢

#12楼 @vigossjjj 你好,我尝试了一下编写nodeconfig.json文件,我已经启动了hub端口默认4444.但是启动appium server的时候报错。你的nodeconfig文件是怎么写的啊。


报错信息为:

好难过啊!



662
lucktail 17楼 · 9月前 喜欢

报错问题已解决:代码第17行 把127.0.0.1 改为“127.0.0.1” 也就是加上双引号。
ps:官方的文档grid.md中是没有加上双引号的,估计是它的疏漏。



110
lihuazhang 18楼 · 9月前 喜欢

#17楼 @lucktail 给他提 pr



209
vigossjjj 19楼 · 9月前 喜欢

#17楼 @lucktail @seveniruby 多手机连接肯定没问题的,用了半年了.....



662
lucktail 20楼 · 9月前 喜欢

#19楼 @vigossjjj 嗯 谢了~ 那个“browserName”:“IOS_TestAnget1”是什么意思啊 我的“browserName”是空着的



104
seveniruby 21楼 · 9月前 喜欢

#19楼 @vigossjjj 我是之前看appium的google groups里面提到, 说是因为端口会导致一个pc只能同时连接一个手机端. 你有没有看过, 如果是同时连接多个手机的时候, 端口是如何分配的? adb forward的端口会根据你配置的启动端口一直+1吗



209
vigossjjj 22楼 · 9月前 喜欢

#20楼 @lucktail 那个是自定义的字符串 连接多个设备执行时我为了区分多个设备 #21楼 @seveniruby #20楼 @lucktail



209
vigossjjj 23楼 · 9月前 喜欢

#21楼 @seveniruby Android的没研究,iOS的本身一台机器也只能实例一个instrument也就是一个iphone 我是多台Mac分布执行 #21楼 @seveniruby



104
seveniruby 24楼 · 9月前 喜欢

#23楼 @vigossjjj 晕 他的问题是一个电脑要连接多个手机吧



301
yujie 25楼 · 9月前 喜欢

我也在弄这块,请问楼主实现了吗?



301
yujie 26楼 · 9月前 喜欢

#1楼 @lucktail 我也在弄这块,请问楼主实现了吗?



209
vigossjjj 27楼 · 9月前 喜欢

#23楼 @seveniruby 你可以试试用多个端口启动多个服务 一个手机指一个server端口



104
seveniruby 28楼 · 9月前 喜欢

服务器本森会开2个端口, 4723和4724, 麻烦的是4724必须和手机里面的app启动的端口保持一致, 所以估计还是需要代码. appium估计也会考虑这个问题吧



662
lucktail 29楼 · 8月前 喜欢

#26楼 @yujie 嗯 就是按照大家回复里的方法 修改nodeconfig文件 然后 开了一个selenium-grid的hub 基本是实现了。但还有一个问题,就是hub怎么收集node的测试结果



355
benlooking 30楼 · 7月前 喜欢

#29楼 @lucktail 请问,nodeconfig文件在哪里修改啊。/Users/me/nodeconfig没有啊。你那边实现了连接多台手机了么?



662
lucktail 31楼 · 7月前 喜欢

#30楼 @benlooking 可以自己新建一个nodeconfig.json文件。 目前一台电脑只能连接一部手机



355
benlooking 32楼 · 7月前 喜欢

#31楼 @lucktail 恩,我新建了文件,我要怎么用他呢。node . -V --nodeconfig /path/to/nodeconfig.json不行样。。只能连接一部手机么,那请问grid有什么用处呢?



29bea2982cf098795915166d7a907376
cosyman 33楼 · 6月前 喜欢
  1. 不知道你说的节点测试信息是什么,http://localhost:4444/grid/api/proxy?id=nodeip:nodeport 可以获取这个节点的一些信息。2.测试请求首先发到hub,然后hub再分发到具体的node,这个过程可以从日志里找到。当然可能不一定能匹配到你运行的测试用例,不知道在Capabilities里加个唯一id可否来标记。


1372
wangcityboy 34楼 · 4月前 喜欢

#1楼 @lucktail 请问楼主,这个问题解决了没?我也想知道。



1401
xiang2743 35楼 · 2月前 喜欢

这个问题,有人知道怎么解了吗



1372
wangcityboy 36楼 · 1月前 喜欢

#3楼 @seveniruby 请问如何做到一个PC机对多个终端设备进行测试?代码应该如何改,nodeconfig.json文件应该怎么配置?

{"capabilities":[{"platformName":"iOS","platformVersion":"7.1.2","deviceName":"iPhone4s","app":"com.ios.app"}],"configuration":{"cleanUpCycle":2000,"timeout":30000,"proxy":"org.openqa.grid.selenium.proxy.DefaultRemoteProxy","url":"http://0.0.0.0:5000/wd/hub","host":"0.0.0.0","port":5000,"maxSession":10,"register":true,"registerCycle":1000,"hubPort":4444,"hubHost":"0.0.0.0"}
}



104
seveniruby 37楼 · 1月前 喜欢

#36楼 @wangcityboy 新版本不需要修改代码了, 通过参数可以设置不同的端口了. iOS的我不熟悉, 你问其他同学吧. 买不起iphone



1372
wangcityboy 38楼 · 1月前 喜欢

#37楼 @seveniruby 请问怎样设置参数?



5ac3cba62c0ab382b3a9cd883beba05e
hzy 39楼 · 26天前 喜欢

#38楼 @wangcityboy 请问你弄出来了么?我配置了两份config.json,然后启动了两个appium服务,但是还是不能并行测试啊,mac instrument只能同时操作一个设备。。和直接配置appium启动端口一样,没法实现并行测试。。



5ac3cba62c0ab382b3a9cd883beba05e
hzy 40楼 · 26天前 喜欢

#23楼 @vigossjjj 请问分布执行怎么弄的?最近也在搞这个,发现mac只能同时操作一个设备,根本无法并行测试啊。。



5ac3cba62c0ab382b3a9cd883beba05e
hzy 41楼 · 26天前 喜欢

#32楼 @benlooking 同感,grid也无法实现ios的并行测试啊。。。



5ac3cba62c0ab382b3a9cd883beba05e

hzy 42楼 · 26天前 喜欢

#6楼 @seveniruby 请问如何修改代码能实现一台mac同时连接多个设备呢?


推荐阅读
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • springboot启动不了_Spring Boot + MyBatis 多模块搭建教程
    作者:枫本非凡来源:www.cnblogs.comorzlinp9717399.html一、前言1、创建父工程最近公司项目准备开始重构,框 ... [详细]
  • 浅析Mysql数据回滚错误的解决方法_PHP教程:MYSQL的事务处理主要有两种方法。1、用begin,rollback,commit来实现begin开始一个事务rollback事 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • gitlab重置password
    ruby没怎么学,自己搭建的gitlab的rootpassword又忘了。幸好看见此帖子,试验okhttp:roland.kierkels.netgitreset-your-git ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
author-avatar
杯莫停
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有