在一次QA Community的Catch Up上,大家聊起了最近火起来的Cypress、TestCafe等测试工具,那时候还不知道这是什么,心里想着大概就像是Selenium的改进版吧。...读到这里,大家可能开始好奇了,说好的三驾马车,怎么只剩下了两驾?这是因为Puppeteer具有其自己的特殊性。...而Cypress和TestCafe作为前端测试框架,其易用性和较低的学习成本会使得测试人员用起来更加得心应手,后文中也主要是对Cypress和TestCafe的种草。...对于Web的自动化测试,大部分人熟悉的还是Selenium + Webdriver 的解决方案。...状态,而Cypress需要通过plugin来支持视觉测试,其本身也不支持。
在跟同学们的交流中,我也了解到, 原来除了国外优秀的公司(例如Adobe, 迪士尼,AutoDesk等等), 国内也有很多公司在尝试使用Cypress提升测试效率。...在我的的书中也有其各个用法的专门介绍,这里不再赘述。 ? 仅再次列下其定义: TestRunner是一个独特的测试运行器。Cypress的所有命令通过它运行。...无论是哪种方式运行,大家记得Cypress 是通过它内置的Test Runner来运行你的测试用例的就行。 03 — 什么, TestRunner也会“瞎”?! 没想到吧?刚开始我也是拒绝相信的。...直到我发现我的测试用例还是会出现不稳定、随机失败的现象(Flaky Test)。怪了!不是说用了Cypress之后就不会有这种问题了么?于是我就寻仙访药啊,终于,找到了原因所在。...例如,visit的时候发生了什么, click的时候哪些事件被触发了? 通过了解开发逻辑可以帮助你快速定位问题。 经过一番调查啊,猜测出问题的代码在第4行和第5行。
框架架构 让我们先来看看它没有公布的设计架构。 ? 这是一张来自cypress 架构师画出的所谓架构图,其实等于什么都没说,但是我们还是能够通过蛛丝马迹,找到一些重要的信息点。...第三个优点:只支持js 很多人会诧异,“什么?这也算优点?难道我不会js是我的错?...其实cypress面向的主要对象是前端DEV与QA,cypress的底层与所使用工具都来源于前端,面向的测试也是基于前端,例如api,E2E等。...收费也不算高,这在国外也就一顿大餐,但是提供的服务还是有限,期望以后能够提供一些自动化测试结果分析以及预测的功能,或者结合ML,AI实现一部分的自动化混淆测试。...坑还很多,需要慢慢填,记得当初在上一次提及cypress工具后,很多人都说“坑很多慎入”,其实我觉得和webdriver最开始一样,坑也很多,只有不断有人去填坑,这个工具才会有更好的未来,与其慎入,不如来尝试下他的优点
一旦你的页面元素发生变化,你的Locator多大程度上不用改动? CSS还是XPath? 无论你用哪个自动化测试工具,定位的方式无非就是CSS或者XPath。...Cypress定位 VS Selenium定位 看过我Cypress书的同学都应该明白,Cypress里推荐的元素定位顺序如下: 1. data-cy 2. data-test 3. data-testid...这就是我说的定位可以无缝切换,你在Selenium里怎么定位,你就在Cypress里怎么定位。...[attribute=value]') // 符合规则即可 所以这个时候你想想, 你在群里问的问题,xxx怎么定位啊?...XPath和CSS定位的写法 还有同学说了,那XPath和CSS我也不熟啊。那我能说什么呢,直接上图吧。 一般通过这个图你就可以随心所欲地使用元素定位了。
除了日常推荐大家通过阅读我的书来解决日常Cypress使用问题外,我也一直在更新着我这边的Cypress知识图谱, 不夸张的说,目前我总结和实践下来知识点多达200多篇。...为了让大家看到标题就知道我再说什么,我把标题更改为: 你不知道的Cypress系列(2) -- ”该死"的PO模型 01 — PO模型是什么 无论你基于何种自动化测试框架开发你的测试脚本,PO模型绝对是你绕不过的坎儿...Custom Commands的具体用法我的新书Cypress从入门到精通>里讲的还算通透,这里就不多说。...03 — 我怎么看PO和Custom Commands 这里我也谈下我对PO和Custom Commands的看法。...Cypress又提出了一个模型,App Actions, 同学,你想去尝尝鲜吗?
什么是测试 维基百科的定义: 在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。 也可以这样理解:测试的作用是为了提高代码质量和可维护性。...每个模块功能单一、代码少,也可以不用写测试。 如果你的程序有成千上万行代码,数十个模块,模块与模块之间的交互错综复杂。在这种情况下,就需要写测试了。...我的 vue-upload-imgs 库就是通过这种方式写的单元测试,有兴趣可以了解一下(测试文件放在 test 目录)。 测试覆盖率 什么是测试覆盖率?..." } 小结 本章所有的测试用例都可以在我的 github 上找到,建议把项目克隆下来,亲自运行一遍。...有哪些实用的性能优化规则? 性能优化(二):如何检测网站性能?有哪些实用的性能优化规则? 重构:为什么做重构?重构有哪些手法? 微服务:微服务是什么?如何搭建微服务项目?
在我从事技术工作的这些年里,我遇到了四个团队用来对付不稳定的策略。 什么都不做,接受不稳定的测试结果。 当然,这个策略根本就不是一个解决方案。...除了隐藏问题的症状外,它还会使你的测试套件更加缓慢,这使得该解决方案不可行。然而,这个规则可能有一些例外,我将在后面解释。 删除并忘记测试。 这个是不言自明的。...我在这个策略上取得了最大的成功。在这种情况下,我们会暂时跳过测试,并让测试套件不断提醒我们有一个测试被跳过。为了确保修复工作不被忽视,我们会在下一个冲刺阶段安排一个任务。机器人提醒也很有效。...这些策略帮助我们处理工作流层面的测试问题,而且我不是唯一遇到过这些问题的人。在他的文章中,Sam Saffron也得出了类似的结论。但在我们的日常工作中,它们对我们的帮助是有限的。...// Wait for changes in UI (until element is visible) cy.get(#element).should('be.visible'); 在Cypress
没错,你在还没有完全搞清楚发生了什么事情,就莫名其妙的突然变成了系统中一个“blocker”。 这位QA的神情和他对事情的描述让你不自觉的受到了一些感染,你也开始有点焦虑。...很多情况下,在做了这些检查之后,你发现问题自己就解决了 —— 此谓不战而屈人之兵也。 如果事情仅仅到这一步就结束的话,你就可以接着看看medium上的文章或者刷刷知乎什么的。...而且即使是缺陷,也并不意味着需要立即修复。和所有的其他需求那样,缺陷也应该被分级,并当成一个正常的Story卡流入Backlog。 在实践中,我发现这一点非常关键。...很多团队在开发过程进入修复缺陷阶段之后变得各种混乱,其源头也正是来源于此。一个非常糟糕的实践是:某个人负责将测试团队中发现的缺陷分发给指定的人,并一天两次的常规Check是否有所进展。...不过这里我倾向于使用缺陷(defect),因为bug听着像是问题自己跑到代码中并藏了起来,而缺陷(是指和需求的偏差)则比较中立一些,也比较客观。 P.P.S.
你会在这样的情况下,捯饬自己的代码吗,当然,是会有同学去做的,我之前也说过,每个团队中,都还是有一些有追求的程序员。...尤其,还是在有团队定下了线上事故处罚制度之后,这时,大家是不是会想,改和不改哪个出现线上问题的几率更大呢。 那,向左不行,向右也不行,怎么干嘛。 我的建议是,惩罚制度是要有的,犯了错,就要承担责任。...来源:Applied Software Measurement by Capers Jones(McGraw-Hill,1996) 什么是契约 What,又来,上面不是讲过了吗。...这里的契约就是我们所说的违反了双方的约定,你也违反了规则。...抽象类可以提供抽象方法,也可以提供实体方法,而接口只能提供抽象方法。为什么要有这样的区别呢?为什么有了抽象类还要有接口呢,仅仅是为了变相的实现多重继承吗?
在本教程中,我将向你展示如何为 Vue 应用程序编写单元、集成和端到端测试。 有关更多测试示例,可以查看我的 Vue TodoApp 实现[1]。 1....但是,为什么我们不能只写单元测试呢?因为金字塔上端的测试可以帮助我们检查系统里的各个组件之间是否能很好地协同工作,使我们对系统更有把握。...首先是准备工作,导入函数、实例化对象并设置其参数,让目标对象(这里是一个函数)进入一个可测试的状态。然后操作该功能/方法。最后我们对函数返回的结果进行断言。...使用 Cypress 编写的端到端测试可以告诉我们答案。 Vue CLI 提供如下功能:启动应用程序并在浏览器中运行 Cypress 测试,然后关闭应用程序。...全局变量 cy 表示 Cypress 运行器。我们可以同步地命令运行程序在浏览器中执行什么操作。 在访问了主页(visit)之后,我们可以通过 CSS 选择器访问页面中的 HTML。
OpenAI的o1已经发布一段时间了,网上都是对其大加称赞,他们说o1在复杂任务上面的表现令人印象深刻,甚至已经达到或超过了博士水平,并且在代码、数学的能力水平尤为突出,我对此也表示赞同。...结果: 提示:3307是质数吗?(答案:是的) 这个问题我在很多模型上有过测试,从比例上来看回答正确的不多。...不过有一点不太好,g1目前的提示词不适用于代码类的问题生成: 提问:创建一个HTML页面,其中包含一个按钮,当单击时释放五彩纸屑。...弱智吧问题测试 我的蓝牙耳机坏了,我该去看牙科还是耳鼻喉科?...使用尽可能多的推理步骤,至少3步。 要意识到你作为LLM的局限性,以及你能做什么和不能做什么。在你的推理中,包括探索不同的答案。 考虑你可能是错的,如果你的推理是错的,它会是什么。
我最关心什么?Safe First,我当然希望雷池可以抗住第一波伤害,其次对于一些内网服务我还是希望有限度的开放给外网,例如 WEB 认证后访问,API 接口防刷之类的。...在没有用雷池之前,我一直在用 Nginx+ModSecurity 当 WAF 用,随着 ModSecurity 官方弃坑,我迫切希望找其它 WAF 来平替 ModSecurity,所以我希望 WAF 的技术栈还是围绕...补充安全规则更有针对性的安全规则,截至目前(2024-03-17)共有补充规则 271 条,和官方聊了一下,官方说会不定期更新补充规则,从标题看,规则还是蛮新的,有去年 HVV 玩的贼 6 的几个洞。...这是 5.1.0 版本的新功能,目前已经支持将攻击日志外推,例如,我将攻击日志通过 rsyslog 转给 clickhouse,以供后面攻击分析使用。更快的技术支持雷池提供优先于社区版本的技术支持。...又看了一下其它请求,也是比较人畜无害的。OK,雷池在检查攻击时,会消耗过多的资源吗?我测试时候看了一下雷池 WAF 服务器的负载,基本都在这个水平,雷池的开销还在我可以接受的范围内。
我们只会比较已编译的 JavaScript 文件的大小。CSS 对所有变体都是通用的,并从 CDN(内容分发网络)下载。HTML 也适用于所有变体。...Svelte —— 能够隐身的 UI 框架 —— 这是真正适用于它的妙语。Stencil 这个基准测试中的新手也表现不错。两者都相对较新,正在推动大小方面的限制。...注意 Angular + ngrx:在 /libs 文件夹内完成的代码行数计算,仅包括*.ts 和 *.html 文件。如果你觉得这是错的,请告诉我正确的值是多少,以及你是如何计算的。...我们所说的 RealWorld 是一个连接到服务器,验证并允许用户进行 CRUD 操作的程序 —— 就像真实世界的程序一样。 #3 为什么不包含我最喜欢的框架?...上线时可用的那个(2019年3月),我相信你可以从 GitHub repo中找到相关的信息。 #5 为什么你忽略了一个更受欢迎的框架? 最后再说一次,请见上文。
研究在哪些情况下行得通,哪些情况下行不通的设计模式,能够让我们发现潜在的规则,了解看似不相关的概念和行为。为了更深层次地了解工作,你需要时不时地问问自己,“此处有没有设计模式?”。...当弹出问题的时候,我们往往会说类似于这样的话。然而,如果你这样说了,那你就失去了一次学习的黄金机会。 知道为什么会出现问题,才能从根本上修复问题,才能避免再出现这样的问题。 4.之前有人做过吗?...也已经有解决方法了。想找类似于用户刚刚enter的标签,那么也不用自己绞尽脑汁写了。 上面这些只是几个例子,但是相信我,你碰到的问题,别人早就碰到过了。 我能看得更远,那是因为站在巨人的肩膀上。...如果你不知道是从哪里开始的,那么你怎么理解目前的发展进程呢? 6.我真的热爱我目前的工作吗? 首先让我们面对一个事实:编程很难。 即使很难,编程也在不断发展。...我发现web开发人员最大的局限之一就是失败的想象力。 我们在特定的情况下学习的东西,或看到某种用于解决特定问题的技术,我们往往会认为这就是它们的唯一用途。但是,这个想法基本上都是错的。
(我删了一部分,因为我觉得太啰嗦了。) 另外,不管是百度还是google,我都搜索过性能测试和二八原则的关系,关键字我也换了好几个。...先巴莱多定律(二八原则)来源于经济学,从宏观经济上来说,经过了调查取样统计之后,才说二八的。但是放到一个特定的场景中,那不一定适用。 特别是对于性能场景设计这样的比较具体的应用示例中,就更不适用。...而“书上写的能是错的吗“? 像这种不认真追究就写在书上的,我表示严厉批判(虽说我批判也没啥用)! 那怎么才是对的方式来设计得到业务模型呢? 两种方式:1....在我每次讲课的时候,都提到用生产历史数据来分析,但是还是看到有很多人即使有历史数据也不这样做,断章取义的比比皆是。 拿业务统计数据来说, 首先,要有长时间的业务统计数据。...以小时为单位合并(这里我又埋个坑,因为如此来做会减少掉很多毛刺数据,可能会漏掉某些特殊的场景,这里不做完美主义了,先把主要的逻辑说清楚)。 我们也来算算是否符合二八原则。
本文公众号来源:我没有三颗心脏 作者:我没有三颗心脏 一、前言 代码是什么呢?或者说作为程序员的我们,对于写代码这件事又是抱着怎样的一种态度呢?...我在短暂的工作经历中(4 个月),犯下过不少错,少部分是因为经验,但大部分的情况下都是因为对代码没有足够的敬畏之心导致的,并且在工作中也遇到过一些很有意思的代码,所以今天就着这本《代码整洁之道》,来谈一谈对于代码的感受和一些想法...二、什么是整洁的代码 ---- 我搜索「代码」这两个关键字,给出的官方解释都特别有意思,摘一下百度百科的好了: 代码就是程序员用开发工具所支持的语言写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系...方法尽量短 && 职责单一 有谁能告诉我下面这个方法究竟是在做什么吗?...所以这里可以重命名函数为 checkPasswordAndInitializeSession,虽然这还是违背了 "只做一件事" 的规则。
大多数公司都是采用罚款的制度, 我之前经历过的公司也不例外, 但是我们仔细思考一下, 我们到底要解决什么问题? 这个问题的本质是什么?...这样的逻辑清晰吗。 动摇初心 一开始, 我觉得错了就得认, 挨打要立正。但是直到有一天,跟团队一位负责人唠闲嗑, 他说:"你这制度设计不合理。...多做多错,少做少错,不做不错,你这是变相鼓励团队少做事" 我一愣,觉得这位负责人说得有些道理。因为,对于大促这种高并发的场景,最容易出问题的往往是最核心的模块。...问题的本质 一句 "多做多错,少做少错" ,并不能概括问题的全貌,最好还是广开视听,交叉验证一下。 所以,我很快找到公司的 HR 部门聊了聊,HR 同学惊讶地说道:"话不能这样说呀!...如何窥探问题的本质 看了上面这个故事, 我觉得本质思考是很有必要的, 但是如何实现本质思考呢?这里也有一个所谓的方法论: 我们先将上面那个是否罚款的问题利用这个思维模型进行分析.
高级开发人员的“高级”之处不是他们对编程语言的语法有什么更高深的理解,而是他们在实际复杂大型项目上有更多经验。 而如果只是个刚入行的新人,你是很难获得这种体验的。经验来源于生活,来源于实践。...Git和GitHub正是你从实际项目中积累实际经验的一种好途径。 话说到这里,可能你已经认同这些工具对找工作的裨益,那么剩下的问题就是:为什么Git和GitHub对公司也那么重要?...因为我个人是Microverse的创始人,所以这里简单提一下我的教学经验。...如果不,HubSpot上有一个值得阅读的教程。 您知道GitHub Flow是什么吗?如果不,先去GitHub阅读官方介绍。 接下来就是这一节的重点:三个规则。...也就是说,如果你的代码和主分支代码之间存在冲突,它会报错,而且这个错不一定是你造成的,团队中其他开发人员提交的更改也会通知你。
本文提出五个建议: 1.它不会与其他服务共享数据库表 2.它拥有最少量的数据库表 3.它设计为有状态的或无状态的 4.其数据可用性需求 5.这是真相的唯一来源 避免任意规则 在设计和创建微服务时,不要陷入使用任意规则的陷阱...其实真的取决于函数是什么以及它如何服务于整个系统。 其他任意规则包括那些不考虑整个上下文的规则,例如团队的经验,DevOps容量,服务在做什么以及数据的可用性需求等。...特点#5:这是一个真理的单一来源 要牢记的最后一个特点是设计一个服务,使其成为系统中某件事情的唯一真理来源。 举例来说,当您从电子商务网站订购某物品时,会生成订单ID。...“杰夫贝佐斯强制所有team都必须建立API来与其他team进行沟通,他也提出了'两个披萨'规则,一个团队不能多到两个披萨饼还不够他们吃的地步。”他说。...“我认为这同样适用于这样情况:当一个小团队在开发、管理和生产方面开始变得笨拙或开始变慢,这说明这个团队可能已经太大了,“Reeder告诉我。
我也和芸芸众生一样在学校的时候没有好好的理解思考一些东西,等到了真正需要用的时候才知道书到用时方恨少。有道是知错能改,那为什么有道 == 知错能改呢?...下面请允许我开始真正的内容: 本文通篇都是一些概念,但是你需要知道这些更有利于理解时间复杂度等一些概念是什么、怎么来的、为什么需要这个东西(what、where、why)。...巴拉巴拉的,虽然是一小句但还是不想看(题外话:有时候吧专业名词记下来面试的时候还是挺有用的),其实就是解决一个问题的完整性描述。只不过这个描述就可能是用不同的方式或者说是“语言”了。...一般面试或者工作的时候没有特别说明的话,复杂度就是指时间复杂度。 2.0 - 时间复杂度 接下来我们还需要知道另一个概念:时间频度。这个时候你可能会说:“不是说好一起学算法吗,这些东东是什么?...所以该算法的时间复杂度为O(n^2 ) 常见时间复杂度的比较 常见的时间复杂度函数相信大家在大学中都已经见过了,这里也不多做解释了: O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O
领取专属 10元无门槛券
手把手带您无忧上云