看起来是前端问题,已记录 Issue :https://github.com/testerhome/homeland/issues/130
浏览器的返回既不是完全刷新,也不是单纯 js 触发事件引起的变化,真是个神奇的状态。。。
你这个举例和入参出参说明,还是很不清晰呀。。。
举例应该是明确给出入参长什么样的时候,出参要长什么样。你的举例只是业务逻辑说明,不是真正的例子。建议去看看 leetcode 的例子吧。
另外,从你这个逻辑上,我理解的大概伪代码:
def get_common_data(datas):
for data in datas:
if (data.hasKey('level') and data['level']) == 2:
# 二级分类多加一个获取 parentId 的函数,然后把 parentId set 回 data 里面
add_data(data)
def add_data(data):
# 这里写具体怎么 add data 的逻辑
你代码的主要问题是,一下子把太多细节展开了,而且命名也不大好,有些没有业务含义的工具类函数命名(如get_data_from_rex
),所以容易看懵逼,也容易出现各种 KeyError、数组越界之类的问题。
建议可以仿照上面写的伪代码,抽离一部分细节,主要的函数只体现业务逻辑,具体细节放到别的函数里。
额,既然这是一个函数,你的需求描述是不是应该参照 leecode ,说明入参格式,出参要求,然后举个例子?
光看这段代码,不知道你入参出参的信息,代码里也没有注释说明正在做的业务逻辑是什么,没法给意见。只能说代码好长,可读性比较差。
不客气。
建议后面还是多留意下报错信息吧,我说的这些其实都是报错信息上就有的内容,只是翻译了一下。有些时候不一定遇到问题就直接百度的。
大家有想分享的议题,欢迎投递过来,让更多人看到呀~
我晚些抽空搞台 windows 试试吧,现在手上没有 windows 。。。
老大不是给答复你了么?所以纠结的点是?
提供一种思路,供参考:
1、“可以在平台上进行选择执行的项目和用例” ,核心需要的是项目列表和用例列表,以及控制本次执行的用例范围的能力。
项目列表——代码仓库搞一个组专门存自动化,项目列表直接就是这个组里面的仓库列表信息(可以直接用 gitlab 的 http 接口拿)?
用例列表——自动化框架里增加一个命令,可以执行后输出用例列表,并调用平台提供 http 接口进行上报。然后配合 gitlab push hook,每次 push 代码自动触发执行这个命令,把用例列表上报即可
控制本次执行的用例范围——pytest 命令行好像本身就有这方面能力,建议可以看看 pytest 的文档
具体执行还是用 Jenkins 其实就可以,可以通过 http 接口调用 jenkins 触发 job 执行。这样可以暂时先不花太多时间在这个你们不大熟悉的领域。
2、“可以看到各个项目的执行结果和方便做统计”,不知道你这里执行结果是什么粒度,姑且先认为是用例级别。那核心需要的是获取各项目每次执行结果数据的能力。统计属于数据到手后纯平台自己写各种 sql 做的事情了,为了能随心所欲地做统计,最好还是数据都存到平台数据库里。
获取各项目每次执行结果数据——类似上面用例列表思路,自动化框架里通过 listener 之类的监听器,每个用例执行完毕后,都调用平台的某个接口上报此次用例执行结果信息。
在平台里面维护整个自动化测试的状态并提供界面查看,从你描述里不是目前平台的核心能力,而且做起来对你来说应该也是技术难点。本着 “能复用现有设施尽量复用” 的原则,减少工作量,所以建议初期平台尽量轻量级,只做最重要的功能,对你们来说工作量也相对较少。后续有需要,再单独把 jenkins 做的事情搬到平台上也是可以的。
你用的 mac 还是 windows ?
报错信息是说没有找到 xcode ,而且看你配置有勾选了 usePrebuildWDA ,不知道是不是这个会导致 appium 自己去找 xcode 相关信息。
看了下,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 的比较一致?