关于软件测试:软件测试简历书写/面试的必备技能你都会了吗

<article class=“article fmt article-content”><p>“金三银四”迎来了大厂春招高峰期,最近霍格沃兹测试学社的学员斩获了许多测试开发高薪 Offer。然而,一些同学只管技术实力不俗,却频频在面试中受挫,无功而返。</p><p>在上周举办的软件测试面试领导公开课广受好评,为满足大家需要,本周再度举办软件测试面试领导公开课,内容包含:</p><ul><li>常见误区:写技术简历的常见误区,你占了几点?</li><li>经典题解:测试开发经典面试题解析</li><li>必备指南:测试技术面试必备避坑指南</li><li>面试筹备:面试流程以及面试应该如何筹备与练习</li><li>深度解析:你碰到最不好答复的面试题是什么?从面试思路到残缺话术深度分析</li></ul><p></p><p>本周四(3月7日20:00),霍格沃兹测试学社的 AD 老师将为大家指点迷津,帮忙你在面试中怀才不遇,晋升面试成功率。让咱们一起助你获得理想的工作机会!</p><p>点击链接即可报名,锁定听课名额</p></article>

March 5, 2024 · 1 min · jiezi

关于软件测试:资深项目管理者教你快速掌握高效沟通的汇报技巧

在工作中,咱们时常会遇到各种问题须要汇报和解决。如何正确地汇报问题,如何与老板或共事进行无效沟通,是咱们须要认真思考和晋升的能力。 无效的问题汇报和沟通办法能够通过三个步骤来实现。首先是承认错误和体现出踊跃的态度,这是建设良好沟通根底的要害。而后是论述问题的具体环节和起因,并提出解决方案和改良措施。最初是与老板或其余相干人员进行沟通,以冀望失去了解和单干反对。这种沟通办法不仅实用于下级汇报,也实用于团队单干中解决问题的沟通交流,可能有助于更好地解决问题和保持良好的单干关系。 承认错误当咱们犯了错或者遇到问题时,咱们应该敢于承认错误。在任何团队或者集体关系中,承认错误都是解决问题的第一步。当咱们抵赖本人的谬误时,咱们展示了一种诚恳和责任感。这种态度不仅有助于解决问题,还有助于建设信赖。毫无疑问,每个人都会犯错。然而,当咱们可能坦率地抵赖并承受责任,咱们表明本人违心为本人的行为负责,这对于团队的凝聚力和集体的成长都是至关重要的。承认错误并尝试补救差错也展现了咱们对问题的解决态度,这有助于保护人际关系和团队外部的谐和。在工作和生存中,一直承认错误并从中吸取教训,能够使咱们一直成长,更加欠缺。 论述问题清晰表白问题和解决方案是解决问题的要害。要做到这一点,咱们须要确保咱们分明地辨认出问题的外围,防止含糊和含糊不清的形容。在表白问题时,应该尽量应用简洁明了的语言,并提供相干的背景信息和具体的例子,以便对方更好地了解问题的全貌。此外,防止应用含糊的词语或术语,而是要用具体、明确的表达方式来论述问题,从而使问题的实质清晰可见,有助于找到更好的解决方案。 只有当问题被精确了解时,能力采取有效的措施予以解决。通过清晰、简洁的表白,咱们能够确保对方对问题的实质和可能的解决方案有充沛了解,从而更好地配合咱们一起解决问题。清晰表白还有助于缩小误会和矛盾,进步沟通效率,促成合作。此外,当问题被清晰地表达出来时,咱们也更容易找到全面、切实可行的解决方案。因而,清晰表白不仅使问题更容易被解决,也有利于缩小沟通阻碍,建设良好的单干关系,并最终实现独特指标。在工作和生存中,咱们应该重视进步表达能力,长于彼此聆听和了解,从而更好地合作解决问题。 提出解决方案提出解决方案不仅仅是积极主动地体现,更是展示了集体的思考能力、创造力和解决问题的信心。当面临问题时,尽管表白问题的重要性显而易见,但针对现有问题并被动提出解决方案同样至关重要。提出解决方案能够展示集体在解决问题上的积极态度和责任心。这种行为表明集体不仅仅在意问题,还违心承当解决问题的责任,并在问题解决过程中施展本人的作用。 不仅如此,提出解决方案须要感性思考和全面思考,这也可能展现出集体的智慧和判断力。一个好的解决方案往往须要对问题有深刻的理解和全面的剖析,是一个联合了理论状况和可行性的计划。提出解决方案可能帮忙推动问题的解决过程。在团队单干中,提出解决方案不仅体现了集体的积极性和责任感,还可能激发团队的创造力,促成团队成员共同努力寻求最佳解决方案。因而,提出解决方案不仅是集体积极主动地体现,更是展示了集体的思考能力和解决问题的信心。在工作和生存中,咱们应该激励并器重每一个提出解决方案的人,促成单干共赢,实现独特指标。 总的来说,良好的问题汇报与沟通能力对于工作至关重要。通过承认错误、清晰表白、提出解决方案和无效沟通,咱们能够更好地解决问题,晋升工作效率,也可能博得别人的信赖和尊重。让咱们在工作中一直晋升这些能力,成为更加靠谱的人。 举荐学习沟通、汇报、总结,是作为一个职场人必须具备的能力,更是一个管理者的日常工作。对于从技术岗位走上治理岗位的同学来说,一套残缺的可落地的方法论是必不可少的,在这里举荐大家学习霍格沃兹测试开发学社的《测试治理训练营》,跟行业大咖学习治理技巧。 理解更多测试治理教训分享,请点击!

March 1, 2024 · 1 min · jiezi

关于软件测试:如何利用Allure报告提升你的测试效率

Allure 简介与装置Allure 是由 Java 语⾔开发的⼀个轻量级,灵便的测试报告⼯具。Allure 多平台的 Report 框架。Allure ⽀持多语⾔,包含 python、JaveScript、PHP、Ruby 等。能够为开发/测试/治理等人员提供详尽的的测试报告,包含测试类别、测试步骤、日志、图片、视频等。能够为管理层提供高水准的统计报告。能够集成到 Jenkins 生成在线的趋势汇总报告。装置步骤:- 装置 Java,环境变量配置教程。- 装置 Allure 环境变量配置教程 - 装置插件:pip install allure-pytest。 环境验证:allure -- version Allure 用法办法名办法参数参数阐明@allure.epic()epic 形容麻利外面的概念,定义史诗,往下是 feature@allure.feature()模块名称性能点的形容,往下是 story@allure.story()用户故事用户故事,往下是 title@allure.title(用例的题目)用例的题目重命名 html 报告名称@allure.step()操作步骤测试用例的步骤@allure.testcase()测试用例的链接地址对应性能测试用例零碎外面的 case@allure.issue()缺点对应缺点管理系统外面的链接@allure.description()用例形容测试用例的形容@allure.severity()用例等级blocker,critical,normal,minor,trivial@allure.link()链接定义一个链接,在测试报告展示@allure.attachment()附件报告增加附件#### Allure 报告生成 Allure 命令行语法格局如下: allure[option] [command] [commandoptions]生成报告的两种形式 形式一:在线报告,会间接关上默认浏览器展现以后报告。 # 形式一:测试实现后查看理论报告,在线查看报告,会间接关上默认浏览器展现以后报告。allureserve./result/(留神这里的serve书写)# Javaallureservetarget/allure-results(留神这里的serve书写)形式二:利用场景:如果心愿随时关上报告,能够生成一个动态资源文件报告,将这个报告布署到 web 服务器上,启动 web 服务,即可随时随地关上报告。- 解决方案:应用allure generate 生成带有 index.html 的后果报告。这种形式须要两个步骤:- 第一步:生成报告。- 第二步:关上报告。 # 生成报告 allure generate ./result (allure后果) # 关上报告 allure open ./report/ (报告地位) Allure 增加用例题目、步骤用例题目通过应用装璜器 @allure.title 能够为测试用例自定义一个可浏览性的题目。allure.title 的三种应用形式:间接应用 @allure.title 为测试用例自定义题目。@allure.title 反对通过占位符的形式传递参数,能够实现测试用例题目参数化,动静生成测试用例题目。allure.dynamic.title 动静更新测试用例题目。# 形式一:@allure.title("自定义题目")def test_title(): assert True# 形式二:通过占位符的形式传递参数,能够实现测试用例题目参数化,动静生成测试用例题目。@allure.title("参数化用例题目:参数一:{param1} ,参数二:{param2}")@pytest.mark.parametrize("param1, param2, expected", [ (1, 1, 2), (0.1, 0.3, 0.4)])def test_with_parametrize_title(param1, param2, expected): assert param1 + param2 == expected# 形式三:动静更新测试用例题目。@allure.title("原始题目")def test_with_dynamic_title(): assert True allure.dynamic.title("更改后的新题目")用例步骤Allure 反对两种办法:- 办法一:应用装璜器定义一个测试步骤,在测试用例中应用。- 办法二:应用 with allure.step() 增加测试步骤。 ...

February 28, 2024 · 1 min · jiezi

关于软件测试:测试开发名企定向培养训练营快速提升核心竞争力

测试人员如何晋升外围竞争力 作为一个测试工程师,自动化测试曾经是必须要把握的技能了。学习自动化测试有两个难点,除了其自身领有肯定的技术门槛之外,实战经验才是学习自动化测试的最大难点。局部初中级测试工程师往往在把握了根本的编程与自动化测试框架 API 后,会认为本人曾经把握了自动化测试,便开始投入到理论开发中,却又掉进各种各样的技术债和教训债里,痛苦不堪。 如何让本人更轻松的应酬简单的工作呢?举荐大家学习【测试开发名企定向培养训练营】课程。课程内容设计遵循实战驱动的准则,引入大量的我的项目实战。这些我的项目设计均来自于理论的落地教训,通过这种系统化的我的项目实战形式帮忙学员,学以致用,进步职业技术能力,晋升外围竞争力。 测试开发名企定向训练营 内容+服务 全新降级 零碎齐备的教学内容,课程内容涵盖5大阶段,从自动化测试到测试平台开发,循序渐进带你成为一个优良的测试开发工程师。课程放弃继续更新,技术内容紧跟一线大厂的前沿测试技术。在教学方式上通过大量的我的项目实战,帮忙学员学以致用,晋升技术实力。为了更好的服务学员,学习平台等教学配套服务,也进行了全新降级。 迷信业余的学习门路 Python测试开发课程体系章节形容测试开发体系介绍软件测试概念与体系 测试体系与测试方案设计 测试开发与 DevOps 体系介绍测试用例设计测试用例设计办法 白盒测试方法介绍 测试人论坛-功能测试实战 淘宝网-功能测试实战测试流程测试流程治理 测试流程搭建 JIRA 禅道 Redmine 测试流程治理实战用户端 Web 功能测试Web 端通用测试方法 Web 端测试工具应用 LiteMall-用户端 Web 功能测试实战 企业微信-用户端 Web 功能测试实战 飞书-用户端 Web 功能测试实战用户端 App 功能测试App 通用测试方法与 Adb 常用命令 App 压力测试与性能剖析 雪球-用户端 App 功能测试实战 企业微信-用户端 App 功能测试实战SQL 语法与数据库数据库查问语句 多表连贯与子查问 非关系型数据库 Redis MongoDB Neo4jLinux 与 Bash 编程Linux Bash 三剑客 性能统计Git 代码治理GitHub Gitee GitLab 分支治理 merge rebasePython 编程语言Python 数据类型与逻辑控制结构 Python 面向对象编程与装璜器 Python 罕用库与环境隔离 进销存管理系统-编程语言实战Pytest 测试框架用例编写 参数化 调度执行 Allure2 报告定制 生命周期 数据驱动 插件 Hook 函数 计算器单元测试与自动化测试实战用户端 Web 自动化测试Selenium 测试框架与用例录制编写 元素定位与显式期待 验证码解决与 PageObject 设计模式 多浏览器自动化测试计划 Playwright 与 Cypress 自动化测试框架 企业微信-用户端 Web 自动化测试实战用户端 App 自动化测试Appium 测试框架与用例录制编写 高级定位与 PageObject 设计模式 webview 微信小程序 iOS 自动化测试 分布式测试与多设施治理 小程序自动化测试实战 企业微信-用户端 App 自动化测试实战 财经股票零碎雪球-用户端 App 自动化测试实战用户端专项测试用户体验测试/专项测试 财经股票零碎雪球-用户端专项测试实战接口测试接口协议与接口测试 罕用抓包工具 Mock 工具与定制化 雪球-接口测试实战 宠物商店-接口测试实战 LiteMall-接口测试实战接口自动化测试接口自动化测试用例设计 接口申请结构与响应断言 鉴权解决 加解密与多套被测环境 多协定下接口测试方案设计 宠物商店-接口自动化测试实战 LiteMall-接口自动化测试实战接口平安测试接口平安测试服务端性能测试性能测试体系与 JMeter 性能监控体系 Prometheus 监控零碎 电子商城-性能测试实战Docker 容器技术与 K8sDocker 容器镜像制作 镜像设计 k8s 容器编排 Docker-环境部署实战继续集成继续交付 DevOpsWeb App 接口自动化测试继续集成 流水线构建 JenkinsFile 与 Pipeline 品质门禁测试左移动态测试与代码审计 代码复杂度剖析 代码变更检测与新增代码覆盖率 代码扫描规定定制测试右移测试右移数据驱动自动化测试框架数据驱动自动化测试框架设计实战测试平台-前端开发基于 Vue.js 的前端开发 路由治理 UI 组件 Element Plus Vuetify Bootstrap 课程管理系统前端开发实战测试平台-后端开发后端接口开发 路由治理 数据库与 ORM 后端架构优化设计测试平台架构设计测试用例执行 测试报告 测试套件 测试框架 自动化测试用例导入导出集成与执行 测试平台开发实战算法与设计模式数据结构 算法 设计模式面试与简历软件测试/互联网大厂测试开发岗面试全攻略30+我的项目实战** ...

February 28, 2024 · 1 min · jiezi

关于软件测试:人工智能引领软件测试新的巨大变革

在当今快节奏的软件开发环境中,高质量的软件交付变得至关重要。为了满足用户对品质和性能的一直增长的冀望,软件开发团队正在积极探索新的办法来减速开发周期并进步软件的品质。人工智能技术的倒退为自动化测试带来了革命性的改革,使得软件测试工作能够更高效、更智能地进行。本文将探讨人工智能驱动的自动化测试在软件开发中的重要性、劣势以及将来的发展趋势。 人工智能在自动化测试中的利用 智能测试用例生成:传统的测试用例设计须要大量的人工参加,费时费力且易受主观因素影响。而基于人工智能的测试用例生成技术能够通过剖析源代码和零碎行为,自动化地生成具备高覆盖率和高效率的测试用例,从而进步测试的全面性和有效性。 智能化的缺点检测:人工智能技术能够帮忙测试团队更早地发现潜在的缺点和问题。通过剖析历史测试数据和零碎运行日志,人工智能算法能够辨认出潜在的缺点模式,并提供及时的警报和倡议,使得测试团队可能疾速定位和修复问题,从而进步软件的稳定性和可靠性。 人工智能驱动的自动化测试的劣势 进步测试效率和品质:人工智能驱动的自动化测试能够帮忙测试团队更疾速、更全面地执行测试工作,从而进步测试的效率和品质。智能化的测试用例生成和缺点检测技术能够缩小人工干预和测试周期,使得软件的交付周期大大缩短。 适应性和灵活性:人工智能驱动的自动化测试零碎具备较强的适应性和灵活性,能够依据软件的变动和需要的变更主动调整测试策略和执行流程。测试团队能够通过简略地更新测试模型和算法来应答新的测试场景和需要,而无需从新编写和调整大量的测试脚本和用例。 将来发展趋势 智能测试平台的崛起:随着人工智能技术的一直成熟和遍及,咱们无望看到更多的智能测试平台和工具的呈现。这些平台将集成各种人工智能技术,如机器学习、自然语言解决等,为测试团队提供更全面、更智能的测试解决方案。 全栈智能化测试:将来的软件开发将趋向于全栈化,涵盖前端、后端、挪动端等多个层面。智能化测试技术将在各个层面上发挥作用,为全栈利用提供更全面、更智能的测试保障。 人工智能技术正在推动自动化测试畛域的革命性改革,为软件开发团队提供了更高效、更智能的测试解决方案。通过不断创新和摸索,咱们无望构建出更加智能化、自适应的测试零碎,为软件品质和可靠性提供更好的保障。 如果你对以上内容感兴趣,欢送点击链接,与咱们一起交流学习。 获取更多软件测试技术材料/面试题解析,请点击!

February 27, 2024 · 1 min · jiezi

关于软件测试:金三银四聊一聊测试跳槽/面试的必备技能

“金三银四”正是大厂春招淡季,最近霍格沃兹测试学社也是捷报频传,很多同学顺利拿下测试开发高薪 Offer,但也有不少测试同学虽技术实力尚可,但在面试中却每每碰壁,铩羽而归。 如何写能让面试官眼前一亮 我的项目教训怎么写能力有理有据有亮点 企业招聘模型及面试流程介绍 面试技巧-教你高分答复面试官常问问题 如何做面试复盘,查漏补缺 为了帮忙大家在面试中展示最佳的一面,取得心仪工作,本周四(2月29日20:00),霍格沃兹测试学社AD老师为你指点迷津,「帮忙大家在面试中怀才不遇,晋升面试成功率」。

February 27, 2024 · 1 min · jiezi

关于软件测试:如何实现零基础转行做测试开发入职3个月后涨薪30

本文为霍格沃兹测试学院优良学员笔记,测试开发进阶学习文末加群。自己本科所学业余是统计学,毕业后从事数据分析相干工作,然而,在工作的过程中,我对编码产生了浓重的趣味,对编程的酷爱驱使我最终决定转行,并胜利考取了软件工程的非全日制研究生。 只管非全日制的软件工程硕士学位让我有了软件方面的根底,但非计算机相关的本科背景以及之前偏于钻研的实习经验让我在转行过程中遭逢了挑战。我察觉本人既不足计算机常识的零碎学习,也欠缺工程实践经验。同时,我也没有具体的职业方向,也对本人是否胜任新工作持疑态度。在能力和心态都不成熟的状态下,面试每每碰壁。 侥幸的是,和同学探讨过程中,我失去倡议尝试从事测试工作,并被举荐霍格沃兹的学习材料。我通过查问网络材料理解到它还提供线下课程,通过一番征询后,我决定来到学院深造。 测试工程师的转行之旅 自此,开启了我在霍格沃兹的学习之旅。在两个多月的学社生存里,我每一天都过得很空虚,好像又回到了热衷学习的学生时代。在退出学社前,我只是大略理解测试工程师的工作内容,但并没有真正接触和实际的教训。学习的第一天,老师就给咱们具体解说了测试开发的体系,使我迅速理解到这个畛域的工作内容和职业倒退路线,这对于筹备转行的我来说至关重要,它帮忙我对本人的将来方向有了更明确的定位。 接下来的日子,我全身心投入到学习测试所需的技术中。已经在找工作时,容易痴心妄想,但自从退学后,每天空虚的学习让我集中思维,不再痴心妄想。学社的学习形式不同于以往在学校中的实践学习和实际,更重视理论工作的利用,学习的技术简直是目前泛滥公司的支流,让我能在入职后立即上手,对我的工作体现有着重大推动力。 从窘境到破茧:我的职场转行归程学社的老师都很业余,授课逻辑清晰易懂,实战训练紧扣实践,很好地坚固我所学的知识点。在遇到问题时,我能够马上求教老师和助教,他们总能帮我疾速纠正,很感激老师和助教们对我的帮忙。之前因为专业知识基础薄弱,我曾提出过很多的问题,所有的问题都失去了十分急躁地解答。 技能的熟练掌握只是万里长征的第一步,接下来的面试过程对我来说又是一大难题。因为我从不善于面试,再加上转行的压力,这让我对本人施加了额定的压力,我会担心因为无奈提供转行教训而在竞争中处于劣势,这个焦虑在疫情期间的长空期里更加显著,导致我自信心高涨。然而,在经验了模仿面试、简历批改及导师内推的屡次实战面试环节后,我的状况有了显著改善,在这些环节中,老师帮我剖析本身的劣势与劣势,领导我如何在面试时调整心态,遇见各种状况如何回应,以及如何在每次面试后总结反馈,对于我在面试中答复不佳的局部进行着重练习。这所有都让我信心倍增,使我在面试时不再像以前那样缓和。 在经验了实战面试的洗礼,我深刻理解到,面试时的心态,表达力以及软实力同样重要。学社全方位的辅导,让我既把握了技术,也领有了良好的心态,从而在面试中失常施展出本人的技术实力。在老师们的悉心领导下,我终于拿到了Offer。尽管薪资不算很高,但对于我本身的状况和过后的大环境而言,这对我来说曾经是个不错的抉择。非常感谢学院提供的课程和各位老师、助教的帮忙,让我从转行的迷茫和低谷中走了进去。 面试心得以下是我在面试筹备时的一些心得,它们可能并不齐全实用于每个人,但能够提供给大家作为参考。 职业抉择无对错,深信本人的抉择 对于转行的同学来说,明确本人转行动机和思路至关重要。这包含你过往的每次跳槽甚至包含目前的抉择,都须要本人能分明是如何做出抉择的。只有这样,在面试过程中蒙受质疑的时候,你能力依照本身的逻辑清晰从容地作答。有的面试官可能会屡次、且从不同角度登程询问对于你转行的问题,有的面试官可能会屡次从不同角度问对于转行的问题,这时不要慌乱,不要感觉是不是上一次答复的不好,就扭转了理由,依照本人理好的思路自信答复即可,毕竟,职业抉择没有相对的对错,本人认为喜爱和适宜才是最重要,不须要因为他人的评判和质疑就狐疑本人。 此外,你还能够充沛开掘过往工作和测试工作的相似之处,或者,之前的工作经验中所体现出了哪些品质和能力,是测试工作所需相一致的,之前的能力是否可能迁徙到测试工作中,甚至给测试工作带来不同的视角,这样能够绝对减弱转行的劣势。 解锁口试算法题的无效策略与心法在面试的口试环节,有的公司会考查算法题。过后,我也特意花了一段时间进行突击学习。一般来说,对测试岗位的算法题不会太难。把握根本的题目很重要,学院的课程也会讲最为经典和常考的算法思维。如果算法题目有题库的话,须要依据拿到题库工夫和口试开始的工夫进行正当布局学习,如果工夫并不富余,不须要把所有的题目都做完,能够依据本人的进度,在口试前2天进行做新的题目,把做过的题目回顾一下,回顾时能够把每个题目用到的办法进行标注,统计每种办法波及的题目数量,在口试开始前,把每种办法的题目都回顾1-2题,尽管并无十足的把握,但能答出大多数的一般难度题目。 在口试的过程中,像我一样突击筹备的同学,能够先不要去想最优解,先着重实现题目,若有工夫,再去优化,这样通过一部分测试用例后,心里有个底,做题的心态也更为安稳。如果面试官在线的口试,实现后若有想到更好的解法,能够和面试官口述思路。 面试题汇总与分类 以下是面试中遇到的一些问题。 1.个人经历与工作教训相干: 讲过往工作中的我的项目?简历中的测试平台我的项目是本人学习的还是工作中用的,多少人用?空窗期起因?为什么不做之前的工作了?将来的方向是打算在软件测试方向是吧?哪个我的项目播种比拟多?过往工作的成品是什么 ?形容下最近所做的我的项目,以及本人负责的测试模块及测试流程 ?自动化掌握情况怎么样?熟练掌握的测试工具都有哪些?有哪些印象粗浅的bug?2.公司及职位常识理解: 对面试的这家公司有什么理解?3.编程语言及相干常识: python的列表、元组、字典、汇合有什么特点,别离用在什么场景?用过什么python库?简略写个命令从数据库里查问?写一个函数,将整数转化为二进制字符串线程和过程的区别?4.操作系统及相干常识: linux下如何检索是否有某个文件?adb命令晓得哪些?adb如何查看过程占用的内存?linux零碎装置部署会吗?k8s docker理解吗?5.技术常识与技能: app测试和web测试用什么区别?做性能测试个别用的什么工具呢?做过平安测试吗?有遇到过鉴权吗?技术上有哪些难点吗?服务端测试和客户端测试的区别?一个app之前只有发消息的性能,现新增一个发送文件的性能,设计测试用例一个接口,性能是判断小括号是否匹配,设计测试用例,除了小括号都用*示意对烧水壶设计测试用例微博更改昵称测试用例如何设计?对智能车舱疲劳检测如何进行测试?6.网络常识: get和post区别?TCP和UDP的区别?网络协议有理解吗?7.自我晋升与浏览: 最近读哪些书?8.对问题的思考: 有什么问题要问?理解更多高薪私教班信息,请点击!

February 23, 2024 · 1 min · jiezi

关于软件测试:如何在简历中展示软技能吸引HR关注

撰写简历时,许多同学常感到纠结。他们不知如何清晰地展示本人的技术能力、工作经验和我的项目教训。有些同学领有多个我的项目教训和丰盛的工作经验,但若每个我的项目教训都列举其中,简历就会显得臃肿。其他同学则可能不足我的项目教训,不知从何处着手。特地是当招聘需要中提到软技能时,他们会无奈地感叹:“这些我切实不足相干教训啊!” 那么如何在简历中精确体现软技能呢?首先,需理解这些软技能代表着何种能力,以及在工作中的理论利用场景。其次,能够通过具体例子或形容,将这些软技能具体展示在简历中。这有助于面试官更好地理解咱们在简历背地所具备的杰出软技能。 形容工作经验: 在简历中,不要只列出工作职责,而是应该详细描述你在工作中所展示的软技能。例如,如果你具备良好的团队单干能力,能够具体形容你如何与团队成员合作实现我的项目,并获得了怎么的问题。 突出我的项目教训: 如果你有相干的我的项目教训,肯定要在简历中突出展现。形容你在我的项目中的具体角色和奉献,以及面对的挑战和解决方案,以此来展示你的剖析、判断和解决问题的能力。 强调成就和后果: 在形容工作经验和我的项目教训时,要重视强调你获得的成就和后果。通过具体的数据和事实来证实你的能力和价值,比方进步了团队效率、节俭了老本或者减少了支出等。 应用具体的案例:在简历中应用具体的案例或事例来展现你的软技能。例如,形容一次胜利的沟通案例,阐明你如何无效地与团队成员沟通,解决了我的项目中的问题。 突出奖项和荣誉: 如果你曾因杰出的软技能而取得过奖项或荣誉,务必在简历中突出展现。例如,如果你曾因优良的团队单干能力而取得团队奖,肯定要在简历中加以突出。 通过以上办法,你能够在简历中具体地展现你的软技能实力,让招聘人员可能清晰地理解你的业余能力和后劲。记住,简历是你展现集体能力和吸引雇主留神的重要工具,精心打磨简历,突出展现软技能,将会为你博得更多的求职机会。 获取更多简历模板与编写技巧,请点击!

February 23, 2024 · 1 min · jiezi

关于软件测试:测试管理忠告量力而行避免成为替罪羊

职场中,咱们经常面临是否帮忙别人的抉择。只管凶恶是美德,但适度的坏蛋卡可能会给本人带来麻烦。本文将探讨如何退职场中不自量力,防止成为替罪羊,以及如何放弃高效和正当的职责划分。咱们在工作中经常会遇到一些须要帮忙别人的状况,作为团队的一员,咱们心愿可能踊跃地帮助别人,尽力解决问题。然而,咱们也须要明智地抉择何时帮忙,免得成为替罪羊或适度耗费本人的精力。 如何在小团队中明智地承担责任 咱们要明确本人的职责范畴和能力边界。作为一个小团队的组长或根底管理者,咱们通常面对的是人数较少的团队,治理范畴无限。在这种状况下,咱们可能会被要求承当更多责任,甚至帮忙领导背锅。然而,咱们须要判断何时背锅是值得的。咱们要思考本人是否相熟相干业务,是否可能齐全把握。如果咱们帮忙了别人,但最终出了问题,咱们可能会成为替罪羊。因而,在这种状况下,咱们须要审慎判断是否值得帮忙别人。 防止成为二手忙,聚焦无效单干 咱们要防止成为他人的二手忙。所谓二手忙,就是当他人找到咱们帮忙解决问题时,咱们可能因为不相熟相干业务而无奈提供无效帮忙。特地是在联调测试等环节中,可能波及到多个团队的单干,有人心愿咱们帮忙一起进行端到端测试。然而,咱们要明确,帮忙别人并不是肯定要去做,尤其是当这个工作原本不是咱们的职责范畴时。咱们要防止被别人拉下水,因为咱们对相干业务不相熟,最终可能被指摘测试不精确或呈现问题。 职场中的同情心与职责边界 咱们要审慎看待同情心。很多时候,咱们会因为同情别人而被动帮忙他们。然而,退职场中,咱们须要明确边界,防止适度地帮忙别人。尽管凶恶是美德,但适度地帮忙别人可能会拖垮咱们本人,使咱们无奈有足够的工夫和精力进行集体的成长和学习。咱们要明确,本人的事件永远是第一位的,咱们不能总是为了帮忙别人而就义本人的利益。 职场中的坏蛋卡是一个须要咱们认真思考的问题。只管凶恶是值得称赞的品质,但适度地帮忙别人可能会给本人带来麻烦。咱们须要明确本人的职责范畴和能力边界,防止成为替罪羊。同时,咱们要审慎看待同情心,不自量力,防止适度地帮忙别人。只有在放弃高效和正当的职责划分下,咱们能力退职场中走得更远,实现集体的成长和倒退。 理解更多大咖沟通治理公开课内容,请点击! 总结沟通、汇报、总结,是作为一个职场人必须具备的能力,更是一个管理者的日常工作。对于从技术岗位走上治理岗位的同学来说,一套残缺的可落地的方法论是必不可少的,在这里举荐大家学习霍格沃兹测试开发学社的《测试治理训练营》,跟行业大咖学习团队治理技巧。

February 22, 2024 · 1 min · jiezi

关于软件测试:软件测试charles抓包配置具体操作步骤

Charles次要性能截取Http和Https网络封包反对重发网络申请,不便后端调试反对批改网络申请参数反对网络申请的截获并动静批改反对模仿慢速网络Charles下载安装charles下载地址:https://www.charlesproxy.com/download/注: 浏览器关上下载地址,点击本人电脑系统对应的安装包即可。Charles依赖Java环境,应用Charles须要先配置java环境。Charles是一款免费软件,30天试用期完结之后,应用期间半个小时将主动敞开一次。学院福利 charles网盘下载地址: windows下载地址:https://pan.baidu.com/s/1VtEXIogo_GS7iGh3f0nklw#list/path=%2F... 提取码:gxow Mac下载地址:https://pan.baidu.com/s/1VtEXIogo_GS7iGh3f0nklw#list/path=%2F... 提取码:gxow Charles界面及性能介绍 charles菜单介绍 Charles的主菜单包含:File,Edit,View,Proxy,Tools,Window,Help,最罕用的性能为Proxy和Tools。 Proxy 菜单Charles是一个HTTP和SOCKS代理服务器,开启代理后,charles能够抓取和批改客户端发送至服务端的申请数据,也能够批改从服务端返回至客户端的响应数据。 Start/Stop Recording: 开始/进行录制Stop SSL Proxying: 进行SSL代理Start/Stop Throttling: 开启/敞开网络节流Enable/Disable Breakpoints:开启/敞开断点模式。Recording Settings:记录会话设置。Breakpoint Settings:断点设置。Reverse Proxies Settings:反向代理设置。Port Forwarding Settings:端口转发。Windows Proxy:记录计算机上的所有申请。Proxy Settings:代理设置。SSL Proxying Settings:SSL 代理设置。Access Control Settings:访问控制设置。External Proxy Settings:内部代理设置。Web Interface Settings:Web 界面设置。Tools菜单 No Caching Settings:禁用缓存设置。Block Cookies Settings:禁用 Cookie设置。Map Remote Settings:近程映射设置。Map Local Settings:本地映射设置。Rewrite Settings:重写设置。Black List Settings:黑名单设置。White List Settings:白名单设置。DNS Spoofing Settings:DNS 坑骗设置。Mirror Settings:镜像设置。Auto Save Settings:主动保留设置。Client Process Settings:客户端过程设置。Compose:编辑批改。Repeat:反复发包。Repeat Advanced:高级反复发包。Validate:验证。Publish Gist:公布要点。Import/Export Settings:导入/导出设置。Profiles:配置文件。Publish Gist Settings:公布要点设置。Charles抓包配置Windows抓包配置装置好Charles后,须要装置配置证书,才能够对Windows的网络申请进行抓包,具体步骤: ...

February 21, 2024 · 1 min · jiezi

关于软件测试:Charles工具安装配置详解轻松掌握网络调试利器

前言网络调试是每个开发者和技术爱好者在日常工作中都会遇到的工作之一。Charles工具是一款弱小的网络调试工具,能够帮忙你捕获和剖析网络申请,调试挪动设施和Web应用程序。本文将具体介绍Charles工具的装置和配置过程,帮忙初学者轻松上手。 第一步:下载与装置首先,咱们须要从Charles官方网站下载最新版本的软件。拜访 Charles官方网站,抉择实用于你操作系统的版本,而后下载并装置。 Windows用户:双击下载的 .exe 文件,依照装置向导实现装置。macOS用户:双击下载的 .dmg 文件,将Charles图标拖动到“应用程序”文件夹中。装置实现后,启动Charles应用程序。 第二步:配置Charles2.1 启动Charles 关上装置好的Charles软件,你将看到一个欢送界面。点击“试用”按钮,或者如果你曾经购买了许可证,输出许可证信息。 2.2 配置代理 在Charles主界面,点击菜单栏上的“Proxy”选项,而后抉择“Proxy Settings”。在弹出的窗口中,确保“Enable Transparent HTTP Proxying”和“Enable macOS Proxy”选项都被勾选。 2.3 装置SSL证书 在Charles主界面,点击菜单栏上的“Help”选项,抉择“SSL Proxying”并点击“Install Charles Root Certificate”。 依照提醒,装置Charles的SSL证书。这一步是为了使Charles可能解析HTTPS流量。 第三步:配置挪动设施如果你想捕获挪动设施上的网络申请,须要在挪动设施上配置Charles代理。 3.1 连贯挪动设施 确保你的电脑和挪动设施在同一网络下,而后在挪动设施的无线网络设置中,找到以后连贯的网络,点击“高级”或“Proxy”选项。 3.2 设置代理 将代理设置为手动,并将代理服务器设置为你电脑的IP地址,端口设置为Charles默认的8888。 3.3 装置SSL证书(仅限HTTPS) 在挪动设施上关上浏览器,拜访 chls.pro/ssl,依照提醒装置SSL证书。 总结至此,你曾经胜利装置并配置了Charles工具。通过Charles,你能够轻松地捕获、剖析和批改网络申请,帮忙你更好地进行网络调试和开发工作。心愿这篇文章对初学者可能有所帮忙,让你更加熟练地应用这个弱小的网络调试利器。

February 21, 2024 · 1 min · jiezi

关于软件测试:黑马软件测试V402021年完结海上明月共潮生

