鄢陵网站建设电脑建站餐饮logo免费设计

张小明 2026/1/11 14:43:43
鄢陵网站建设电脑建站,餐饮logo免费设计,石家庄公司的网站设计,wordpress分布式断言简介 在《xunit pattern》中提出了“四阶段自动化测试“#xff0c;即一个最简单的测试用例可以由如下图所示的4个步骤组成。 断言主要应用在xUnit“四阶段自动化测试“中的第三步-验证(verify)阶段。即对于执行完成SUT某项指令之后#xff0c;来验证其状态#xff0c;…断言简介在《xunit pattern》中提出了“四阶段自动化测试“即一个最简单的测试用例可以由如下图所示的4个步骤组成。断言主要应用在xUnit“四阶段自动化测试“中的第三步-验证(verify)阶段。即对于执行完成SUT某项指令之后来验证其状态或者执行的结果。断言01- 三种断言工具:Junit原生、Hamcrest与AsserJ比较本小节将简要介绍Junit原生、Hamcrest、以及AssertJ这三个不同时代的经典断言工具。这三个工具可以在不同类型的测试中使用。另外很多专用自动化测试工具如RestAssrured等也倾向于自带断言。在了解了经典断言工具后对于了解这些专用工具自带的断言也更有益处。HamcrestHamcrest 属于”新一代”的断言工具Hamcrest这个单词是”matchers”的变位词。它提供了大量丰富的匹配器能够让断言可读性更高断言样板代码量更小更易维护。Hamcrest一经问世就取得了非常大的成功甚至一度成为第一个被Junit引入的第三方包成为Junit4断言的一部分[1]。另外Hamcrest也开发出了其他语言的版本如C, C#, Objective-C, Python, ActionScript 3, PHP, JavaScript, Erlang, and R。当然由于以AssertJ为代表的“新新一代”断言工具的出现以及蓬勃发展Hamcrest又被移除出了Junit5[2], 让测试框架的使用者们可以更加自由的选择断言工具促进Junit生态圈的发展。AssertJAssertJ与之前的断言工具的最大不同是引入了流式断言(Fluent Assertion),让断言的编写更加流畅可读性更强从而让它大获成功。它甚至还提供了一键转换的工具将传统的Junit Assert断言转换为AsserJ断言。Hamcrest与AssertJ比较热度首先来比较一下Hamcrest和AssertJ的热度。Hamcrest在2007年7月首次登陆Maven中央库最近一次更新则在2012年7月而AssertJ则在2013年登陆Maven中央库截至本文写成的2018年8月当年度已经发布3次。两者均录得了累计超过4000个项目的引用在Maven中央库的历史排名均处于40位之内属于明星项目。顺便说一下Junit以超过7万个项目的引用成为最受欢迎的项目而TestNG则以6000多次的引用排在20多位两者差距非常明显[3]。简要比较以下是笔者整理的Junit Assert、Hamcrest以及AsserJ的简要比较。断言工具断言种类断言语法断言类数量IDE自动提示软断言及行为Junit Assert一般对象比较一个方便Assume,预期不符合则用例跳过Hamcrest丰富对象比较多个断言类不方便借助于Assume行为同上。AssetJ丰富流式断言一个方便SoftAssertions预期不符合继续执行待执行完毕后用例失败关于AsserJ的具体使用可以参考其官方提供的项目https://github.com/joel-costigliola/assertj-examples1 Marc Philipp (21 Oct 2012). Summary of Changes in version 4.4.JUnit documentation. Retrieved 20 Sep 2016.https://github.com/junit-team/junit4/blob/master/doc/ReleaseNotes4.4.md#summary-of-changes-in-version-442(https://en.wikipedia.org/wiki/Hamcrest#cite_ref-3) JUnit 5 User Guide - Third-party Assertion Libraries. Retrieved 11 May 2018. https://junit.org/junit5/docs/5.0.0/user-guide/#writing-tests-assertions-third-party3 http://mvnrepository.com/popular4 https://joel-costigliola.github.io/assertj/assertj-core-converting-junit-assertions-to-assertj.html断言02-断言变体除了应用于Verify 阶段的断言还有如哨兵断言、delta断言等不同的断言形式。1哨兵断言这是一种让测试用例快速失败的断言一般存在于用例的前部甚至是setup阶段或者是底层的测试框架中。如何判断需要使用这种类型的断言呢当测试用例中出现了if这样的判断来决定测试用例的执行路径时就需要考虑是否引入哨兵断言了。这样就可以在测试用例用引入测试逻辑。典型的案例是在UI 自动化测试中往往会首先判断一下某个页面的标志性icon是否存在如果存在则继续执行该页面下的操作。另外一种场景是在通过API接口进行业务场景自动化测试时我们会假设协议层通讯正常request/response可以正常发送和接收。业务的结果无论正确/错误都在更上层的response中体现。如HTTP restful的接口其HTTP状态码HTTP Status Code应该都是200,表示消息传输正常。因此我们可以在测试框架的通信层首先对状态码进行断言保证协议层的通信正常然后再将返回的body交由上层代码进行处理。一个简单的示例如下Beforepublic void setUp() {RestAssured.baseURI http://192.168.1.119;RestAssured.port 8080;RestAssured.basePath /service/v1;}Testpublic void testUserLogin() {expect().statusCode(200).body(success, equalTo(true),userInfo.userId, equalTo(admin),userInfo.firstName, equalTo(admin),userInfo.lastName, equalTo(admin),error, equalTo(null)).when().get(/user/login?userNameadminpasswordabc);}//为简单起见该案例直接将body信息进行了验证。如果有需要如每个用例均需要完成的哨兵断言甚至都可以考虑放进setup方法中进行便于重复使用。2Delta断言Delta断言让我们有机会脱离SUT的具体状态来进行验证。如在某个测试用例中测试用例需要验证转账1个亿的准确性。因此我们可以通过验证该账户转账前后的资金差异来确定结果是否准确。如以下的伪代码Testpublic void testBalance() {long balanceBeforeapi.queryBalance();api.trans(1aaa,bbb);long delta api.queryBalence() - balanceBefore();assertThat(delta).isEqualto(1);}AI写代码采取这种方式的好处是我们可以不必要知道或者验证该账户在转账前后的具体资金是什么。如果没有采用delta验证而是直接验证转账(前)后的该账户资金余额那么则要求该测试用例需要严格控制上下文保证每次执行该用例时系统账户的金额处于预期的状态下。Testpublic void testBalance() {long balanceBeforeapi.queryBalance();assertThat(balanceBefore).isEqualto(123456789);api.trans(1aaa,bbb);assertThat(api.queryBalance()).isEqualto(123456788);}读者一定也会发现这样的用例对于系统的环境控制要求较高如果该用例执行时系统没有将该账户余额正确设置为初始值用例就会在第一步失败。或者其它用例中也用到了该账户进行了转账/入账的操作并没有及时复原如reset数据库的话由于用例间的潜在数据依赖关系导致用例也会执行失败。断言03-验证方法对于结果验证来说至少有两种方法可以选择。直接验证返回结果如前一小节中转账的案例assertThat(api.trans(1aaa,bbb)).isEqualto(OK);通过直接验证方法的返回值可以对结果进行直接验证。2间接验证在前一小节的转账案例中笔者通过查询账户在转账前后的余额来对结果进行验证。这种不对被测对象转账接口进行直接验证而通过间接方法进行验证的方式也是测试过程中常用的方法。在传统的带有数据库的系统中测试人员也非常习惯于在前台操作完成后到系统数据库中通过编写SQL的方式进行查询验证结果。这是因为一个接口的调用除了完成返回值之外可能会产生多个后续的动作。这些后续的操作也可以作为验证的对象。就转账而言转账成功后该用户的账户余额会发生改变。另外如果设置了当日转账限额的话该限额也应该会被更新。就系统自身而言还可以延申到数据库表的记录更新、日志系统的记录等等。在金融系统中如果涉及到了资金的变化一般建议除了直接返回值进行验证之外应该尽可能地通过间接验证地方式对系统进行测试验证尤其是如当日转账限额等隐含更新的数据。在实际地工作中这些也是出现过漏测缺陷的教训的。断言04-预期结果这一部分主要关注验证(Verify)时的预期结果的问题。当谈到预期结果时经常会 联系到test oracle。根据维基百科test oracle是以下这个意思In computing, software engineering and software testing a test oracle, or just oracle, is a mechanism for determining whether a test has passed or failed.[1] The use of oracles involves comparing the output(s) of the system under test, for a given test-case input, to the output(s) that the oracle determines that product should have.在测试设计中除了关于预期结果的具体内容之外还关心1验证结果的范围2验证结果如何产生3可否自动生成预期结果测试结果获得的复杂性比较在UI自动化测试中根据笔者的经验由于在界面上获取数据的复杂性往往会简化验证范围。如新建用户的场景往往只会验证创建过程的完成如出现某个提示icon)或者是简单在用户列表中能查询到该新建用例的用户名亦或者通过delta断言比较系统用户数量1。如果通过一个页面上的表单来逐个获取一个用户的10个属性来和预期结果进行比对是非常不经济的行为。而在接口测试等较为底层的测试中结果往往可以通过返回值的方式获取到如一个数据库或者用户信息接口的查询即可完整获得上述10个属性值并和预期结果进行比较。这也反映出了底层测试更为经济和高效。全面比较的必要性和成本由于UI自动化中获取数据的复杂性,测试人员经常会选择只对部分关键信息进行断言。而在API自动化测试中虽然数据的获取成本大为降低但是由于接口返回值的字段往往较长人工逐个编写预期结果也往往费时费力测试人员也经常选择只对一些关键信息进行断言。希望既能保证测试结果的正确性又能保证一定的设计和执行效率。然而在实际的测试实践中笔者所在团队也发生过因为预期结果不够丰富导致了某个缺陷遗留到线上的问题。后来经过缺陷根因分析发现1该测试场景虽然在分析时没有考虑到但是在设计用例时其实已经触发了该缺陷或者说其实该场景已经覆盖到了。2测试人员在编写预期结果时只校验了和测试场景直接相关的字段对于返回结果中与缺陷相关的字段没有校验。从而产生了漏测缺陷。预期结果的动态生成 runtime assertion )在之前的案例中所有的预期结果无论是人工编写的或者是通过运行生成的在下一次的测试用例运行之前这些数据都是已经确定的。在金融系统中基础数据是经常变化的。在之前的一篇关于 数据管理的文章 中提到了动态数据的问题。如果希望能一次编写用例可以在不同的基础数据环境中运行的话就需要运用动态数据通过运行时查询和基础数据衍生等方式来生成测试用例的入参和与之配套的预期结果。目前我们在线上冒烟测试系统上采用了这种方式。当然由于入参和预期结果之间的关联算法其实比较复杂的甚至可能是业务的一种简单实现。开发和维护这些算法的成本也是比较高的。这也阻碍了这种测试方法在功能测试中的大规模使用和推广。感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站后台显示不了产品设计软件有哪些软件

