看了下,weditor 是 atx 提供的用来获取界面元素信息,便于编写 UI 自动化中元素定位相关语句的工具。
目前主流的自动化,从如何编写脚本角度,会提供两种方式
一种是录制生成代码,比如 solopi 、appium desktop 都可以通过用户操作直接自动生成对应自动化代码。直接用这个生成出来的代码来执行,成功率一般也还好。
另二种是直接编写代码,比如使用 Page Object 模式定义各个页面及页面元素,然后用例里去操作这些页面元素进行自动化。好处是维护成本相对较低(重复的东西都会抽离封装),并且后面会越写越快(可以复用已有的代码),缺点是从零开始写用例来算,相比第一种写起来耗时会多一些。
看你提到 相当花时间 ,个人理解你应该是在使用第二种方法。但觉得用起来比较耗时。建议你可以也试试第一种方法?
另外,建议刚开始先不要弄太多用例,把最重要的用例做出来就好了。自动化耗时的大头不是编写,而是后续不断调优让它更快更稳定。
第一个警告,是说你项目里的 Pipfile(定义 pipenv 环境用的)要求用 python 3.7 ,但你实际用的是 3.8 。这只是一个 warning ,有可能是因为你创建项目的 Pipfile 时使用的环境刚好是 3.7,所以自动记录了 3.7。实际应该不影响程序运行。
比较合适的解决方案是手动改下 Pipfile 里 python version 的限制,改为要求大于某个版本,而不是必须等于某个版本。不过这个只是一个警告,应该不至于影响你程序实际运行。
至于第二个,是直接报错,你的某个依赖包里要求 importlib-metadata 这个依赖包版本要 >=0.12, <3 ,而你的实际安装版本是 3.7.3 ,超出范围,所以报错。
解决方法,可以试试卸载掉已有的 importlib-metadata 再运行 pipenv install pytest requests
,让它自动获取正确版本的依赖。不过考虑到你用 pipenv ,安装依赖时使用的应该是纯净环境,还有可能是 2 个依赖包同时依赖了 importlib-metadata 且要求版本不一致。如果用上面的卸载重装无效,得查下是哪两个依赖同时依赖了这个包,然后看怎么调整这两个程序依赖的版本来解决这个问题
挺不错的实践,也是换种思路看自动化测试。加个精给更多同学看到
感觉有点复杂了。这种自定义语法除非很好记,否则会严重影响可读性且容易留坑。比如上面这个格式,没有考虑转义这个场景,如果用户刚好要定义的是 api?a=1&b=2&c=4 ,这里的 &b=2& 是不是有可能会被正则匹配到然后替换?
如果确实要引入函数语法,个人建议参考 Jmeter 或者 RobotFramework 的语法来,相对好记和容易识别。
个人理解,提升代码能力是手段,是否有想过你最终的目标是要做什么吗?
如果是把自动化测试做好,建议看看目前接口自动化还有什么不足,怎么优化。过程中各种疑难杂症的排查解决,应该能附带帮助你提高一些代码能力,特别是相对深入一些的能力。
如果是做工具平台开发,那就先想好要做什么平台,然后对应调研、选型、开干、落地。
单纯用 提升代码能力 作为目标,容易只是把这个语言的文档都看一遍,示例都敲一遍,但实际工作怎么用还是一头雾水,不产生价值。这样的代码能力去到面试,也容易被面试官问倒,甚至手写代码题直接卡住,记不住常用函数名字和用法。
PS:代码能力还有一个很重要的用处,阅读开发代码熟悉具体技术细节。也可以考虑从这个方面去实践。
查了下,MultiValueDictKeyError 异常是因为要获取的 key 不存在才出现的。但看你前端发送请求的内容,有明确设定 ts_api_body 的内容,不应该有这个报错。
是不是这个点击按钮事件还绑定了别的操作,触发了二次请求,但请求里没有带上 ts_api_body ?
报错的 appium 服务日志,上下 10 行可以一起贴上来不?
要看看 appium 为啥要调这个,才能知道是不是可以通过别的配置或者改源码的哪里去绕过。
windows 上用 appium 经验比较少,这个还真不知道。
看起来是在检测 usbmuxd 组件的时候报错了,我猜是 appium 调用 iOS 自动化时需要用到的一些功能(比如获取设备上已安装应用列表)时调用了这个组件,结果发现这个组件在报错所对应的路径不存在,所以报错。这个组件是 xcode 、itunes 等和 iOS 设备通讯的底层通讯协议暴露的 socket 入口(可以理解为类似日常网络连接里的 tcp 连接层),这个路径看起来是 linux 的路径,不确定 windows 上是不是这个路径。
建议也看下堆栈,对应看看 appium 源码此时在做什么操作?
另外,也建议把你启动 appium desktop 里面的步骤和各个配置也发下吧,信息太少没法判断。就像用户和你说我登录不上这个应用了,根据这个线索你是无从定位和给反馈的(手机问题?运营商问题?应用问题?服务端问题?都有可能),只能继续问用户各个更具体的信息。
把你设置的完整的 capabilities
发出来一下?
运行脚本中,需要配置 webDriverAgentUrl 给 appium driver ,才会不触发 appium 内置的用 xcode 启动 wda 这个流程。否则只要触发这个,appium 就会找 xcode 。windows 没有 xcode ,自然跑不下去。
详细文档可以参考:http://appium.io/docs/cn/advanced-concepts/wda-custom-server/(文档里一大段怎么用 java 控制 wda 代码示例不用管,就看最前面的说明和最末尾的示例就行)
最关键的代码:capabilities.setCapability("webDriverAgentUrl", WDAServer.SERVER_URL);
第二点没太明白。固定执行 Login 操作,里面判定已经登录过就什么都不做,没登录过就进行登录。这样后面的 case 都是基于已登录来进行,是否可以?
建议可以买本《google 测试之道》看看,虽然已经是比较老的书,但还是有一些借鉴意义的。
赞,已 star
这个会有什么限制么,比如 iOS 版本之类的?
个人能想到的:
1、从生产导入一部分数据到测试环境,提高数据丰富度。
2、测试完毕上线后,在生产环境再验收一下,并加上监控持续观察是否还会有问题。
也建议梳理下出现过的数据不准确问题,看根本原因是什么(历史数据不符合规范?逻辑中没有兼容所有历史数据情况?),对症下药解决。
不客气,出来了就好。
内网带宽多大,这个最好问下运维吧。正式的机房内部网络达到 10Gbps 也不奇怪。
按照你目前提供的信息,暂时也没能想到啥原因了,看了下官方文档也没有具体指标计算公式,估计得看源码才能找到答案了。不过有个有趣的地方,为啥下面绿色的发送量好像和你 A、B 的比较一致?
打开浏览器的开发者工具,看下 network 里返回的是什么,以及 console 有没有报错?
另外,你这里说得有点太简单了,很多细节没提及。麻烦把具体步骤,最好是配置好的整个 vue 项目分享一下吧?
可以参考以前其他人的测试方案来写,快速写完初稿后让有经验的同事给点意见呗。
凡是总有第一次,闯过去了就会发现其实没什么。
底层了解不多,学习了。
最后一个是 agent 所在的整个机器的网络接收量,你前两个都是仅 java 进程的网络 IO 接收量。
确定除了 jmeter,没有其他接收量比较大的程序在同时跑吗?
iOS 的沙箱安全机制,应该没有暴露可以清除应用内所有数据的入口,除非应用自己做这个功能。
感觉好久没见到自己做排版的简历了,好多时候看到的都是直接招聘网站根据登记生成的简历,一般 2 页纸起步。。。
思路可以稍微转换一下,不一定是传递坐标点击事件来做一机多控,而是传递控件点击事件来做。这样问题 1 就可以解决掉了。
问题 3 的话,启动应用用命令启动(直接启动 activity )也可以解决。
推荐看看 solopi 一机多控。
不知道你后端是什么程序,如果是 Java 的话可以看 jvm 启动参数以及应用内的 properties 配置。
然后操作系统本身也有最大网络连接数这类配置的,可以百度看下,windows server 的我不大了解具体在哪里配置。
另外,从你这个图看,瓶颈应该不是资源消耗,有可能是应用内部机制引起的耗时,比如并发时等待锁释放之类的。推荐用 jconsole 抓取下整个 api 处理内部各函数的耗时情况以及看下会不会有锁之类的机制。
有个问题,你是增加线程数后,提升不了 cpu 利用率,还是性能(TPS)也提升不了?
非 cpu 密集型的逻辑,cpu 提升不上去不是挺正常的么?
PS:建议也看看被测系统的环境配置,比如最大线程数、最大网络连接数之类的,是不是这些限制住了系统的发挥。