暂无个人介绍
能力说明:
精通JVM运行机制,包括类生命、内存模型、垃圾回收及JVM常见参数;能够熟练使用Runnable接口创建线程和使用ExecutorService并发执行任务、识别潜在的死锁线程问题;能够使用Synchronized关键字和atomic包控制线程的执行顺序,使用并行Fork/Join框架;能过开发使用原始版本函数式接口的代码。
暂时未有相关云产品技术能力~
阿里云技能认证
详细说明性能和压力测试是每一个互联网应用程序上线之前都必须检验的测试项目。JMeter 作为目前互联网大厂最流行、最强大的性能测试工具,已经成为测试人员行走江湖的必备利器。 相比传统的压力测试工具(如 LoadRunner),JMeter 最显著的特点就是开源、轻量级、易于维护、便于扩展。 面对变化多端的业务情况,测试开发人员可以基于 JMeter 源码修改和二次开发,快速实现定制化功能,更好的满足业务
应不少同学的要求,通过本文分享下对测试工程师职业发展的看法,话题较大,不敢随便乱写,抛砖引玉,仅供大家参考。 1. 测试行业发展背景 微软引领的大测试时代 中国最早的对 IT 工程的启蒙和测试定位的探索大多来自于微软。当年的大背景是微软故意放任 Windows 的盗版,并积极的输出他自身的 IT 生态技术栈到中国。中国从政府到民间几乎全部使用了 Windows。中国有大量的微软认证的 V
随着分层测试策略和自动化测试的普及,测试框架和接口测试成为测试工程师需重点掌握的底层核心技能。 在 Python 自动化测试领域,Pytest 由于入门简单,扩展丰富,功能强大,易于维护等特性,成为目前大厂最流行最好用的 Python 自动化测试框架,没有之一! Pytest 主要优势如下: 为了帮助测试同学快速掌握 Python 测试框架实战技能,霍格沃兹测试学院特别策划了《Pytest 测试
工作中我们经常需要对应用的页面进行手势操作,比如滑动、长按、拖动等,AppiumDriver 为我们提供一个模拟手势操作的辅助类 TouchAction,可以通过它对手机屏幕进行手势操作。 具体用法参见链接:https://ceshiren.com/t/topic/3275 ## 导入TouchAction ``` from appium.webdriver.common.touch_ac
服务与服务之间传递数据包,往往会因为不同的应用场景,使用不同的通讯协议进行传递。比如网站的访问,常常会使用 HTTP 协议进行传递,文件传输使用 FTP,邮件传递使用 SMTP。上述的三种类型的协议都处于网络模型中的应用层。除了应用层的常用协议之外,对于传输层的 TCP、UDP 协议,以及 Restful 架构风格、RPC 协议等等基础网络知识要有一定的了解和认知。 ## 网络协议介绍 在
Appium 提供了很多系统操作,在测试 APP 过程中会有一些特殊场景,比如来电话、短信,横竖屏切换,安装/卸载 APP,手机上的键盘操作,录屏等功能。下面介绍几个常用的设备交互 API。 更多用法参见官网: http://appium.io/docs/en/about-appium/intro/ ## 模拟电话/短信 用下面的命令模拟 GSM 电话和短信,注意:只能在模拟器上使用!
测试时需要用到测试设备,通常测试人员会选择使用模拟器进行自动化调试。模拟器分为原生模拟器与第三方模拟器。我们今天介绍的就是原生模拟器是 Android SDK 中自带的模拟器,可以通过 Android Studio 工具创建模拟器。 ## 创建/管理 原生模拟器 Android 虚拟设备(AVD)是一种配置,它可以定义 Android 模拟器例如:Android 手机、平板电脑、Wear O
Capability 是一组键值对的集合(比如:"platformName": "Android")。Capability 主要用于通知 Appium 服务端建立 Session 需要的信息。客户端使用特定语言生成 Capabilities,最终会以 JSON 对象的形式发送给 Appium 服务端。 ## Appium底层架构 ![](https://ceshiren.com/uploa
Appium 是由 Node.js 来实现的 HTTP 服务,它并不是一套全新的框架,而是将现有的优秀的框架进行了集成,在 Selenium WebDriver 协议(JsonWireProtocol/Restful web service)的基础上增加了移动端的支持,使 Appium 满足多方面的需求。 官方提供更详细的 Appium 结构说明:https://appium.io/docs/e
想要使用 Appium 进行测试,那么就一定要先了解Appium的原理。Appium 不仅能够实现移动端的 JSONWP,并且延伸到了 Selenium 的 JSONWP,它能够控制不同移动设备的行为,例如通过会话安装和卸载 APP。 ## Appium 原理 ![](https://ceshiren.com/uploads/default/original/3X/4/3/435691a3
Hybrid App(混合模式移动应用)是介于 Web-app、Native-app 之间的 app,本质上是 Native-app 中嵌入 WebView 组件,在 WebView 组件里可以访问 Web App。Hybrid App 在给用户良好交互体验的同时,还具备了 Web App 的跨平台、热更新机制等优势。 Android WebView 在 Android 平台上是一个特殊的
Toast 是 Android 系统中的一种消息框类型,它属于一种轻量级的消息提示,常常以小弹框的形式出现,一般出现 1 到 2 秒会自动消失,可以出现在屏幕上中下任意位置。它不同于 Dialog,它没有焦点。Toast 的设计思想是尽可能的不引人注意,同时还向用户显示信息希望他们看到。 测试 APP 下载地址: 首先将上面地址的 apk 包下载到本地,并安装到模拟器中;在模拟器中打开 API
![](https://ceshiren.com/uploads/default/original/3X/5/4/547024bf804094aeeaa8f2ff2bed19df06f60c2a.jpeg) 玩游戏的时候最怕的就是卡顿。排位赛的紧急关头,明明马上就能上一段位,却因为卡顿导致给对方送人头。还把对手送上了王者。引起队友骂声一片。作为测试工程师的你,可以忍? 卡顿测试也是专项测试里的
![](https://ceshiren.com/uploads/default/original/3X/2/0/2048a4bda04160753635199ab12a0df0a541bfba.jpeg) Appium 服务器运行时会产生很多日志,但是很多人并不了解其中的意义,也无法掌握有用的信息。本文将详细解读如何读懂 Appium 日志,并让你的测试效率翻倍。 日志第一行显示了 App
客户端的页面通过 XML 来实现 UI 的布局,页面的 UI 布局作为一个树形结构,而树叶被定义为节点。这里的节点也就对应了我们要定位的元素,节点的上级节点,定义了元素的布局结构。在 XML 布局中可以使用 XPath 进行节点的定位。 ## App的布局结构 从上面这张图中可以看到最左侧是应用的页面的展示,中间部分展示了这个页面的树形结构的 XML 代码。 其中包含的内容为: - 节点
![](https://ceshiren.com/uploads/default/original/3X/3/7/3766bf57a1f31638a1c5f9d41f1b07b2b35acf3d.jpeg) 在实际的工作中,绝大部分公司都至少有3个以上的环境,供测试与研发人员使用。测试人员不可能为每个环境都准备一个自动化测试的脚本,这样的维护成本太过庞大。所以就需要做到一套脚本,可以在各个环境上
![](https://ceshiren.com/uploads/default/original/3X/6/b/6b7c415433c9acc8c4e15708b60b419da5eb9ed3.png) ![](https://ceshiren.com/uploads/default/original/3X/8/d/8dec96d8de9bc7b8ceab15cf3117a3b772c7dc7
Docker是一个开源的应用容器引擎,基于 Go 语言开发,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的系统。 Docker 是世界领先的软件容器平台,Docker 官方的口号是”调试你的应用,而不是调试环境“。在进行多人协作开发时,开发者可以使用 Docker 来消除所谓“我这里运行是好的”(works on my machine)问题
jenkins 是开源 CI&CD 软件领导者,提供持续集成和持续交付服务,有超过1000个插件来支持构建、部署、自动化,满足任何项目的需要。 可以访问 Jenkins 镜像的介绍网站:https://hub.docker.com/r/jenkins/jenkins/ 查看更多信息。 ``` docker pull jenkins/jenkins ``` ``` docker run -
![](https://ceshiren.com/uploads/default/original/3X/1/4/14555b1e67a432f376f9f2feea72f8bc85c785f2.png) 互联网行业已进入小步快跑快速迭代的趋势。一个新版本的上线,不仅需要移动端测试,更需要进行服务端的测试。服务端的测试可能比移动端的测试更重要。服务端比移动端更复杂交互更多也更考验技术了。
![](https://ceshiren.com/uploads/default/original/3X/d/f/df073f547e236febf10c4c13c515bdfce25e2ae4.png) Docker 是一个开源的应用容器引擎,基于 Go 语言开发,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的系统。 Docker 是世界领
在有些场景中,需要上传文件,而 Selenium 无法定位到弹出的文件框,以及网页弹出的提醒。这些都是需要特殊的方式来处理。 input 标签使用自动化上传,先定位到上传按钮,然后 send_keys 把路径作为值给传进去. 如图所示,是企业微信文件上传的页面 定位到标签为 input,type 为 file 的元素信息,然后使用 send_keys 把文件路径作为值给传进去。 ![](h
在实际工作中等待机制可以保证代码的稳定性,保证代码不会受网速、电脑性能等条件的约束。 等待就是当运行代码时,如果页面的渲染速度跟不上代码的运行速度,就需要人为的去限制代码执行的速度。 在做 Web 自动化时,一般要等待页面元素加载完成后,才能执行操作,否则会报找不到元素等各种错误,这样就要求在有些场景下加上等待。 最常见的有三种等待方式: - 隐式等待 - 显式等待 - 强制等待 后面会一一介
使用chrome浏览器对webview进行手工查看,伴随着业务增多,数量加大,手工操作的速度会无法跟上业务增长,此时需要自动化方法测试webview性能。 当页面加载时,会渲染一系列内容,渲染过程可分为多个阶段,比如下图: ![](https://ceshiren.com/uploads/default/original/3X/d/7/d7eab38d60e4430a01c658f6605
![](https://ceshiren.com/uploads/default/original/3X/7/5/756e5e8564a4e57c44190330107ba54ca7676e16.jpeg) - 需求分析与测试设计(性能需求目标+业务模型拆解) - 测试数据准备和构造(基于模型的数据准备) - 性能指标预期(性能需求目标) - 发压工具配置及脚本编写(压力策略) - 测试过程(
![](https://ceshiren.com/uploads/default/original/3X/7/5/756e5e8564a4e57c44190330107ba54ca7676e16.jpeg) 此例使用的是 GitHub 上一个开源的电商项目 mall,需要的可以去 GitHub 上下载部署,有详细的部署教程: - GitHub地址: - https://github.com/
![](https://ceshiren.com/uploads/default/original/3X/e/f/efd4f6ab53cc4a449657509b655cf5e6499878e5.jpeg) 在 UI 自动化测试过程中,面对复杂的业务场景,经常会遇到这样的挑战: - 简单的录制/回放速度快,但无法适应复杂场景; - 编写自动化测试脚本比较灵活,但工作量大且可维护性差; - 以往的
在日常的工作中,常常需要制作自己的项目的镜像,一般通过以下两种方式制作镜像:Docker commit、Dockerfile。 ## Docker commit Docker commit一般用做从一个运行状态的容器来创建一个新的镜像。定制镜像应该使用Dockerfile来完成。 ``` docker commit 容器名 新镜像名:tag ``` 使用这种方式的缺点是:1.对外不
一、什么是rest-assured 现在,越来越多的 Web 应用转向了RESTful的架构,很多产品和应用暴露给用户的往往就是一组 REST API,这 样有一个好处,用户可以根据需要,调用不同的 API,整合出自己的应用出来。从这个角度来讲,Web 开发的成本会越来越低,人们不必再维护自己的信息孤岛,而是使用 REST API 这种组合模式。 ![](https://ceshiren.com
先看 Wikipedia 上的解释: xUnit 是一系列测试框架的统称,最开始来源于一个叫做 Smalltalk 的 SUnit 框架,现在各种面向对象的语言,如 Java、Python 的鼻祖就是 Smalltalk,后来这些语言都借助了 Sunit 框架的理念,有很多通用的规范和特征,也就统称为 xUnit。 - Java : JUnit、TestNG - Python : UnitTes
性能压测,是保障服务可用性和稳定性过程中,不可或缺的一环。我们将从性能压测的设计、实现、执行、监控、问题定位和分析、应用场景等多个纬度对性能压测的全过程进行拆解,以帮助大家构建完整的性能压测的理论体系,并提供有例可依的实战。 01 性能环境要考虑的要素 系统逻辑架构,即组成系统的组件、应用之间的结构、交互关系的抽象。最简单最基本的就是这三层架构。 三层逻辑结构图 - 客户层:用户请
在大话测试数据(一)文章中,我提到,获取数据的第一步是获取概念上数据。这一步看起来简单,其实不是那么容易。获取概念数据和获取需求的过程是交织在一起的,事实上,它们其实是一个事儿,因为数据是需求中最重要的组成部分。 需求工程是个大话题,目前有很多种流派和实践方式来来搞定需求,但它们的思想都比较一致,那就是:不断的由粗到精的迭代(如下图)。关于需求这里不再展开,如果大家有兴趣的话,推荐两本我觉得还
![](https://ceshiren.com/uploads/default/original/3X/9/b/9bf7800ee97dd8d5d8ab97247062e7174846a166.jpeg) 测试数据在整个测试过程中扮演着极为重要的角色,但是它却像个没有星象的演员,明明至少是男二号,但总是被观众忽略。在测试过程中,我们往往在测试计划阶段就忽略了测试数据,在起先没有给测试数据的设计
![](https://ceshiren.com/uploads/default/original/3X/2/a/2a554254fc8bc1b0940a66a733efe448359a0ec3.jpeg) 上节课爱画漫画的小哥哥用漫画形式向大家展示了JMeter的进阶用法:如何搭建InfluxDB,使用更炫酷的Grafana。 看到很多小伙伴觉得看的不过瘾,在强烈的催促下,小哥哥的新文章又出
![](https://ceshiren.com/uploads/default/original/3X/3/0/3061c49d73b39d6524ffe274f626a9d574786ca7.gif) 上节课展示了JMeter的基础用法:录制回放功能,断言,聚合报告。李政道教授谈论学习方法,他表明我们可以获取很多信息。 但是,从了解到理解还有一段路要走。只有亲手练了才能变成理解,能获取
![](https://ceshiren.com/uploads/default/original/3X/5/e/5ea8dedae80fbc21593b87c72807c990c252cba0.jpeg) 接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。 很多系统的关联都是基于接口测试
## 为什么使用Spring Boot - 简化配置,无需编写太多的 xml 配置文件,效率很高; - Spring 可以整合很多各式各样的框架,并能很好的集成; - 基于 Spring 构建,使开发者快速入门,门槛很低; - Spring Boot 可以创建独立运行的应用而不需要依赖外部组件或工具; - 内置 Tomcat 服务器,无需打成 war 包,可以直接在内置 Tomcat 中运行
## 为什么使用Spring Boot - 简化配置,无需编写太多的 xml 配置文件,效率很高; - Spring 可以整合很多各式各样的框架,并能很好的集成; - 基于 Spring 构建,使开发者快速入门,门槛很低; - Spring Boot 可以创建独立运行的应用而不需要依赖外部组件或工具; - 内置 Tomcat 服务器,无需打成 war 包,可以直接在内置 Tomcat 中运行
## 为什么使用Spring Boot - 简化配置,无需编写太多的 xml 配置文件,效率很高; - Spring 可以整合很多各式各样的框架,并能很好的集成; - 基于 Spring 构建,使开发者快速入门,门槛很低; - Spring Boot 可以创建独立运行的应用而不需要依赖外部组件或工具; - 内置 Tomcat 服务器,无需打成 war 包,可以直接在内置 Tomcat 中运行
## 为什么使用Spring Boot - 简化配置,无需编写太多的 xml 配置文件,效率很高; - Spring 可以整合很多各式各样的框架,并能很好的集成; - 基于 Spring 构建,使开发者快速入门,门槛很低; - Spring Boot 可以创建独立运行的应用而不需要依赖外部组件或工具; - 内置 Tomcat 服务器,无需打成 war 包,可以直接在内置 Tomcat 中运行
测试覆盖率是对测试完成程度的度量。它通常依据某种覆盖准则来对测试用例执行情况进行衡量,以判断测试执行得是否充分 。 ——出自《 计算机科学技术名词 》第三版 今天文章中我们给大家介绍覆盖率统计及覆盖率分析。在10月13日20:00,资深测试开发架构师思寒将光临直播间手把手教大家如何搞定精准化测试! 温馨提示:你以为代码覆盖率与精准化测试知识与黑盒测试无缘?不,你只是没遇到思寒讲的这节课。
TestNG 和 Junit 作为两大流行的测试框架,有哪些区别?各有哪些优缺点?该如何选择呢?这里简要总结下: ![](https://ceshiren.com/uploads/default/original/3X/7/3/731391a1eddb1e44ccb4a50bedbe0df0cbdaf138.png) ![](https://ceshiren.com/uploads/def
## 代码分析 - IDE辅助功能:xcode、android studio - 独立的静态分析工具:findbugs、androidlint、scan-build、pmd、阿里巴巴java开发规范pmd插件 ![](https://ceshiren.com/uploads/default/original/3X/7/1/71ff88b1b42cf1b1379ff4ad12d4c8045b78
![](https://ceshiren.com/uploads/default/original/3X/e/3/e30e5d3af75b37519633f5f5b2ef7ff914034125.jpeg) 性能分析一直是性能实施项目中的一个难点。对于只做性能测试不做性能分析的团队来说,总是不能把问题非常显性地展示出来,不能给其他团队非常明确的引导。对于这种类型的测试实施,只能把问题抛出来,让
![](https://ceshiren.com/uploads/default/original/3X/b/a/baf744a48942f64d4c03d4d50ae104e42f4f7d53.png) 为UI页面写测试用例时(比如web页面,移动端页面),测试用例会存在大量元素和操作细节。当UI变化时,测试用例也要跟着变化, PageObject 很好的解决了这个问题! 使用UI自动化测试
排序的定义 排序,就是重新排列表中的元素,使表中的元素满足按关键字递增或递减的过程。为了査找方便,通常要求计算机中的表是按关键字有序的。 排序的确切定义如下: 算法的稳定性: 若待排序表中有两个元素 Ri 和 Rj,其对应的关键字 keyi = kcyj , 且在排序前 Ri 在 Rj 的前面。使用某一排序算法排序后,Ri 仍然在 Rj 的前面尽的前面,则称这个排序算法是稳定的。否则称排序算法是
批处理任务编排 初学者容易误以为容器的任务只在于部署行为--将软件在容器中部署以提供持续的服务。但其实容器也同样大量的被应用于批处理程序的运行上。比如测试行为是典型的批处理任务范畴, 它不提供持续稳定的服务, 它只是一段特定的程序,而一但这段测试程序结束后就应该销毁一切,包括执行环境和所占用的资源,容器对比于传统的虚拟机的优势也在于除了容器更加的轻量级外, 容器的创建和销毁都很方便,通过 K8S
![](https://ceshiren.com/uploads/default/original/3X/3/a/3a27dc67fde352a7c811fdea2fa192caa5364be9.png) K8S目前是业界容器编排领域的事实标准,是几乎所有云原生架构的首选。目前随着云原生架构越来越流行,测试开发人员需要掌握K8S技术栈已经成为越来越迫切的需求。 Kubernetes 开源于 2
本章节主要讲解 iOS 自动化真机配置以及在 iOS 真机执行自动化时常见问题与解决方法。 ## 真机使用的Capability 与模拟器不同,真机测试需要如下的 Capability 方式一:设置 App 路径,启动 App(自动安装 App) ``` { "app": "/Users/seveniruby/Library/Developer/Xcode/DerivedData/UI
![](https://ceshiren.com/uploads/default/original/3X/f/3/f38d3f13105a1b79ada9bf315862ddfd0dbd87cf.jpeg) “工作坊(workshop)”一词 最早出现在教育与心理学的研究领域之中。它是引发人们思考、探讨、相互交流的一种方式,鼓励参与、创新、找出解决对策,Workshop是一种偏实战,注重实操性的