download:黑马软件测试V4.0-2021年完结分布式事务实际:解决分布式系统的一致性问题在分布式系统中,因为数据扩散在不同的节点上,并且这些节点可能位于不同的物理地位,因而很容易呈现数据不统一的问题。为了解决这个问题,咱们须要应用分布式事务来保证数据的一致性。本文将介绍分布式事务的概念以及如何在实践中应用它来解决分布式系统的一致性问题。 分布式事务的概念在单机零碎中,咱们能够应用事务来保证数据的一致性。事务是一组原子性操作的汇合,这些操作要么全副执行胜利,要么全副回滚到初始状态。在分布式系统中,因为数据扩散在不同的节点上,因而须要应用分布式事务来保证数据的一致性。 分布式事务通常通过以下两种形式来实现: 二阶段提交(Two-Phase Commit,2PC):在该协定中,由一个协调者来协调所有参与者的事务,并最终决定是否提交或回滚这些事务。 弥补事务(Compensating Transaction):在该协定中,每个参与者都会进行本地事务,并记录下对全局事务的影响。如果某个参与者失败了,那么它会回滚本地事务,并执行一系列弥补操作来撤销本人对全局事务的影响。 分布式事务的实际在实践中,咱们通常应用分布式事务框架来简化开发过程。以下是一个应用Seata框架实现分布式事务的例子: @Servicepublic class OrderService { @Autowiredprivate OrderMapper orderMapper;@Autowiredprivate StorageClient storageClient;@GlobalTransactionalpublic void createOrder(OrderDTO orderDTO) { Order order = new Order(); order.setUserId(orderDTO.getUserId()); order.setProductId(orderDTO.getProductId()); order.setCount(orderDTO.getCount()); order.setAmount(orderDTO.getAmount()); order.setStatus(0); orderMapper.createOrder(order); // 扣减库存 storageClient.deductStock(orderDTO.getProductId(), orderDTO.getCount()); // 提交订单 orderMapper.updateOrderStatus(order.getId(), 1);}}在该例子中,咱们应用了Seata框架来实现分布式事务。@GlobalTransactional注解用于标识该办法须要参加分布式事务,当这个办法被调用时,Seata会协调所有参与者的事务并最终决定是否提交或回滚这些事务。 在createOrder办法中,咱们首先创立了一个订单并插入到数据库中。而后调用了storageClient.deductStock办法来扣减库存。最初,咱们更新了订单状态为已提交。如果在这个过程中呈现了任何异样,Seata会回滚所有的事务,并执行一系列弥补操作来撤销对全局事务的影响。 结语分布式系统的一致性问题始终是开发者们须要面对的一个难题。通过应用分布式事务,咱们能够保证数据的一致性,并且简化了开发过程。本文介绍了分布式事务的概念以及如何在实践中应用它来解决分布式系统的一致性问题。心愿这对您有所帮忙。

May 18, 2023 · 1 min · jiezi

关于软件测试:用RunnerGo简化性能测试流程

在软件开发过程中,测试是一个重要的环节,须要投入大量工夫和精力来确保应用程序或网站的品质和稳定性。然而,随着应用程序变得更加简单和宏大,传统的测试工具在面对比拟繁琐的我的项目时十分费时费力。这时一些自动化测试工具就显得尤为重要了。RunnerGo(开源)作为一款性能测试平台,能够帮忙测试人员简化性能测试流程,进步测试效率和准确性。 定义测试场景在进行性能测试前,须要定义应用程序或网站的测试场景。这包含模仿实在用户行为、生成大量的虚构用户等。这一步须要依据理论的业务需要和场景来设计,并且须要联合应用程序或网站的特点进行调整。为了进步测试效率RunnerGo推出的可视化场景配置,通过连贯接口方块和条件控制器能够疾速配置测试场景。 配置性能参数接下来须要配置性能测试参数,以便生成符合实际场景的测试数据。例如,能够设置并发用户数量、测试持续时间、响应工夫阈值等。这些参数能够依据理论状况灵便调整,并且能够通过RunnerGo的打算治理来治理测试用例。 这里RunnerGo反对多种压测模式抉择无需下载插件即可配置。 运行测试测试场景和参数设置实现后,开始执行测试工作。RunnerGo会主动模仿用户行为并生成测试数据,以查看应用程序或网站在不同负载下的响应速度和稳定性。测试后果能够实时查看,并且能够通过图表和报告进行展现和剖析。 预设配置咱们在做性能测试时须要先实现以下步骤:调试接口-编写脚本-调试脚本-配置插件。而应用RunnerGo平台则不用这么繁琐,RunnerGo场景治理配合预设配置更是效率加倍:引入场景-导入预设配置,一条用例就配置好了。点击左侧导航栏:性能测试-预设配置,点击左上角“新建”按钮,配置预设参数。 在已有测试计划中引入场景治理中的接口,再点击右上角“导入预设配置”来抉择预设配置进行导入。这样咱们就实现一个测试用例的配置了,相比拟其余工具有十分高的效率。 剖析后果最初,能够应用RunnerGo提供的可视化工具来查看测试报告和趋势图,对异常情况进行排查和修复。对测试后果进行剖析和解决。 总结利用RunnerGo能够简化性能测试流程,进步测试效率和准确性。通过定义测试场景、配置RunnerGo、运行测试和剖析后果等步骤,能够疾速辨认并解决应用程序中的性能问题,进步测试效率。

April 13, 2023 · 1 min · jiezi

关于软件测试:开源好物推荐全栈测试平台RunnerGo

做软件测试的同学在工作时应该都碰到过这种状况:接口治理、接口测试用postman、Apipost等接口管理工具,性能测试用jmeter、loadrunner等性能测试工具,接口自动化则是jmeter脚本或者python脚本配合jenkins应用。这种状况极大的升高了研发效率,看看近期入选 Gitee GVP 的开源测试平台RunnerGo是怎么解决测试人员日常应用中遇到的痛点问题的。 项目名称:RunnerGo开源许可协定:Apache-2.0我的项目地址:https://gitee.com/Runner-Go-Team部署文档:https://wiki.runnergo.cn/docs/我的项目简介:RunnerGo是一款全栈式的测试平台,反对接口治理,场景治理,性能测试,自动化测试四大性能,根本做到笼罩整个测试流程。我的项目架构图: 我的项目特点: 全栈式:能够帮忙用户进行 API 接口测试、场景测试、性能测试、接口自动化测试等全生命周期的测试服务。Go语言运行:基于Go语言研发,更节俭机器资源,运行速度更快。智能调度算法:自研的调度算法,正当利用服务器资源,升高资源耗费。内置压测模式抉择:反对并发模式、阶梯模式、错误率模式、响应工夫模式、每秒应答数模式等多种压测模式。实时生成测试报告:运行工作后,可实时查看执行后果,压力机状况。丰盛的报告图表: 全方位展现各个指标运行曲线图。实时批改工作参数: 可依据压测模式实时批改并发数、继续时长等。自动化测试:反对用例集,定时工作配置,测试报告可发送至指定邮箱。我的项目劣势:RunnerGo采纳模块化设计,能够依据需要构建多个测试场景和测试用例,并灵便应用各种不同的测试组件。这种架构使得RunnerGo更加灵便,能够满足不同须要的测试场景,方便管理。 RunnerGo中,测试场景中的所有构件都能够在平台上通过连贯图形来操作(每个接口展现进去都是接口方块),这样能够十分不便地增加,排序和编排用例。并可通过定时工作来主动执行测试。 RunnerGo反对团队合作,只有登录同一个团队就能够协同工作,可为团队成员受权,进步工作效率。 RunnerGo 是一个「所见即所得」的工具,提供了基于 Web 的图形界面,能够轻松实现用例的设计、治理和执行。

April 10, 2023 · 1 min · jiezi

关于软件测试:AREX携程无代码侵入的自动化回归测试平台

背景对于一个初上线的简略服务,只需通过惯例的自动化测试加上人工即可解决,但咱们线上外围的业务零碎往往比较复杂,通常也会频繁的需要迭代,如何保障被批改后的零碎原有业务的正确性就比拟重要。惯例的自动化测试须要投入大量的人力资源,筹备测试数据、脚本等,并且覆盖率通常也不高,难以满足要求。 为了保障一个线上零碎的稳定性,开发和测试人员都面临不少的挑战: 开发实现后难以疾速本地验证,发现初步的问题,容易陷入提测 → 发现 bug → fix → 提测的循环筹备测试数据、自动化脚本编写和保护须要大量的人力老本,而且难以保障覆盖率写服务难于验证,而且测试会产生脏数据,例如咱们的外围交易系统,可能会往数据库、音讯队列、Redis 等写入数据,这部分数据往往比拟难以验证,测试产生的数据也难于清理线上问题难以本地复现,排查艰难AREX 介绍AREX 通过复制线上实在流量到测试环境进行自动化回归测试,解决回归测试的难题。 AREX 采纳 java 的 instrument 实现了无代码侵入的数据采集和自动化 Mock,智能的 Mock 机制使测试运行代码集中在待测利用,不会产生真正的内部交互(DB 的写入、其它服务的调用),也完满反对了写接口的测试(如外围交易系统、库存零碎等)。 原理示例如下: 咱们假设生产环境利用会失常的响应用户的申请,通过 aop 的形式将申请入参及返回后果以及执行过程中的一些快照数据例如拜访数据库的入参和返回后果、拜访近程服务器的入参及后果保留下来。而后将快照数据发送给测试机器(代码发生变化的机器)实现一次回放过程。通过将落库数据、调用后盾申请的数据以及返回后果和线上实在申请产生时的数据进行比照,发现其中的差别,从而辨认被测试零碎的问题。 xxxTestCase:采集下来的数据在回放时作为测试 CASExxxMock:在回放时会应用采集的数据进行 Mock,代替真正的数据拜访xxxExpect 和 xxxReal:在测试完结后会验证对应的数据,发现代码中潜藏的隐患技术原理: 在 JDK1.5 中,Java 引入了 java.lang.Instrument 包,该包提供了一些工具帮忙开发人员在 Java 程序运行时,动静批改零碎中的 Class,以此实现对原类的性能加强。当初有很多工具都是基于此技术实现的,例如阿里开源的 arthas、监控工具 SkyWalking 等,AREX 的数据采集和主动 Mock 也是基于此技术实现。 平台劣势低成本:无代码侵入,根本无接入老本无需编写测试用例,海量的线上申请也能保障高覆盖率插桩代码足够简略,性能损耗低反对写验证:反对数据库、音讯队列、Redis数据的验证,甚至反对验证运行时的内存数据,并且测试时不会产生脏数据。测试 CASE 高稳固:反对各种支流技术框架的主动数据采集和 Mock,参见:arex_java,并且反对了本地工夫、缓存,在回放时精准还原生产执行时的数据环境。疾速复现线上问题:反对一键本地调试,能够疾速本地调试线上问题平安稳固,代码隔离,也实现了衰弱治理,在零碎忙碌时会智能升高或敞开数据采集频率良好的功能测试反对,反对测试脚本,也可对采集的数据进行简略的编辑实现固定测试观点的测试,防止大量的测试数据筹备技术实现咱们采纳了 ByteBuddy 库实现的字节码批改,在实现过程中也遇到了各式的挑战。 Trace 传递AREX 在进行数据采集时,同一个申请,会采集下来多条数据(Request/Response、其它服务调用的申请响应等),咱们须要把这些数据串联起来,这样能力残缺地作为一个测试用例。而咱们的利用往往采纳了异步框架,也大量用到了多线程等,这给数据的串联带来很大的艰难。 1. Java ExecutorsJava 和各种框架里提供了泛滥的线程池实现,咱们要保障 Trace 数据能正确的跨线程传递,首先咱们润饰了 Runnable/Callable, 如下: public class RunnableWrapper implements Runnable { private final Runnable runnable; private final TraceTransmitter traceTransmitter; private RunnableWrapper(Runnable runnable) { this.runnable = runnable; this.traceTransmitter = TraceTransmitter.create(); } @Override public void run() { try (TraceTransmitter tm = traceTransmitter.transmit()) { runnable.run(); } } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; RunnableWrapper that = (RunnableWrapper) o; return runnable.equals(that.runnable); } @Override public int hashCode() { return runnable.hashCode(); } @Override public String toString() { return this.getClass().getName() + " - " + runnable.toString(); } public static Runnable get(Runnable runnable) { if (null == runnable || TraceContextManager.get() == null) { return runnable; } if (runnable instanceof RunnableWrapper) { return runnable; } return new RunnableWrapper(runnable); }}而后代码润饰各种线程池,把 Runnable/Callable 替换掉,而 Wrapper 外部通过 TraceTransmitter 保障 Trace 的正确传递。 ...

April 4, 2023 · 2 min · jiezi

关于软件测试:测试开发线上培训班哪个好三家培训机构得知道尤其是第一个

近年来,随着信息技术的一直倒退,软件测试技术也日益重要。对于想要晋升本人的软件测试技能的人来说,加入线上培训班是一种十分不错的抉择。那么国内哪些软件测试开发线上培训班比拟好呢? 上面就为大家介绍几家比拟有口碑的在线教育机构。柠檬班这是一家出名的在线教育机构,其软件测试课程笼罩了从软件测试基础知识到高级技术的全套课程体系。包含自动化测试、性能测试、测试开发、平安测试等等,培训人能够依据本人的需要抉择相应的课程。并且课程中涵盖了大量的实战我的项目实际,可能让学习人员通过实际操作,深刻理解软件测试开发的具体过程和实际技巧。 51CTO学院这是国内当先的IT在线教育平台之一,其软件测试课程包含软件测试根底、自动化测试、性能测试、接口测试等多个方向,涵盖了从高级到高级的各个阶段。松勤它是一家专一于IT在线教育的机构,软件测试课程内容也蕴含了自动化测试、性能测试、接口测试、平安测试等多个方向,可能满足不同人员的需要,同时提供了在线直播、答疑等多种教学方式。 既然晓得了适合的软件测试开发培训机构,那么测试开发培训班学费是多少?软件测试开发培训班学费是没有对立的规范,因为培训班不同,培训费也就高下不一,但个别学成后,前期的支出都是会比拟高。 比方理解到的柠檬班和51CTO学院家Java和Python测试开发培训班的学费是在一万左右元,学习周期在四个月至半年左右,课程内容有高阶编程,接口自动化平台开发、算法+数据结构等模块的涵盖。总之,以上就是一些比拟受欢迎和口碑较好的软件测试开发线上培训机构以及学费整顿,学习人员能够依据本人的需要和工夫安顿抉择适宜本人的培训班。

March 27, 2023 · 1 min · jiezi

关于软件测试:学IT的千万要注意软件测试十大最常见的误区雅心教育来告诉你

软件测试与软件开发同样重要,两者缺一不可。在软件开发过程中,测试是不可或缺的环节,能够保障软件品质,缩小软件的错误率,为用户提供更好的应用体验。当初,随着科技的不断进步,软件开发也呈现出疾速倒退的态势,然而软件测试与软件开发相比,却始终被忽视,被认为是一项简略的工作,甚至有人认为软件测试不配与软件开发等量齐观。这种观点是十分谬误的。事实上,软件测试波及到各种不同的技术和常识,并且须要谨严的办法和流程,能力实现对软件品质的评估和检测。测试过程中须要进行重复的验证,保障软件的正确性、可靠性以及安全性等方面的要求,从而确保软件的品质和性能。上面小编就来跟大家盘点一下对于软件测试的十大误区: 一、软件测试很简略。尽管软件测试岗位绝对于软件开发来说可能更容易上手,但这并不代表软件测试的工作就非常简略。起因是来发一开始就须要把握一门语言,而测试到中后期才开始须要把握来发语言技术,测试更器重测试思路、办法、以及测试工具的把握。然而到了中后期,软件测试须要把握的常识量远大于开发人员。测试前期还要把握性能、性能、自动化、接口、协定、抓包、安全性,包含挪动端等一系列测试工具,技术难度丝毫不亚于开发技术。 二、测试就是为了找bug。测试人员不仅要找bug,还要跟踪bug晓得问题被修复,对缺点进行确认并修复缺点,同时测试人员还要剖析问题起因,防止此问题影响到其余性能。 三、测试和开发是“朋友”。尽管测试和开发的工作内容是对抗的,但出发点都是为我的项目有更好的倒退。因为开发人员和测试人员就是一起的,要是测试和开发人员成为敌人,你会发现,工作还会异样地顺利。**四、自动化测试太难。**自动化只是测试的一部分,功能测试做到极致也不容易,性能测试也要做到各方面最好,自动化无非是须要懂一些代码,难点不在技术,而是思路和施行操作。**五、bug越多测试越无效。**测试的有效性不能以发现bug的数量来决定,更应该依据问题的隐蔽性或严重性来决定。**六、开发完之后再进行测试。**软件测试越早就行越好,因为bug越早被发现所造成的代价就越小。而且,测试工作不仅仅针对程序,还包含对软件的需要、设计等。 七、手工测试没有挑战性。手工测试作为测试的基本功,真正做好却不容易。很多人认为手工测试就是点屏幕,其实它的范畴很宽广,波及的内容也很多。 八、品质问题都是测试的错。首先应该先确认测试是否通过。如果通过后仍呈现问题,极有可能是开发人员没有保留最新的代码导致的。或者是开发人员在公布最终版本时擅自批改了局部代码。 九、用测试工具就是测试。测试还是要以手工测试为根底,工具只是为了进步测试效率,为了更好的实现测试工作,并不是用工具测试就肯定无效。 十、不适宜做开发转测试。其实测试要把握的技能比开发多得多,覆盖面也很广大,想要做好一个好的测试人员,还是有肯定的难度。总之,软件测试工程师的工作内容丰盛多样,波及到软件测试的方方面面。尽管软件测试工作相较于软件开发可能更容易上手,但仍然须要付出致力和工夫去学习新技能、积攒教训。如果对软件测试感兴趣的同学,欢送大家来资讯成都雅心教育,同时还有收费课程、线下课试听提供。软件测试工程师在一直晋升本人的技能程度的同时,也为保障软件产品的品质和性能施展着关键作用。

March 24, 2023 · 1 min · jiezi

关于软件测试:软件测试让你告别内卷摆脱996

如果你当初感觉很焦虑,对当下的工作不称心,工资太低,想转行但又不晓得该做什么。在这个时代,如果没有一技之长,便很难立足了,更别说经济自在。明天小编在这里给大家分享一个待业方向——软件测试。 软件测试技术是软件开发过程中的一个重要组成部分,是贯通整个软件开发生命周期、对软件产品(包含阶段性产品)进行验证和确认的流动过程,其目标是尽快尽早地发现在软件产品中所存在的各种问题——与用户需要、事后定义的不一致性。查看软件产品的bug。写成测试报告,交给开发人员批改。软件测试人员的根本指标是发现软件中的谬误。 软件测试的长处: 1.市场空缺大。目前来看,程序员的招聘火爆,而其中软件测试工程师是软件开发中十分重要的职位,并且需要迫切,相比开发人员,测试工程师工作压力小、倒退空间大而成为黄金IT职位之一。软件测试在将来的5~10年内倒退会很快,人才缺口很大,因为软件企业要靠软件产品的品质去立足于市场,不再是以前说的那样只有能用就能投放到市场去。 2.入行一年左右薪资就能达到12-16k。在大型软件开发企业中,软件测试工程师根本处于“双高”位置,即位置高、待遇高,月薪可高达七八千元,中小规模软件企业薪水在3000-5000元的居多;高级测试工程师年薪可高达10万元之多。据前程无忧2006年的薪酬报告显示,软件测试工程师在IT行业中越来越受到重视,其薪资也节节高升。自2014年开始,软件测试岗位薪资简直年年都在涨,当初,软件测试均薪高达14440元!测试工程师的起薪从2000至5000元/月不等,若有四年工作教训的话,薪资在8000元/月左右,具体视不同地区、不同性质企业、测试工程师的不同能力而定。 3.待业方向多。刚进入软件测试行业的新人都会从最根底的执行开始做,而后是用例设计,相当于根本的功能测试。随后大家会依据集体职业倒退来进一步细化,有的走治理路线,成为了主管,经理,我的项目负责人等;有的深刻测试用例设计,持续高级的功能测试;有的倒退技术,专研性能测试,平安测试,自动化测试,测试架构设计等。 4.享受双休、法定节假日,社会位置较高。软件工程师还是受到了许多人的认可,个别软件工程师不会像码农那样没日没夜地加班。广泛公司的软件工程师都享有双休,不会996,加班都是极少数的,并且不内卷!当IT其余业余卷得不行的时候,只有软件测试在享受假期。 5.越老越吃香,不怕被淘汰。驰名软件测试专家,清华大学传授郑人杰认为,软件测试工作是对品质的把关,其中蕴含技术及治理等方面的工作,工作绝对稳固,对年龄没有限度,而且随着我的项目教训的一直增长和对行业背景的深刻理解,会越老越吃香。有互联网的中央就会有软件测试,所以大家不必放心软件测试是吃“青春饭”的。 软件测试培训哪里好?目前来说,国内的软件测试培训机构泛滥,有线下实体的,也有线上网络的,但要说培训哪里好,其实次要还是看培训人员,本人适宜哪一种培训形式吧。比方你要是临时没有工作,本人工夫富余,也不怕花钱, 那么你就去线下的培训机构。能够通过试听课程、比照价格、口碑这些方面找到好的机构,但如果你要是须要一边下班一边学习,那么线下必定就不太适宜你,那么就能够思考线上课程。小编有一个敌人,晓得本人没有那么多工夫去面对面的学习,就花了一点钱在网上找到了成都雅心教育培训机构学习,而这种培训形式其实也并不比线下差,甚至能够说是好处多多。如费用便宜,工夫自在,学习内容能够保留回放等等都是线下不具备的。雅心教育履行线上+线下两种教学模式,能够按需随便抉择。 不论你当初是什么职业,都能够去学习软件测试,毕竟技多不压身,还能帮忙咱们退职场中取得更广大的倒退空间。

March 23, 2023 · 1 min · jiezi

关于软件测试:软件测试和开发哪个好软件测试就业前景怎样

软件测试和开发两个职业都是IT行业中十分重要的角色,然而两者的工作内容和职责存在着显著的区别,所以对于软件测试和开发哪一个更好,须要依据你们本人的趣味和能力来决定。 软件测试和开发都是IT行业的热门职业,两者的待业前景都很好。而在薪酬方面,依据具体的工作教训和职位,两者的薪资也有很大差异。然而一般来说,软件开发绝对于测试来说薪资更高一些。同时,软件测试和开发的工作内容也存在着很大的不同。软件测试次要负责软件品质的保障,包含测试计划的制订、测试用例的编写、测试执行和测试报告的撰写等。而软件开发则是负责将需要转化为代码,并开发和保护软件系统。两者的工作内容存在显著的区别,测试工作相对来说比拟枯燥,须要进行重复的测试和排错,而开发工作则须要有创造性和解决问题的能力。  最初,抉择软件测试还是开发还须要思考集体的趣味和能力。如果你喜爱挑战和解决问题,并且具备肯定的编程能力和算法思维,那么抉择开发可能更适合。如果你喜爱开掘问题并解决,具备急躁和仔细的特质,那么抉择测试可能更为适宜。 软件测试待业前景怎么 目前来说软件测试行业的前景是十分不错的。比方:岗位门槛绝对较低:绝对于其余技术岗位,软件测试工程师的技术门槛绝对较低。只有把握了根本的测试常识和技能,就能够进入软件测试行业,这点我敌人就是个很好例子,他是从其余行业转行测试的,刚开始啥也不懂,就跟着柠檬班的培训老师学习,做训练,缓缓的游刃有余后,感觉测试其实也挺容易上手的,前面通过大略四个月的实践培训和实际操作,就开始进来找工作,过后也是有老师给领导面试啥的,所以面试环节比较顺利,一个星期内就找到了工作。 倒退空间广大:在职业倒退中能够逐渐晋升为测试主管、测试经理、测试总监等职位,也能够转型为软件品质工程师、软件项目经理等职位,倒退空间非常广阔。 学习成本低:与其余技术岗位相比,软件测试行业的学习老本绝对较低。只须要把握根本的测试常识和技能即可进入行业。总之,进入软件测试行业是一个十分不错的抉择,但须要重视本身技能的晋升和倒退,以保障在行业中的竞争力和职业前景。 

March 21, 2023 · 1 min · jiezi

关于软件测试:柠檬班软件测试怎么样从这几方面即可了解清楚

软件测试是保障软件品质的一个重要环节,随着近些年软件科技的崛起,软件测试工程师也随之被器重起来,那么想要从事软件测试工作须要学习什么呢?  进行软件测试常识的学习,那么前提必定就是得先学习测试基础知识,如理解什么是软件测试、为什么须要测试、测试的类型、测试的流程等等根底概念,之后就是学习测试工具和技术,如Bug管理工具、自动化测试工具、性能测试工具等,最初就是本人找实际我的项目练习。当然如果本人感觉自学相干常识比拟艰难,也能够抉择加入培训,会比本人学轻松很多,如柠檬班、51CTO、松勤等培训机构的都是业余的软件测试培训机构,轻轻通知你们柠檬班官网有很多收费课程能够白嫖,如果是自学却找不到相干材料的,也可看看去这里搬! 柠檬班软件测试怎么样柠檬班是一家业余的IT技能培训机构,据悉,它家的软件测试课程始终都是备受好评的。比方在授课方面,他们会结合实际案例来解说知识点,帮忙培训人员更好地把握测试技能和办法。在教学过程中,柠檬班还提供了丰盛的实际我的项目和模仿测试环境机会,让培训人员可能更好地了解和把握测试方法和技术。在课程的前期,学生还将承受实在我的项目的模仿实训,帮忙培训人员将所学常识利用到理论我的项目中。 此外还为培训人员进行职业规划和简历优化面试技巧、沟通技巧、职场礼仪等方面提供领导和帮忙。总之,据摸索理解到的信息可知,柠檬班软件测试还是领有挺丰盛的教学资源和实践经验的,比拟重视培训学生的全方面倒退。所以,如果想进行线上培训学习的,这个软件测试培训机构还是能够试一试。

March 20, 2023 · 1 min · jiezi

关于软件测试:软件测试怎么学这两种学习方式更建议选择后者

家喻户晓,软件测试对代码的要求不像其余编程学科那么高,对零根底小白用户很敌对,那么他们要怎么学学软件测试呢? 目前来说,学习软件测试真的就两种路径,一是本人自学,二是通过培训机构学习,而对于零根底用户,最好的倡议就是抉择第二种,培训机构会把软件测试所需把握的常识更系统地梳理总结,依据纲要能够更精确疾速地学习,学习周期也会更短;其次学习中遇到的问题会失去及时的解决,比方本人装置调试软件遇到问题,本人去查资料解决可能须要几个小时,然而通过指导几分钟就失去解决。 至于培训机构的抉择,你能够找线下的,也能够找线上的,线下的话,提前试听尽管比拟难,但去过招生老师沟通分明也还是能够的,就是比拟费时间,而后就是线上,线上课试听不免费,在家躺着玩手机就能试听,不存在什么座位费,押金什么的,比拟不便,如果听了感觉老师技术不业余,间接划掉就行,没有任何损失! 而且后者要比前者学习工夫也会更灵便一些,费用会更便宜,敌人曾在网上一个柠檬班的培训机构报名学习了一段时候,过后只须要交六七千块钱就能够学习,而后毕业的时候也会有内推,或者老师面试领导。总之,抉择何种学习形式进行学习,齐全取决于本人! 软件测试培训机构举荐 一、线上培训柠檬班,诚如介绍所说,因为是进行线上授课,所以在费用上就没有线下那也须要产生场地费和设施费用这些,价格就会绝对便宜,7千元就能够报名在线学习,不过线上因为无人时刻监督,学习人员就可能须要自备自制力。 二、线下培训博为峰,这是一个十分老牌的培训机构,学员泛滥,不过因为是线下的培训,有理论场地等相干设施的,所以在培训费用上会绝对比拟低廉,并且如果是抉择这种线下培训的话,那么你就可能须要做好到职学习的筹备了,线下之所以叫线下,那就是你得去现场进行学习,而益处就是能够面对面地跟着老师学习,学习气氛会更好。但整体来说,线上培训是要比线下更自在的,线上培训可能依据本身的工夫调整,不须要到职,而是能够一边工作一边学习。

March 14, 2023 · 1 min · jiezi

关于软件测试:女生学软件测试难不难前期门槛低不需要写代码

近些年,因为软件测试行业倒退良好,工资高、门槛低的起因,吸引了不少女生转行,而这也让不少仍在张望的女生想要晓得,女生在学习软件测试这条路线上到底难不难?毕竟始终以来技术岗位都是男生的天下! 其实学习软件测试是没有性别限度的,可能很多人认为IT行业更多的是男生,所以软件测试行业也是只有男生更适宜,其实不然,软件测试这个岗位绝对男孩子来说,女生会更占据劣势,因为测试本就是检测软件外部是否存在问题,而女生始终以来都是要比男生仔细很多,因而,在找谬误方面,我置信男生感觉不会是女生的对手。 至于学习软件测试难不难,我在结尾就表明了,软件测试的入行门槛很低,即便是没有任何计算机根底的人,只有通过零碎的学习也是能够疾速把握好第一阶段,达到入行的规范的。 总之,软件测试更偏差操作,不像编程须要很强的逻辑思维能力,和软件开发比起来,软件测试须要写的代码很少,也绝对比较简单,从零开始的话干什么都不容易,但只有你致力,肯定播种颇丰! 软件测试根底培训哪里好 目前软件市场上比拟有名气的软件测试培训机构有柠檬班、博为峰,达内……。其中千锋和达内是线下培训机构,柠檬班是线上培训机构。而依据理解,博为峰和达内的偏重课程是开发和自动化,对于根底培训并不是十分重视,而柠檬班绝对前两个培训机构来说,会更重视入门根底的培训,并且是在整个测试行业里是全面倒退的,如:在入门根底培训上开设有两个班次的课程,别离是全程班(4月半月)速成班(1个半月)。 讲课老师有趣风趣,内容紧凑易懂,并且课后有作业,非常有利于打基础的人在较短的工夫内把握课程内容(去试听了相干课程得出的论断)。实操我的项目,会有老师手把手带着从0到1去做我的项目。所以要说软件测试根底培训哪里好,那就能够多看看柠檬班。当然,另外几家软件测试培训机构在其余几个阶段培训还是挺不错的,后续如需进阶,到时候能够思考它们。

March 13, 2023 · 1 min · jiezi

关于软件测试:自动化测试培训机构哪个好软件测试工资一般多少

自动化测试培训机构哪个好?我国目前有着很多传授自动化测试课程培训机构,然而因为每个机构的课程设置、教学质量和师资力量等方面各有差别。所以,大家如果想要抉择一家好的自动化测试培训机构,那么以下几个因素就肯定要思考。 1、课程设置:是否涵盖了自动化测试的基础知识和常用工具等方面的内容?2、教学质量:是否有业余的教学团队和高质量的教学资源?3、师资力量:授课老师是否有理论的工作教训?而基于以上三点因素,我依据整体状况给大家推挤了几个公众都比拟好评的自动化软件测试培训机构,别离是柠檬班、博为峰、千峰这三家,它们都具备肯定的品牌知名度、教学实力,在自动化测试培训畛域有着肯定的名誉和市场位置。 当然,具体抉择哪一家机构,还须要依据本身的需要和理论状况做出决策。 软件测试工资个别多少 一般来说,软件测试工程师的薪资程度会依据所处的阶段发生变化,个别功能测试的均匀薪资在7000元到1万元之间,自动化测试在1.2万到2万……阶层越高,工作教训越久,工资也会越高。比方敌人刚开始从培训机构学完进去后,找到的第一份功能测试工资如同就是8千元,过后问过一嘴他培训过的柠檬班机构的状况,失去的回复是还挺不错的,学费比拟便宜,学习上比拟自在,不耽搁闲事。目前他曾经在上海以及技术公司做了自动化测试工程师岗位,而能拿到手的薪资也晋升到了1.3万左右。 总之,软件测试的薪资状况,会依据地区的不同,存在一些变动,比方在一些一线城市北京、上海等高老本地区,软件测试工程师的薪资就会广泛高于其余地区,这也是为何有些人一入行就能拿到七八千,而有些人却只能拿到六七千的起因。 

March 7, 2023 · 1 min · jiezi

关于软件测试:零基础学软件测试难吗软件测试培训哪里好

软件测试工程师是软件上线之前最重要的一个环节,能够间接决定软件到底能不能上线,在公司内有着十分重要的位置,因而,不少人就想晓得,像本人这种零根底的人如果去学软件测试难吗?  事实上,软件测试是信息技术外面最简略的科目之一,后期学习门槛很低的,不须要有计算机根底,也不须要你有相干的背景,因为软件测试课程会从计算机根底开始解说,再一步步深刻到具体的软件测试办法和我的项目实战,只有认真学习,急躁仔细,都可能学会,因而,零根底人员学软件测试还是不难的。 软件测试培训哪里好 当初这种培训的形式有很多种路径,有线下实体的培训机构,也有线上只须要通过网络进行直播上课的形式,前者,比拟好的软件培训机构,我依据网上举荐找到了几个,别离是博为峰、千峰、蜗牛。  而后者网络上课的软件培训机构则是能够看看松勤、柠檬班,其中柠檬班是我对象培训过的一个机构,大略是21年上半年,因为疫情就业后,就在敌人的介绍下,报名了柠檬班家根底课程,挺他反馈还能够,上课工夫很自在,实际训练比拟多,不是那种只会死上课的,前面在外面培训了差不多四个月,就开始全心全意的在家坚固技术常识,和做我的项目实际,前面又用了半个月工夫投简历找工作,这期间培训班的老师也会来领导面试该如何答,传授答复技巧这些,最初在月底的时候,就胜利入职到了一家了科技公司。 总之,以上的这些软件测试培训机构不论是身边有亲自体验过的,还是宽广网友推评出来的,都倡议大家在抉择的时候,提前去试听下,毕竟他人说的再好,也没有本人声临其地步感触好!

March 6, 2023 · 1 min · jiezi

关于软件测试:软件测试怎么学如何系统学习软件测试

软件测试是保障软件品质的重要环节,对于软件开发过程中的每个阶段都有至关重要的作用。如果想从事软件测试行业,或者是晋升本人的测试技能,那么软件测试该怎么学?上面介绍一些学习软件测试的办法。1、加入培训课程加入业余的软件测试培训课程能够帮忙你更加零碎、全面地学习软件测试。如柠檬班培训机构,课程内容丰盛,涵盖了测试的各个方面,同时还有业余的老师解答纳闷、领导实际。 2、学习测试基础知识学习软件测试的第一步就是理解软件测试的基础知识,包含测试的定义、测试类型、测试策略、测试计划等。能够通过浏览相干的书籍和网络资源,或者加入培训班进行系统地学习。3、学习测试工具古代软件测试通常都须要应用一些测试工具,如自动化测试工具、性能测试工具、平安测试工具等。学习软件测试不仅须要理解测试工具的根底操作,还须要理解如何应用工具进行测试,以及如何对测试后果进行剖析。 4、实际测试案例理论知识诚然重要,然而软件测试最终要解决的问题是如何发现软件中的缺点。因而,在学习软件测试的过程中,实际测试案例十分重要。能够通过模仿测试场景,或者加入理论的软件测试我的项目,来积攒测试教训和技能。5、退出测试社区退出测试社区能够让你接触到更多的软件测试从业者,理解最新的测试技术和工具,还能够分享你的测试教训和技巧。能够加入一些线上或线下的测试社区,如测试派、51Testing、TesterHome等。总之,软件测试是一门须要一直学习和实际的技能。通过上述办法和倡议,置信能够帮忙你更好地把握软件测试技能,从而在软件测试畛域有更好的倒退和利用。   如何零碎学习软件测试 想要系统地学习软件测试课程,那么走培训机构就是最好的抉择,如博为峰、千峰、柠檬班……培训机构会把软件测试所需把握的常识更系统地梳理总结,老师会依据纲要进行零碎的授课,学习人员能够更精确疾速的学习,学习周期也会绝对比拟短。

February 28, 2023 · 1 min · jiezi

关于软件测试:软件测试就业前景怎样国内十大软件测试培训机构有哪些

软件测试培训机构在以后的信息技术畛域中扮演着十分重要的角色。培训机构能够提供零碎的软件测试常识、实际技巧和实战我的项目教训,帮忙学员疾速把握软件测试的各种技能,从而进步职业竞争力。但因为我国软件测试培训机构相当多,要想找到真正有实力和口碑的机构并不容易。  本次依据调研和口碑评估,我大家整顿了国内十大软件测试培训机构:别离是柠檬班、博为峰、卓松教育、千锋教育、华章教育、黑马程序员、尚学堂、51CTO学院、蜗牛学院、海豚培训(不按程序排名)。其中柠檬班和博为峰倡议着重理解,柠檬班是一家在线培训机构。设立待业速成班、JAVA、Python全栈自动化班、JAVA、Python测试开发、高级性能测试……多个班级,次要就是针对测试人成长体系门路,提供一站式软件测试课程,19年因高就业率取得腾讯课堂的最高荣誉奖——卓越贡献奖。 而博为峰,就是一个专一线下实体的培训机构,服务蕴含是培训、测试开发班、软件测试认证等服务,在全国20多个城市设有分支服务机构。 软件测试待业前景怎么随着信息技术的一直倒退和利用,软件测试的重要性越来越受到人们的关注。那么软件测试待业前景怎么呢?软件测试的次要工作是发现软件中的缺点和谬误,并提供倡议和改良措施,以确保软件品质和可靠性,缩小软件的危险和老本。 软件测试行业的待业前景非常广阔。从招聘信息的数量和薪资程度来看,软件测试工程师是IT行业中最热门的职位之一。随着技术的不断进步,软件测试工程师的职业前景也越来越好,越来越多的企业开始器重软件测试,并违心在这个畛域进行长期的投资。在将来的几年里,软件测试行业将会迎来更多的时机和挑战。云计算、大数据、人工智能、物联网等新技术的倒退,将会带来更多的软件测试需要。同时,因为软件品质问题可能导致企业的商誉受损,因而软件测试工程师的需要也将更加迫切。 除了传统的软件开发企业外,互联网企业、金融企业、制造业、医疗行业等各行各业都须要大量的软件测试人才。而且随着技术的提高,软件测试工程师的职业畛域也将一直拓展,从测试人员到测试架构师、测试经理等职位,都须要相应的技能和教训。总之,软件测试作为IT行业中的一个重要职业,其待业前景非常广阔,而且将来的倒退也充斥了时机和挑战。

February 27, 2023 · 1 min · jiezi

关于软件测试:接口测试该怎么做持证上岗的Charles可以帮你做什么

上篇文章,咱们感触到tcpdump与wireshark的组合之美,原来工具与工具之前不只竞争,还有单干,你是否还记得上篇文章中有一个伏笔,那就是代理工具:charles。本文章针对charles进行解说,带你持续体验接口测试之旅。charles是一个优雅的名子,你能够称说它:查尔斯学生。它是一个网络的管理员,你的任何http/https网络音讯,都要通过查尔斯学生审核,如果你和查尔斯学生关系好,你会失去这些音讯,甚至能够篡改和收发。对,你没看错,charles能够解决https协定音讯!上篇文章咱们对https协定谈虎色变,因为https是htttp的加密版,tcpdump和wireshak对这种加密伎俩大刀阔斧,但charles出类拔萃,他弱小到能够解决https协定下的音讯。 如果代理配置正确您会看到charles学生的全貌,上边是菜单栏,右边记录您拜访的每个网站/主机,右侧显示信息细节。它十分弱小,只有您学会应用它,就能够看到网络上传输的所有事件。 为了让所有浏览器(或者网络应用)的数据送达到charles手中,您必须设置charles为代理服务器,但每次开启或敞开charles后,都要重新配置,如果您想偷点懒,能够在Proxy->Proxy Settings弹出的对话框中配置行为。 小明:“选项中有两个代理,请问charles学生,他们有什么区别呢?”charles:“Socks代理只是简略地传递数据包,而不用关怀是何种利用协定(比方FTP、HTTP和NNTP申请)。所以,Socks代理比其余应用层代理要快得多。而浏览网页时的代理服务器通常是http代理呦!”小明:“哈哈,我懂了,那我能浏览网页,不等于我肯定能够通过Socks拜访Internet对吗”charles:“对的,socks要比http宽松的多!”小明:“既然charles学生管理网络,那么您肯定有办法存储这些网络申请信息吧?”charles:“当然,我最重要的绝活就是记录,所有的申请和响应都会记录到session中,供大家稍后检查和 剖析。你关上菜单栏中的File,在这里能够治理您的session,包含新建,关上,清空等等。”小明害羞的问:“我可不可以敞开记录呢,等我须要的时候再关上,这样我就能偷偷做一些鲜为人知的事!”charles会心的笑了笑:“如果敞开记录,Charles会失常通过所有申请,但它们不会记录在session中,你能够点击上面来敞开记录。”小明:“charles学生,我发现在主界面,有两个抉择'Structure'和'Sequence',它们两个有什么区别呢?”charles:“哈哈哈,这可是我的双面镜!我提供了两种显示方式,你能够在view->structure/sequence中切换,也能够在界面中间接切换”charles喝了口茶:“最大的区别是,构造视图提供树图显示,而程序视图则是以工夫程序展现”小明:“原来是这样,我看视图下有很多相似链接的货色,都看花眼了,快把您的老花镜借我用用”charles急忙藏好老花镜:“这可不行,不过,我能够教你一个筛选它们方法,这些相似链接的货色是host名,如果你右键host名,会呈现一系列对应的操作,比方保留和对焦,这个对焦(focus)的意思是只关注咱们想要的信息。”charles:“对焦操作能够让过滤掉没用的信息,比方我只想关注baidu,我能够对百度host进行focus,这样那些非百度的host就会被折叠,就会呈现上面这样”小明放下偷来的老花镜:“哇,太好了,老花镜还您!”charles:“哇呀呀,偷我货色,气死我了!”小明盯着屏幕看了很久:“这些蓝条好丑陋!”charles昂首挺胸:“那当然,这是chart,我最漂亮的中央,chart次要记录了一个资源的生命周期:从申请到期待到响应申请,不仅如此,它还将相干资源分组,比方上面的4张图片是一组。”小明:“利用chart,就能晓得申请在哪破费工夫长了,不会傻傻的期待了!”小明:“既然charles学生这么厉害,能够胡作非为的抓取网络申请,那您会不会被警察叔叔抓起来呢?”charles丝毫不缓和:“咱们做的都是非法操作,我有本人的证书,称之为:Charles Root Certificate,在抓取数据时,你很可能会收到对于证书的正告,那很失常,你只须要信赖它即可,如果你想一劳永逸,永恒信赖Charles Root Certificate的话,你能够依照上面的链接来操作”信赖Charles Root Certificate:https://www.charlesproxy.com/...小明:“这样啊,那证书和SSL有什么关系呢”charles:“你其实在问SSL的工作原理,其实我是中间人,替浏览器查看服务器的证书并签名,但同时会把本人的证书发给浏览器,因而会呈现正告,你须要增加到信赖序列能力失常应用,上面的一张图清晰明了”小明:“哈哈,charles老爷爷是一个小能手”charles:“胡说,怎么能叫爷爷呢,人家明显不到30岁”小明:“这样叫,比拟亲切”小明:“明天好累呀,我要反复发送申请给同学,他如同睡着了,始终没回我音讯!”charles:“哎呀,小明,你怎么能一条一条的手动发送呢,我可是有超级工具:负载测试,你右键host名->Advanced Repeat,关上它!”charles:“这个工具有几个难懂的参数,Iterations很容易了解,就是你要发送的次数,Concurrency是并发等级,示意拜访该站点的用户数量,以及迭代次数。”小明:“那我设置发送10次,并发等级为1,发送!”charles此时会关上一个新的sesscion,并且发送了10次,每次都有对应的具体音讯!小明:“我写的软件好奇怪,在网络好的时候没问题,但信号差的时候显著卡顿,看来我只能始终蹲在卫生间(信号差)调bug了”charles:“哈哈哈,傻孩子,我就自带弱网工具呀,在Proxy->Throttle Settings下,应用前要记得勾选Enable Throttling。”charles顿了顿:“如果你想指定网站,能够勾选下图中的 Only for selected hosts,而后在对话框的下半局部设置中减少指定的hosts项。”小明有点晕了:“这些参数,好多,好简单!”charles笑着摸摸小明的头:“小明,人就是这么成长的,总不可能一帆风顺,缓缓用心听,你能够在Throttle Preset下选择网络类型,比方抉择56 kbps modem便能够升高网速,而选项的含意,我会在上面列出来”Throttle Settings 视图中的选项含意如下:1.Bandwidth:带宽2.Utilistation:利用百分比3.Round-trip:往返提早4.MTU:字节小明:“charles爷爷,我用过的很多IDE都自带断点调试性能,您这里有吗?”charles:“断点可是十分重要的工具,怎能没有!你关上Proxy->Breakpoints Settings,勾选 Enable Breakpoints就能够启用断点模式,抉择Add,而后填入须要监控的Scheme、Procotol、Host和Port等信息,这样就达到了设置断点的目标。或者能够在某个想要设置断点的申请网址上右击抉择Breakpoints来设置断点。”小明皱了皱眉:“然而这样好麻烦呀,每次都要设置Scheme、Procotol、Host 和 Port 吗”charles:“当然不是,你也能够通过右键host名,抉择断点”小明拍了拍手:“哇,好棒,我肯定要多试试这个断点性能”charles:“其实我不仅仅是个代理工具,也能够做到反向代理”小明困惑的看着charles:“什么是反向代理呀”charles:“反向代理就是客户端想拜访服务器,他会优先拜访代理服务器,当proxy关口拿到用户申请的时候会转发到代理服务器中的随机某一台。而在用户看来,他只是拜访了Proxy服务器而已”。小明:“那就是说,反向代理就是服务器的代理,客户端基本不晓得服务器的存在,只晓得代理服务器的存在啦!”charles:“是这样的,你能够在Proxy→Reverse Proxies Settings找到这个性能,这可是很罕用的,特地是对于本地开发且须要域名的状况下”。charles:“这个截图的意思是 将本地57689端口映射到www.baidu.com域名的80端口“小明坏笑:“好困扰,我手机中有很多网络游戏,我可不可以让charles爷爷帮我看看网络游戏有什么数据包呢,我能不能改一改?”charles:“又在打什么坏留神了,我其实能够抓手机上的数据,但电脑和手机须要在同一个wifi网络”小明兴奋的看着charles:“真的吗,我该怎么做,快教教我”charles无奈的摇了点头:“你要关上Proxy->Proxy Settings,填入代理端口8888,并勾上 “Enable transparent HTTP proxying” 即实现了代理”charles:“而后,你须要在手机wifi网络中增加代理,输出电脑IP和charles的端口号:8888,就能够抓手机上的网络数据了!”小明:“太好了,我要去试一试”10分钟后...小明:“charles,我抓到数据,但为什么是unknown呢”charles:“明明是你没听我讲完,就本人动手做,你这个是http数据,如果想要抓取http包,你须要上面这样做”重点来了,咱们久违的https终于出场了,charles靠一张证书就解决了加密问题,具体怎么做呢?如果应用的是电脑,依照上面这样装置证书: 抉择后,就会呈现证书下载,下载胜利后会电脑”钥匙串拜访“中看见(这里我曾经装置并信赖过了),而后双击下载的证书,勾选信赖即可。如果应用的是手机: 在SSL Proxying中勾选Install ...Mobile Device 会弹出一个框,用手机(处于代理状态下)登陆指定的url下载证书即可。 这时候你抓https的时候还是发现不行,乱码加unknown(如下图) 这时候咱们还须要一步操作,就是将想要抓的https退出到SSL代理中,这样能力被Charles辨认并解析。 小明:“哇,是我太心急了,当初不呈现乱码了”。Charles 的重定向性能分 Map Remote 和 Map Local 两种,顾名思义,Map Remote 是将指定的网络申请重定向到另一个网址申请地址,Map Local 是将指定的网络申请重定向到本地文件,上面用一个例子具体阐明一下。5.先保留接口返回数据(右键单击某接口保留为html格局,如下图) 6.对本地的html进行批改 7.设置charles进行map local 8.此时再次申请百度 在 Charles 的菜单中,抉择 “Tools”->”Map Remote” 或 “Map Local” 即可进入到相应性能的设置页面。 ...

February 22, 2023 · 1 min · jiezi

关于软件测试:接口测试框架实战二-接口请求断言

题图援用自 Real Python接口申请断言是指在发动申请之后,对返回的响应内容去做判断,用来查看是否响应内容是否与规定的返回值相符。在发动申请后,咱们应用一个变量 r 存储响应的内容,也就是 Response 对象。Response 对象有很多功能强大的办法能够调用,比方间接获取响应头,获取 Unicode 编码后的响应内容,获取二进制的响应内容,获取原始的响应内容等等。取得响应头取得编码后的响应值:还能够应用 r.raw 取得原始响应内容,r.content 取得二进制的响应内容,另外还有编码为 JSON 格局的响应内容,会在前面的章节进行详述。装置 JSON 库:响应状态码断言:assert 是 Python 的内置函数,用来判断表达式,当表达式条件为 False 的时候就会触发异样。r.status_code 是 Response 对象内的一个办法,用于取得返回值的状态码。assert r.status_code==200 就是在判断状态码是否等于200,如果不等于200则会抛出异样。反例:响应状态码断言,判断响应状态码是否为400从上个例子能够晓得,这个响应状态码应该是 200,因为与 400 不相等,所以抛出了异样。在测试过程中,大部分接口的返回值都为 JSON 格局。所以,把握如何对 JSON 响应值进行断言这一技能,能够更轻松的欠缺接口自动化测试用例。r.json() 对于响应值 r 先进行 JSON 编码:对于字典格局,能够通过 dict["key"] 的形式拿到 value 值.对于列表格局,能够通过 list[index] 拿到对应索引的 value 值。在 JSON 的断言之中,次要利用的就是字典和列表自带的查找办法。如果碰到混合或者嵌套的状况,只须要一层一层拨开,直到找到须要进行断言的字段即可。字典格局断言,判断 headers 中的 Host 为 httpbin.org 1.第一层是 key 值为 "header" 的 value2.第二层是 key 值为 "Host" 的 value3.判断 key 值为 "Host" 的 value 值是否与 "httpbin.org" 相等字典混合列表格局断言,判断 hogwarts 对应的列表的第一位是 'a' ...

February 22, 2023 · 1 min · jiezi

关于软件测试:接口测试框架实战一-Requests-与接口请求构造

Requests 是一个优雅而简略的 Python HTTP 库,其实 Python 内置了用于拜访网络的资源模块,比方urllib,然而它远不如 Requests 简略优雅,而且短少了许多实用功能。所以,更举荐把握 Requests 接口测试实战技能,这也是互联网大厂风行的接口测试利器。上面从装置 Requests 库开始,一步步把握接口申请结构、接口申请断言、Schema 断言、Json/XML 申请、测试用例调试、HeadCookie 解决、Jsonpath 利用、认证体系等接口测试实战技能。pip 命令装置 Requests。Requests 官网文档:https://2.python-requests.org...接下来就会应用最风行的 Requests 进行接口测试。Requests 提供了简直所有的 HTTP 申请构造方法,以及通过传入参数的办法,对发送的申请进行定制化的配置,能够用来应答各种不同的申请场景。发送 get 申请:在申请中增加 data 参数,并发送 post 申请:在申请中增加 data 参数,并发送 put 申请:发送 delete 申请:发送 head 申请:发送 options 申请:也能够间接应用 request 函数,传入不同的 method,例如应用这个办法发送 get 申请:上面的参数都是非必须参数,然而如果须要对申请做额定的定制化,则须要把握以下这些参数的作用。 header 参数通过传入 dict 定制申请头:data 参数发送编码为表单模式的数据单:files 参数上传文件,dict 格局。留神:倡议用二进制模式(binary mode)关上文件。这是因为 Requests 可能会试图为你提供 Content-Length header,在它这样做的时候,这个值会被设为文件的字节数(bytes)。如果用文本模式(text mode)关上文件,就可能会产生谬误。timeout参数设定超时工夫(秒),达到这个工夫之后会进行期待响应:留神:timeout 仅对连贯过程无效,与响应体的下载无关。timeout 并不是整个下载响应的工夫限度,而是如果服务器在 timeout 秒内没有应答,将会引发一个异样(更准确地说,是在 timeout 秒内没有从根底套接字上接管到任何字节的数据时),如果不设置 timeout,将始终期待。allow_redirects 参数管制是否启用重定向,bool 类型,抉择 True 为启用,抉择 False 为禁用。proxies参数设置代理,dict 格局,key 值为抉择的协定,能够别离设置 HTTP 申请和 HTTPS 申请的代理。verify 参数能够传入 bool 值或者 string,默认为 True。如果设置为 False 的即为疏忽对 SSL 证书的验证;反之就是须要做验证;如果传入值为 string 的话,代表指定本地的证书作为客户端证书。从本地传入证书:疏忽对SSL证书的验证:另外三个重要参数 Json、Cookies、Auth 在前面的章节再进行具体的介绍。

February 22, 2023 · 1 min · jiezi

关于软件测试:接口测试框架实战-流程封装与基于加密接口的测试用例设计

接口测试仅仅把握 Requests 或者其余一些功能强大的库的用法,是远远不够的,还须要具备能依据公司的业务流程以及需要去定制化一个接口自动化测试框架的能力。所以,接下来,咱们次要介绍下接口测试用例剖析以及通用的流程封装是如何实现的。首先在做用例剖析之前,能够通过追究公司一年来所有的故障起因,定位问题起因,或者通过与 CTO、产品经理、研发、运维、测试考察,失去品质痛点,还能够剖析业务架构、流程调用,以及监控零碎理解到业务的应用数据,从而失去品质需要。失去品质需要之后,通过与产品经理、项目经理、研发总监等对接后得悉待测业务范围、业务场景用例、业务接口分析,从而确定公司的测试计划。将测试计划与品质需要联合进行剖析,就能够开始进行业务用例的设计,而接口测试用例剖析,也在其内。接口封装思维次要分为 3 个大维度:配置、接口封装、业务流程。其中: 配置次要用作依据配置文件获取初始配置和依赖;接口封装遵循 APIObject 设计模式,对接口的调用进行形象封装;业务流程则负责数据初始化、业务用例设计,蕴含有多个 API 造成的流程定义,不要再蕴含任何接口实现细节、以及断言。上面将会与实战案例联合,进行具体的介绍。因为信息安全起因,许多接口在传输的时候会对申请与响应进行加密解决,如果间接对这部分数据做断言显然是行不通的。还须要对这部分接口额定进行解密的解决之后,才能够对已解密的接口进行断言。在进行实战之前,须要先筹备一个对响应加密的接口。对它发动一个 get 申请后,失去一个加密过后的响应信息。先筹备一个 JSON 格局 demo:应用 base64 对其做加密,失去一个加密后的文件 demo64.txt应用 Python 命令在 “demo64.txt” 所在目录启动一个服务启动后的样子如图:如果申请胜利的话就代表环境曾经筹备胜利调用 base64,间接对返回的申请做解密,即可失去解密后的响应,将解密后的响应转为 JSON 格局,此时就能够对这个返回值做断言且不会报错了。这样的写法显然不够优雅,如果被测接口的协定发生变化,Requests 库无奈反对扭转后的协定,须要调用别的第三库发送申请信息,则还是须要批改底层的源码。碰到这种状况,能够减少一层封装,结构一层更加通用的发送办法。首先须要通过一个字典的构造体,保留所有的申请信息,包含发送的协定、解码形式、申请 method 等等,而这种字典模式的构造体也为前面的数据驱动革新做好了一个重要的铺垫。通过申请信息的构造体中的schema,增加判断条件,去抉择不同的申请协定。举个例子,如果 schema 为“http”的话,就抉择调用被封装的 requests 库。调用在ApiRequest类中的send办法发送申请并进行断言如果面对不同的算法,还须要批改底层的源码,所以须要把算法封装。须要应用哪个算法,就应用哪个。封装的思维与下面雷同。首先在字典构造体中增加一个 encoding 字段,用来判断抉择的不同的加密条件。还是通过申请信息的构造体中的 encoding,增加判断条件,去抉择不同的解密形式。首先须要明确在面对一个加密的响应后果,能够应用什么样的解决形式:1.如果晓得应用的是哪个通用加密算法的话,能够自行解决。2.如果不理解对应的加密算法的话,能够让研发提供加解密的 lib。3.如果既不是通用加密算法、研发也无奈提供加解密的 lib 的话,能够让加密方提供近程解析服务,这样算法依然是窃密的。本文次要讲的是在理解应用加密算法的状况下,如何解决这样的解密算法。然而封装的思路都是相通的,不论是面对哪种状况,都能够通过格式化的数据,指明数据的内容,并通过一层逻辑的封装,将加解密或者抉择的协定封装进去。举荐学习

February 22, 2023 · 1 min · jiezi

关于软件测试:接口测试实战-GET/POST-请求区别详解

1.申请行的 method 不同;2.POST 能够附加 body,能够反对 form、json、xml、binary等各种数据格式;3.从行业通用标准的角度来说,无状态变动的倡议应用 GET 申请,数据的写入与状态倡议用 POST 申请;为了防止其余因素的烦扰,应用 Flask 编写一个简略的 Demo Server。4.装置flask5.创立一个 hello.py 文件hello.py6.启动服务提醒上面信息则示意搭建胜利。发动 GET 申请,a、b参数放入 URL 中发送,并保留在 get 文件中:发动 POST 申请,a、b参数以 form-data格局发送,并保留在post 文件中:留神:>的左边为申请内容,<右边为响应内容。GET 申请过程POST 申请过程对两个文件进行比照:从图中能够分明看到 GET 申请的 method 为 GET,POST 申请的 method 为 POST,此外,GET 申请没有 Content-Type 以及 Content-Length 这两个字段,而申请行中的 URL 带有 query 参数,是两种申请都容许的格局。(End)

February 22, 2023 · 1 min · jiezi

关于软件测试:接口测试-Mock-实战二-结合-jq-完成批量化的手工-Mock

因为本章的内容是应用jq工具配合实现,因而在开始局部会先花肯定的篇幅介绍jq机器应用,如果读者曾经相熟jq,能够间接跳过这部分。先来看利用场景,App 常常会有一些信息展现的列表页,比方商家的菜品、股票的公司、文章的列表展现等,例如上面这样:菜品不够吃的话~不是,是菜品数量较少不够测试的量,如果咱们想要测试几百个菜品时,会不会在刷的时候是否有性能影响,展现是否失常,列表展现的边界值测试等;而要测就得有数据展现,这个时候要是通过后端去找或者造这么多数据是有点麻烦的,其实咱们这个测试的测试点就是要测试前端页面的展现和性能,只有有这部分数据就能够,无所谓数据是否实在从数据库得来。这个时候能够就能够利用mock的伎俩,对这种大数据进行等价类的生成,使前端能够拿到这类数据即可,而Charles正是咱们实现手工mock测试的利器之一!按常规,先看官网对jq的解释:jq 官网地址:https://stedolan.github.io/jq/大略意思就是轻量灵便的Json解决命令行。用处说到这大略有些人有点感觉它能用来做什么了,为啥手工mock要应用jq了?没错!要用它来解决接口返回的json数据以达到mock的成果。 Mac:Mac还是判若两人的简略(香~),装了Homebrew 的话一条命令brew install jq即可其余零碎:jq 的官网很贴心,给出了各个系统的下载方式及其相干所需下载工具的链接,具体的就查看官网吧,链接如下根本过滤 .简略的说就是原样输入来:对象过滤 .key、.key1.key2、.["key"]索引过滤 .key[index]、.key[ startIndex: endIndex].key[index].key[ startIndex: endIndex]对象构建 {} 、[]如果其中一个表达式有多个后果,那么输入也会产生多个后果如果key是不存在的,value将会赋值为null如果再键的四周加括号就意味着它将作为表达式进行计算。其余常见用法:计算获取长度数组运算jq 对于数组能够有并集(’+’)和差集(’-’)的操作:并集('+'):有数组a,b; a+b就会失去一个蕴含所有a,b数组元素的新数组:差集('-'):有数组a,b; a-b就会失去一个只蕴含a中元素,不蕴含b中元素的新数组:更多用法更多用法可参考官网:https://stedolan.github.io/jq...如下图中的科普举荐栏目中有 2 则科普文章,当初想要mock几十甚至上百篇文章或广告。抓取接口的响应json报文如下:咱们将数据存入json文件中,而后赋值给一个变量而后咱们利用jq对pageList中的列表进行+=操作,实现一次翻倍增长,将后果传给变量mockData。依照上述的办法,每次列表的元素个数都会翻倍,也就是操作n次就变成2的n次方倍,指数增长的速度就不必多说了~这样依据本人的须要失去数据后将新数据存入json文件,最重要的数据筹备过程也就实现了:说了这么多“废话”,总算是到了配角了,其实数据筹备好了,工具的应用还是很简略的,Charles有一个叫做Map Local的性能,在你要mock的申请上右击就可找到:Map Local能够对指定的接口返回应用本地文件进行替换,如这里替换为上文中废话半天生成的数据文件MockTest.json:而后再次刷新页面,看看成果,页面的列表就如愿倍增了,也不必去数据库增加数据,保留一份json文件即测即用即可:以上,期待大家一起交换,多多斧正。

February 22, 2023 · 1 min · jiezi

关于软件测试:接口协议之抓包分析-TCP-协议

TCP 协定是在传输层中,一种面向连贯的、牢靠的、基于字节流的传输层通信协议。 环境筹备对接口测试工具进行分类,能够如下几类: 网络嗅探工具:tcpdump,wireshark代理工具:fiddler,charles,anyproxyburpsuite,mitmproxy剖析工具:curl,postman,chrome Devtool抓包剖析TCP协定tcpdump是一款将网络中传送的数据包的“头”齐全截获下来提供剖析的工具。它反对针对网络层、协定、主机、网络或端口的过滤,并提供 and、or、not 等逻辑语句去掉无用的信息。让 tcpdump 时刻监听 443 端口,如果有同样就输出到 log 文件中 sudo tcpdump port 443 -v -w /tmp/tcp.log利用这条命令,会把失去的报告放到目录 /tmp/tcp.log 中。 wireshark 也是一款网络嗅探工具,它除了领有 tcpdump 性能,还有更多扩大性能,比方剖析工具,然而在接口测试中,抓包过程往往都是在服务器进行,服务器个别不提供 UI 界面,所以 wireshark 无奈在服务器工作,只能利用 tcpdump 抓包生成 log,而后将 log 给 wireshark 导入应用,在有 UI 界面的客户端上进行剖析。 抓取一个 http 的 get 申请:1.在百度上搜 mp3"http://www.baidu.com/s?wd=mp3"2.用 tcpdump 截获这个 get 申请,并生成 log3.用 wireshark 关上 tcpdump 生成的 log应用 wireshark 查看 log: log 的前几段信息是三次握手,起因是信道是不牢靠的,在发送数据前,就必须确保信道稳固,而三次握手就像是上面这些操作: 第一次握手:建设连贯时,客户端发送 syn 包(syn=j)到服务器,并进入 SYN_SENT 状态,期待服务器确认。第二次握手:服务器收到 syn 包,必须确认客户的 SYN(ack=j+1),同时本人也发送一个 SYN 包(seq=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态;第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK(ack=k+1),此包发送结束,客户端和服务器进入 ESTABLISHED(TCP 连贯胜利)状态,实现三次握手。通过三次握手,就能够进一步交换,就像上面这样: ...

February 22, 2023 · 1 min · jiezi

关于软件测试:持续交付Jenkinsfile-语法

实现 Pipeline 性能的脚本语言叫做 Jenkinsfile,由 Groovy 语言实现。Jenkinsfile 个别是放在我的项目根目录,随我的项目一起受源代码管理软件管制,无需像创立"自在格调\"我的项目一样,每次可能须要拷贝很多设置到新我的项目,提供了一些间接的益处: Pipeline 上的代码审查/迭代Pipeline 的审计跟踪Pipeline 的惟一实在起源,能够由我的项目的多个成员查看和编辑Pipeline 反对:Declarative(在 Pipeline 2.5 中引入)和 Scripted Pipeline 两种格局。两者都反对建设 Pipeline,两者都能够用于在 Web UI 中定义一个流水线 Jenkinsfile,将 Jenkinsfile 文件创建并查看到源代码管制库中通常被认为是最佳做法。Declared PipelineDeclared Pipeline树Declared Pipeline 必须蕴含在固定格局 Pipeline {} 块内,每个申明语句必须独立一行,行尾无需应用分号。块( blocks{} )只能蕴含章节(Sections),指令(Directives),步骤(Steps)或赋值语句。 块 blocks{}由大括号括起来的语句,如 Pipeline{},Section{},parameters{},script{} 章节(Sections)章节中通常蕴含一个或多个指令或步骤。如 agent 、post、stages、steps 指令(Directives)environment、options、parameters、triggers(触发)、stage、tools、when 节点(agent)必须存在,agent 必须在 Pipeline 块内的顶层定义,但 stage 内是否应用是可选的参数:any/none/label/node/docker/dockerfile罕用选项 label/cuetomWorkspace/reuseNode示例: agent { label 'my-label' }agent { node { label 'my-label' customWorkspace '/some/other/path' }}agent { docker { image 'nginx:1.12.2' label 'my-label' args '-v /tmp:/tmp' }}构建后(post)不是必须,用于 Pipeline 的最外层或者 stage{} 中,次要用于表白 Jenkins 实现构建动作之后须要做的事件。 ...

February 22, 2023 · 2 min · jiezi

关于软件测试:持续交付Blue-Ocean-应用

Blue Ocean 提供了一套可视化操作界面来帮忙创立、编辑 Pipeline 工作。Blue Ocean 个性: 流水线编辑器:用于创立贯通始终的继续交付流水线,是一种直观并可视化的流水线编辑器。流水线的可视化:对流水线的可视化示意,进步了全企业范畴内继续交付过程的清晰度。流水线的诊断:即刻定位自动化问题,无需继续扫描日志或关注多个屏幕。个性化仪表盘:用户能够自定义仪表盘,只显示与本身相干的流水线。装置与启动 Blue OceanBlue Ocean 是 Jenkins 插件之一,在系统管理->插件治理,"可选插件" 中搜寻 "Blue Ocean" 能够看到如下后果:选中 Blue Ocean,而后单击 Install 按钮进行装置。装置实现之后重启 Jenkins 过程,之后就能够在 Jenkins 页面上看到 Blue Ocean 的图标。单击 Blue Ocean 图标启动即可启动 Blue Ocean。 在 Blue Ocean 中创立 Pipeline在 Blue Ocean 中单击 New Pipeline 创立新的流水线。创立 Pipeline 如果你的仓库根目录有 Jenkinsfile,则间接开始第一次构建过程。如果仓库中不含 Jenkinsfile 则开启 pipeline-editor,图形化编辑工作流。Blue Ocean 图形化编辑工作流 编辑完后会生成 Jenkinsfile,并提交到你的代码库根目录,你能够抉择提交到 master 分支或者提交到一个新创建的分支。提交胜利之后就会开始执行一次残缺的构建过程。 Blue Ocean 创立 Pipeline 提交代码库 & 运行 由 Blue Ocean 生成的 Jenkinsfile 代码会被保留到我的项目的 Github 代码库中,前期能够对其进行编辑、批改。Blue Ocean 生成的 Jenkinsfile 代码 ...

February 22, 2023 · 1 min · jiezi

关于软件测试:技术分享-测试平台开发前端开发之Vuejs-框架的使用

首先将 Vue.js 下载到本地,本章就以本地的 Vue.js 为例。在本地创立一个工作区即创立一个文件夹,应用 vscode 关上,将 Vue.js 放到工作区目录下。 创立挂载元素首先创立一个 index.html 的文件,应用 <script src="./vue.js"></script>加载 vue.js,这里的 ./vue.js 门路依据本人 Vue.js 文件地位而定。 <!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> <script src="./vue.js"> 打印</script> </body></html>创立Vue实例创立 Vue 实例的目标是为元素提供数据、办法等首先在 body 上面创立一个 <div> 标签,它的 id="app"· <div id="app"></div>创立 Vue 实例 <div id="app">{{msg}}</div><script> new Vue({ // Vue 实例 el: "#app", // el: 是一个挂载元素的关键字, 前面的 #app 是 css 选择器,示意只在这个元素中起作用。 data: { // data 是贮存数据的中央,div 用到的数据贮存在这个中央 msg: "hello world", // msg 相似于变量名,援用用插值的形式 {{msg}} 来援用 }, methods: { // methods 外面用来定义方法 }, });</script>将数据放在 data 中的益处就是不须要频繁的去批改 DOM 中的数据,而是间接的批改 data 中的数据即可。 ...

February 22, 2023 · 2 min · jiezi

关于软件测试:技术分享-测试平台开发前端开发之Vuejs-框架

Vue.js 是一套用于构建用户界面的渐进式框架,在目前的前端凋谢中比拟风行的前端框架。Vue 被设计成自底向上的逐层利用。Vue 的外围库只关注视图层,不仅易于上手,还便于与第三方库或已有我的项目整合。然而学习 Vue.js 须要肯定的 HTML、CSS、和 JavaScript 根底,所以本章节将不对这些根底内容进行解说。 Vue的组件化开发目前的前端开发中组件化开发成为了潮流,而所谓的组件化开发就是把页面拆分成多个组件,最初将每一个组件进行列举,造成咱们看到的网页。 例如:百度的首页,能够简略的分为以下图中的四个组件 先将这四块的组件开发实现之后,再将这些组件组装成一个残缺的页面。 1.在保护网页时,不须要在一个大的页面中去批改,而是去对应的组件中去批改数据。2.组件的资源是独立的,能够进步每个模块的重用性。比方上图的搜素框,在首页应用到了,在其余的中央也要用到同样的搜寻框,就能够一成不变的将组件拿过去间接用。3.组件之间能够互相嵌套。 环境介绍和筹备这里选用的是 vscode,其余编译器也可,vscode 下载地址:https://code.visualstudio.com/。vscode 插件的抉择: JavaScript (ES6) code snippets:蕴含 VSCode 的 ES6 语法中的 JavaScript 代码段。Vetur:VSCode 反对 VUE 的工具,有语法高亮、格式化、谬误查看、主动实现等性能。(举荐)Auto Close Tag:主动增加 HTML/XML 完结标签。(举荐)Auto Rename Tag:主动重命名对应的 HTML/XML 标签。Highlight Matching Tag:突出显示匹配的开始和完结标签。这些只是举荐须要用到的插件,能够依据本人的喜好进行抉择,其余的插件也能够。组件库随着 Vue 的风行,其余公司也造成了本人独有的组件库,比方 ElementUI、BootstrapVue、Vuetify,这些组件可都是能够拿来间接应用的,这里体现出了 Vue 组件化开发的劣势。 ElementUI:https://element.eleme.io/#/BootstrapVue:https://bootstrap-vue.org/Vuetify:https://vuetifyjs.com/zh-Hans/这里次要应用的组件库是 vuetify。比方我的项目中须要一个按钮时,就能够到对用的组件上面找到它,将代码拿进去即可,外面有各式各样格调的组件:https://vuetifyjs.com/en/comp... Vue.js装置1、通过下载 Vue.js 包应用 <script> 标签进行引入, Vue 会被注册为全局变量。 <script src="../vuejs/vue.js"></script>2、在线援用 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>指定一个明确的版本进行应用 <script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>这是一个更小的构建,能够带来比开发环境下更快的速度体验,然而在用 Vue 构建大型利用时举荐应用 NPM 装置。NPM 能很好地和诸如 webpack 或 Browserify 模块打包器配合应用。同时 Vue 也提供配套工具来开发单文件组件。 npm装置Vue环境筹备:本次应用的 node 和 npm 的版本是 ...

February 22, 2023 · 1 min · jiezi

关于软件测试:技术分享-Spring-Boot-集成-Swagger

Swagger UI 容许任何人(无论您是开发团队还是最终用户)都能够可视化 API 资源并与之交互,而无需任何实现逻辑。它是依据您的 OpenAPI(以前称为 Swagger)标准主动生成的,具备可视化文档,可简化后端实现和客户端应用。 为什么应用Swagger跨语言性,反对 40 多种语言,Swagger 曾经缓缓演变成了 OpenAPI 标准;Swagger UI 出现进去的是一份可交互式的 API 文档,咱们能够间接在文档页面尝试 API 的调用,省去了筹备简单的调用参数的过程;对于某些没有前端界面 UI 的性能,能够用它来测试接口;联调不便,如果出问题,间接测试接口,实时查看参数和返回值,就能够疾速定位问题。Swagger疾速开始这里抉择 2.9.2 版本。 <!-- swagger --><dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version></dependency><dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version></dependency>增加配置类 增加一个 Swagger 配置类,在工程下新建 config 包并增加一个 SwaggerConfig 配置类。SwaggerConfig.javaimport com.google.common.collect.Lists;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import springfox.documentation.builders.ApiInfoBuilder;import springfox.documentation.builders.ParameterBuilder;import springfox.documentation.builders.PathSelectors;import springfox.documentation.schema.ModelRef;import springfox.documentation.service.ApiInfo;import springfox.documentation.service.Contact;import springfox.documentation.spi.DocumentationType;import springfox.documentation.spring.web.plugins.Docket;import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration@EnableSwagger2public class SwaggerConfig { //作为Springfox框架的次要接口的构建器,提供正当的默认值和不便的配置办法。@Beanpublic Docket docket() { ParameterBuilder builder = new ParameterBuilder(); builder.parameterType("header").name("token") .description("token值") .required(true) .modelRef(new ModelRef("string")); // 在swagger里显示header return new Docket(DocumentationType.SWAGGER_2) .groupName("aitest_interface") .apiInfo(apiInfo()) .globalOperationParameters(Lists.newArrayList(builder.build())) .select().paths(PathSelectors.any()).build();}private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("aitest-mini零碎") .description("aitest-mini接口文档") .contact(new Contact("tlibn", "", "103@qq.com")) .version("1.0") .build();}} ...

February 22, 2023 · 3 min · jiezi

关于软件测试:技术分享-Spring-Boot-异常处理

Java 异样类首先让咱们简略理解或重新学习下 Java 的异样机制。Java 外部的异样类 Throwable 包含了 Exception 和 Error 两大类,所有的异样类都是 Object 对象。 Error 是不可捕获的异样,艰深的说就是因为 Java 外部 JVM 引起的不可预感的异样, Java 虚构机会抉择终止线程。如 OutOfMemoryError ,就是 Java 虚拟机运行过程中呈现内存资源谬误抛出的。 Excetpion 异样是程序自身引起的,它又分为运行时异样 RuntimeException,和非运行时(编译时)IOException 等异样。如除数为零时引发的 ArrayIndexOutOfBoundException 异样就是运行时异样。非运行异样都是可查可捕获的。Java 编译器会通知程序他错了,错在哪里,正确的倡议什么。咱们能够通过 throws 配合 try-catch 来解决。 Java 异样解决机制在 Java 应用程序中,异样解决机制为:抛出异样,捕获异样。抛出异样:当一个办法呈现谬误引发异样时,办法创立异样对象并交付运行时零碎,异样对象中蕴含异样类型和出现异常时的程序运行时信息。运行时零碎负责寻找处理异样的代码并执行。 捕捉异样:在办法抛出异样之后,运行时零碎将转为寻找适合的异样处理器(Exception Handler)。潜在的异样处理器是异样产生时顺次存留在调用栈中的办法的汇合。 当异样处理器能解决的异样类型与办法抛出的异样类型相符时,即为适合的异样处理器。运行时零碎从产生异样的办法开始,顺次回查调用栈中的办法,直至找到含有适合异样处理器的办法并执行。当运行时零碎遍历调用栈而未找到适合 的异样处理器,则运行时零碎终止。同时,意味着 Java 程序的终止。 Spring Boot 异样解决Spring Boot 的所有异样解决都基于 java 的。在 Spring Boot 应用程序中,通常对立解决异样的办法有 应用注解解决 RestControllerAdvice本示例次要目标解决咱们日常 Spring Boot 中的异样解决 在 Web 我的项目中通过 ControllerAdvice、RestControllerAdvice 实现全局异样解决 ControllerAdvice 和 RestControllerAdvice 的区别 相当于 Controller 和 RestController 的区别。 ...

February 22, 2023 · 1 min · jiezi

关于软件测试:性能测试实战-修改-JMeter-源码定制化聚合压测报告

性能和压力测试是每一个互联网应用程序上线之前都必须测验的测试项目。JMeter 作为目前互联网大厂最风行、最弱小的性能测试工具,曾经成为测试人员行走江湖的必备利器。相比传统的压力测试工具(如 LoadRunner),JMeter 最显著的特点就是开源、轻量级、易于保护、便于扩大。面对变化多端的业务状况,测试开发人员能够基于 JMeter 源码批改和二次开发,疾速实现定制化性能,更好的满足业务和客户理论要求。而这种基于开源我的项目的测试开发能力,也是高级测试人员必须具备的实战技能。比方,在 JMeter 性能测试实战中,很多人都会遭逢一个痛点问题:

February 22, 2023 · 1 min · jiezi

关于软件测试:思寒漫谈测试人职业发展

应不少同学的要求,通过本文分享下对测试工程师职业倒退的认识,话题较大,不敢轻易乱写,抛砖引玉,仅供大家参考。 1.测试行业倒退背景 微软引领的大测试时代中国最早的对 IT 工程的启蒙和测试定位的摸索大多来自于微软。当年的大背景是微软成心放任 Windows 的盗版,并踊跃的输入他本身的 IT 生态技术栈到中国。中国从政府到民间简直全副应用了 Windows。中国有大量的微软认证的 VP 等各种专家。微软和他的从属生态带给中国测试行业的影响,简略总结下: 强调工程的严谨性。CMMI 一统天下。有数中国公司为了通过这个认证费尽脑汁。大部分公司通过它也不是为了本人的标准,而是为了能拿到政府或者国外机构的外包业务。测试和研发的比例。因为都是客户端产品。如果交付进来呈现品质问题是很难解决的。所以测试被放在一个十分重要的地位上。测试与研发比一度是 1:2外包公司倒退迅猛。短短的几年。中软,东软,软通能源,博彦等公司迅猛的倒退起来。测试技术的启蒙和倒退。次要是自动化为主。在十年前的年代,听一些前辈说,有公司做性能测试,就是有人用哨子吹下,而后一屋子的人就开始一起点。所以当 QTP 和 LoadRunner 呈现后,就迅速霸占了市场。当互联网世界开始暴发,测试行业的次要变动是:CMMI 逐步被互联网公司疏忽。国内崛起的公司有本人的业务,他们不屑于不实用的认证,开启了本人独特的横蛮倒退的节奏。这也是之前在外企工作的白领有自卑感的一个起因。测试技术大倒退。不再是简略的自动化测试,技术开始更加细化。比方单元测试,代码动动态测试,接口测试,继续集成,各种端的自动化测试。大家也不再科学 UI 自动化,而分层自动化,继续集成,测试即服务等理念开始风行。测试工程师技术型转变。以前的测试工程师就是点点点,不会要求技术的。但当初 BAT 等一线公司曾经全副推广技术口试了。能够说,不懂开发根底的测试人曾经难以倒退了。点点点测试工程师曾经进化到只能用于用户端的性能校验工作了。测试研发比:从 1:2 降落到了 1:3、1:5。挪动互联网暴发,IT 研发技术栈和云计算服务也倒退迅猛,这让小公司的生产力有飞跃性变动,也催生了一场席卷寰球的守业浪潮。这股浪潮起源于硅谷,并迅速通过"Copy to China"模式烧到了中国。另外一个是中国大环境的变动,导致了外资企业生存艰难,很多优良的企业都从中国撤退。这期间的测试行业产生了如下的变动:服务于国内企业的测试工程师开始增多。外包测试工程师,外企工作白领测试工程师都被外企撤退影响到了,开始逐步转到国内公司。外企工作的自卑感逐步丢失,国内的工程师开始崛起。麻利理念流行。SCRUM 和 XP 理念被迅速的遍及。Scrum 投合了产品治理的需要,XP 投合了工程化倒退的需要。各自倒退都很迅猛,而后逐步衍生了更深刻的 CI CD 和 devops 等模式。测试研发比。降落到 1:8 甚至更低。其实 BAT 都向往 google 的 1:10。只是国内目前做不到。大质量部模式被打散。为了进步运作效率,QA 或者测试工程师团队被逐步分拆到各个具体业务部门。大质量部模式隐没意味着测试工程师的倒退开始遭逢天花板。很多人还没能领会到这个模式带来的微小影响。测试技术新倒退。测试平台失去了很大的倒退。研发工程师,技术型测试工程师也开始逐步施展价值。比方新型的全链路压测,全链路追,测试监控,各种接口测试和 mock 平台,各种云测和专项测试平台。独立的测试服务公司也开始层出不穷。人类曾经进入 DT 时代。大数据,机器学习,深度学习,图形渲染等技术栈也曾经成熟了。随之而来会造成新的生产力并落地到测试行业,这个阶段大家刚开始感触到。我临时不做评论。之所以列举过来的行业变动,其实是为了通知大家,不要认为目前的模式就是行业的长期现状。目前不同企业依然是处于不同的理念和不同的历史阶段中。没有相对的对错,只有适宜与否。这些变动都是围绕着几条外围的主线倒退的:业务倒退带来了对品质和速度的谋求。这是整个行业倒退的主线。业务倒退的需要影响到了产品研发和测试。它和资本一样是贪心的,无时无刻不在谋求着冲破瓶颈。谋求更快更好的倒退。它决定着很多公司的生死和很多行业工程师的前途。研发,产品,QA 都是要为业务服务的。技术是生产力的重要组成部分,技术的倒退是自带加速度的。每次量变都会带来一些行业重大的变更。技术的成熟度决定了测试行业的成就能做多大。作为测试工程师要长于利用以后的技术栈打造合乎以后需要的解决方案。公司主体在谋求简略高效的治理上是永不止步的。技术和工具的每前进一步,就意味着组织沟通的能力在加强。治理这个方向会逐步的扁平化。高层治理会越来越少。一线治理会越来越多。作为测试行业比拟难堪的一点是大质量部模式模式的隐没,让测试行业的倒退开始遭逢天花板。如果 Hold 不住研发和产品,在测试行业倒退的人是没法往上有很好的降职的。我依据测试人才的根本属性并用理论的例子总结,依照 8 年跨度(08-16),总结了行业的一些典型人才的职业倒退现状(鉴于隐衷要求,含糊了相干数据,与真实情况略有偏差)。我手里也有更多的数据,之前也始终想搞个决策树模型,然而始终没残缺的做进去。这次就先简略列举这几个典型个案,简要剖析下测试人的职业倒退关键因素。 技术能力决定了你的薪资增长加速度。在月薪 1-3w 两头。技术能力助力会较多。治理能力决定了你的薪资阶层。月薪 2-5w 是管理层根本薪资。前面的要靠公司的股票和奖金。业务能力决定了你的位置和长期回报。对业务的把控决定你在团队的影响力和器重度,也关联期权和股票的数量。运气和抉择决定了你的人生轨迹。抉择的好就能取得最大回报。股票或者期权回报是超过工资的。抉择一家靠谱的可长久的公司很重要。作为集体倒退,我的倡议是扎实的晋升你的技能,造就好你的人脉和软实力。至于运气和抉择不必焦虑,如果你有能力,天然会有高人笼络你。比方之前就常常有敌人分割我,说是 XX 公司要发期权了,XX 公司要上市了,跟咱们一起干吧。人品好,技术好,大家都会喜爱与你为伍的。切莫在不该有的年龄谋求权力这会葬送你的整个前程。在一些面试场合,如果面试官问你愿不愿意做治理,如果你答复是,那么面试根本就挂了。肯定要确认面试你的人是不是真的心愿你走治理路线。大多只是测试你是不是真的是个实干家。过早参加管理工作也会导致集体技能倒退的不健全。这会为当前带来隐患。过于谋求势力必然也会引发办公室政治和各种利益奋斗。所以请审慎面对这个毒苹果。在薪资和工作机会之间做正当的衡量每家公司都有本人的薪资体系。你要参考这个数据来正当的确定本人的薪资,不要有空想。不要感觉他人因为某次胜利的忽悠拿到多就烦恼。一个优良而扎实的工作经验会让你受害毕生,会为你的简历增光不少。对于这种机会降薪也值得去。一个正当的节奏是,刚加入工作 1-2 年内次要是积攒能力,薪资能糊口即可。2-5 年,能够适当的跳槽谋求更好的待遇或者更闪光的工作履历。5年以上,就是要物色好的机会一飞冲天了。如果跳槽太多,一些大公司也会十分的在意,会影响你的面试。比方工作教训不到一年或者两年就跳槽的人,很容易被 BAT 认为轻薄。鉴于过来的大局势变动,不懂技术的测试工程师会逐步被淘汰出局。一波测试工程师的就业潮是在劫难逃的。尽管晚期我也呐喊身边的人连忙脱离落后的业务体系,脱离落后的测试技能,然而看到很多人越来越生存艰巨,也是挺心痛的。包含测试工程师的需要越来越少,招聘职位也越来越少,典型的新崛起的巨无霸公司比方 Facebook 晚期都没有 QA。甚至前几年一度有 QA 团队是否值得存在的争执。外表看起来是测试行业衰败了。乏味的是,大家探讨 QA 团队是否值得存在的初衷,是为了更好的保证质量。这还是挺回味无穷的。绝大多数的公司,都是十分反对 QA 部门的存在的,问题在于 QA 团队的存在的价值到底是大还是小。过来古老的测试体系,落后的测试人员能力,简短的测试流程是被整个 IT 行业诟病的一个要害。当研发的生产力在逐步的晋升,运维的部署在逐步的自动化,QA 所带来的价值和消耗的老本就越来越不能漠视了。甚至成为了一个我的项目的最大的老本。这是任何一家公司都无奈漠视的问题。早年阿里巴巴的高管已经个体去硅谷访问新崛起的巨无霸,失去的论断就是他们的流程和执行力比国内强很多。甚至 Facebook 早年都没有 QA 就成长为大公司了。所以阿里就迅速推动了流程的裁剪。这部分包含裁撤 SQA,裁撤需要分析师,裁撤项目经理,削减 QA 名额。进入产品,研发,测试三足鼎立的最简模式。QA 会不会被撤掉也取决于这个部门的价值。所以不要想当然的感觉"存在即正当",当初局部的公司曾经在试验"无 QA"的模式了。互联网行业惟一不变的就是变动。比方一个典型的例子,在搜寻,举荐,机器学习等方向的算法测试是很重要的畛域,是须要业余的测试工程师参加的。这个行业能包容很多的测试团队。然而测试行业这些年就没造成对这个畛域的正确测试方法,后果最初失落了这个市场。当初都是研发本人保障了。因为找不到合格的测试工程师去保障这个业务。同样在性能测试畛域也是如此,随着性能测试平台,全链路压测,性能监控,AB Test,云压测这类技术和服务的呈现,性能测试工程师的需要也会放大。越来越多公司里的性能测试都曾经变成研发主导了。失落了这块的业务,性能测试 QA 的需求量天然会受影响。肯定要记住,业务空间决定 QA 的生存空间,这是所有行业都通行的情理。如果你不能满足业务需要,就会被淘汰出局,要么抉择退守进攻要么抉择敢于承受挑战。那测试行业的将来是什么样的那,很多人会放心。不过我还是整体乐观的。因为我喜爱整个行业,这些年也始终在进行一直的思辨。这里说下我的认识。从业人员规模跟生产力负相关,跟业务规模正相干。当前能有多大取决于技术和业务规模的双重因素。首先,是大环境因素。随着各种行业的互联网化,IT 行业在扩充, 外卖,美甲,甚至是无人机汽车航天产业都将成为科技公司。研发的队伍会扩充,QA 的队伍天然也会整体扩充。前提是 QA 本人要跟得上时代。其次,是随着生产力晋升天然就不会须要这么多人的。哪个行业都这样,测试行业并不非凡。就跟汽车行业一样。早年堆人,而后堆工具,堆技术,上机器人,改良流程。行业技术改良,测试技术改良,测试工具和测试服务的改良,都会肯定水平进步了测试效率,缩小了老本。这种改良会导致 QA 的团队更精炼高效。人数多意味着大家的价值跟富士康工厂里的工人一样便宜。谋求高附加值才是正确的路。这对公司和测试团队都是双赢的。第三个因素是行业位置。Devops 的风行是推动了研发和运维的密切合作。一旦这个阶段实现,产品的生产部署会十分的晦涩。随之而来的就是问题会越来越早的裸露,大家对品质会更加的器重。到时候就会进入一个新的时代,DevQA。运维逐步会管道化,Dev 和 QA 会成为新的配角。只是到时候能撑大局的不肯定是当初的软件测试工程师了 会是新时代的测试工程师。测试行业会越来越业余。人才,技术,工具,开源平台,服务会越来越多。越来越欠缺。术业有专攻,专业化分工依然是大趋势。技术层面上也会有翻新。以前的测试只能留下测试用例和业务知识文档,没有什么连续性积攒。随着接口测试,品质监控,覆盖率剖析,业务建模等技术的冲破, QA 也会造成本人稳固可积攒的业务数据, 并逐步造成本人的平台和业务。业务空间 + 技术门槛的双重因素,是我深信 QA 部门能长期存在的一个外围起因。简直大部分的互联网公司都在分拆业务和 QA 团队,从而进步执行力。所以治理上百人的总监职位会越来越少,而治理百人以下的总监会越来越多。不排除大量的巨无霸依然没有扭转。或者有些烧钱的初创公司倒行逆施。其中这些测试管理者会遇到一些新的挑战,比方更高层是研发出身居多。不懂研发体系简直没有倒退空间了。测试管理体系失去了上层建筑,对将来的影响还是深远的。会有阵痛,然而后果必定会是好的。起因是多方面的。大公司因为分拆的问题。不再有对立的测试技术撑持部门,所以分拆之后的每个团队都须要组建对应的职能团队,对测试技术人员的需要反而会增多。中小型公司也奢求质量保证成果,不止是要好,而且要求更快,也须要大量的技术人才。这几年通过各种招聘网站的招聘 JD 的形容也能看得出来。原来做欧美日韩外包业务的公司会因为国内互联网的倒退逐步式微,他们须要转型做国内。然而国内对外包业务也大多排挤,而且外包业务在效率沟通治理上都有诸多弊病。其本身也无奈承载对测试工程师的造就和长期倒退。所以这几年会有大量的外包测试工程师转型。这方面须要有新的优良的外包服务公司。能做到有本人的测试服务,测试技术和高级的测试钻研工程师才行。比方东软也开始做本人的各种云测平台之类的,就是一种为了投合新时代的变更。第一个是工作上曾经没有太大的降职空间。第二个是也很难跳槽。最好的后果是凭借多年的教训转治理。我跟行业的很多测试经理交换过,大部分工作超过 6 年的人,在测试执行上会倦怠,在测试技术的改良上曾经无奈入门,还不如招实习生。相对来说,有技术根底的人在工作 8 年以上依然会放弃本人的学习激情。所以将来测试团队的架构根本会是少数业务测试工程师 + 多数测试专家 + 测试经理的管理模式。以前不识字的是文盲,起初是不识英文的是文盲,在继各国呐喊增强对 IT 技术的器重后,新时代的文盲就曾经快是不懂开发的人了。以前处于发展期,行业对人才的奢求是第一位的。当初随着大公司倒退稳固,招人曾经稳固了。他们根本只在 211 院校校招。社招也看学历。初创公司多是融资烧钱为主,在学历上和经历上也是看的很高。可能不拘一格降人才的公司会越来越少。我之前举荐了不少同学去其余优良的公司,其中有一部分同学就是技术不错,然而学历未过关。所以心愿大家技能和学历上可能好好的器重这个问题。除了学历门槛,如上一条所说技术门槛也存在。所以加油吧,少年!测试行业通过本身的污染洗涤会有新生。典型的变动就是薪资从以前的 3k-15k 的范畴,整体晋升到 1w-3w 之间。技术含量的晋升,责任的晋升必然会带来整体的回报。当初测试工程师只有技术好,学历没问题。工作 3 年拿个两三万的月薪是很平时的。这些年整个 IT 行业对测试行业的倒退十分不称心,艰深点讲,大家都感觉测试很 Low,然而又不能没有。研发提交我的项目给测试的情绪就跟以前过年要去火车站排队买票一样。要申请测试资源,给测试解说业务和实现,遇到比拟 low 的或者新入职的,连搭建环境都不会,还得手把手教。研发只是批改一行代码,QA 或者测试那边就炸锅了。各种流程足以让研发头发都能掉好几根。作为参考比照,再思考下运维。当年部署个环境跟提交测试很像。要申请运维的染指,要申请机器资源,而后提交部署文档,还要明确根底环境,依赖库等各种细节的版本号。遇到本地公布环境不行之类的问题还得跟运维撕逼。当年运维行业还风行着一句," 人 " 才是最要害的公布保障者。而当初随着继续交付和 DevOps 的风行。公布都曾经做到"丝般柔滑"了,一键公布,自由选择灰度,平时的公布甚至都不须要运维参加。尝试了新模式的苦头后,对测试行业的弊病曾经很难忍耐了。所以在优良的测试工程师和测试架构师难找的状况下,曾经有越来越多的公司抉择间接用研发工程师来顶了。他们的谋求很简略。单测->接口测试->根底的冒烟测试,可能做到自动化就能够了。如果能像运维那样做成测试即服务就更完满了。我始终深信,QA 的价值是十分的大,测试行业在通过这次调整后也会倒退的很好。至于说将来能有多辉煌,就要看大家的致力了。测试行业和其余行业的倒退没有实质的区别。这些年都曾经规范化了。个别的公司都会有两条路线倒退。一个是 P 或者 T 简称的技术路线,一个是 M 的治理路线。每个方向都有很大的倒退空间,级别也是很多,年薪也是从 20w 到 100w 以上都有。稍大的公司大都是并行倒退的。小公司可能就只有治理路线可走了。所以做技术的同学,最好是在大公司倒退,去小公司就要适当调整本人工作重心。首先技能和技术只是过程,业务的品质才是指标。一个合格的优良的测试工程师,应该是能做到如下几点:懂业务。能扎实的保障业务品质。不排挤用脑力和膂力去保证质量。懂技术。可能做深刻的自动化或者剖析工作。可能利用工具和技术解决问题。懂架构。可能跟研发和产品进行失常的交换,保障产品需要和实现都没问题。能带团队走上更好的倒退。而随着麻利开发、DevOps、继续交付的风行,软件测试人员必须成长进阶为测试开发工程师,同时具备肯定的开发和运维能力。测试开发工程师会通过测试左移,更深刻染指开发工作,提前与开发人员一起制订测试计划,推动代码评审、代码审计、单元测试、自动化冒烟测试、测试精准化剖析以及研发自测等来保障研发阶段的品质。测试开发工程师会也通过测试右移,参加配置部署,将自动化测试用例配置到继续交付链中,并全流程监控公布后的利用品质。总之,作为 DevOps 要害角色,测试人员将推动开发和运维独特实现高效交付高质量产品的指标。但这里想强调一点,并不看好只开发测试工具的测试开发工程师。开发一款测试工具,设计一个更好的测试框架,创造一种更先进的测试伎俩。这是个人成长带来的天然成绩,但不是指标。很多人会感觉开发测试工具的测试开发是有前途的,其实也不是。只是他碰巧赶上了测试行业的技术转型期的须要。我记得在百度的时候,好多负责单测工具,单测框架的保护团队,常常凌晨两三点还在修复 Bug。然而几年过来,这些人的致力大多没有很好的回报。这是因为他们做的事件脱离业务指标太远。一旦实现指标,他们也容易被“管道化”,成为边缘角色。这个行业除了极少数技术的狂热爱好者,可能找到本人在行业的技术位置外,大多数人都应该去追寻业务的倒退。业务才是测试的根基。测试行业和以前的战国时代一样,成为一个统帅团队叱咤风云的将军,还是成为一个打造兵器满怀工匠精力的铁匠,都是值得尊敬的。在冷兵器时代排兵布阵治理就是王道,在热兵器时代下技术和科技是重要力量。这个须要看每个人的喜好和谋求。明确本人的倒退方向和喜好就能够。对于测试技术路线,我的倡议是: ...

February 22, 2023 · 1 min · jiezi

关于软件测试:快速上手-Pytest-Requests-Allure2-测试框架实战技能

随着分层测试策略和自动化测试的遍及,测试框架和接口测试成为测试工程师需重点把握的底层外围技能。在 Python 自动化测试畛域,Pytest 因为入门简略,扩大丰盛,功能强大,易于保护等个性,成为目前大厂最风行最好用的 Python 自动化测试框架,没有之一!Pytest 次要劣势如下:为了帮忙测试同学疾速把握 Python 测试框架实战技能,霍格沃兹测试学院特地策动了《Pytest 测试框架实战训练营》,课程内容交融 Pytest 测试框架实用技能与基于企业微信的接口测试项目实战, 带你疾速进阶,一举搞定自动化测试+接口测试! 1.把握时下最火的 Pytest 测试框架实战技能2.把握 Request 接口自动化测试技术3.把握时下最火的 Allure2 测试报告框架4.把握基于企业微信的接口测试实战5.把握 Python 测试框架必备技能考核

February 22, 2023 · 1 min · jiezi

关于软件测试:干货移动端App自动化之触屏操作自动化

工作中咱们常常须要对利用的页面进行手势操作,比方滑动、长按、拖动等,AppiumDriver 为咱们提供一个模仿手势操作的辅助类 TouchAction,能够通过它对手机屏幕进行手势操作。具体用法参见链接:https://ceshiren.com/t/topic/... 导入TouchActionfrom appium.webdriver.common.touch_action import TouchAction罕用的手势操作TouchAction 提供的罕用的手势操作有如下操作: Press 按下release 开释move_to 挪动tap 点击longPress 长按wait 期待cancel 勾销perform 执行press TouchAction 提供的 press( ) 办法能够实现对元素或者坐标的按下操作。通常会联合 release( ) 办法实现对某个元素的点击(包含按下和抬起两个动作)。在某个控件上执行 press 操作,用法如下: press(WebElement el)在坐标为(x,y)的点执行 press 操作,用法如下: press(int x, int y)release 开释操作,能够联合其它的事件应用。代表该系列动作的一个完结标记。在某个控件上执行开释操作,用法如下: release(WebElement el)也能够在上一个操作完结之后执行 release,不增加任何参数,用法如下: release()move_to 以控件为指标,从一个点挪动到该指标上,用法如下: move_to(WebElement el)以(x,y)点为指标,从一个点挪动到该指标,用法如下: move_to(WebElement el, int x, int y)tap 在某个控件的中心点上点击一下,用法如下: tap(WebElement el)以(x,y)坐标点为指标点击,用法如下: tap(int x, int y)以控件 el 的左上角为基准,沿着 x 轴向右挪动 x 单位,沿着 y 轴向下挪动 y 单位。在该点上点击,用法如下: tap(WebElement el, int x, int y)longpress ...

February 22, 2023 · 1 min · jiezi

关于软件测试:干货接口测试必备技能常见接口协议解析

服务与服务之间传递数据包,往往会因为不同的利用场景,应用不同的通信协定进行传递。比方网站的拜访,经常会应用 HTTP 协定进行传递,文件传输应用 FTP,邮件传递应用 SMTP。上述的三种类型的协定都处于网络模型中的应用层。除了应用层的罕用协定之外,对于传输层的 TCP、UDP 协定,以及 Restful 架构格调、RPC 协定等等根底网络常识要有肯定的理解和认知。 网络协议介绍在理解具体的协定之前,须要先理解 OSI 七层模型、TCP/IP 四层模型、五层体系结构这三种不同的网络模型。网络协议模型比照图: OSI 参考模型是一个在制订协调过程间通信规范时所应用的概念性框架,它并不是一个规范。TCP/IP 四层模型是网际网络的根底通信架构。常视为是简化的七层 OSI 模型。五层协定是 OSI 和 TCP/IP 的综合,理论利用还是 TCP/IP 的四层构造。TCP/IP 协定栈是对应 TCP/IP 四层模型所应用的具体的网络协议 TCP协定TCP 协定是在传输层中,一种面向连贯的、牢靠的、基于字节流的传输层通信协议。TCP 协定的工作形式为在建设连贯的时候须要进行“三次握手”,终止连贯时须要进行“四次挥手”。“三次握手”和“四次挥手”是 TCP 协定的重要知识点,在前面的章节会通过实战和实践联合,具体介绍这一重要的知识点。 TCP 协定的面向连贯、谬误重传、拥塞管制等个性,实用于可靠性高的场景,比方波及用户信息的数据传输。 UDP协定UDP 协定一旦把应用程序发给网络层的数据发送进来,就不保留数据备份。它仅在 IP 数据包的头部退出复用和数据校验字段。所以 UDP 经常被认为是不牢靠的数据包协定。UDP 协定的不须要提前建设连贯、实现简略的个性,十分实用于实时性高的场景,比方流媒体、在线游戏等。 HTTP协定HTTP 协定是接口测试中最常见的协定,用于分布式、合作式和超媒体信息系统的应用层协定。HTTP 是万维网的数据通信的根底。客户端向服务端发送 HTTP 申请,服务端则会在响应中返回所申请的数据。在测试过程中,经常须要校验申请和响应后果,所以理解 HTTP 协定,对于接口测试来说,是重中之重。 在前面章节将会具体介绍 HTTP、HTTPS 协定的区别,以及 HTTP 协定的基础知识信息。 RESTful架构起源Roy Thomas Fielding 博士于 2000 年在他的博士论文中提出来的一种万维网软件架构格调。其目标是为了便于不同的软件在网络中传递信息。RESTful 是基于 HTTP 协定之上制订的一种资源申请、操作的格调,用一句话来概括就是应用 URL 去定位资源,应用 HTTP 动词形容操作。HTTP 申请办法在 RESTful api 中的典型利用:留神: 不同公司在应用 RESTful 架构格调的时候存在局部差异。 ...

February 22, 2023 · 1 min · jiezi

关于软件测试:干货app自动化测试之设备交互API详解

Appium 提供了很多零碎操作,在测试 APP 过程中会有一些非凡场景,比方来电话、短信,横竖屏切换,装置/卸载 APP,手机上的键盘操作,录屏等性能。上面介绍几个罕用的设施交互 API。更多用法参见官网:http://appium.io/docs/en/abou... 模仿电话/短信用上面的命令模仿 GSM 电话和短信,留神:只能在模拟器上应用! self.driver.make_gsm_call("5551234567", GsmCallActions.CALL);self.driver.send_sms('555-123-4567', 'Hey lol')App操作# 实现 APP 的装置self.driver.install_app('/Users/johndoe/path/to/app.apk') # 检测 APP 是否被装置self.driver.is_app_installed('com.example.AppName');# 启动 APPself.driver.launch_app()weditor装置形式键盘事件能够参考 Android 官网:https://developer.android.com...上面别离展现了按键、长按、暗藏键盘、软键盘是否显示,代码如下: self.driver.press_keycode(10)self.driver.long_press_keycode(10)self.driver.hide_keyboard()self.driver.is_keyboard_shown()设置零碎剪贴板的内容: self.driver.set_clipboard('happy testing')self.driver.set_clipboard_text('happy testing')获取到剪贴板的内容: self.driver.get_clipboard()self.driver.get_clipboard_text()设施交互API就先讲这些,如果还想学习其余的设施交互 API或其余知识点,都能够在下方留言哦!

February 22, 2023 · 1 min · jiezi

关于软件测试:干货app自动化测试之模拟器控制

测试时须要用到测试设施,通常测试人员会抉择应用模拟器进行自动化调试。模拟器分为原生模拟器与第三方模拟器。咱们明天介绍的就是原生模拟器是 Android SDK 中自带的模拟器,能够通过 Android Studio 工具创立模拟器。 创立/治理 原生模拟器Android 虚构设施(AVD)是一种配置,它能够定义 Android 模拟器例如:Android 手机、平板电脑、Wear OS、Android 电视或车载设施的特色。AVD 管理器是一个能够从 Android Studio 启动的界面,它能够创立和治理 AVD。要关上 AVD 管理器,要执行如下操作: 关上 Android Studio抉择 Tools > AVD Manager在工具栏点击 AVD Manager一个残缺的 AVD 蕴含硬件配置文件、零碎映像、存储区域、外观和其余属性。在创立模拟器的时候要先下载对应的镜像文件,才能够创立胜利。 模拟器管制在应用 appium 进行自动化测试时,能够应用 DesireCapability 中的参数 avd,运行时会主动启动 emulator 模拟器。 class TestSearch: def setup(self): desired_caps = {} desired_caps['platformName'] = 'Android' desired_caps['platformVersion'] = '6.0' desired_caps['deviceName'] = 'emulator-5554' desired_caps['appPackage'] = 'com.xueqiu.android' desired_caps['appActivity'] = 'com.xueqiu.android.common.MainActivity' desired_caps['unicodeKeyBoard'] = 'true' desired_caps['resetKeyBoard'] = 'true' # desired_caps['app'] = '/xxx/xueqiu.apk' desired_caps['avd'] = 'Pixel_23_6' self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) self.driver.implicitly_wait(5) def teardown(self): self.driver.quit() def test_mobile(self): pass除了通过 Android Studio 工具创立模拟器,也能够应用第三方模拟器,比方网易 mumu 模拟器,夜神模拟器等。 ...

February 22, 2023 · 1 min · jiezi

关于软件测试:干货app自动化测试之Capability-使用进阶

Capability 是一组键值对的汇合(比方:"platformName": "Android")。Capability 次要用于告诉 Appium 服务端建设 Session 须要的信息。客户端应用特定语言生成 Capabilities,最终会以 JSON 对象的模式发送给 Appium 服务端。 Appium底层架构 比方上面的例子展现了几个重要的 capabilities: { "platformName": "Android", "platformVersion": "6.0", "deviceName": "hogwarts",}通用的Capability参数Capabilities 参数反对多种平台: Android Only上面这些 Capabilities 仅反对 Android 驱动,比方 UiAutomator2。上面这些 Capabilities 仅反对 iOS 驱动,比方 XCUITest Driver 和 deprecated UIAutomation Driver。

February 22, 2023 · 1 min · jiezi

关于软件测试:干货app自动化测试之Appium问题分析及定位

应用 Appium 进行测试时,会产生大量日志,一旦运行过程中遇到报错,能够通过 Appium 服务端的日志以及客户端的日志剖析排查问题。 Appium Server日志-开启服务通过命令行的形式启动 Appium Server,上面来剖析一下启动日志,日志第一行显示了 Appium 版本信息和服务在本地的运行地址。 $ appium -g appium.log[Appium] Welcome to Appium v1.8.0-beta3 (REV \ 40e40975ebd3593d08c3f83de2546258f7ddf11d)[Appium] Appium REST http interface listener started \ on 0.0.0.0:4723如果启动 Appium 服务时增加了参数,会在启动日志中展现,比方增加了 defaultCapabilities,启动日志也会显示进去。 Hogwarts $ appium --log-timestamp --log-no-colors --no-reset 2021-04-29 10:11:58:545 - [Appium] Welcome to Appium v1.17.02021-04-29 10:11:58:547 - [Appium] Non-default server args:2021-04-29 10:11:58:547 - [Appium] logTimestamp: true2021-04-29 10:11:58:547 - [Appium] logNoColors: true2021-04-29 10:11:58:547 - [Appium] noReset: true2021-04-29 10:11:58:548 - [Appium] Deprecated server args:2021-04-29 10:11:58:548 - [Appium] --no-reset => --default-capabilities '{"noReset":true}'2021-04-29 10:11:58:548 - [Appium] Default capabilities, which will be added to each request unless overridden by desired capabilities:2021-04-29 10:11:58:548 - [Appium] noReset: true2021-04-29 10:11:58:567 - [Appium] Appium REST http interface listener started on 0.0.0.0:4723Appium 参数:http://appium.io/docs/en/writ...defaultCapabilities 详见:http://appium.io/docs/en/writ... ...

February 22, 2023 · 2 min · jiezi

关于软件测试:干货app自动化测试之Appium-源码分析

Appium 是由 Node.js 来实现的 HTTP 服务,它并不是一套全新的框架,而是将现有的优良的框架进行了集成,在 Selenium WebDriver 协定(JsonWireProtocol/Restful web service)的根底上减少了挪动端的反对,使 Appium 满足多方面的需要。官网提供更具体的 Appium 构造阐明:https://appium.io/docs/en/con... Appium 原理不同平台(如 Android,iOS)采纳不同的运行和交互方式。Appium 能够创立并治理多个 WebDriver Session 来和不同的平台交互。以下几步能够编译构建 Appium 源码: // clone appium 源码git clone https://github.com/appium/appium.gitcd appium// 装置我的项目的依赖npm install// 编译npm run build// 运行node .Appium lib 目录蕴含了外围代码。比方 main.js 中蕴含 Appium 的启动语句: async function logStartupInfo (parser, args) { let welcome = `Welcome to Appium v${APPIUM_VER}`; let appiumRev = await getGitRev(); if (appiumRev) { welcome += ` (REV ${appiumRev})`; } logger.info(welcome); let showArgs = getNonD批改为 ...

February 22, 2023 · 1 min · jiezi

关于软件测试:干货app自动化测试之Appium-源码修改定制分析

Appium 是由 Node.js 来实现的 HTTP 服务,它并不是一套全新的框架,而是将现有的优良的框架进行了集成,在 Selenium WebDriver 协定(JsonWireProtocol/Restful web service)的根底上减少了挪动端的反对,使 Appium 满足多方面的需要。官网提供更具体的 Appium 构造阐明:https://appium.io/docs/en/con... Appium 框架结构Appium 是由多个子项目形成的,github 拜访如下图:Appium 由 Appium 以及其它的工作引擎包含:appium-xcuitest-driver、appium-android-driver、appium-ios-driver、appium-uiautomator2-server、appium-base-driver 等组成。下载 Appium 这个我的项目进行剖析,发现 Appium 有着非常复杂的目录构造,如下图:其中重要的目录如下: 我的项目中有个文件 package.json ,这个文件是我的项目的形容文件。对我的项目或者模块包的形容,比方项目名称,我的项目版本,我的项目执行入口文件,我的项目贡献者等等。npm install命令会依据这个文件下载所有依赖模块,查看这个文件能够看到如下的信息: "dependencies": { "@babel/runtime": "^7.6.0", "appium-android-driver": "^4.20.0", "appium-base-driver": "^5.0.0", "appium-espresso-driver": "^1.0.0", "appium-fake-driver": "^0.x", "appium-flutter-driver": "^0", "appium-ios-driver": "4.x", "appium-mac-driver": "1.x", "appium-support": "2.x", "appium-tizen-driver": "^1.1.1-beta.4", "appium-uiautomator2-driver": "^1.37.1", "appium-windows-driver": "1.x", "appium-xcuitest-driver": "^3.0.0", ... },dependencies 示意此模块依赖的模块和版本信息。从这外面能够看到它依赖很多 driver ,比方 appium-android-driver、appium-base-driver、appium-espresso-driver、appium-ios-driver、appium-uiautomator2-driver 等等。上面咱们会依据 appium-uiautomator2-driver 重点对 Android 测试驱动的源码进行剖析。 ...

February 22, 2023 · 2 min · jiezi

关于软件测试:干货app自动化测试之Appium-原理-与-JsonWP-协议分析

想要应用 Appium 进行测试,那么就肯定要先理解Appium的原理。Appium 不仅可能实现挪动端的 JSONWP,并且延长到了 Selenium 的 JSONWP,它可能管制不同挪动设施的行为,例如通过会话装置和卸载 APP。 Appium 原理 图中依赖关系解释: 能够应用 Java、Python 语言编写测试脚本通过 Appium 服务去驱动不同设施执行自动化测试Android APP 应用 UiAutomator 驱动,iOS APP 应用 WebDriverAgent 驱动ADB 用来驱动 AdbServerChromeDriver 能够用来间接与 AdbServer 进行通信,也能够近程调试 Chrome、WebView 及微信小程序AppCrawler 开源框架也是利用 Appium Server 的服务来实现自动化遍历测试 JsonWP协定剖析JSON wire protocol(JSONWP)是 WebDriver 开发者编写的一种通信协议。这个通信协议是一个预约义的非凡设置,通过 RESTful API 裸露规范端口。上面看一段 Appium 日志: 图中发送一个 POST 申请,申请格局为/session/{session id}/element,Webdriver 解析到须要定位的元素,就会转成手机端可能辨认的定位元素的指令,去手机端定位到这个元素。 上面是一些用来连贯挪动利用 URI 模板: 更具体的模板信息能够参考上面的链接:https://w3c.github.io/webdriver/上表中的命令均可在挪动端调用,比方应用 curl 命令手工模仿发送申请给 Appium,Session id 能够在浏览器拜访http://127.0.0.1:4723/wd/hub/...,查看有哪些 session。上面应用 curl 命令,在 Appium 上创立一个 session,而后利用这个 session 发送 find element 申请: ...

February 22, 2023 · 1 min · jiezi

关于软件测试:干货app自动化测试之Appium-WebView-技术原理

混合利用测试或微信小程序测试,都会波及到 WebView 组件,这节内容将剖析一下 WebView 的技术原理。首先通过日志剖析查看 Appium 的运行过程。 WebView日志剖析要想查看 ChromeDriver 的日志,须要在 Capability 里开启 一个开关项 showChromedriverLog。让 Appium 运行测试用例时可能生成 ChromeDriver 相干的日志(默认是不打印 ChromeDriver 这部分日志的)。代码如下: capabilities['showChromedriverLog'] = True启动 AppiumServer 并将生成的所有日志存储到文件 /tmp/appium.log 中: appium -g /tmp/appium.log要害日志剖析上面咱们对 /tmp/appium.log 文件中的要害日志进行具体的剖析。首先找到 Context 切换的日志,发现 Context 切换到 WEBVIEW_io.appium.android.apis 上下文中: [HTTP] <-- GET /wd/hub/session/xx/contexts 200 99 ms - 145[HTTP] --> POST /wd/hub/session/xx/context \{"name":"WEBVIEW_io.appium.android.apis"}Appium 在本地开启了两个 WebView 过程,过程号别离是 1271 和 26060。 [debug] [AndroidDriver] WEBVIEW_1271 mapped to pid 1271[debug] [AndroidDriver] Getting process name for webview[debug] [ADB] Getting connected devices...[debug] [AndroidDriver] WEBVIEW_26060 mapped to pid 26060[debug] [AndroidDriver] Getting process name for webview而后,Appium 通过应用 adb 命令来查看 1271 和 26060 的过程信息。 ...

February 22, 2023 · 3 min · jiezi

关于软件测试:干货app自动化测试之Andriod-WebView如何测试

Hybrid App(混合模式挪动利用)是介于 Web-app、Native-app 之间的 app,实质上是 Native-app 中嵌入 WebView 组件,在 WebView 组件里能够拜访 Web App。Hybrid App 在给用户良好交互体验的同时,还具备了 Web App 的跨平台、热更新机制等劣势。 Android WebView 在 Android 平台上是一个非凡的 View,用它来展现网页内容。WebView 外部实现是采纳渲染引擎来展现 View 的内容,提供网页后退后退、网页放大、放大、搜寻等性能。应用 WebView 进行测试须要开发人员配合关上一个 WebView 的开关。 WebView开关WebView 是手机利用内嵌的浏览器,在 Android 4.4 之前 WebView 内核采纳的是 WebKit,Android 4.4 之后才用的是 Chrome 作为内置浏览器。它是用来加载 HTML 页面的控件。在模拟器(android6.0 版本)中是默认关上 WebView 开关的,能够间接调试和测试 WebView。真机测试时,必须在利用中关上 WebView 调试开关。要启用 WebView 调试,请在 WebView 类上调用静态方法 setWebContentsDebuggingEnabled。 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { if (0 != (getApplicationInfo().flags &\ ApplicationInfo.FLAG_DEBUGGABLE)) { WebView.setWebContentsDebuggingEnabled(true); }}开启这个开关之后,手机端关上被测的 WebView 页面,而后在电脑端 Chrome 浏览器地址栏录入 “chrome://inspect” 将显示设施上的 WebView 列表。 ...

February 22, 2023 · 1 min · jiezi

关于软件测试:干货app自动化之如何参数化用例

参数化是自动化测试的一种罕用技巧,能够将测试代码中的某些输出应用参数来代替。以百度搜寻性能为例,每次测试搜寻场景,都须要测试不同的搜寻内容,在这个过程外面,除了数据在变动,测试步骤都是反复的,这时就能够应用参数化的形式来解决测试数据变动,测试步骤不变的问题。 参数化就是把测试须要用到的参数写到数据汇合里,让程序主动去这个汇合外面取值,每条数据都生成一条对应的测试用例,直到汇合里的值全副取完。 应用办法应用 Appium 测试框架编写测试用例时,通常会联合 pytest 测试框架一起应用。应用 pytest 的参数化机制,能够缩小代码反复,在测试代码前增加装璜器 @pytest.mark.parametrize,来实现数据的传输。示例代码如下: @pytest.mark.parametrize("argvnames",argvalues)@pytest.mark.parametrize() 须要传入两个参数 “argnamest” 与 “argvalues”,第一个参数须要一个或者多个变量来接管列表中的每组数据,第二个参数传递存储数据的列表。测试用例须要应用同名的字符串接管测试数据(与“argvnames”外面的名字统一),且列表有多少个元素就会生成并执行多个测试用例。上面示例应用应用参数化定义三组数据,每组数据都寄存在一个元组中,别离将元组中的数据传入(test_input,expected)参数中,示例代码如下: # content of test_expectation.pyimport pytest@pytest.mark.parametrize("test_input,expected", [("3+5", 8), ("2+4", 6), ("6*9", 42)])def test_eval(test_input, expected): assert eval(test_input) == expected运行后果如下: ...test_expectation.py ..Ftest_input = '6*9', expected = 42 @pytest.mark.parametrize("test_input,expected", [("3+5", 8), ("2+4", 6), ("6*9", 42)]) def test_eval(test_input, expected):> assert eval(test_input) == expectedE AssertionError: assert 54 == 42E + where 54 = eval('6*9')test_expectation.py:6: AssertionError下面的运行后果能够看出,执行的三条测试用例别离对应三组数据,测试步骤完全相同,只是传入的测试数据产生了变动。 案例应用“雪球”利用,关上雪球 APP,点击页面上的搜寻输入框输出“alibaba”,而后在搜寻联想进去的列表外面点击“阿里巴巴”,抉择股票分类,获取股票类型为“BABA”的股票价格,最初验证价格在预期价格的 10%范畴浮动,另一个搜寻“小米”的后果数据测试步骤相似。这个案例应用了参数化机制和 Hamcrest 断言机制,示例代码片断如下: ...

February 22, 2023 · 1 min · jiezi

关于软件测试:干货APP自动化Android特殊控件Toast识别

Toast 是 Android 零碎中的一种音讯框类型,它属于一种轻量级的音讯提醒,经常以小弹框的模式呈现,个别呈现 1 到 2 秒会主动隐没,能够呈现在屏幕上中下任意地位。它不同于 Dialog,它没有焦点。Toast 的设计思维是尽可能的不引人注意,同时还向用户显示信息心愿他们看到。测试 APP 下载地址:首先将下面地址的 apk 包下载到本地,并装置到模拟器中;在模拟器中关上 API Demos,顺次点击“Views”-“Popup Menu”-"Make a Popup"-"Search",就会弹出音讯提示框,如图: 上图中 “Clicked Popup menu item Search” 就是 Toast,但它通常在页面上停留的工夫只有 2 秒左右,通过 Appium Inspector 个别不容易获取到这个元素。 获取Toast在模拟器中关上 API Demos 利用,顺次点击 “Views”-“Popup Menu”-"Make a Popup"-"Search",查看页面 Toast 元素。 设置capabilitiescaps = {}caps["platformName"] = "android"caps["deviceName"] = "TestToast"caps["appPackage"] = "io.appium.android.apis"caps["appActivity"] = ".ApiDemos"#必须应用uiautomator2框架caps["automationName"] = "uiautomator2"caps["udid"] = "192.168.56.101:5555"driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)# 点击 Viewsdriver.find_element_by_accessibility_id("Views").click()time.sleep(2)# 滑动页面TouchAction(driver).long_press(380, 1150).move_to(380, 150).release().perform()# 点击 `Popup Menu` 我的项目driver.find_element_by_xpath( "//*[@content-desc='Popup Menu']").click()sleep(2)# 点击 `Make a Popup`driver.find_element_by_xpath( "//*[@content-desc='Make a Popup!']").click()sleep(2)# 点击 'Search'driver.find_element_by_xpath("//*[contains(@text,'Search')]").click()toastXPath = "//*[@class='android.widget.Toast']"#打印 toastXPathprint(driver.find_element_by_xpath(toastXPath))#打印 toastXPath 获取的 textprint(driver.find_element_by_xpath(toastXPath).text)这里定位 Toast 应用了 Xpath 表达式进行定位,因为 Toast 的 class 属性比拟非凡,在当前页面上个别会呈现一次class="android.widget.Toast" 的元素,所以应用 Xpath 定位形式,很轻松的能够定位到。 ...

February 22, 2023 · 1 min · jiezi

关于软件测试:干货-app自动化测试之Andriod微信小程序的自动化测试

随着微信小程序的性能和生态日益完善,很多公司的小程序我的项目页面构造越来越多,业务逻辑也越来越简单。如何做好小程序的自动化测试就成为测试同学广泛面临的一大痛点难题。 微信小程序小程序内嵌于微信外部,页面蕴含 Native 原生元素和 Web 元素,相当于混合利用。并且,小程序 Web 局部是基于腾讯的 X5 内核开发的,也是非凡的 WebView。那么,对微信小程序进行自动化测试,包含操作原生利用、WebView、基于微信官网自动化 SDK。 WebView页面元素获取应用元素定位工具: weditorweditor装置形式pip install weditor参考文档:https://github.com/alibaba/we...应用 chrome inspect 定位时,解析元素是把页面解析为了 html 页面,应用 weditor,则会把页面解析为原生页面,而 Appium 在操作元素时,也是把页面解析成了原生去操作的(切换 webview 除外) Mac: adb shell dumpsys activity top| grep ACTIVITYWindows: adb shell dumpsys activity top| findstr ACTIVITY from time import sleepfrom appium import webdriverclass TestDemo: def setup(self): self.desire_cap= { 'automationName': "uiautomator2", "platformName": "Android", "deviceName": "wechat", "appPackage": "com.tencent.mm", "appActivity": ".ui.LauncherUI", "noReset": "true", 'chromeOptions': {'androidProcess': 'com.tencent.mm:appbrand0'} } # androidProcess:webview是独立过程的,导致无奈获取,须要在 chromeOptions 增加 androidProcess 即可 self.driver=webdriver.Remote("http://127.0.0.1:4723/wd/hub",self.desire_cap) self.driver.implicitly_wait(20) def teardown(self): self.driver.quit() def test_demo(self): # 刚关上微信时,页面加载工夫未知, # 须要通过find_element触发隐式期待,避免后续操作失败 self.driver.find_element_by_xpath("//*[@text='通讯录']") size = self.driver.get_window_size() # 获取以后屏幕的宽、高 width = size.get("width") height = size.get("height") # 滑动关上小程序页面 self.driver.swipe((width / 2), int((height * 0.2)), (width / 2), (height * 0.8), 2000) self.driver.find_element_by_xpath("//*[@resource-id='com.tencent.mm:id/gam' and @text='雪球']").click() sleep(5) print(self.driver.contexts,'第一次打印') self.driver.find_element_by_xpath("//*[@content-desc='搜寻股票信息/代码']/..").click() self.driver.find_element_by_xpath('//*[@text="请输出股票名称/代码"]').send_keys("阿里巴巴") text = self.driver.find_element_by_xpath('//*[@content-desc="阿里巴巴"]') assert text模拟器:Genymotion零碎版本:8.1微信版本:7.0.15小程序:雪球http://appium.io/docs/en/writ...https://sites.google.com/a/ch...https://sites.google.com/a/ch...小程序的测试方法有很多种,因为微信版本常常降级,webview的设置也会发生变化,所以可用的测试方法可能会因为每个版本而不同。更多可用测试方法可参考测试人论坛:https://ceshiren.com/t/topic/... ...

February 22, 2023 · 1 min · jiezi

关于软件测试:软件测试培训哪里好-这些机构名字你应该听说过

在以后的信息技术畛域中,软件测试曾经成为了十分重要的一项工作。它是保障软件品质的一个重要环节,能够确保软件产品的正确性、完整性、可用性等方面的品质。而在这样的背景下,软件测试培训机构也成为大家通往软件测试岗的一个重要渠道。那么在国内,软件测试培训哪里好呢? 目前,国内提供软件测试培训服务的机构有不少,比方“千锋”、“柠檬班”、“博为峰”等。这些机构的课程体系比拟齐备,讲师也都有丰盛的实践经验,可能让学员系统地学习到软件测试的各个方面。尤其是柠檬班,它因为是主打的线上培训,学员能够更好地调配学习工夫,能工作培训两手抓,并且最最要害的就是,线上培训因为没有相干的设施费用、场地费用,学费也能比线下场地培训少了近一半。 当然,如果你舍不得花钱,那么也能够通过一些社群、论坛等渠道来学习软件测试。比如说“测试窝”,外面有许多软件测试从业者,可能分享本人的教训和技巧,对于初学者也有很好的帮忙。 软件测试工资个别多少 软件测试工资的高下取决于多种因素,包含行业、公司规模、工作教训、技能程度和地区等等。一般来说,从事软件测试的高级工程师的薪资在7k-10k左右,中级工程师的薪资在10k-20k之间,高级工程师的薪资能够达到20k-30k甚至更高。这些数字仅供参考,理论状况还须要依据集体状况和待业市场的状况来确定。除了基本工资,软件测试还可能会有一些额定的补贴或福利,比方五险一金、加班费、餐补、交通补贴、带薪假期等等,这些也须要思考在内。 总的来说,软件测试岗位IT行业中还是一项十分稳固和牢靠的职业,且随着行业的倒退和竞争的加剧,软件测试人员的薪资程度也在逐步晋升。

February 21, 2023 · 1 min · jiezi

关于软件测试:柠檬班培训3个多月只用一周就拿下了8k-13薪offer

软件测试是IT行业中的一项重要工作,测试人员负责保障软件产品的品质,防止软件产品存在的谬误和缺点对用户造成损失。 而我目前从事的就是这个行业,其实在20年之前,我的老本行并不是这个,那时候还是个平平无奇的新媒体经营狗,薪资也并不高,勉强能养活本人。至于为何前面转行到了测试行业,是因为身边很多敌人都是做开发的,薪资很高,专业性也比拟强,不容易被替换。敌人晓得我有想换工作的想法,就举荐我转技术岗,毕竟绝对于新媒体来说,能专一做既定的工作,不再操心各种五湖四海的繁杂需要,省心太多。 于是,确定转行方向后,我就开始理解须要抉择的业余开发?前端?软件测试?最终通过层层纠结,我还是抉择了软件测试,因为,开发和前端的入行门槛绝对更高,对于技术和能力的要求更为严格,薪资可观的同时须要接受的压力也更大。 之后,我便开始寻找软件测试的培训机构,在网上比照了几家培训机构后,我感觉柠檬班比拟业余靠谱,总部在长沙(作为长沙人有莫名的亲切感),课程价格和内容方面相比其余家性价比也更高,和售前老师沟通后我就立刻报名了全程班开始学习。 班里的同学老师都很好,大家课下常常在群里交流学习教训,氛围融洽又沉闷。tricy老师讲课很难受,整堂课思路清晰、环节紧凑、重难点突出、设计正当,同学们都能参加到课堂中,课堂成果也很好。 学齐全程班所有课程顺利结业后,我没有立马去找工作,而是在家温习了半个月左右,全面复盘坚固了一下所学的测试常识和实战技能。令我没想到的是,我只找了一周多的工夫,就顺利拿到了一份8k、13薪的offer!说实话,对于在新媒体岗位拿了两年多4、5k的我来说,这个薪资曾经超出我的预期了! 现在3年曾经过来,我曾经从一个小小的性能测试人员,转变到了公司自动化测试岗位的管理层(小小组长,但也知足了),可别看当初的技术市场整体比拟萧条,但对于咱们这些测试人来说,其实是没有十分大的影响的。 

February 20, 2023 · 1 min · jiezi

关于软件测试:干货-谁懂这篇文玩游戏还会卡顿

玩游戏的时候最怕的就是卡顿。排位赛的紧急关头,明明马上就能上一段位,却因为卡顿导致给对方送人头。还把对手送上了王者。引起队友骂声一片。作为测试工程师的你,能够忍? 卡顿测试也是专项测试里的一种,更多精彩测试内容,可下方关注公众号 Android零碎每隔16ms会收回VSYNC信号重绘咱们的界面(Activity)。App须要在16ms内实现下一次要刷新的界面的相干运算,以便界面刷新更新,如果无奈在16ms内实现运算,就会产生卡顿,影响用户体验。上面的这些内容可能会造成卡顿: 内存问题:内存抖动、full gccpu:计算耗时gpu:布局简单、overdraw就是执行GC操作时,须要暂停线程的任何操作,GC操作实现,其余操作能力持续,频繁的GC会导致界面卡顿,频繁GC有两个起因:内存抖动(Memory Churn),创立大量的对象,在短时间内马上开释。产生大量对象会占用Young Generation的内存区域, 如果残余空间有余,就会触发GC。同时,大量对象的叠加也会减少Heap的压力,从而触发更多的GC操作。UI渲染由CPU和GPU分工实现,CPU负责布局元素的运算(比方Measure, Layout)。GPU负责栅格化处理(将UI元素绘制到屏幕上)。UI布局档次太深, 或者自定义控件的onDraw函数中存在简单运算, 就须要CPU负荷工作,从而影响整个绘制过程。适度绘制会导致gpu负荷,每屏的每一帧,像素点应该只被绘制一次,如果反复绘制像素点,就是适度绘制。Android能够查看适度绘制:“设置”→“开发者选项”→“调试GPU适度绘制(toggle GPU overdraw)”,关上后再拜访App会呈现下图: 此时界面可能会有五种色彩标识: 原色:没有overdraw蓝色:1次overdraw绿色:2次overdraw粉色:3次overdraw红色:4次及4次以上的overdraw卡顿的关键因素是无奈在16ms内绘制一帧,sdk自带的systrace工具能够剖析每一帧的绘制状况,并且给出补救措施和倡议。须要装置sdk,在sdk目录下存在systrace.py: python{sdk目录}/platform-tools/systrace留神:运行此工具须要python2.7。如果运行中呈现如下谬误,装置对应的依赖即可: No module win32conpip2 install pypiwin32No module sixpip2 install six首先连贯一个Android设施:192.168.181.102:5555在命令行输出: python systrace.py -e 192.168.181.102:5555在设施上进行操作在命令行:按下enter,实现录制。此时会生成一份html报告,整个过程如下: 点击生成的html报告: 参数解析: 1.帧点:绿色示意16.6ms内,黄、红色超过16.6ms2.工作状态灰:休眠;蓝色:可运行;绿色:运行;橙色:不响应信号3.函数调用 在报告的页面有快捷键操作: w:放大s:放大m:找到下一帧,显示工夫如果一个帧的绘制工夫超过0.7s,用户会显著感觉到卡顿,称之为冰冻帧,比方下面红色的帧点。如果帧的绘制工夫刚好超过0.6ms,称之为掉帧,比方下面黄色的帧点,但局部掉帧影响不大,次要危险来自于冰冻帧。也能够用adb自带的工具对帧进行剖析,但数据不如systrace精准: adb -s devicesname shell dumpsys gfxinfo |less

February 17, 2023 · 1 min · jiezi

关于软件测试:干货-读懂-Appium-日志让测试效率翻倍

Appium 服务器运行时会产生很多日志,然而很多人并不理解其中的意义,也无奈把握有用的信息。本文将具体解读如何读懂 Appium 日志,并让你的测试效率翻倍。 日志第一行显示了 Appium 版本和运行地址。如果你在 Appium 上增加了参数,他们会在日志中展现,如果增加了 defaultCapabilities,日志也会显示进去。对于自动化测试来说,这个信息很重要,因为不同的 Appium 版本有不同的性能和问题,必须要晓得本人的 Appium 版本。 为了自动化测试跑起来,session 要做很多事,日志提供了一些根本的 session 信息,特地是 desired capabilities 和 default capabilities。应该时刻留神 Appium 服务是否正确接管了申请内容,日志列出了创立 automation session(不懂 automation session 的看上面的链接)。 Appium 是一个 REST 服务,接管 HTTP 申请,展现申请内容,返回某种后果。Appium 服务端日志用线和箭头展现了申请和返回的内容。在两个箭头之间是 Appium 服务端执行申请命令的日志信息: 利用日志能够十分不便的排查谬误,谬误通常产生在 automation session 之后。但有时,如果 session 继续存在,谬误也可能产生。所以第一步是找出谬误在哪。上面的例子能够看出,每个指令用 [HTTP] --> 和 [HTTP] <-- 标记。这些标记之间是指令细节,蕴含了谬误输入: 用户试图用 Android driver 启动一个 session,但产生了谬误。Appium 为筹备 session 而关掉并革除 AUT 时发现了谬误,这个谬误让咱们晓得两件事:1.Appium 正在尝试做什么2.哪里出错了在这个例子中,Appium 尝试运行 adb 命令(adb shell am force-stop),adb 参数在错误信息中也有显示。产生了 Android 零碎权限谬误。此时,咱们能够手动运行这个 adb 命令,看看谬误是不是能够重现。如果谬误重现,上网查错吧!如果 adb 命令胜利运行,可能是 Appium 的 bug,应该去 Github 的 issue 上查看或者提交这个 bug 。(例子中的谬误是设施制造商的平安模型造成的)这个例子只是泛滥谬误中的一个,但它阐明至关重要的一点,当谬误产生时,日志能够提供更多的信息,如果没有残缺的日志信息,对 Appium 排错难上加难。 ...

February 17, 2023 · 1 min · jiezi

关于软件测试:干货-解决-App-自动化测试的常见痛点弹框及首页启动加载完成判断处理

App 自动化测试中有些常见痛点问题,如果框架不能很好的解决,就可能呈现元素定位超时找不到的状况,自动化也就被打断终止了。很容易打消做自动化的激情,导致从入门到放弃。比方上面的两个问题: 一是 App 启动加载工夫较久(可能 App 自身加载慢,可能挪动设施自身加载利用速度慢,也可能首页广告工夫较长)。 另一个是各种弹框的呈现,广告弹框,降级弹框,评估弹框等。在框架中如果不能解决好下面的状况, 以雪球 App 呈现的几种弹框举例: 弹框一: 弹框二: 弹框三: 弹框的影响范畴弹框对咱们自动化的影响次要是用例执行的打断,而至于弹框中广告内容的跳转或评估信息填写等属于另外的测试,因而咱们次要是要将弹框解决隐没,使利用回到用例执行的 PO;弹框的隐没形式察看弹框,咱们会发现个别为了保障用户体验,弹框都会不便用户进行一键打消,例如上述中雪球的各种弹框,可能点击一个叉号,可能任意点击其余中央,或者评估框这种间接点击“下次再说”等。弹框的解决成果自动化执行的任何时候,任意的弹框都可能呈现,在这个时候用例不能失败,须要将对应的弹框正确处理后继续执行原用例,原用例的执行过程不受影响。将须要解决的弹框元素退出到一个黑名单List中,遍历List,通过findElements办法失去的List大小来判断弹框元素是否存在,存在即点击解决public static void handleAlert(){ List<By> alertBox = new ArrayList<>(); alertBox.add(By.id("ib_close")); //广告弹框 alertBox.add(By.id("md_buttonDefaultNegative")); //评估弹框 alertBox.forEach(alert->{ By adsLocator = alert; List<WebElement> ads = driver.findElements(adsLocator); if (ads.size() >= 1) { ads.get(0).click(); } }); }将handleAlert()办法加到driver.findElement办法之前,使定位前先判断弹框的存在与否并进行解决 public static WebElement findElement(By by) { System.out.println(by); handleAlert(); return driver.findElement(by); }上述办法初步解决了弹框问题,然而毛病也很显著。 毛病:每次定位元素前都须要解决弹框,影响执行效率,速度较慢 因而咱们引入try catch来解决此问题 咱们利用try catch的异样捕捉解决的机制,让元素仅在定位失败时才进入弹框解决handleAlert()办法,处理完毕后从新返回driver.findElement(by),对原case元素持续进行定位执行;这样就大大晋升了解决效率,使解决更为精准。 public static WebElement findElement(By by) { try { System.out.println(by); return driver.findElement(by); } catch (Exception e) { System.out.println("进入弹框解决"); handleAlert(); return driver.findElement(by); } }递归解决:个别状况下咱们一次只会呈现一个弹框,然而例外的是可能有一个以上的弹框同时呈现,这样的话尽管解决了其中一个弹框,然而剩下的弹框仍然会阻断用例的失常执行,这个时候就能够应用递归的办法,在解决完弹框后返回findElement办法本身,持续进行try catch,使之进入弹框解决逻辑 ...

February 17, 2023 · 2 min · jiezi

关于软件测试:干货-背熟这些-Docker-命令面试再也不怕啦

咱们下载 Docker 镜像的时候,默认会拜访 Docker 网站,而 Docker 网站是在国外部署的,间隔比拟远下载速度特地慢。咱们能够通过设置加速器的形式来减速 Docker 镜像下载的速度。上面将形容一下应用加速器的步骤:1.咱们这里抉择的是阿里云提供的Docker 镜像加速器服务,首先拜访阿里云的镜像仓库:https://cr.console.aliyun.com/(如果没有阿里云账号则须要注册)2.抉择“镜像加速器”3.依据集体的零碎平台,抉择运行 Docker 的 OS,并依照操作文档的要求批改Docker 配置文件,而后重启 Docker 服务即可实现加速器的配置。 Docker 的常用命令个别分为:镜像治理、容器治理。 查看 Docker 版本 docker version上面应用 busybox 软件作为示例,busybox软件是一个集成了十分多最罕用的 Linux 命令和工具的软件汇合。 查看所有镜像 docker imagesREPOSITORY:镜像来自哪个仓库TAG:镜像的标签信息,版本之类的信息IMAGE ID:镜像创立时的idCREATED:镜像创立的工夫SIZE:镜像文件大小下载软件镜像 docker pull busybox:latest• latest示意应用busybox软件的最新版本,所以软件默认下载都是 latest 版本。 导出镜像 docker save busybox > busybox.tar• 把busybox镜像导出为 busybox.tar 文件,能够把 busybox.tar 文件复制到别的操作系统上应用,罢黜下载时网络慢的问题。 删除镜像 docker rmi busybox:latest• 镜像个别都会依据版本打包,如果有下载一个软件的多个版本就须要指定具体版本信息。如 busybox:1.26 就会删除 busybox 软件的 1.26 版本的镜像,不会删除latest 版本的镜像。导入镜像 docker load < busybox.tar• 应用导出命令导出的镜像,能够通过此命令导入到没有下载此软件的操作系统,不便网络条件差的状况应用。更改镜像名 docker tag busybox:latest busybox:test• busybox:latest原镜像名,busybox:test要改成的镜像名 ...

February 17, 2023 · 1 min · jiezi

关于软件测试:干货-精准化测试原理简介与实践探索

↑点击上方卡片关注我↑ 小时候大家应该都玩过一个游戏,游戏很简略,就是找不同,在规定工夫内两幅图间接的差别点找到就算赢,越快越好,就像上面这样: 下面这个不同点想找很简略,那么上面这样的呢? 这个,的确有的人会说"我能够!" 。比方在综艺节目"最强大脑"中,这群"变态"的非人类的确能够 反正我不行,我也不信你们看到文章这里的人能够~我只有最菜大脑 实践上,咱们全面的测试笼罩,必定就就能够保障,那么咱们先看下上面的代码: 这是一份波及订单状态的各种枚举,每一个状态的背地都有其业务逻辑,甚至还有穿插,假若依照笛卡尔积或者正交的形式来进行用例设计与笼罩,有。。。好多好多用例 那么~你真的有那么多工夫去全笼罩吗?开发:我改了点代码,等会帮忙全面回归一遍吧测试:好的( bi~~ )什么?自动化?Are you sure?测试倒退到现在,如同不会点自动化,都不好意思叫测试,简历上不写点自动化都拿不出手,然而自动化真的是测试的银弹不,做过的应该深有感触,自动化属于一个奢侈品:开发副本保护老本如何应用用例的设计合理性新性能的滞后性再者,你确定你真的笼罩到了被测代码?也就是相当于魔方墙上的每个色块,理论在黑盒测试的过程中很大水平上取决于测试人员的教训,主观性很强,这样就很可能漏测,公布后出了问题就又要开撕了。。。 可能有的小伙伴会这样感觉,有人通知咱们答案,也就是通知咱们魔方墙的差别之处。这样我不就晓得关注的测试点了吗? 没错,咱们能够让开发通知咱们本次改了哪些办法,甚至有代码权限的状况下咱们有能力能够本人去剖析代码,妥了,金女士! 那么问题又来了。针对下面的状况,开发的形容肯定是正确全面的吗?即便开发精确的阐明了改变的代码,那么改变所影响到的其余范畴呢?开发自己也不好确认的(不然还要测试干啥~),开发也有可能偷偷改代码不通知你呢。 这个时候就渴望有这么一个"最强大脑" 眼过来就能够看出差别点(本次改变的逻辑)脑海中就有了差别的影响范畴(放大须要测试的范畴)再一扫就看出哪些测试笼罩到了(确认测试覆盖率)以求达到一种精准测试的水平 依照下面的形容,大略咱们能够分为三个维度: 差异化调用链覆盖率接下来的文章中会一个个具体来说~不同的语言,都会有对应不同的语法分析器,语法分析器会把源代码作为字符串读入、解析,并建设语法树,这是一个程序实现编译所必要的前期工作。 咱们看下 Java 的编译过程,重点关注步骤一和步骤二: 这里咱们应用一个简略的Java对象,解析成AST后看下长什么样子 因为层级太多太简单,这里选取属性user做个简略演示阐明。如下: 每一项外面都蕴含了最全面的信息,包含名称、行号等,具体的能够拜访在线调试网站https://astexplorer.net/进行调试查看 既然所有的代码信息都有了,那么咱们就能够拿着这些信息进行比对,从而找出代码的差别之处;(当然这其中还是要很多降噪解决的,例如正文、空格、业务无关代码get/set等)大略的流程逻辑如下 3.2.1 字节码 因为Java代码的运行,是通过javac先将Java文件编译成.class结尾的字节码,再由JVM去执行;所以在字节码文件中,领有了足够的元数据来解析类中的所有元素:类名称、父类名、办法、属性以及 Java 字节码(指令); 以如下源码为例: 1 public class AccurateTest {23 private int a = 1;45 public String add(int b){6 return String.valueOf(a + b);7 }8 }9命令将其编译为字节码文件,再应用命令将其反编译后失去如下信息: Classfile /Users/qinzhen/Documents/My/TrainingProject/calctest/src/test/java/AccurateTest.class Last modified 2021-7-15; size 386 bytes MD5 checksum e67842e9b540c556d288c28b303298fb Compiled from "AccurateTest.java"public class AccurateTest minor version: 0 major version: 52 flags: ACC_PUBLIC, ACC_SUPERConstant pool: #1 = Methodref #4.#19 // java/lang/Object."<init>":()V #2 = Fieldref #3.#20 // AccurateTest.a:I #3 = Class #21 // AccurateTest #4 = Class #22 // java/lang/Object #5 = Utf8 a #6 = Utf8 I #7 = Utf8 <init> #8 = Utf8 ()V #9 = Utf8 Code #10 = Utf8 LineNumberTable #11 = Utf8 LocalVariableTable #12 = Utf8 this #13 = Utf8 LAccurateTest; #14 = Utf8 add #15 = Utf8 (I)I #16 = Utf8 b #17 = Utf8 SourceFile #18 = Utf8 AccurateTest.java #19 = NameAndType #7:#8 // "<init>":()V #20 = NameAndType #5:#6 // a:I #21 = Utf8 AccurateTest #22 = Utf8 java/lang/Object{ public AccurateTest(); //构造函数 descriptor: ()V flags: ACC_PUBLIC Code: stack=2, locals=1, args_size=1 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: aload_0 5: iconst_1 6: putfield #2 // Field a:I 9: return LineNumberTable: line 1: 0 line 3: 4 LocalVariableTable: Start Length Slot Name Signature 0 10 0 this LAccurateTest; public java.lang.String add(int); //办法名 descriptor: (I)Ljava/lang/String; //办法描述符(入参和返回值类型) flags: ACC_PUBLIC //办法的拜访标致 Code: //code开始 stack=2, locals=2, args_size=2 0: aload_0 1: getfield #2 // 援用常量池的值 Field a:I 4: iload_1 5: iadd 6: invokestatic #3 // Method java/lang/String.valueOf:(I)Ljava/lang/String; 9: ireturn LineNumberTable: //行号表,将上述操作码与.java中的行号做对应 line 6: 0 LocalVariableTable: Start Length Slot Name Signature 0 7 0 this LAccurateTest; 0 7 1 b I //本地变量}SourceFile: "AccurateTest.java"通过上述信息咱们能够直观的看到字节码中蕴含了Java运行所需的所有信息,且JVM对于字节码文件要求严格,必须依照固定的组成和程序,而这种个性也就适宜利用访问者模式对字节码文件进行批改;因而也就要介绍咱们的调用链生成的核心技术栈——ASM ...

February 17, 2023 · 2 min · jiezi

关于软件测试:干货-仅需4步即可用-Docker搭建测试用例平台-TestLink

本文节选自霍格沃兹测试学院外部教材Testlink 是基于 WEB 的测试用例管理系统,次要性能是:测试项目管理、产品需要治理、测试用例治理、测试计划治理、测试用例的创立、治理和执行,并且还提供了统计性能。 Testlink 服务存储数据依赖数据库服务,所以须要先搭建一个数据库。同时数据库和 Testlink 服务之间拜访须要网络相互通顺,也须要建设一个容器网络。 能够拜访 Testlink 镜像的介绍网站:https://hub.docker.com/r/bitn... 查看更多信息。 docker network create testlink-tiernetwork 代表网络方面的参数create 代表新建一个网络名字testlink-tier 是将要建设的网络名字docker run -d --name mariadb \ -e MARIADB_ROOT_PASSWORD=mariadb \ -e MARIADB_USER=bn_testlink \ -e MARIADB_PASSWORD=bn_testlink \ -e MARIADB_DATABASE=bitnami_testlink \ --net testlink-tier \ --volume ${HOME}/docker/mariadb:/bitnami \ bitnami/mariadb:10.3.22run -d:当前台daemon的形式运行--name mariadb:容器启动后的名字-e MARIADB_USER=bn_testlink:参数,指定数据库用户名bn_testlink-e MARIADB_PASSWORD=bn_testlink:参数,数据库明码。-e MARIADB_DATABASE=bitnami_testlink:参数,指定数据库名bitnami_testlink--net testlink-tier:指定要应用的网络名字--volume ${HOME}/docker/mariadb:/bitnami:挂载宿主机${HOME}/docker/mariadb目录到容器内/bitnami目录,其中${HOME}是零碎变量示意以后用户的家目录。bitnami/mariadb:10.3.22:启动容器应用的镜像和版本号docker run -d -p 80:80 -p 443:443 --name testlink \ -e TESTLINK_DATABASE_USER=bn_testlink \ -e TESTLINK_DATABASE_PASSWORD=bn_testlink \ -e TESTLINK_DATABASE_NAME=bitnami_testlink \ --net testlink-tier \ --volume ${HOME}/docker/testlink:/bitnami \ bitnami/testlink:1.9.20-e TESTLINK_DATABASE_USER=bn_testlink:参数,指定数据库用户名bn_testlink-e TESTLINK_DATABASE_PASSWORD=bn_testlink参数,指定数据库明码bn_testlink-e TESTLINK_DATABASE_NAME=bitnami_testlink:参数,指定数据库名bitnami_testlink--net testlink-tier:指定要应用的网络名字--volume ${HOME}/docker/testlink:/bitnami:挂载宿主机${HOME}/docker/testlink目录到容器内/bitnami目录,其中${HOME}是零碎变量示意以后用户的家目录。bitnami/testlink:1.9.20:启动容器应用的镜像和版本号在你的浏览器内拜访:http://你的IP地址 ...

February 17, 2023 · 1 min · jiezi

关于软件测试:干货-一文搞定-uiautomator2-自动化测试工具使用

Google 官网提供了一个 Android 自动化测试工具(Java 库),基于 Accessibility 服务,性能很强,能够对第三方 App 进行测试,获取屏幕上任意一个 App 的任意一个控件属性,并对其进行任意操作,但有两个毛病:1.测试脚本只能应用 Java 语言;2.测试脚本要打包成 jar 或者 apk 包上传到设施上能力运行;理论工作中,咱们心愿测试逻辑可能用 Python 编写,可能在电脑上运行的时候就管制手机。所以基于这个目标开发了 python-uiautomator2 自动化测试开源工具,其封装了谷歌自带的 uiautomator2 测试框架,能够运行在反对 Python 的任一零碎上,目前版本为 V2.10.2。GitHub 开源地址:如图所示,python-uiautomator2 次要分为两个局部,python 客户端,挪动设施 python 端: 运行脚本,并向挪动设施发送 HTTP 申请;挪动设施:挪动设施上运行了封装了 uiautomator2 的 HTTP 服务,解析收到的申请,并转化成 uiautomator2 的代码;整个过程:3.在挪动设施上装置 atx-agent(守护过程),随后 atx-agent 启动 uiautomator2 服务(默认 7912 端口)进行监听;4.在 PC 上编写测试脚本并执行(相当于发送 HTTP 申请到挪动设施的 server 端);5.挪动设施通过 WIFI 或 USB 接管到 PC 上发来的 HTTP 申请,执行制订的操作;应用 pip 装置装置实现后,应用如下 python 代码查看环境是事配置胜利阐明:后文中所有代码都须要导入 uiautomator2 库,为了简化我应用 u2 代替,d 代表 driver能正确打印出设施的信息则示意装置胜利留神:须要装置 adb 工具,并配置到零碎环境变量,能力操作手机。装置有问题能够到 issue 列表查问:weditor 是一款基于浏览器的 UI 查看器,用来帮忙咱们查看 UI 元素定位。因为 uiautomator 是独占资源,所以当 atx 运行的时候 uiautomatorviewer 是不能用的,为了缩小 atx 频繁的启停,就须要用到此工具应用 pip 装置查看装置是否胜利呈现如下信息示意装置胜利运行 weditorui2 反对 android 中 UiSelector 类中的所有定位形式,具体能够在这个网址查看 https://developer.android.com...整体内容如下 , 所有的属性能够通过 weditor 查看到子元素定位child()兄弟元素定位sibling()链式调用绝对定位反对在left, right, top, bottom, 即在某个元素的前后左右表格标注有 @property 装璜的类属性办法,均为下方示例形式 ...

February 17, 2023 · 2 min · jiezi

关于软件测试:干货-一文搞定-pytest-自动化测试框架二

在上一篇文章中分享了 pytest 的根本用法,本文进一步介绍 pytest 的其余实用个性和进阶技巧。pytest fixturespytest 中能够应用 @pytest.fixture 装璜器来装璜一个办法,被装璜办法的办法名能够作为一个参数传入到测试方法中。能够应用这种形式来实现测试之前的初始化,也能够返回数据给测试函数。通常应用 setup 和 teardown 来进行资源的初始化。如果有这样一个场景,测试用例 1 须要依赖登录性能,测试用例 2 不须要登录性能,测试用例 3 须要登录性能。这种场景 setup,teardown 无奈实现,能够应用 pytest fixture 性能,在办法后面加个 @pytest.fixture 装璜器,加了这个装璜器的办法能够以参数的模式传入到办法外面执行。例如在登录的办法,加上 @pytest.fixture 这个装璜器后,将这个用例办法名以参数的模式传到办法里,这个办法就会先执行这个登录办法,再去执行本身的用例步骤,如果没有传入这个登录办法,就不执行登录操作,间接执行已有的步骤。创立一个文件名为“test_fixture.py”,代码如下:在下面的代码中,测试用例 test_case1 和 test_case3 别离减少了 login 办法名作为参数,pytest 会发现并调用 @pytest.fixture 标记的 login 性能,运行测试后果如下:从下面的后果能够看出,test_case1 和 test_case3 运行之前执行了 login 办法,test_case2 没有执行这个办法。fixture 外面有一个参数 scope,通过 scope 能够管制 fixture 的作用范畴,依据作用范畴大小划分:session> module> class> function,具体作用范畴如下: function 函数或者办法级别都会被调用class 类级别调用一次module 模块级别调用一次session 是多个文件调用一次(能够跨.py文件调用,每个.py文件就是module)例如整个模块有多条测试用例,须要在全副用例执行之前关上浏览器,全副执行完之后去敞开浏览器,关上和敞开操作只执行一次,如果每次都从新执行关上操作,会十分占用系统资源。这种场景除了setup_module,teardown_module 能够实现,还能够通过设置模块级别的 fixture 装璜器(@pytest.fixture(scope="module"))来实现。scope='module'fixture 参数 scope='module',module 作用是整个模块都会失效。创立文件名为 test_fixture_scope.py,代码如下:代码解析:@pytest.fixture() 如果不写参数,参数默认 scope='function'。当 scope='module' 时,在以后 .py 脚本外面所有的用例开始前只执行一次。scope 奇妙与 yield 组合应用,相当于 setup 和 teardown 办法。还能够应用 @pytest.mark.usefixtures 装璜器,传入前置函数名作为参数。运行后果如下:从下面运行后果能够看出,scope="module" 与 yield 联合,相当于 setup_module 和 teardown_module 办法。整个模块运行之前调用了 open()办法中 yield 后面的打印输出“关上浏览器”,整个运行之后调用了 yield 前面的打印语句“执行 teardown !”与“敞开浏览器”。yield 来唤醒 teardown 的执行,如果用例出现异常,不影响 yield 前面的 teardown 执行。能够应用 @pytest.mark.usefixtures 装璜器来进行办法的传入。fixture scope 为 session 级别是能够跨 .py 模块调用的,也就是当咱们有多个 .py 文件的用例时,如果多个用例只需调用一次 fixture,能够将 scope='session',并且写到 conftest.py 文件里。写到 conftest.py 文件能够全局调用这外面的办法。应用的时候不须要导入 conftest.py 这个文件。应用 conftest.py 的规定:1.conftest.py 这个文件名是固定的,不能够更改。2.conftest.py 与运行用例在同一个包下,并且该包中有 init.py 文件3.应用的时候不须要导入 conftest.py,pytest 会自动识别到这个文件4.放到我的项目的根目录下能够全局调用,放到某个 package 下,就在这个 package 内无效。案例在运行整个我的项目下的所有的用例,只执行一次关上浏览器。执行完所有的用例之后再执行敞开浏览器,能够在这个我的项目下创立一个 conftest.py 文件,将关上浏览器操作的办法放在这个文件下,并增加一个装璜器 @pytest.fixture(scope="session"),就可能实现整个我的项目所有测试用例的浏览器复用,案例目录构造如下:创立目录 test_scope,并在目录下创立三个文件 conftest.py,test_scope1.py 和 test_scope2.py。conftest.py 文件定义了公共办法,pytest 会主动读取 conftest.py 定义的办法,代码如下:创立 test_scope1.py 文件,代码如下:创立文件“test_scope2.py”,代码如下:关上 cmd,进入目录 test_scope/,执行如下命令:或者执行后果如下:执行过程中 pytest 会自动识别当前目录的 conftest.py,不须要导入间接援用外面的办法配置。利用到整个目录下的所有调用这外面的办法中执行。conftest.py 与运行的用例要在同一个 pakage 下,并且这个包下有 __init__.py 文件如果每条测试用例都须要增加 fixture 性能,则须要在每一要用例办法外面传入这个fixture的名字,这里就能够在装璜器外面增加一个参数 autouse='true',它会主动利用到所有的测试方法中,只是这里没有方法返回值给测试用例。应用办法,在办法后面加上装璜器,如下:@pytest.fixture 里设置 autouse 参数值为 true(默认 false),每个测试函数都会主动调用这个前置函数。创立文件名为“test_autouse.py”,代码如下:执行下面这个测试文件,后果如下:从下面的运行后果能够看出,在办法 myfixture() 下面增加了装璜器 @pytest.fixture(autouse="true"),测试用例毋庸传入这个 fixture 的名字,它会主动在每条用例之前执行这个 fixture。测试过程中须要大量的测试数据,如果每条测试数据都编写一条测试用例,用例数量将是十分宠大的。个别咱们在测试过程中会将测试用到的数据以参数的模式传入到测试用例中,并为每条测试数据生成一个测试后果数据。这时候能够应用 fixture 的参数化性能,在 fixture 办法加上装璜器 @pytest.fixture(params=[1,2,3]),就会传入三个数据 1、2、3,别离将这三个数据传入到用例当中。这里能够传入的数据是个列表。传入的数据须要应用一个固定的参数名 request 来接管。创立文件名为“test_params.py”,代码如下:运行后果如下:从运行后果能够看出,对于 params 外面的每个值,fixture 都会去调用执行一次,应用 request.param 来承受用例参数化的数据,并且为每一个测试数据生成一个测试后果。在测试工作中应用这种参数化的形式,会缩小大量的代码量,并且便于浏览与保护。如果我的项目中有测试用例 1000 条,一条测试用例须要执行 1 分钟,一个测试人员须要 1000 分钟能力实现一轮回归测试。通常咱们会用人力老本换取工夫老本,加几个人一起执行,工夫就会缩短。如果 10 人一起执行只须要 100 分钟,这就是一种并行测试,分布式的场景。pytest-xdist 是 pytest 分布式执行插件,能够多个 CPU 或主机执行,这款插件容许用户将测试并发执行(过程级并发),插件是动静决定测试用例执行程序的,为了保障各个测试能在各个独立线程里正确的执行,应该保障测试用例的独立性(这也合乎测试用例设计的最佳实际)。装置多个 CPU 并行执行用例,须要在 pytest 前面增加 -n 参数,如果参数为 auto,会自动检测零碎的 CPU 数目。如果参数为数字,则指定运行测试的处理器过程数。案例某个我的项目有 200 条测试用例,每条测试用例之间没有关联关系,互不影响。这 200 条测试用例须要在 1 小时之内测试实现,能够加个-n参数,应用多 CPU 并行测试。运行办法:进入到我的项目目录下,执行 pytest 能够将我的项目目录下所有测试用例辨认进去并且运行,加上 -n 参数,能够指定 4 个 CPU 并发执行。大量的测试用例并发执行提速非常明显。测试报告通常在我的项目中尤为重要,报告能够体现测试人员的工作量,开发人员能够从测试报告中理解缺点的状况,因而测试报告在测试过程中的位置至关重要,测试报告为纠正软件存在的品质问题提供根据,为软件验收和交付打下基础。测试报告依据内容的侧重点,能够分为 “版本测试报告” 和 “总结测试报告”。执行完 pytest 测试用例,能够应用 pytest-HTML 插件生成 HTML 格局的测试报告。装置执行办法联合 pytest-xdist 应用生成测试报告如下图:生成的测试报告最终是 HTML 格局,报告内容包含题目、运行工夫、环境、汇总后果以及用例的通过个数、跳过个数、失败个数、谬误个数,冀望失败个数、不冀望通过个数、从新运行个数、以及谬误的具体展现信息。报告会生成在运行脚本的同一门路,须要指定门路增加--html=path/to/html/report.html 这个参数配置报告的门路。如果不增加 --self-contained-html 这个参数,生成报告的 CSS 文件是独立的,分享的时候容易千万数据失落。编写代码时,咱们常常会做出一些假如,断言就是用于在代码中捕获这些假如。断言示意为一些布尔表达式,测试人员通常会加一些断言来判定两头过程的正确性。断言反对显示最常见的子表达式的值,包含调用,属性,比拟以及二元和一元运算符。Python应用 assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异样。应用办法:案例如下:如果没有断言,没有方法断定用例中每一个测试步骤后果的正确性。在我的项目中适当的应用断言,来对代码的构造、属性、性能、安全性等场景查看与验证。以上,更多 Python 测试开发实战进阶技能,举荐学习《Python 测试开发实战进阶》课程。

February 17, 2023 · 2 min · jiezi

关于软件测试:干货-一文搞定-Docker-容器技术与常用命令

Docker 是一个开源的利用容器引擎,基于 Go 语言开发,Docker 能够让开发者打包他们的利用以及依赖包到一个轻量级、可移植的容器中,而后公布到任何风行的零碎。Docker 是世界领先的软件容器平台,Docker 官网的口号是”调试你的利用,而不是调试环境“。在进行多人合作开发时,开发者能够应用 Docker 来打消所谓“我这里运行是好的”(works on my machine)问题,运维人员应用 Docker 来并行的运行和治理利用来取得更优计算密度,基于各自独立的容器,不会因为环境起因导致利用运行谬误。如下图所示,在工作当中,如果咱们面对这样多的服务、多个服务器,以及多种环境,咱们应该如何解决呢?如果还持续用传统的形式打包部署,咱们会节约多少工夫?所以在 Docker 横空出世之前,利用打包始终是大部分研发团队的痛点,在 Docker 呈现后,它以更高效的利用系统资源、更高效的利用系统资源、统一的运行环境、继续交付和部署、更轻松的迁徙、更轻松的保护和拓展,6大长处迅速火了起来。 镜像(Image)是一个蕴含有文件系统的面向 Docker 引擎的只读模板。任何利用程序运行都须要环境,而镜像就是用来提供这种运行环境的。例如一个 Ubuntu 镜像就是一个蕴含 Ubuntu 操作系统环境的模板。容器(Container)相似于一个轻量级的沙盒,能够将其看作一个极简的 Linux 零碎环境(包含 root 权限、过程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker 引擎利用容器来运行、隔离各个利用。容器是镜像创立的利用实例,能够创立、启动、进行、删除容器,各个容器之间是是互相隔离的,互不影响。留神:镜像自身是只读的,容器从镜像启动时,Docker 在镜像的下层创立一个可写层,镜像自身不变。仓库(Repository)镜像仓库,是 Docker 用来集中寄存镜像文件的中央。Docker 是开源的商业产品,有两种版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版蕴含了一些免费服务,个别用不到。咱们上面将会演示 Docker CE 版本的应用办法。Docker 反对很多操作系统平台,有大家罕用的 Microsoft Windows 系列操作系统(Docker 不反对 Windows 10 家庭版零碎),Linux 发行版和 MacOS 零碎。Windows 零碎装置办法Windows 上有两种装置 Docker 形式:第一种:拜访 Docker 网站下载 Docker Desktop 软件的 exe 文件,下载地址:https://download.docker.com/w...第二种:应用 Chocolatey 包管理工具装置 Docker。(包管理工具需自行下载安装)Linux 发行版 Ubuntu 零碎装置办法1.切换到管理员权限2.装置必要的一些零碎工具3.装置 GPG 证书4.写入软件源信息5.更新并装置 Docker-CELinux 发行版 CentOS 零碎装置办法1.切换到管理员权限2.装置必要的一些零碎工具3.增加软件源信息4.更新并装置 Docker-CEmacOS 操作系统装置 Docker 办法macOS 上有两种装置 Docker 形式:第一种:拜访 Docker 网站下载 Docker Desktop 的 dmg 安装包,下载地址:https://download.docker.com/m...第二种:应用包管理工具形式来装置 Docker,应用 Homebrew 工具装置 Docker。(包管理工具需自行下载安装)启动 Docker重新启动 Docker开机时主动启动 Docker查看所有镜像REPOSITORY:镜像来自哪个仓库TAG:镜像的标签信息,版本之类的信息IMAGE ID:镜像创立时的idCREATED:镜像创立的工夫SIZE:镜像文件大小下载软件镜像导出镜像删除镜像导入镜像更改镜像名运行容器查看运行的容器查看所有容器启动容器重新启动容器进行容器杀死容器删除运行中的容器执行容器内命令复制容器内文件查看容器日志

February 17, 2023 · 1 min · jiezi

关于软件测试:干货-一改测试步骤代码就全写为什么不试试用-Yaml实现数据驱动

理念与同“UI自动化测试框架”中的“测试步骤的数据驱动”雷同,接口中的测试步骤的数据驱动就是将接口的参数(比方 method、url、param等)封装到 yaml 文件中治理。当测试步骤产生扭转,只须要批改 yaml 文件中的配置即可。数据驱动就是数据的扭转从而驱动自动化测试的执行,最终引起测试后果的扭转。简略来说,就是参数化的利用。数据量小的测试用例能够应用代码的参数化来实现数据驱动,数据量大的状况下倡议应用一种结构化的文件(例如yaml,json等)来对数据进行存储,而后在测试用例中读取这些数据。 原理与后面章节“UI自动化测试框架”中的“测试数据的数据驱动”大同小异。仍然应用 @pytest.mark.parametrize 装璜器来进行参数化,应用参数化来实现数据驱动。通过参数化的形式,别离判断id为2,3的部门的parentid为1: import pytestclass TestDepartment: department = Department() @pytest.mark.parametrize("id", [2, 3]) def test_department_list(self, id): r = self.department.list(id) assert self.department.jsonpath(expr="$..parentid")[0] == 1下面的代码首先应用 @pytest.mark.parametrize 装璜器,传递了两组数据,测试结果显示有两条测试用例被执行,而不是一条测试用例。也就是 pytest 会将两组测试数据主动生成两个对应的测试用例并执行,生成两条测试后果。 当测试数据量大的状况下,能够思考把数据存储在结构化的文件中。从文件中读取出代码中所须要格局的数据,传递到测试用例中执行。本次实战以YAML进行演示。YAML以应用动静字段进行结构化,它以数据为核心,比 excel、csv、Json、XML 等更适宜做数据驱动。 将下面参数化的两组数据存储到 yaml 文件中,创立一个data/department_list.yml文件,代码如下: -2-3下面的代码定义了一个 yaml 格局的数据文件department_list.yml,文件中定义了一个列表,列表中有两个数据,最初生成的是这样的数据格式:[1,2]。将测试用例中参数化的数据革新成从 department_list.yml 文件中读取,代码如下: class TestDepartment: department = Department() @pytest.mark.parametrize("id", \ yaml.safe_load(open("../data/department_list.yml"))) def test_department_list(self, id): r = self.department.list(id) assert self.department.jsonpath(expr="$..parentid")[0] == 1下面的代码,只须要应用yaml.safe_load()办法,读取department_list.yml文件中的数据,别离传入到用例 test_department_list() 办法中实现输出与后果的验证。 理论工作中,对于环境的切换和配置,为了便于保护,通常不会应用硬编码的模式实现。在“多环境下的接口测试”章节中曾经介绍了,如何将环境的切换作为一个可配置的选项。本章节会把这部分内容进行重构,应用数据驱动的形式实现多环境的配置。 依据“多环境下的接口测试”章节,将此章节中的环境配置局部改为数据驱动的模式代码如下: #把host批改为ip,并附加host headerenv={ "docker.testing-studio.com": { "dev": "127.0.0.1", "test": "1.1.1.2" }, "default": "dev"}data["url"]=str(data["url"]).replace( "docker.testing-studio.com", env["docker.testing-studio.com"][env["default"]])data["headers"]["Host"]="docker.testing-studio.com"仍然以yaml为示例,将所有的环境配置信息放到 env.yml 文件中。如果怕出错,能够先应用yaml.safe_dump(env)将dict格局的代码转换为yaml。如下所示,打印进去的,就是胜利转换yaml格局的配置信息: ...

February 17, 2023 · 1 min · jiezi

关于软件测试:软件测试培训班多少钱柠檬班怎么样

软件测试是软件研发过程中重要的一环,没有通过测试的软件就投入使用,品质无奈失去,因而,整个软件行业对于软件测试也是越来越器重。很多人也正是因为看到了这个前景,纷纷开始转行进入到这个行业,而想要从事这个岗位,就必须具备该岗位的专业技能,那么报班培训就成了必不可少的一项,所以,报名软件测试培训班须要多少钱呢? 市面上有很多软件测试的培训机构,不同的培训机构,学习的软件测试课程不同,价格也不一样,个别软件测试的根底课程培训费用大略在一万元到两万五千元,如果是线上培训的话,就会要便宜一些,最低大略在七八千元,具体费用依据所报班次,学习时长、机构市的不同,价格差距很会不同。  柠檬班软件测试怎么样 柠檬班是一个线上的软件测试培训机构,主打就是网络直播课程,至于,这个培训机构具体如何,我依据从它家培训过的敌人叙述中,整顿了几点,心愿能给你们起到一些参考作用。 1、课程常识教学层层递进,对于小白人员比拟敌对,能疾速跟上老师的讲课节奏;2、讲课老师个别都比拟有趣风趣,很能沉闷课堂气氛,讲的内容也是比拟通俗易懂;3、实际练习高于理论知识,绝对于大部分只会夸夸其谈的培训机构,柠檬班更关注真操实练;4、毕业后找工作,会有指导老师领导简历批改,并进行待业模仿面试;5、自主研发的软件测试题库,能够免费刷,各大厂题目共计3千+。 以上就是我依据敌人在柠檬班过程中的一个体验叙述,具体如何,大家能够通过试听它们的收费课程去理解理解,目前,柠檬班官网上是有许多能够收费试听的课程和材料能够支付的,并且也有小章节的录播课程,这些可都是能让大家理解这个机构授课如何的资源,不要放过哟!

February 15, 2023 · 1 min · jiezi

关于软件测试:软件测试课程居然在柠檬班官网内可以免费试听

因为我国企业对软件测试技术的认知较晚,因而这方面的业余技术人才在国内还很稀缺。因为工作的特殊性,测试人员岂但须要对软件的品质进行检测,而且对于软件我的项目的立项、治理、售前、售后等畛域都要波及。所以软件测试工程师的职位教训越丰盛越吃香,待业前景广大。  然而,想要从事软件测试工作,专业知识和技能是少不了,所以,相干的培训学习就是大家在从事软件测试工作之前必须要通过的一个流程,那无关软件测试的课程在哪里能够找呢? 目前无关软件测试培训的课程其实是不在少数的,网上各大视频网站,以及培训机构都是有的,就比前段时间,我在网上冲浪时看到的一个网站——柠檬班软件测试官网,就有不少软件测试的课程能够收费看,如:“软件测试之老手小白入门教程、xshell及xftp的装置及应用秘诀、Python RF 自动化、Jmeter罕用元件的应用办法、Python全栈自动化测试语法入门、PC端自动化测试实战课程、HttpRunner全网最详课程解说、App自动化测试/Appium实战全解、Java编程0根底入门自动化测试……”这些都是能够收费观看的。   当然,除此之外,也有一些须要付费才看观看的内容,但大多价格不贵,在2分至几十元左右,如:“软件测试职业规划及获取offer指南的价格就是0.02元、软件测试-测试工具装置疾速入门的价格是2元、rpc接口测试项目实战之dubbo则是26.8元……”。   总之,软件测试的课程,尽管想找并不难,但想要学习得更零碎以及轻松,倡议最好还是抉择报班学习,毕竟有老师在手,遇到不懂的问题,还能及时询问,也能本人少走一些弯路!

February 14, 2023 · 1 min · jiezi

关于软件测试:干货-JavaScript脚本注入完成Selenium-无法做到的那些事

当 webdriver 遇到无奈实现的操作时,能够应用 JavaScript 来实现,webdriver 提供了 execute_script() 办法来调用 js 代码。执行 js 有两种场景: 在页面上间接执行 js在某个曾经定位的元素上执行 jsJavaScript 是一种脚本语言,有的场景须要应用 js 脚本注入辅助咱们实现 Selenium 无奈做到的事件。 Selenium 能够通过 execute_script() 来执行 JavaScript 脚本。 driver.execute_script:同步执行 JavaScript 在以后的窗口框架下js 脚本能够在浏览器的开发者工具 -> Console 中进行调试获取元素控件中的属性值 与 Selenium 联合,在代码中返回 js 后果# 获取网页性能的响应工夫,js脚本中应用return代表返回获取的后果js = "return JSON.stringify(performance.timing);"driver.execute_script(js)执行 JavaScript 也能够通过传参的形式传入元素信息。 element = driver.find_element(by, locator)#arguments[0]代表所传值element的第一个参数#click()代表js中的点击动作driver.execute_script("arguments[0].click();",element)还能够通过下面的办法点击被遮挡的元素。例如:某个元素在理论的操作过程中被其余的元素遮挡,就能够应用 js 点击的形式。自动化过程中的报错如下: Other element would receive the click: <label class="custom-control-label" for="user_remember_me">...</label>如果呈现下面的谬误,能够应用 js 的形式进行点击。 以企业微信为例,应用 js 点击增加图片。 代码: #导入依赖from selenium import webdriverfrom selenium.webdriver.common.by import Byclass TestWework: def setup(self): self.driver = webdriver.Chrome() #隐式期待 self.driver.implicitly_wait(2) def test_upload(self): #元素定位 element_add = self.driver.find_element\ (By.CSS_SELECTOR, ".js_upload_file_selector") #执行js代码 self.driver.execute_script\ ("arguments[0].click();", element_add) self.driver.find_element_by_id('js_upload_input').send_keys('D:\project\demo1\demo.png') assert len(self.driver.find_elements(By.CSS_SELECTOR,'.material_pic_list_item')) == 1 def teardown(self): self.driver.quit()执行 JavaScript 脚本就先讲到这里啦,大家还想看什么内容的文章也能够留言通知咱们哦! ...

February 8, 2023 · 2 min · jiezi

关于软件测试:干货-Docker-还可以搭建Web服务器nginx-这么宝藏的吗

浏览器拜访:https://hub.docker.com/_/nginx 查看Nginx镜像详细信息。 下载镜像,默认会下载lastest最新版本的软件,能够指定软件的版本。例如:nginx:1.17.9。 docker pull nginxdocker pull nginx:1.17.9运行 Nginx 容器命令为: docker run -d --name nginx -p 8088:80 nginx:1.17.9run:启动一个容器-d:后盾守护进行形式运行--name:指定容器的名字-p:映射容器的端口到宿主机,后面宿主机端口,前面容器端口。nginx:1.17.9:容器镜像名称和版本信息 如果呈现“Welcome to nginx!”就示意Nginx服务曾经失常启动啦! 当咱们能够拜访 Nginx 服务的时候,会发现拜访的页面是 Nginx 默认的欢送页面,咱们要怎么样能力拜访自定义的页面呢?咱们能够用挂载目录的形式让Nginx服务展现咱们想要的页面。 在以后地位新建一个 html 目录,外面放一个新建的 html 文件,名字为 index.html,内容如下。 <h1>Hogwarts</h1>Nginx 容器 docker run -d --name nginx1 -p 8089:80 \-v ${PWD}/html:/usr/share/nginx/html \nginx:1.17.9-p 8089:80映射容器的80端口到宿主机8089端口。-v ${PWD}/html:/usr/share/nginx/html:-v参数代表挂载一个目录到容器内,后面的目录${PWD}/html代表宿主机的目录,前面的目录/usr/share/nginx/html代表容器内的目录。它们两头用分号隔开。其中${PWD}是一个零碎变量,代表以后所在的目录。而后咱们在拜访宿主机的IP和端口查看一下状态。当呈现“Hogwarts”时,就代表运行失常,咱们就能够把新建的 html 文档都放到 html 目录外面。而后去拜访啦! 今天的文章将会通知大家如何用 Docker搭建测试用例平台 Testlink。Testlink 是基于 WEB 的测试用例管理系统哦。敬请期待。

February 8, 2023 · 1 min · jiezi

关于软件测试:干货-Chrome-浏览器Postman还能这样做接口测试

如果把测试简略分为两类,那么就是客户端测试和服务端测试。客户端的测试包含UI测试,兼容性测试等,服务端测试包含接口测试。接口测试检查数据的替换,传递和管制治理过程,它绕过了客户端,间接对服务端进行测试。 客户端测试与服务端测试的关系图:服务端非常复杂,就像下图的阿里外围链路图,蕴含大概150个组件,组件与组件之间进行交互,造成了密集的后端网络。UI测试无奈笼罩这么简单的组件交互网络,所以要绕过客户端,间接应用接口测试对服务端进行测试。 阿里外围链路图: 对行业的各种测试进行分层,越往上,发现bug的工夫越晚,老本(工夫,人力,损失)越高。接口测试(Service)相比ui测试,能够更早发现问题,更快的品质反馈;同理,单元测试(Unit)相比接口测试,能够更早发现问题,更快的品质反馈,破费的老本更低。 分层测试: 尽管接口测试覆盖面广,然而也不能应用接口测试代替客户端测试。UI测试波及到了用户体验的问题,这部分是无奈用接口测试进行代替的。tcp/udp/http/restful/dubbo等协定区别与解读 TCP协定是在传输层中,一种面向连贯的、牢靠的、基于字节流的传输层通信协议。对接口测试工具进行分类,能够如下几类: 网络嗅探工具:tcpdump,wireshark代理工具:fiddler,charles,anyproxyburpsuite,mitmproxy剖析工具:curl,postman,chrome Devtool作为测试,要有对接口进行测试的能力,在接口测试中,罕用的第一个工具就是postman。postman是一个弱小的接口测试平台,具备体验敌对的可视化界面,在工作中经常作为研发的接口调试工具,以及测试的手动接口测试工具。 能够进入postman官方网站自行抉择零碎下载安装。postman官方网站:https://www.postman.com/ 上面应用postman发送一次get申请。应用学院官网演练地址https://httpbin.testing-studi...,进行演示 进入postman软件界面在URL处填写https://httpbin.testing-studi...抉择GET申请形式点击Header,key值填写accept,value填写application/json点击send按钮,查看返回内容 cURL是一个通过URL传输数据的,功能强大的命令行工具。cURL能够与Chrome Devtool工具配合应用,把浏览器发送的实在申请还原进去,附带认证信息,脱离浏览器执行,不便开发者重放申请、批改参数调试,编写脚本。也能够独自应用,依据本人的需要结构申请调整参数,结构多种接口测试场景。 学习curl命令之前,须要先理解Chrome Devtool工具。 Chrome DevTools(Chrome 开发者工具)是内嵌在Chrome浏览器里的一组用于网页制作和调试的工具。在测试的过程中,也经常用作一个简略的抓包工具。如何操作 抉择右上角Chrome 菜单,而后抉择更多工具 -> 开发者工具或者右键,抉择查看/审查元素在 Network 面板中能够查看通过网络来申请来的资源的详细信息: 右键左侧数据,抉择Copy -> copy as curl,即可把申请内容转化为curl命令。将命令copy在gitbash或bash上并运行,则会看到返回信息。对下面命令进行细化,退出-v参数能够打印更具体的内容,用2>&1将规范谬误重定向到规范输入,发送此命令将失去细化后的内容细化后的命令如下 curl 'https://home.testing-studio.com/' -H \'authority: home.testing-studio.com' -H 'pragma: no-cache'\ -H 'cache-control: no-cache' -H 'upgrade-insecure-requests: 1'\ -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0)\ AppleWebKit/537.36 (KHTML, like Gecko)\ Chrome/80.0.3987.116 Safari/537.36' \ -H 'sec-fetch-dest: document' \ -H 'accept: text/html,application/xhtml+xml,\ application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,\ application/signed-exchange;v=b3;q=0.9' \ -H 'sec-fetch-site: none' -H 'sec-fetch-mode: navigate' \ -H 'sec-fetch-user: ?1' \ -H 'accept-language: en,zh-CN;q=0.9,zh;q=0.8' \ --compressed -v 2>&1发动get申请 ...

February 8, 2023 · 1 min · jiezi

关于软件测试:干货-APP自动化Android之属性获取与断言

断言是 UI 自动化测试的三要素之一,是 UI 自动化不可或缺的局部。咱们应用定位器定位到元素后,通过脚本进行业务操作的交互,想要验证交互过程中的正确性就须要用到断言。 惯例的UI自动化断言剖析正确的输入后果,惯例的断言个别蕴含以下的几个情景: 比拟大小蕴含或者不蕴含验证布尔值示例代码: #比拟大小price = driver.find_element( By.XPATH,'//*[contains(@resource-id="current_price")]').textassert float(price) >=170#蕴含验证name = driver.find_element( By.XPATH,'//*[contains(@resource-id="stockName")]').textassert "BABA" in name#布尔值验证def check(): name = driver.find_elements(By.XPATH,'//*[contains(@resource-id="stockName")]') if len(name)!=0: return True else: return Falseassert check()下面的示例能够看出,Python 的 assert 是用来判断一个条件是否为真,如果它为真,就继续执行,如果为假,则抛出 AssertError 并且蕴含错误信息。断言能够在条件不满足程序运行的状况下间接返回谬误。 Hamcrest断言Hamcrest 是一个以测试为目标,能组合成灵便表达式的匹配器类库,用于编写断言的框架,应用这个框架编写断言,能够进步可读性以及开发测试的效率。Hamcrest 提供了大量被称为“匹配器”的办法。每个匹配器都设计用于执行特定的比拟操作。Hamcrest 的可扩展性强,容许你创立自定义的匹配器,并反对多种语言。 Hamcrest应用办法装置 pip install pyhamcrestfrom hamcrest import *Hamcrest 提供了一个全新的断言语法(assert_that),能够只应用 assert_that 一个断言语句,联合 Hamcrest 提供的匹配符,就能够实现各种断言场景。罕用办法 API 1.比拟两个字符串能够应用“equal_to”办法,示例代码如下: assert_that("this is a string",equal_to("this is a string"))2.数值匹配,比拟两个值是否靠近,能够应用“close_to”办法,用法: assert_that(8,close_to(10,2))解释:断言 8 靠近于 (8 ~ 12)这个范畴。3.蕴含某个字符,应用“contains_string”办法,示例代码如下: assert_that('abc',contains_string('d'))应用“雪球”利用,关上雪球 APP,点击页面上的搜寻输入框输出“alibaba”,而后在搜寻联想进去的列表外面点击“阿里巴巴”,抉择股票分类,获取股票类型为“09988”的股票价格,最初验证价格在预期价格的 10% 范畴浮动。示例代码片段如下: ...

February 8, 2023 · 1 min · jiezi

关于软件测试:实战-电商业务性能测试二-Jmeter-参数化功能实现注册登录的数据驱动

此例应用的是 GitHub 上一个开源的电商我的项目 mall,须要的能够去 GitHub 上下载部署,有具体的部署教程: GitHub地址:https://github.com/macrozheng...部署教程:https://macrozheng.github.io/...业务流程:验证码->注册->登录,接口比例:这三个接口场景的比例为1:1:1关系数据传递:获取的鉴权信息需保留后未后续的申请做数据反对Filename:填入你须要导入的文件地址File encoding:抉择编码方式,特地是有中文的时候记得要选UTF-8Variable Names:设置变量名,要和数据文件中的格局一一对应Ignore first line:是否漠视第一行,有时候咱们数据文件的第一行可能是个阐明title,并不是咱们理论须要的数据,这个时候就能够在此抉择true,将其疏忽Delimiter(use '\t' for tab):如果你的数据文件的数据之间应用tab进行宰割的,这里就填\t用来阐明是tab宰割,如果是用逗号,宰割的,那么就间接填入逗号,即可

February 8, 2023 · 1 min · jiezi

关于软件测试:实战-基于JMeter-完成典型电商场景首页浏览的性能压测

$ cat parentId_Data01122345

February 8, 2023 · 1 min · jiezi

关于软件测试:实战-UI-自动化测试框架设计与-PageObject-改造

在 UI 自动化测试过程中,面对简单的业务场景,常常会遇到这样的挑战: 简略的录制/回放速度快,但无奈适应简单场景;编写自动化测试脚本比拟灵便,但工作量大且可维护性差;以往的封装技术(PageObject)能够适应各种 UI 场景,但构造涣散,无奈在多我的项目中迁徙;因而,测试团队通常还须要一种定制测试框架,用以补救现有框架的毛病。因为 UI 自动化测试框架围绕 UI 界面应用,因而,仍旧选用 PageObject 设计模式对 UI 及测试进行封装,同时配合 Pytest 单元测试将脚本可能无效的组织、连贯利用起来,从而进步框架的可维护性和可读性。因为测试框架基于 PageObject 设计模式,次要方向为 PO 改良,数据驱动,异样解决等,比方:测试数据的数据驱动:将数据存储到内部 yaml 文件中,利用 yaml 工具进行数据读取;数据步骤的数据驱动:将操作步骤放到内部 yaml 文件中,利用 yaml 工具对操作步骤进行读取,用专门函数解析并实现操作步骤;自动化异样解决机制:对元素查找模块进行封装和改良,包含如何解决弹窗;作为通用的 UI 测试框架, PageObjet 不仅实用于 Web 自动化测试,也可实用 Appium 挪动自动化测试,其长处如下:缩小代码反复进步测试用例可读性进步测试用例可维护性本案例将对雪球 App 进行 Page Objetct 封装与改良。当启动雪球 App 时,会进入首页。点击搜寻框进入搜寻页,搜寻某支股票而后判断股价是否大于 200:PageObjetct 的模块关系如下,所有的模块要继承 BasePage , App 实现启动,重启,进行等操作, Main 实现进入搜寻页,进入股票页等操作:base_page 模块是所有 page 类的父类,其中定义了公共办法,比方封装上面的 find 办法后,能够让子类调用 find :App 模块封装 app 的启动,重启,进行等办法,当 app 启动时会进入 main 页面,因而在上面的 main 办法要 return Main ,Main 类的定义在前面会解说:Main 模块是首页的 PageObject ,其中的办法封装了首页的重要性能,比方上面代码中的 goto_search_page 封装了点击搜寻并跳转到 Search 页:Search 模块能够搜寻一支股票,还能够获取股票的价格,比方下图:封装代码如下:最初对上述代码建设测试,新建测试模块 test_search : ...

February 8, 2023 · 1 min · jiezi

关于软件测试:实战-JMeter-典型电商场景下单支付的性能压测

在上一篇文章实现首页浏览压测工作后,咱们开始下单-领取场景的压测实际。 select p1.id, p1.product_category_id, p1.product_sn, p1.brand_name, p1.price, p1.name, p1.pic, p1.sub_title, p2.sku_code, p2.idas product_sku_id, p2.sp1, p2.sp2 from mall.pms_product as p1 join mall.pms_sku_stock as p2 on p1.id = p2.product_idwhere p1.stock >=50 and p2.stock > 50;

February 8, 2023 · 1 min · jiezi

关于软件测试:实战-DockerJmeterInfluxDBGrafana-搭建性能监控平台

1. 为什么要搭建性能监控平台?自身带有聚合报告如下图所示: 这个报告有几个很显著的毛病:: 中获取数据并以特定的模板进行展现 2、性能监控平台部署实际本文的重点并不是介绍 Docker,所以不理解的小伙伴须要本人去学习一下根本的装置和操作,可参考之前发送的。1)首先去下载InfluxDB的镜像,下载很简略,间接pull就好,默认为下载最新的镜像: $ docker pull influxdb镜像,在拜访8083端口时就能够看到网页端的展现,我这里用的是最新的,所以就没有啦: $ docker run -d --name jmeter-influx -p 8083:8083 -p 8086:8086 influxdb3)进入容器外部,创立名为jmeter的数据库:容器 命令查看数据库创立胜利 查看数据,这个时候应该是没有数据的: 脚本,往期文章有公布,本次就以此来进行测试后果演示。具体可参考之前发送的公众号文章。文章开端的「往期回顾」第二篇文章即可浏览。配置: 2)次要配置阐明:所对应的:3)运行验证运行中查看数据,发现相似上面的数据阐明输出导入胜利: 1)首先咱们须要下载grafana的镜像: 2)启动一个grafana容器,将3000端口映射进去: 3)网页端拜访locahost:3000验证部署胜利 4)抉择增加数据源 : 6)配置数据源 数据源创立胜利时会有绿色的提醒:7)导入模板 间接输出模板id号间接上传模板json文件间接输出模板json内容上面这两个是我尝试过的模板:9)导入模板,我这里抉择的是导入json文件的形式,导入后如下,配置好模板名称和对应的数据源,而后即可 10)展现设置,首先抉择咱们创立的application 如果咱们批改过表名,也就是在jmeter的Backend Listener的measurement配置(默认为jmeter),这个时候就须要去设置中进行批改(我这里应用的就是默认的,所以无需批改): 通过一系列的奋斗之后,该到了咱们测验成绩的时候了。应用 Docker + JMeter + InfluxDB + Grafana 到底能够搭建怎么的性能监控平台呢?相比拟 JMeter 自带的监控平台,咱们搭建的性能监控平台到底有什么劣势呢?接下来就是展现成绩的时候啦!