ncmdump终极教程:3步快速解锁网易云加密音乐格式 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为下载的网易云音乐只能在特定软件播放而烦恼吗?ncmdump这款专业的NCM格式转换工具能够完美解决您的困扰。…

张小明 2026/1/10 15:32:17 网站建设

企业网站服务费怎么做记账凭证深圳网站建设怎么

3个免费提速技巧:123云盘会员级下载体验全攻略 【免费下载链接】123pan_unlock 基于油猴的123云盘解锁脚本,支持解锁123云盘下载功能 项目地址: https://gitcode.com/gh_mirrors/12/123pan_unlock 还在为123云盘的龟速下载而烦恼吗?作…

张小明 2026/1/10 15:32:15 网站建设

做照片相册最好的网站苏州市工业园区规划建设局网站

在当今量化投资领域,处理大规模股票组合的实时预测需求已成为行业标配。传统预测系统在面对上千只股票时,往往遭遇内存溢出、计算延迟等系统瓶颈。本文将深入解析基于Kronos股票预测框架的系统优化实践,通过多GPU并行计算和内存优化技巧&…

张小明 2026/1/10 15:32:17 网站建设

wordpress备份如何恢复南昌网站排名优化费用

ArkOS终极快速部署指南:3步打造专业级开源游戏系统 【免费下载链接】arkos Another rockchip Operating System 项目地址: https://gitcode.com/gh_mirrors/ar/arkos 想要在复古掌机上获得最佳游戏体验?ArkOS开源游戏系统正是您需要的解决方案。这…

张小明 2026/1/10 7:36:57 网站建设

试用网站建设网易企业邮箱登入

AutoCAD字体管理革命:FontCenter如何重塑设计师的工作流程 【免费下载链接】FontCenter AutoCAD自动管理字体插件 项目地址: https://gitcode.com/gh_mirrors/fo/FontCenter 在工程设计领域,字体显示问题一直是困扰AutoCAD用户的顽疾。当重要的施…

张小明 2026/1/9 19:20:00 网站建设

网页是不是网站wordpress注册没有密码错误

引言:低空经济,一场关乎未来的深空竞赛低空经济绝非昙花一现,而是一场面向未来的战略竞赛。随着无人机物流、城市空中交通(UAM)、应急救援等场景爆发式增长,2025年低空经济规模预计突破万亿。然而&#xff…

张小明 2026/1/10 2:47:15 网站建设