February 8, 2023 · 1 min · jiezi

关于软件测试:学习Docker就应该掌握的dockerfile语法与指令

在日常的工作中,经常须要制作本人的我的项目的镜像,个别通过以下两种形式制作镜像:Docker commit、Dockerfile。 Docker commitDocker commit个别用做从一个运行状态的容器来创立一个新的镜像。定制镜像应该应用Dockerfile来实现。 docker commit 容器名 新镜像名:tag应用这种形式的毛病是:1.对外不可解释,不不便排查问题, 2.可维护性差、可浏览性差。 DockerfileDockerfile 是由一系列指令和参数形成的脚本,一个 Dockerfile 外面蕴含了构建整个镜像的残缺命令。Docker 通过docker build执行 Dockerfile 中的一系列指令主动构建镜像。以下是 Dockerfile 中一些常用字段的含意: FROM:根底镜像,FROM 命令必须是 Dockerfile 的首个命令。 LABEL:为镜像生成元数据标签信息。原有指令 MAINTAINER 曾经放弃应用,用 LABEL maintainer="hogwarts@testing-studio.com" 代替。 USER:指定运行容器时的用户名或 UID,后续 RUN 也会应用指定用户。 RUN:RUN 命令是 Dockerfile 执行命令的外围局部。它接受命令作为参数并用于创立镜像。每条 RUN 命令在以后根底镜像上执行,并且会提交一个新镜像。 VOLUME:定义匿名卷,容器运行时应该尽量放弃容器存储层不产生写操作,为了避免运行时用户遗记将动静文件保留的目录挂载为卷,能够当时指定某些目录挂载为匿名卷。这样就不会向容器存储层写入大量数据。 WORKDIR:WORKDIR 命令用于设置 CMD 指明的命令的运行目录。为后续的 RUN、CMD、ENTRYPOINT、ADD 指令配置工作目录。能够应用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的门路。应用 docker exec -it 进入容器后,默认也会进入到 WORKDIR 指定的目录。 ENV:指定容器启动时的环境变量(留神,只有在容器启动时,启动脚本能读取到,如果心愿其余用户登录到容器也失效的话,须要写入 .bashrc)。 COPY:COPY 命令有两个参数,源和指标。它的根本作用是从源零碎的文件系统上复制文件到指标容器的文件系统。 EXPOSE:指定端口转发 CMD:设置容器创立是执行的默认命令。反对三种格局,默认会被 docker run 指定的参数笼罩。每个容器只能执行一条 CMD 命令。执行的命令和参数当指定多个时,只有最初一个起效。 CMD ["executable", "参数1","参数2"]:应用 exec 形式执行,举荐。CMD command 参数1 参数2:shell 形式执行。CMD ["参数1","参数2"]:提供给 ENTRYPOINT 做默认参数。ENTRYPOINT:指定容器的“入口”。反对两种格局,默认不会被 docker run 指定的参数笼罩。能够指定 --entrypoint 参数去笼罩。每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最初一个起效。 ...

February 8, 2023 · 2 min · jiezi

关于软件测试:如何确保API-的稳定性与正确性你只需要这一招

一、什么是rest-assured当初,越来越多的 Web 利用转向了RESTful的架构,很多产品和利用裸露给用户的往往就是一组 REST API,这 样有一个益处,用户能够依据须要,调用不同的 API,整合出本人的利用进去。从这个角度来讲,Web 开发的老本会越来越低,人们不用再保护本人的信息孤岛,而是应用 REST API 这种组合模式。 那么,作为 REST API 的提供者,如何确保 API 的稳定性与正确性呢?全面零碎的测试是必不可少的。Java 程 序员经常借助于 JUnit 来测试本人的 REST API,不,应该这样说,Java 程序员经常借助于JUnit 来测试 REST API的实现!从某种角度来说,这是一种“白盒测试”,Java 程序员分明地晓得正在测试的是哪个类、哪个方 法,而不是从用户的角度登程,测试的是哪个REST API。 Rest-Assured 是一套由 Java 实现的 REST API测试框架,它是一个轻量级的REST API 客户端,能够间接编写代码向服务器端发动 HTTP申请,并验证返回后果;它的语法十分简洁,是一种专为测试 REST API 而设计的 DSL。应用 Rest-Assured 测试 REST API,就和真正的用户应用 REST API 一样,只不过 Rest-Assured 让这所有变得自动化了。 二、模仿get申请雪球网是一个股票投资网站,你能够应用网站的搜寻性能来查问股票信息,比方咱们想查问sougou的信息,下 面利用了charles剖析工具来查看申请和答复: 这是一个Get申请,返回的内容格局如下: 当初,咱们应用 Rest-Assured 来编写一个简略的测试程序调用雷同的Get申请: 第一步,咱们要判断这是什么格局数据:json第二步,确定申请地址:从charles的后果中获取y为https://xueqiu.com/stock/sear...第三步,填写表单:从chrome浏览器查看后果中查问request的query信息是code:sougou咱们的代码也很简略: 返回的后果却很残暴: 与登陆账号,刷新页面无关的话,我首先想到了cookie,网站都用cookie来保留账号相干信息,于是退出 cookie: 返回后果正确,你问我惊不惊喜,诚实答复,不惊喜。因为我搞不明确为什么一个查问须要cookie验证,如果 不加cookie,返回的信息却是没有登陆!显然,我的cookie并不蕴含登陆信息,因为我压根就没有登陆,当然这是网站的设计,与rest-assured无关。 更进一步 怎么区别xml与json 答:你看就晓得了嘛,xml长这个样子 ...

February 8, 2023 · 1 min · jiezi

关于软件测试:基于Requests与mitmproxy打造迷你接口测试框架

接口测试次要用于检测内部零碎与零碎之间以及外部各个子系统之间的交互点。测试的重点是要检查数据的替换,传递和管制治理过程,以及零碎间的互相逻辑依赖关系等。 很多零碎的关联都是基于接口测试来实现的。能够将简单的零碎关联进行简化。并且能够进步测试用例的笼罩,绝对容易实现自动化继续集成。 作为一名测试工程师,抓包是最罕用的剖析问题伎俩。抓包也有很多工具。比如:Windows下的Fiddler ,Postman。全平台的Charles等。咱们比拟举荐应用Charles 。它能够轻松记录浏览器和Internet之间的所有流量,是十分业余并基于Java开发网络http抓包工具软件。 纯熟应用抓包工具,能够帮忙咱们节约工夫进步工作效率。对于零碎而言,也能够进步零碎的健壮性。

February 8, 2023 · 1 min · jiezi

关于软件测试:只需搞定Docker环境问题再也不是测开路上的『坑』

轻量级:因为docker不必虚拟化内核,间接共享宿主机的内核,所以节俭了很多资源,在同样的资源下能够启动更多的软件,同时启动速度也更快长处即毛病:docker的长处也是它的毛病,正是因为所有的容器都共享一个内核,如果其中一个容器将内核给"搞坏了",那所有的容器就都无奈失常工作了

February 8, 2023 · 1 min · jiezi

关于软件测试:基于-Spring-Boot-的-RESTful-API-设计与实现

RESTful 是一种标准,合乎 RESTful 的 Api 就是 RESTful Api。简略的说就是可联网设备利用 HTTP 协定通过 GET、POST、DELETE、PUT、PATCH 来操作具备 URI 标识的服务器资源,返回对立格局的资源信息,包含 JSON、XML、CSV、ProtoBuf、其余格局。RESTful 的核心思想是,客户端收回的数据操作指令都是"动词 + 宾语"的构造。比方,GET /case 这个命令,GET 是动词,/case 是宾语。 RESTful API简介RESTful 架构遵循对立接口准则,不管什么样的资源,都是通过应用雷同的接口进行资源的拜访。接口应该应用规范的 HTTP 办法如 GET ,PUT 和 POST ,并遵循这些办法的语义。 设计规范罕用的动词有以下 5 个 详情见 https://www.w3.org/Protocols/... Spring Boot 实现 RESTful API咱们能够通过 Spring Boot 注解来实现 RESTful API 。 当初须要编写的是对一个用户的增删改查操作,如下表是一个非 RESTful 和 规范 RESTful 的比照表。 上面咱们着重介绍下以下两对注解。 Controller 个别利用在有返回界面的利用场景下。例如,治理后盾应用了模板技术如 thymeleaf 开发,须要从后盾间接返回 Model 对象到前台,那么这时候就须要应用 Controller 来注解。 RestController 个别利用在只有接口的利用场景下. 例如开发前后端拆散的我的项目时,通过 Ajax 申请服务端接口,那么接口就应用 RestController 对立注解。 ...

February 8, 2023 · 3 min · jiezi

关于软件测试:后端Web开发框架Java

为什么应用Spring Boot简化配置,无需编写太多的 xml 配置文件,效率很高;Spring 能够整合很多各式各样的框架,并能很好的集成;基于 Spring 构建,使开发者疾速入门,门槛很低;Spring Boot 能够创立独立运行的利用而不须要依赖内部组件或工具;内置 Tomcat 服务器,无需打成 war 包,能够间接在内置 Tomcat 中运行;提供 Maven 极简配置,以及可视化的相干监控性能,如性能监控,利用衰弱水平等;为微服务 Spring Cloud 奠定了根底,使得微服务的构建变得简略;沉闷的社区与论坛,以及丰盛的开发文档;Spring Boot疾速开始关上 https://start.spring.io/,能够看到以下信息(可依据须要调整):Spring Boot 默认为 Maven 我的项目;默认语言为 Java ;Spring Boot 以后默认版本为 2.4.4;默认会打成 Jar 包;Java 版本默认为 11;在 Group 中填入本人的组织,个别填写公司域名的到写,例如 com.ceshiren 或者 com.baidu;在 Artifact 中填写工程的名称,例如 aitest-demo ;package 抉择 Jar ,Java 依据本人的 JDK 版本抉择,如我本地为 JDK8,则此处能够抉择 8,至此,根底抉择曾经全都选完,接下来要开始抉择咱们应用的 Spring Boot 的组件了。在右侧 Dependencies 中找到 Spring Web ,抉择 Spring Web 即可创立 Spring Boot 服务:配置结束后,点击下方右边第一个按钮( GENERAT ECTRL + ⏎)即可生成蕴含 Spring Boot 我的项目残缺示例代码和配置的压缩包文件,解压后即可应用。 ...

February 8, 2023 · 1 min · jiezi

关于软件测试:同样是断言为何-Hamcrest-如此优秀

依据我的项目对象模型(POM)的概念,Maven 能够治理一个我的项目的依赖关系、构建、报表以及信息中心的局部文档。hamcrest 断言 maven依赖:hamcrest反对多种语言,这里以 Java 为例:进入到 hamcrest 断言的 Matchers 类中能够看到其中蕴含了相当丰盛的断言匹配器,能更大程度上实现各种简单断言场景: 官网也对断言进行了分类和阐明: 先来看hamcrest断言和原生断言的写法区别,在官网文档中给出了的第一个实例如下: 在Junit4的官网也给出了阐明:能够看到,hamcrest 会对立先应用 assertThat 来申明一个断言,而后再在外部进行具体匹配器的断言细节,期望值和理论值进行比照;有了 hamcrest 断言,就能够间接摒弃原生的断言了~ Hamcrest断言性能很弱小,那么如何 get 这个性能的正确打开方式呢?接下来用实操演示,率领大家一起来进行实操。毕竟:内化于心,外化于行才是最重要的。 equalTo: 判断相等在失败时能够看到打印了我的阐明:actual value equal to 10 以及失败的比照,<> 示意原始类型closeTo: 靠近于多少,给定误差值源码中是这样写的须要给定两个 double 类型的参数,一个是你要操作的数值,一个是误差范畴;另外要留神的是理论值也必须是 double 类型才能够进行比照: anyOf : 前面可跟上多个匹配器,只有其中任何一个满足条件就通过allOf : 前面可跟上多个匹配器,只有其中任何一个不满足条件都不通过另外还有很多罕用的匹配器,比方hasItem, hasItems ,contains,等;具体的能够参考官网文档和类库hamcrest官网文档:http://hamcrest.org/JavaHamcr...官网GitHub:https://github.com/junit-team...Mvnrepository:https://mvnrepository.com/art...

February 8, 2023 · 1 min · jiezi

关于软件测试:史上最全-Appium-自动化测试从基础到框架实战精华学习笔记一

对测试人来说,Appium 是十分重要的一个开源跨平台自动化测试工具,它容许测试人员在不同的平台(iOS、Android 等)应用同一套 API 来写自动化测试脚本,这样可大幅晋升代码复用率和工作效率。本文汇总了从 Appium 根底到自动化测试高级实战中,所波及到的方方面面的知识点精髓内容(如下所示),心愿对大家疾速总结和温习有所帮忙。1.Appium 根底 1(环境搭建和简介)2.Appium 根底 2(元素定位和元素罕用办法)3.Appium 根底 3(手势操作和 uiautomator 查找元素)4.Appium 根底 4(显式期待)5.Appium 根底 5(toast 和参数化)6.Appium 根底 6(webview)7.Appium_ 企业微信练习 (非 PO,减少和删除联系人)8.Appium_ 企业微信练习 (PO--减少联系人) 下载 1.8 的 jdk新建环境变量:JAVA_HOME 值为:D:\Program Files\Java\jdk1.7.0新建环境变量:CLASSPATH 值为:.;%JAVA_HOME%\lib;(留神:点号示意当前目录,不能省略)在零碎变量 Path 的值的后面退出以下内容:%JAVA_HOME%\bin下载 sdk关上 sdk 的 sdk manager,装置 tools 前 3 个货色和 google 的 usb 驱动配置 Android home 外面的 platform-tools 和 tools装置 node.js,配置 node.js 的环境变量npm install -g cnpm --registry=https://registry.npm.taobao.orgcnpm install -g appiumcnpm install -g appium-doctorpip install appium-python-clientmumu 连贯 adb 是:adb connect 127.0.0.1:7555Android 是 uiautomator2ios 是 xcuitestwebdriver 是基于 http 协定的,第一连贯会建设一个 session 会话,并通过 post 发送一个 json 告知服务端相干测试信息client/server 设计模式客户端通过 webdriver json wire 协定与服务器通信多语言反对server 能够放在任何中央服务器 nodejs 开发的 http 服务appium 应用 appium-xcuitest-driver 来测试 iphone 设施,其中须要装置 Facebook 出的 WDA(webdriver agent) 来驱动 ios 测试adb:Android 管制工具appium Destkop:内嵌 appium server 和 inspector 的综合工具appium server:appium 的外围工具,命令行工具appium client:各种语言的客户端封装库,用户连贯 appium server,蕴含 python、java、ruby 等appcrawler 主动遍历工具获取以后元素界面:adb shell dumpsys activity top获取工作列表:adb shell dumpsys activity activities获取 app 的 package 和 activity:adb shell;而后 logcat | grep -i displayed启动利用:adb shell am start -W -n "com.xueqiu.android/.view.WelcomeActivityAlias -S文档地址:http://appium.io/docs/en/writ...platformName:android 通常都是写 androiddeviceName:127.0.0.1:7555 这个通常是 adb devices 的名称appPackage:com.xueqiu.android 这个是 app 的 package 包名appActivity:.view.WelcomeActivityAlias 这个是 app 的 activity 名noReset:true, false 是否重置测试的环境(例如首次关上弹框,或者登陆信息)unicodeKeyboard:true, false 是否须要输出非英文之外的语言并在测试实现后重置输入法,比方输出中文dontStopAppOnReset:true, false 首次启动的时候,不进行 appskipDeviceInitialization:true, false 跳过装置,权限设置等操作https://github.com/appium/app...Android 是通过容器的布局属性来治理子控件的地位关系,布局过程就是把界面上的所有的控件,依据他们的间距的大小,摆放在正确的地位线性布局:LinearLayout绝对布局:RelativeLayout帧布局:FrameLayout相对布局:AbsoluteLayout表格布局:TableLayout网格布局:GirdLayout束缚布局:ConstraintLayoutactivity:与用户交互的可视化界面service:实现程序后盾运行的解决方案,比方 qq 音乐的音乐在后盾运行,没有界面content provide:内容提供者,提供程序所须要的数据,比方?提供数据库?broadcast receiver:播送接收器,监听内部事件的到来(比方复电)TextView:文本控件EditText:可编辑文本控件Button:按钮ImageButton:图标按钮ToggleButton:开关按钮ImageView:图片控件CheckBox:复选框控件RadioButton:单选框控件dom:Document Object Model 文档对象模型dom 利用:最早利用于 html 和 js 的交互,用户示意界的控件层级,界面的结构化形容,常见的格局为 html、xml。外围元素为节点和属性xpath:xml 门路语言,用于 xml 中的节点定位Android 的利用层级构造是定制的 xmlapp source 相似于 dom,示意 app 的层级,示意界面外面所有的控件数的构造每个控件都有它的属性(resourceid、xpath、aid),没有 css 属性driver.find_element_by_accessibility_id() 对应 content-descdriver.find_element_by_id() 对应 resource-iddriver.find_element_by_name() 对应 textdriver.find_element_by_xpath() 对应 xpath首先要 from appium.webdriver.common.mobileby import MobileBy as Byself.driver.find_element(By.ID,"") 对应 resource-idself.driver.find_element(By.XPATH,"") 对应 xpathself.driver.find_element(By.ACCESSIBILITY_ID,"") 对应 content-descself.driver.find_element(By.NAME,"") 对应 textdriver.find_element_by_xpath("//*[@text=' 扫一扫 ']")driver.find_element_by_xpath("//*[@resource-id='com.taobao.taobao:id/tv_scan_text']")driver.find_element_by_xpath("//*[@content-desc=' 帮忙 ']")driver.find_element(By.XPATH,"//*[@resource-id='com.xueqiu.android:id/name' and @text=' 阿里巴巴 ']") and 的应用父类和兄弟类的办法://[@text=' 性别 ']/..//[@text=' 男 ']。其中 /.. 示意父类,//* 就是兄弟,孙子等类//*[Contains(@text,"tong")] 这是 xpath 的 text 含糊搜寻的办法点击办法:element.click()输出操作:element.send_keys("tong")设置元素的值:element.set_value("tongtong")革除操作:element.clear()是否可见:element.is_displayed 返回 true or false是否可用:element.enabled() 返回 true or false是否被选中:element.is_selected() 返回 true or false获取属性值:element.get_attribute(name)get_attribute(name) 获取的属性名称和 uiautomatorviewer 的统一,然而 index 的值获取不了虚实获取的值是 true 和 false 的字符串,并不是 python 的 boolean 值获取元素文本:element.text获取元素坐标:element.location后果:{'y':19,'x':498}获取元素尺寸(高和宽):element.size后果:{'width':500,'height':22}9.关上雪球 app10.点击搜寻输入框11.向搜索输入框输出 “阿里巴巴”12.在搜寻的后果里抉择阿里巴巴,而后点击13.获取这只上香港 阿里巴巴的股价,并判断这只股价的价格>20014.关上雪球首页15.定位首页的搜寻框16.判断搜寻框是否可用,并查看搜寻框 name 属性值17.打印搜寻框这个元素的左上角坐标和它的宽高18.向搜索框输出:alibaba19.判断阿里巴巴是否可见20.如果可见,打印搜寻胜利点击,如果不可见,打印搜寻失败更多内容,咱们在后续文章分享。

February 8, 2023 · 2 min · jiezi

关于软件测试:史上最全-Appium-自动化测试从入门到框架实战精华学习笔记二

本系列文章汇总了从 Appium 自动化测试从根底到框架高级实战中,所波及到的方方面面的知识点精髓内容(如下所示),心愿对大家疾速总结和温习有所帮忙。1.Appium 根底 1 (环境搭建和简介)2.Appium 根底 2 (元素定位和元素罕用办法)3.Appium 根底 3 (手势操作和 uiautomator 查找元素)4.Appium 根底 4 (显式期待)5.Appium 根底 5 (toast 和参数化)6.Appium 根底 6 (webview)7.Appium_ 企业微信练习 (非 PO,减少和删除联系人)8.Appium_ 企业微信练习 ( PO--减少联系人) 本文为第二篇,次要解说 Appium 手势操作、查找元素、显示期待(附实例代码)。9.进入雪球利用10.再主页从下往上滑动11.防止应用坐标(代码用获取屏幕的长宽来解决这个问题)12.得下载一个叫手势密码锁的 App,百度一下有13.进入解锁的页面14.设置解锁明码为一个7字15.意外发现 Appium 能够指定去不同的初始的 activity,如同也是看利用的 长处xpath 定位速度慢UIAutomator 是 Android 的工作引擎,速度快滚动查找很不便毛病表达式书写简单,容易写错 IDE 没有提醒通过 resource-id 定位通过 classname 定位通过 content-desc 定位通过文本定位组合定位通过父子关系定位driver.find_element_by_android_uiautomator("表达式")注:外层要用单引号,内层的字符串用双引号,因为原本就是 Java,Java 双引号才示意字符串通过文本定位new UiSelector().text("text文本")通过 textContains 含糊匹配new UiSelector().textContains("text文本")通过某个文本结尾匹配new UiSelector().textStartWith("text文本")正则表达式匹配new UiSelector().textMatches("text文本")组合定位比方 id 与 text 的属性组合:driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.xueqiu.android:id/login_account").text("我的")')父子关系定位:childSelector,先定位到父类,再用 childSelector 来定位子类driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.xueqiu.android:id/login_account").childSelector(text("股票"))')兄弟定位:fromParentdriver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.xueqiu.android:id/login_account").fromParent(text("股票"))')有一些页面有继续滑动的能力,比方微博,没有分页,能够始终滑动,UIAutomator 提供了滑动的很好的办法。driver.find_element_by_android_uiautomator(‘new UiScrollable(new UiSelector().’‘scrollable(true).instance(0)).’‘scrollIntoView(new UiSelector().textContains(“病人”).’‘instance(0));’).click()留神:虚拟机和真机不一样,有时候真机的滑动是ok的,有时候虚拟机的不ok强制期待是 sleep,强烈不举荐,设定的工夫太固定,如果是模拟器期待3秒,真机可能只须要期待2秒driver.implicitly.wat(timeout),贯通全副元素的期待,只须要设定一次即可,通常是在创立 driver 的时候后的代码运行,是 dom 建设之后的期待;显示期待是在客户端的期待:援用两个包和一个例子from selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditionsWebDriverWait(self.driver,10).until(expected_conditions.element_to_be_clickable(locator))显示期待与隐式期待绝对,显示期待必须在每一个须要期待的元素后面进行申明是针对某个特定的元素设置等待时间,在设置工夫内,默认美格一段时间检测一次以后某个元素是否存在如果在规定的工夫内找到元素,则间接执行,即找到元素就执行相干操作如果超过设置工夫检测不到就抛出异样,默认检测频率为0.5s,默认抛出的异样时NoSuchElementException用到的两个罕用类WebDriverWaitexpected_condition显示期待能够期待动静加载的 AJax 元素,须要配合 expected_condition 来查看条件个别页面上元素的出现程序是首先呈现 title;而后是 dom 树的呈现,presence 还不残缺,dom 树呈现就是隐式期待了,但此时的元素可能还没有是可点击的状态,所以只用隐式期待,应用 click 办法,必定会报错的;CSS 呈现:可见 visbility;JS 的呈现,JS 特效执行:可点击 clickable;HTML 文档是自上而下加载的JS 文件加载会阻塞 HTML 内容的加载,有些 JS 异步加载的形式来实现 JS 的加载样式表下载实现之后跟之前的样式表一起进行解析,会对之前那的与元素从新渲染presence-visibility-clickabe,元素呈现-可见-可点击,是元素的三个性质,当 DOM 树呈现时,定位元素可能曾经显示进去了,然而可见和可点击的属性可能还没加载进去,这时候元素的一些办法是不可用的,比方 element.click(),要等到 JS 渲染进去当前,元素的 click 属性才能够用对应element.is_displayed()对应element.is_selected()对应element.is_enabled()同步加载:同步模式,又称阻塞模式,会阻止浏览器的后续解决,进行了后续的解析,因而进行了后续的文件加载(如图像)、渲染、代码执行。异步加载:异步加载又叫非阻塞,浏览器在下载执行 JS 同时,还会持续进行后续页面的解决。WebDriverWait(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)driver:浏览器驱动timeout:超时工夫,单位秒poll_frequency:查看的距离步长,默认是0.5signored_exceptions:超时最初的抛出的异样,默认是NoSuchElementException通常咱们只会用到 driver 和 timeoutWebDriverWait().unti(self, method, message='') or until_not()的办法:method:在期待期间,每个一段时间(init中的poll_frequency)调用这个传入的办法,直到返回值不是 Falsemessage:如果超时,抛出 TimeoutException,将 message 传入异样until not 是当某个元素小时或什么条件则继续执行,参数也雷同Appium 间接帮咱们封装好了类,只须要传参数即可,比方咱们应用的是 click(),只须要判断这个元素是否可点击属性才持续点击用法:expected_conditions.element_to_be_clickable(locator),其中 locator 就是:(By.ID, "com.xueqiu.android:id/tv_search")罕用的几个如下:expected_conditions.element_to_be_clickable:元素是否可点击expected_conditions.presence_of_element_located:元素是否被加到 Dom 树外面expected_conditions.visibility_of_element_located:元素是否可见更多内容,咱们在后续文章分享。

February 8, 2023 · 1 min · jiezi

关于软件测试:一文带你了解K8S-容器编排下

批处理工作编排初学者容易误以为容器的工作只在于部署行为--将软件在容器中部署以提供继续的服务。但其实容器也同样大量的被利用于批处理程序的运行上。比方测试行为是典型的批处理工作领域, 它不提供继续稳固的服务, 它只是一段特定的程序,而一但这段测试程序完结后就应该销毁所有,包含执行环境和所占用的资源,容器比照于传统的虚拟机的劣势也在于除了容器更加的轻量级外, 容器的创立和销毁都很不便,通过 K8S 的能力能够很不便的在须要时创立,完结时销毁回收资源以达到更好的资源利用率(就如上篇文章中介绍的 Jenkins 与 K8S 买通后的运作模式)。而当初筹备的测试案例会更加非凡, 它须要反复运行 N 次,因为本次执行的是稳定性测试(也有人叫它浸泡测试或者长期低压测试),这种测试类型的非凡之处就在于它的目标是验证被测系统在长期的低压下是否仍可能提供稳固的服务。所以它的测试形式是长期的(1 天,1 周甚至更长时间)不间断的运行自动化测试。而自动化测试的数量是无限的,它不可能继续的运行那么长时间,所以才须要反复运行。在不革新测试框架的前提下 K8S 能通过什么样的形式来帮忙实现这个测试需要。首先看一段 K8S 提交工作的配置文件。 yamlapiVersion: batch/v1kind: Jobmetadata: name: stable-testspec: template: spec: containers: - name: stable image: registry.gaofei.com/stable_test imagePullPolicy: Always volumeMounts: - name: stableconfig mountPath: '/home/work/configs' readOnly: false restartPolicy: Never volumes: - name: 'stableconfig' configMap: name: stableconfig backoffLimit: 4 parallelism: 1 completions: 1000下面定义的是向 K8S 提交一个 job 类型的也即是批处理程序申请的配置文件, 将这个配置文件保留为 yaml 文件后就能够通过 kubectl 命令即将工作提交到 K8S 集群中运行了, job 会帮忙创立相应的 POD 来实现工作。尽管我曾经对这段配置做了肯定水平的删减,但依然有不少的字段类型容易让老手目迷五色。不过本次案例只需关注几个重点的中央,第一个是在文件中的 template 字段, 它代表了 POD 的模板, job 通过此模板来动静的创立 POD,它定义了本次执行测试的运行环境, 也就是测试是在 POD 中的容器中执行的。K8S 会依据用户填写的内容来启动 POD。第二个须要留神的中央是配置中最上面的 3 个字段: ...

February 8, 2023 · 2 min · jiezi

关于软件测试:史上最全-Appium-自动化测试从入门到框架实战精华学习笔记三

本系列文章汇总了从 Appium 自动化测试从根底到框架高级实战中,所波及到的方方面面的知识点精髓内容(如下所示),心愿对大家疾速总结和温习有所帮忙。1.Appium 根底 1 (环境搭建和简介)2.Appium 根底 2 (元素定位和元素罕用办法)3.Appium 根底 3 (手势操作和 uiautomator 查找元素)4.Appium 根底 4 (显式期待)5.Appium 根底 5 (toast 和参数化)6.Appium 根底 6 (webview)7.Appium_ 企业微信练习 (非 PO,减少和删除联系人)8.Appium_ 企业微信练习 ( PO--减少联系人) 本文为第三篇,次要解说 Appium Toast、参数化、WebView(附实例代码)。 为了给以后视图显示一个浮动的显示块,与 dialog 不同它永远不会取得焦点;显示工夫无限,依据用户设置的显示工夫后主动隐没;自身是个零碎级别的控件,它归属零碎 settings,当一个 App 发送音讯的时候,不是本人造出来的这个弹框,它是发给零碎,由零碎对立进行弹框,这类的控件不在 App 内、须要非凡的控件识别方法;Appium 应用 UIAutomator 底层的机制来剖析抓取 toast,并且把 toast 放到控件树外面,但自身并不属于控件AutoMationName:UIAutomator2 这个是 Appium 自身的设置就自带的,不须要额定增加,默认就是UIAutomator2;getPageSource 是无奈找到 Toast 的;必须应用 Xpath 去查找://*[@class="android.widget.Toast"]//*[contains(@text,"xxxxx")]adb shell dumpsys window | findstr mCurrent这个命令能够找到以后的 activity,不晓得 Android 高版本是不是还 ok,因为 API Demo 权限高,可间接跳到这个 activity 运行,其余 App 就不 ok 了;driver.page_source 能够打印以后的页面,能够找到 Toast 的伪控件;打印 toast 的 text 进去;参数化要解决的是一个用例能够复用的问题,比方一个用例重复使用不同的数据,就能够应用参数化,比方同一个用例,有搜寻股价,比拟股价,都是同一个办法,只是数据不太一样;@pytest.mark.parametrize('searchkey,type,price',[('alibaba','BABA',180),('xiaomi','01810',10)用下面的办法去应用参数化;def test_search(self,searchkey,type,price) 函数的参数要和参数化的参数的数量一样,字符串也要一样;一个用例,有2组参数化,就会运行两次 setup 和 teardown 的办法;应用 self.driver.find_element(By.ID,"com.xueqiu.android:id/search_input_text").send_keys(f"{searchkey}"),应用f"{searchkey}"是一个好货色,能够搭配参数化应用;手机端被测浏览器:(不能够是第三方浏览器)safari for ios and chrome,chromium,or browser for AndroidPC 端装置 chrome 浏览器或者 chromium下载对应手机浏览器对应的 driver客户端代码:"browserName":"Browser" 或者 "browserName":"Chrome" 这个是指定的浏览器"chromedriverExecutable":r"c:\chrome\chromedriver.exe" 这个是指定的chromedriver的门路如何查找app的版本:adb shell pm dump com.android.browser | findstr versiondesire_cap步骤:不通过包来关上浏览器拜访百度输出 tongtong,并点击搜寻留神:第一次运行 Appium,看后盾的门路能够找到浏览器的 chromedriver 的版本,还能够找到 chromedriver 的门路https://blog.csdn.net/huilan_...这个网站的 chromedriver 和 chrome 版本的关系更加全断网查看,如果断网显示网页加载不了就是 WebView看加载条,有加载条通常是 WebView看顶部是否有敞开按钮下拉刷新,页面有刷新就是 WebView下拉刷新的时候是否有网页提供者用工具查看,如果元素显示 WebView,则是 WebView是 Android 零碎提供能显示页面的零碎控件(非凡的 view)< android4.4 WebView 底层实现 webkit 外部=android4.4 采纳 chromium 作为 WebView 底层反对,反对 HTML5、CSS3、JSWebAudio:图形化的界面收听音频WebGL:页面 3d 成果的渲染WebRTC:直播等等,美颜PC:可能拜访 Google下载对应版本的 chromedriver手机端:利用代码须要关上WebView的开关代码中要增加 chromedriverExecutable有一些 WebView 能够被 UIAutomatorview 查找到,但都不举荐,可能会呈现兼容性的问题,比方 text 的显示字符串会不一样如何查找以后 WebView 的网页adb shelllogcat | grep http就能找到拜访的 HTTP 了关上 API demo 的 WebView向输入框输出文本点击 i am link退出利用关上利用点击交易点击 A 股开户输出用户名和明码点击立刻开户退出利用注:关上新的页面其实就是一个新的窗口了,要切换窗口句柄了设施Android 模拟器 6.0 默认反对 WebView,mumu 间接关上了,不必设置;起码模拟器和物理机须要关上 App 内开关(WebView 调试开关);PC 浏览器定位元素Chrome 浏览器-62版本才能够更好的看见 webview 的外部,其余的版本都有一些 bug;换成 chromium 浏览器能够防止很多坑,展现成果和速度要比 chrome 要快;代码有的设施能够应用 find_element_acessibility_id(), 不同的设施渲染的页面不同,兼容性不适宜;switch_to.context() 切换不同的 context,一个页面来说;switch.to_window() 切换不同的窗口句柄,对不同的页面来说;更多内容,咱们在后续文章分享。

February 8, 2023 · 1 min · jiezi

关于软件测试:只懂黑盒测试也能学会的代码覆盖率及精准化测试

测试覆盖率是对测试实现水平的度量。它通常根据某种笼罩准则来对测试用例执行状况进行掂量,以判断测试执行得是否充沛。 ——出自《计算机科学技术名词 》第三版 明天文章中咱们给大家介绍覆盖率统计及覆盖率剖析。在10月13日20:00,资深测试开发架构师思寒将光顾直播间手把手教大家如何搞定精准化测试! 舒适提醒:你认为代码覆盖率与精准化测试常识与黑盒测试无缘?不,你只是没遇到思寒讲的这节课。 常见覆盖率统计工具emmacoberturajacocoemma 与 cobertura 是为单元测试而设计的覆盖率统计,jacoco 与 emma 同属于一家公司,然而是为了更宽泛的覆盖率统计而设计的工具。 Jacocojacoco 的文档中有个 mission 章节,外面对 jacoco 的定位形容的很好。原文的粗心是说其余的工具没有失去踊跃无效的保护,而且其余的工具都是为了繁多工作而设计,他们不是为了 “集成” 而生。从这一点上咱们就能够看出 jacoco 的设计理念。 得益于 jacoco 的设计理念,以及良好的 api 设计,它能够轻松的与已有的工具集成,甚至进行平台化。它也能够同时用于单元测试与集成测试,所以是一款十分优良的覆盖率统计工具,很多公司的精准化测试,就是重度依赖了 jacoco。 覆盖率剖析原理要理解代码覆盖率的统计原理,咱们就须要去深刻理解 jvm 的机制。这方面的常识是 java 畛域的高端进阶常识,限于篇幅,咱们只解说下大略的原理,残缺内容请参考 VM 虚拟机系列的书籍,以及 newrelic 早年公布的若干代码插桩的材料。 简略说下原理,java 源代码会被 javac 编译为 class 文件,class 文件保留了 class 的根本信息与 jvm 的指令集。java 的底层 runtime,也就是 jvm 在解析 class 的时候,会把文件格式的 class 读取到内存并运行。android 也是借鉴了这一整套的设计理念,android 上的 runtime 其实是 dalvik 与 art。 当咱们要统计代码覆盖率的时候,就须要在代码的执行门路上退出探针剖析。通常是在读取类的时候,在要害的指令块的进口与入口减少标记。当指令块被执行后,就会命中探针并实现记录。要批改最底层的 jvm 字节码往往是比拟麻烦的,须要精通 jvm 的各种指令以及 java class 构造。这方面的解决目前已有有十分成熟的开源我的项目能够做大了,如下就是一些出名的字节码批改工具。 ...

January 30, 2023 · 2 min · jiezi

关于软件测试:利器-接口自动化测试框架-RESTAssured-实践三对-Response-结果导出

上一篇文章中介绍了rest-assured对返回后果的断言,最初阐明了对于Response后果导出的需要。可查看往期文章进行查看。 HTTP/1.1 200 OKServer: nginx/1.12.2Date: Mon, 13 Jan 2020 02:15:11 GMTContent-Type: application/json;charset=UTF-8Transfer-Encoding: chunkedExpires: 0Cache-Control: no-cache, no-store, max-age=0, must-revalidateX-XSS-Protection: 1; mode=blockPragma: no-cacheX-Frame-Options: DENYX-Content-Type-Options: nosniffProxy-Connection: keep-alive{ "code": 1, "msg": null, "data": { "tenant_id": 6, "userType": "1", "dept_id": 0, "user_id": 6, "username": "xxx", "jti": "afeb93f8-e4e4-4c15-955b-90cee130c4c7", "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.exxxzciLCJjbGllbnRfaWQiOiJzeXN0ZW0iLCJ1c2VybmFtZSI6InFpbnpoZW4ifQ.6NQmjJp_9XSveOaATNLjtTktWe6_WjHY0o9NbBUdDx8", "expires_in": 9999999, "token_type": "bearer" } ... }@Testvoid login(){ .. . when() .log().all().post("http://47.xxx.xxx.133/auth/oauth/token"). then() .log().all().statusCode(200).body("code",equalTo(1)) .extract().path("data.user_id"); System.out.println("返回id的值是:"+id); }运行后果: extract().asString()有时候咱们可能须要获取ResponseBody中的多个值,例如咱们当初想要获取返回体body中的dept_id和user_id,咱们就能够利用extract().asString()先将响应后果以json字符串的模式保留下来,再一一依据须要获取,具体写法如下: @Testvoid login(){ .. . when() .log().all().post("http://47.xxx.xxx.133/auth/oauth/token"). then() .log().all().statusCode(200).body("code",equalTo(1)) .extract().asString(); System.out.println("返回body的值是:"+json); System.out.println("获取user_id的值是:"+ from(json).get("data.user_id")); System.out.println("获取dept_id的值是:"+ from(json).get("data.dept_id")); }运行后果: ...

January 30, 2023 · 1 min · jiezi

关于软件测试:利器-TestNG-与-Junit-对比测试框架如何选择

TestNG 和 Junit 作为两大风行的测试框架,有哪些区别?各有哪些优缺点?该如何抉择呢?这里简要总结下: 执行时通过运行xml文件最根本的套件治理规定:suite->test->classes->class同一个test下的测试类看做是一个整体,其中的注解对整个test整体都是失效的methods: 所有用例都能够在不同的线程下执行,包含依赖的用例tests: 同一个<test>中的用例运行在同一个线程下,不同<test>中的用例能够运行在不同线程下classes:同一个<class>中的用例运行在同一个线程下,不同<class>中的用例能够运行在不同线程下

January 30, 2023 · 1 min · jiezi

关于软件测试:利器-REST-Assured-实践二断言实现

在上一篇文章中,咱们初步探讨了 REST Assured 的利用实际,还有很多丰盛的用法须要缓缓摸索钻研。而 REST Assured 提供的残缺断言伎俩,是测试工程师最罕用最重要的性能之一。断言该如何应用呢? 这里以 rest-assured 官网给的一个示例做演示学习 {"lotto":{ "lottoId":5, "winning-numbers":[2,45,34,23,7,5,3], "winners":[{ "winnerId":23, "numbers":[2,45,34,23,3,5] },{ "winnerId":54, "numbers":[52,3,12,11,18,22] }]}}在本地应用 python -m CGIHTTPServer 长期搭建起一个服务: 根节点.子节点1)咱们能够应用根节点.(点)子节点的形式一层层的找上来,例如咱们须要对lottoId等于 5 进行断言: @Testvoid testGPath(){ given(). when(). log().all().get("http://127.0.0.1:8000/restAssured.json"). then(). log().all().body("lotto.lottoId",equalTo(5)); }2)如果咱们想要断言winners数组上面的winnerId,查看23和54是否蕴含其中,能够如下lotto.winners.winnerId写法 @Testvoid testGPath(){ given(). when(). log().all().get("http://127.0.0.1:8000/restAssured.json"). then(). log().all() .body("lotto.winners.winnerId",hasItems(54,23));}索引取值 1)如果咱们想要取某些雷同字段中的某一个,能够应用相似索引的形式获取,例如想要断言 winners 数组上面的 winnerId 的第一个值是否为23,能够应用 lotto.winners.winnerId[0],写法如下: @Testvoid testGPath(){ given(). when(). log().all().get("http://127.0.0.1:8000/restAssured.json"). then(). log().all() .body("lotto.winners.winnerId[0]",equalTo(23));}2)如果咱们想要取某些雷同字段中的最初一个,能够应用 -1 作为索引,例如断言断言 winners 数组上面的 winnerId 的最初一个的值是否为 54 @Testvoid testGPath(){ given(). when(). log().all().get("http://127.0.0.1:8000/restAssured.json"). then(). log().all() .body("lotto.winners.winnerId[-1]",equalTo(54));}findAll有时候咱们须要获取合乎某些条件的后果来进行断言,这里 findAll 能够帮忙咱们实现,咱们能够在 findAll 办法中写筛选条件,例如咱们想取 winnerId 的值在大于或等于 30 小于 60 之间的后果进行断言,具体写法如下: ...

January 30, 2023 · 2 min · jiezi

关于软件测试:利器-Java-接口自动化测试首选方案REST-Assured-实践-一

在 REST Assured 的官网 GitHub 上有这样一句简短的形容: Java DSL for easy testing of REST services 简洁的 REST 服务测试 Java DSL REST Assured 官网的 README 第一句话对进行了一个长处的概述,总的意思表白的就是简略好用。那么 REST Assured 有哪些长处,又该如何应用呢? 用 Java 做接口自动化测试首选 REST Assured,具体起因如下: 开源简洁的接口测试 DSL反对 xml json 的结构化解析反对 xpath jsonpath gpath 等多种解析形式对 spring 的反对比拟全面增加 maven 依赖 <dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <version>4.0.0</version> <scope>test</scope></dependency>咱们对接口进行测试个别由三步曲:传参、发申请、响应后果断言,REST Assured给咱们提供了清晰的三步曲,以given、when、then的构造来实现,根本写法如下: //应用参数given(). param("key1", "value1"). param("key2", "value2").when(). post("/somewhere").then(). body(containsString("OK"))//应用X-Path (XML only) given(). params("firstName", "John", "lastName", "Doe").when(). post("/greetMe").then(). body(hasXPath("/greeting/firstName[text()='John']"))申请体body如下 { "password": "elcrD28ZSLLtR0VLs/jERA\u003d\u003d\n", "grant_type": "password", "scope": "server", "userType": 1, "username": "xxx"}Request Header 如下: ...

January 30, 2023 · 2 min · jiezi

关于软件测试:你以为Shell只是命令行读懂这篇文给你的工作赋能

Shell 是什么呢?很多人认为的Shell就是命令行,一条条能够百度进去的命令行。而简历上你只会写相熟Linux?明天用摩拜App给大家解说下如何应用 Shell 去操作 Android 设施进行自动化测试。 首先咱们须要筹备一部手机或者一个Android模拟器。而后电脑上须要配置Android开发环境。 下载 Android SDK:,依照零碎版本下载相应的zip包。请依照本人的零碎按需下载。zip包解压缩,会生成一个tools目录。需新建一个sdk目录,而后把tools目录挪动到sdk目录下。设置环境变量,依据新建sdk目录的地位来增加ANDROID_HOME的门路:应用 sdkmanager 下载工具包Android 调试桥 (adb) 是一个通用命令行工具,其容许您与模拟器实例或连贯的 Android 设施进行通信。它可为各种设施操作提供便当,如装置和调试利用,并提供对 Unix shell(可用来在模拟器或连贯的设施上运行各种命令)的拜访。该工具作为一个客户端-服务器程序,包含三个组件: 客户端:该组件发送命令。客户端在开发计算机上运行。您能够通过收回 adb 命令从命令行终端调用客户端。后台程序:该组件在设施上运行命令。后台程序在每个模拟器或设施实例上作为后盾过程运行。服务器:该组件治理客户端和后台程序之间的通信。服务器在开发计算机上作为后盾过程运行。您能够在 sdk/platform-tools/ 中找到 adb 工具。咱们通常应用adb devices来查看电脑上连贯的Android设施,应用adb shell关上Android设施上的终端来执行各种命令。应用adb logcat来查看Android设施产生的log信息。 如果不想应用usb线来连贯Android设施,能够应用adb tcpip 端口在Android设施上启动一个指定的端口,而后应用adb connect Android设施ip:端口近程连贯Android设施。 uiautomator 是一个 java 库,蕴含用于创立自定义性能UI测试的API,以及用于主动执行和运行测试的执行引擎。应用uiautomator help能够查看帮忙信息。此处咱们次要应用uiautomator dump来获取以后屏幕的UI层次结构的XML文件。默认存储文件的地位/sdcard/window_dump.xml,也能够指定寄存的地位uiautomator dump /data/local/tmp/ui.xml。 input能够用来模仿各种输出操作,例如:发送文本、点击控件、滑动坐标。应用input能够查看帮忙信息。 input text abc:输出文本abcinput tap x坐标 y坐标:点击坐标地位x,yinput swipe x1坐标 y1坐标 x2坐标 y2坐标:从x1,y1坐标滑动到x2,y2坐标好了,当咱们配置好Android开发环境,大略理解adb命令的作用之后,同时晓得了Android设施上的uiautomator和input命令后,就开始咱们进入明天的重点了,应用这些命令来组合成自动化的操作。 首先呢,咱们须要找一个咱们练习用的APP,明天咱们抉择的是”摩拜单车“。大家能够在此处下载安装包文件。 下载实现之后,咱们把Android设施应用usb线连贯到电脑。应用adb devices来确认设施是否连贯胜利。 设施曾经连贯胜利,咱们须要把“摩拜单车”利用装置到Android设施上,执行adb install 摩拜单车安装文件,“有些手机权限治理比拟严格,可能须要在手机上点击批准装置此利用。” 进入Android设施的终端下咱们先关上摩拜单车利用,而后去查看一下页面的源码执行后会生成一个.xml文件。文件构造如下。每个控件都是由<node></node>组成。 咱们能够依照<node />、</node >构造来进行拆分。应用的命令行为: 点击依据控件中的bounds="x1,y1"属性来查找控件中心点的 x,y轴坐标,计算方法是(x1+x2)/2,(y1+y2)/2 而后应用下面的办法失去的x,y坐标来点击利用图标input tap 167.5 219。最初写成一个函数,只有传递控件的名字就能点击相应的图标啦。 ...

January 30, 2023 · 1 min · jiezi

关于软件测试:代码质量管理平台实战-SonarQube-安装配置及-JaCoCoMaven-集成

SonarQube 是一个用于代码品质治理的开源平台,用于治理源代码的品质。同时 SonarQube 还对大量的继续集成工具提供了接口反对,能够很不便地在继续集成中应用 SonarQube。此外, SonarQube 的插件还能够对 Java 以外的其余编程语言提供反对,对国际化以及报告文档化也有良好的反对。官网网址:https://www.sonarqube.org/通过插件模式,能够反对包含 Java,C#,C/C++、PL/SQL、Cobol、JavaScrip、Groovy、Ruby 等二十五种编程语言的代码品质治理与检测,针对不同的编程语言其所提供的剖析形式也有所不同:对于所有反对的编程语言,SonarQube 都提供源了代码的动态剖析性能;对于某些特定的编程语言,SonarQube 提供了对编译后代码的动态剖析性能。SonarQube 反对多种客户端集成形式,包含但不限于 Scanner 客户端、Ant、Gradle、Maven、Jenkins、IDEA 插件等。比拟罕用的为 Gradle 和 Maven。SonarQube 并不是简略地将各种品质或覆盖率检测工具的后果(例如 CheckStyle、JaCoCo 等)间接展示给客户,而是通过不同的插件算法来对后果进行再加工,并最终以量化的形式来掂量代码品质,从而不便地对不同规模和品种的工程进行相应的代码品质治理,以便进行有针对性的代码修复或重构。SonarQube 在进行代码品质治理时,会从以下的七个纬度对我的项目代码品质进行剖析。Sonar 实际上是一个 Web 零碎,展示了动态代码扫描的后果,后果是能够自定义的,而真正实现代码扫描的是 Sonar Scanner 这个工具,另外同时反对多种语言的原理是它的扩展性,通过插件实现的,也就是 Java Jar 架包,能够在 Sonar 平台上在线装置或者离线装置。1.已装置 JDK1.8 环境2.已装置 Maven(用于前期与 SonarQube、JaCoCo 的集成)3.已装置 MySQ L数据库(Sonar 默认的数据库是自带 H2 数据库,是很小的嵌入式数据库引擎,这里的配置换成了 MySQL,为了不便通过数据库客户端进行数据查问)1.下载 SonarQube,地址为:http://www.sonarqube.org/down...2.配置数据库(上面的SQL是指定了schema为sonar,password为sonar,其中第四条SQL是localhost是因为MySQL装置在本地)3.装置 SonarQubeI. 将下载的 sonar-3.7.zip 包解压至 Windows某个门路,如 D:\Tools\sonar(如是其余OS,请抉择对应门路,如Linux的/usr/local/等)。II. 批改 sonar.properties在 /conf/sonar.properties 文件中,配置数据库设置(默认曾经提供了各类数据库的反对这里应用 MySQL,因而勾销 MySQL 模块的正文),同时因为端口抵触而改成端口为 11000。III.在 /bin/ 目录下,运行 /windows-x86-64/StartSonar.bat (因为本 demo 是在 win10 64位装置的,如果是 Linux 的话,运行 nohup bash sonar.sh start &)IV. 拜访 http://localhost:11000,如果不是本机就输出 http://[remote IP]:11000,如果你看到下图所示即证实配置胜利。4.用 admin/admin(默认)进行登录,并装置汉化包Chinese pack installationChinese pack restartChinese pack restart confirmWell done! ...

January 30, 2023 · 1 min · jiezi

关于软件测试:云架构系统如何做性能分析-实战干货

性能剖析始终是性能施行我的项目中的一个难点。对于只做性能测试不做性能剖析的团队来说,总是不能把问题十分显性地展现进去,不能给其余团队十分明确的疏导。对于这种类型的测试施行,只能把问题抛出来,让其余相干团队去查。沟通老本很高。而一个成熟的性能团队应该是要把问题点剖析进去,给其余团队或责任人十分明确的瓶颈点,以放慢问题的解决进度。从残缺的剖析思路上思考。有两个要点:分段和分层。如上图所示,分段就是要把 1-6 以及在 server1/2、DB 上耗费的工夫都统计进去。分层就是要把上图中各种不同色彩的层都剖析到。能够应用的办法在不同的我的项目中各不一样,取决于利用的架构。性能剖析的深度要到什么水平为宜呢?次要是看组织的构造和我的项目中波及到的人的职责定义。要把握的深度就是让各团队没有技术上的 Gap。这一点十分重要。从理论的操作层面来说,因为性能次要是在大压力下是否能放弃住工夫的可接受性。所以次要把握如下几点:1.从响应工夫到具体的代码;2.从响应工夫到具体的 SQL;3.从响应工夫到具体的配置有了这几个层面的剖析,基本上就能够确定一个问题的瓶颈点了。在数据了解上,有两个阶段:1.晓得计数器的含意:这个阶段看似简略,但能记得住那么多 performance counter 的人并不多,这个记不住倒是没有太大关系,遇到就查,多遇几次天然就记住了;比方,对于上图来说,要了解的计数器就是 await 和 svctm,await 高是必定存在问题。如果要判断问题是重大不重大还要看另一个计数器就是 avgqu-sz,它是队列长度。svctm 是均匀每次 io 的工夫(单位:ms)。再来看看 CPU 的计数器。 CPU 的计数器在 top 中有 8 个,在 mpstat 中多两个。在下面的计数器中,通常的说法是,us CPU 是用户态的,如果这部分高,通常是利用代码耗费的;sy CPU 是零碎态的,如果这部分高,通常是 os 层的配置有问题。这种说法在大部分状况下是正当的,然而不论是 us CPU 还是 sy CPU,高和低都只是问题的体现。剖析到此并不是性能剖析的完结,上面要找到的就是为什么这么高?这一步是十分要害的。个别状况下,剖析门路是:所以下一步就很清晰了,就是找哪个过程、线程耗费的 CPU 高,进而查到代码。2.晓得计数器的值之间的关系:这个阶段大部分人都须要好几年的工夫能力齐全把握惯例的计数值,之所以说只能把握惯例的计数值是因为有一些数值的联动关系不是那么容易碰失去。比如说 CPU 模式对 TPS 和 RT 的影响,大部分人都是拿到硬件的时候都是 Full performance mode 了,并不关怀还有没有其余的模式;比如说网络计数值导致的 TPS 有法则或无规律的抖动。这些场景都要求做性能剖析的在看到某个计数值的时候能有间接的反馈,然而这一点十分难。因为数值的高下对大部分人来说就是一个谜,常常有人问这样的问题,这个值是高还是低,应该说只有不是一起工作的人都说不上来某个值是高还是低(当然对一些十分清晰的场景是比拟容易判断的),正当还是不合理。如上图所示:procs 的 b 列很高,这个值的含意是等 io 的过程数,它在上图中和 CPU wa 列是对应的。同时,也和 IO 的 bi、bo 列是对应的,从这几个值关联来看下步是要看哪个过程耗费的 IO 多了。能通过数据了解的这一档次,才算是到了中级性能剖析工程师的能力。4.1 压力工具的曲线做性能剖析,看曲线是最直接了当的。压力工具能够给咱们的明确的信息就是这个零碎是不是有问题的,这也是压力工具本身曲线能够明确显示的惟一的信息。请看上面几张图:TPS 图:响应工夫图:递增线程图:怎么了解这几张图呢?先看张线程图。能够晓得多个业务都有设置并发递增线程。这个图能给的信息就是这个且只有这个。联合 TPS 图能够晓得,在第三个梯度的时候,TPS 到了峰值。在第四个梯度的时候,TPS 曾经开始降落了。再联合响应工夫图,在第三个梯度的时候,响应工夫是显著地抬了头。前面响应工夫在继续减少,每个梯度都有减少。这时候有两件动作可做:1.批改场景接着测试。如何批改场景?把线程数升高。降到在梯度减少的过程中,响应工夫没有明显增加的趋势之后再来看 TPS 是什么趋势。对于一个零碎来说,响应工夫有减少、TPS 没有减少(或有降落)、线程数有减少,这几个判断就明确阐明了零碎是有瓶颈的,并且也仅能阐明这一点。2.在以后场景下,剖析瓶颈点,看工夫耗费在哪个环节上。这两个动作取决于指标,如果 TPS 在第三个梯度上曾经达到了业务指标,那能够不做优化。所以第一个动作的前提是 TPS 指标已达到。显然,第二个动作就是 TPS 指标还未达到。当然有人提出 TPS 指标达到了,有瓶颈也是须要优化呀?在这一点上,就要看做决定的人怎么思考了,因为优化是要付出老本的。接下来再说另一种曲线。4.2 系统监控曲线。因为操作系统级的监控有十分多的监控曲线,这里拿一个内存的来举例子。内存曲线图:对 linux 操作系统来说,操作系统的内存会缓缓被调配掉,变成 caching memory。所以如果只看 available memory 的意义并不大,须要 -/+ buffer/cache 之后再看可用内存。这一点大家都分明。那么下面是不是说内存没有问题呢?当然不是。因为内存不仅被用光了,而且还断了一段,前面又有了数据,接着又用光,又断了一段时间。红色的框中,是有问题的,因为这一段连数据都没有抓到,抓数据的过程应该是没了。所以 available memory 的降落并不是要关注的重点,-/+ buffer/cache 之后的 available memory 才是要关注的重点。另外从上图中看到的断掉的工夫点也是要剖析的重点。另外,上图中,蓝框内内存始终在很低的状态,前面却忽然升高了那么多。这里也是要剖析的重点。JVM 图对 JVM 曲线来说,也是要看趋势的,基础知识是 jvm gc 的逻辑。YGC 始终在做,heap 始终在减少,这个过程是不是失常的呢?对于没有做过 Full GC 的 JVM 来说,heap 是有减少的趋势是能够了解的,然而这个 “了解” 须要一个前提,就是业务有没有增量。如果是有业务的增量,上图就是失常的;如果没有业务增量,上图就是不失常的,那什么样的才是没有业务增量的失常呢?看下图:上图就显著是个十分失常的 JVM。对于曲线的了解,首先要晓得的是数据的起源和含意。在性能剖析中,有很多曲线的趋势都不是能够间接指明问题的,只能通过收集全副的信息来做残缺的剖析能力判断问题存在点。下面举了两个例子的角度别离是:压力工具生成的曲线和后端服务器相应的工具生成的曲线。就是为了阐明一点:曲线剖析是在关注所有的层面。间断三天,早晨在执行一个业务场景继续几个小时之后,就开始间断报错。服务器连不上了。但在报错的一开始,并不是全副都报错,而是有局部是能够胜利的,然而过一段时间之后,所有业务都报错了。次日来看,发现过程不见了。原本认为是过程解体退出了,那日志中应该留下来些证据。然而关上了日志查看了一下,没有任何异样信息。间断三天都呈现。就登录 zabbix 下来看了一下主机资源。 ...

January 30, 2023 · 3 min · jiezi

关于软件测试:专项测试实战-如何测试-App-流畅度基于-FPS-和丢帧率

FPS 和丢帧率能够在肯定水平上作为 APP 晦涩度的一项衡量标准,本文介绍利用 adb shell dumpsys gfxinfo 命令获取软件渲染加载过程的数据,进行计算从而获取测试后果。在此之前,须要先理解屏幕展现绘制过程及 Android 的 VSync 机制VSync 全称是 Vertical Synchronization(垂直同步),在 Android 4.1 中引入 Android 零碎(同时引入的一个概念是 Triple Buffering)。学计算机的常常听到 Buffer 的概念(生存中也碰到过很多),起到的都是一个相似的作用。用来协调两个不同速度的货色工作。为什么会这样呢?因为 CPU/GPU 解决和屏幕展现的速度不一样然而却应用的是同一块内存。怎么解决呢?能够将 CPU/GPU 解决和屏幕展现离开,CPU/GPU 在后盾解决,解决完一帧的数据当前才交给屏幕展现(这样可能导致另外的问题是,如果 CPU/GPU 解决很慢,那么屏幕可能会始终展现某一帧的数据,上面次要剖析这个问题的解决)。 手机屏幕刷新率:手机硬件每秒刷新屏幕的次数,单位 HZ。个别是一个固定值,例如 60HZ。FPS:画面每秒传输帧数,艰深来讲就是指动画或视频的画面数。单位 HZ。手机屏幕刷新率是固定的,FPS 则是始终变动的,怎么能力保障可能运行晦涩呢?从几个例子来看吧。先解释图片代表的意思:最上面黑线代表的是工夫,黄色代表屏幕展现,绿色代表 GPU 解决,蓝色代表 CPU 解决。Jank 代表的是反复展现上一帧的异样。上面会从屏幕展现的每一帧开始剖析:上图是没有引入VSync 机制的解决流程。 Display 展现第0帧数据,这时 CPU/GPU 会去解决第1帧的数据。Display 展现第1帧数据(此时屏幕显示是失常的),这时 CPU/GPU 可能解决其余工作导致很晚才去解决绘制。因为 CPU/GPU 没解决好第2帧的数据,所以 Display 还是展现第1帧数据(此时屏幕显示是异样的),CPU/GPU 解决完第2帧没有解决完的数据而后持续解决第3帧的数据。…上图中一个很显著的问题是,只有一次 CPU/GPU 解决出现异常就可能导致前面的一系列的解决出现异常。VSync 能够简略的认为是一种定时中断,零碎在每次须要绘制的时候都会发送VSync Pulse 信号,CPU/GPU 收到信号后马上解决绘制。在4.1当前引入VSync 机制。在 FPS < 手机屏幕刷新率的状况下,所有运行完满。VSync 机制下 Double Buffering 时 FPS > 手机屏幕刷新率的状况。 ...

January 30, 2023 · 1 min · jiezi

关于软件测试:不懂PO-设计模式这篇实战文带你搞定-PO

为UI页面写测试用例时(比方web页面,挪动端页面),测试用例会存在大量元素和操作细节。当UI变动时,测试用例也要跟着变动, PageObject 很好的解决了这个问题! 应用UI自动化测试工具时(包含selenium,appium等),如果无对立模式进行标准,随着用例的增多会变得难以保护,而 PageObject 让自动化脚本井井有序,将 page 独自保护并封装细节,能够使 testcase 更持重,不须要大改大动。 具体做法:把元素信息和操作细节封装到Page类中,在测试用例上调用Page对象(PageObject),比方存在一个性能“选取相册题目”,须要为之建设函数selectAblumWithTitle(),函数外部是操作细节findElementsWithClass('album')等:以选“取相册题目”举例,伪代码如下: selectAblumWithTitle() { #选取相册 findElementsWithClass('album') #选取相册题目 findElementsWithClass('title-field') #返回题目内容 return getText()}page object的次要准则是提供一个简略接口 (或者函数,比方上述的selectAblumWithTitle),让调用者在页面上能够做任何操作,点击页面元素,在输入框输出内容等。 因而,如果要拜访一个文本字段,page object应该有获取和返回字符串的办法。page object应该封装对数据的操作细节,比方查找元素和点击元素。当页面元素改变时,应该只扭转page类中的内容,不须要扭转调用它的中央。 不要为每个UI页面都创立一个page类,应该只为页面中重要的元素创立page类。 比方,一个页面显示多个相册,应该创立一个相册列表page object,它蕴含许多相册page object。如果某些简单UI的层次结构只是用来组织UI,那么它就不应该呈现在page object中。page object的目标是通过给页面建模,从而对应用程序的使用者变得有意义: 如果你想导航到另一个页面,初始page对象该当return另一个page对象,比方点击注册,进入注册页面,在代码中就应该return Register()。如果想获取页面信息,能够return根本类型(字符串、日期)。 倡议不要在page object中放断言。应该去测page object,而不是让page object本人测本人,page object的责任是提供页面的状态信息。这里仅用HTML形容Page Object,这种模式还能够用来暗藏Java swing UI细节,它可用于所有UI框架。 PageObject的核心思想是六大准则,把握六大准则才能够进行 PageObject 实战演练,这是 PageObject的精华所在。selenium官网凝聚出六大准则,前面的PageObject应用都将围绕六大准则发展: 公共办法代表页面提供的服务不要裸露页面细节不要把断言和操作细节混用办法能够return到新关上的页面不要把整页内容都放到PO中雷同的行为会产生不同的后果,能够封装不同后果上面,对上述六大准则进行解释: 准则一:要封装页面中的性能(或者服务),比方点击页面中的元素,能够进入到新的页面,于是,能够为这个服务封装办法“进入新页面”。准则二:封装细节,对外只提供办法名(或者接口)。准则三:封装的操作细节中不要应用断言,把断言放到独自的模块中,比方testcase。准则四:点击一个按钮会开启新的页面,能够用return办法示意跳转,比方return MainPage()示意跳转到新的PO:MainPage。准则五:只为页面中重要的元素进行PO设计,舍弃不重要的内容。准则六:一个动作可能产生不同后果,比方点击按钮后,可能点击胜利,也可能点击失败,为两种后果封装两个办法,click_success和click_error。以企业微信首页为例,企业微信首页有二个次要性能:立刻注册和企业登录。企业微信网址:https://work.weixin.qq.com/ 点击企业登录能够进入登录页面,在页面能够扫码登录和企业注册。 点击企业注册能够进入注册页面,在页面能够输出相干信息进行注册。 用page object准则为页面建模,这里波及三个页面:首页,登录,注册。在代码中创立对应的三个类Index,Login,Register:• 登陆页⾯提供login findPassword性能– Login类 + login findPassword⽅法• 登录页⾯内的元素有多少并不关⼼,暗藏外部界⾯控件• 登录胜利和失败会别离返回不同的页⾯– findPassword– loginSuccess– loginFail• 通过⽅法返回值判断登录是否合乎预期 BasePage是所有page object的父类,它为子类提供公共的办法,比方上面的BasePage提供初始化driver和退出driver,代码中在base_page模块的BasePage类中应用__init__初始办法进行初始化操作,包含driver的复用,driver的赋值,全局期待的设置(隐式期待)等等: ...

January 30, 2023 · 2 min · jiezi