![个人头像照片](https://ucc.alicdn.com/avatar/9fbeab7a8e8a4182b821130d11ff9719.jpg)
暂无个人介绍
Blue Ocean 提供了一套可视化操作界面来帮助创建、编辑 Pipeline 任务。 Blue Ocean 特性: - 流水线编辑器:用于创建贯穿始终的持续交付流水线,是一种直观并可视化的流水线编辑器。 - 流水线的可视化:对流水线的可视化表示,提高了全企业范围内持续交付过程的清晰度。 - 流水线的诊断:即刻定位自动化问题,无需持续扫描日志或关注多个屏幕。 - 个性化仪表盘:用户可以自定
做为一个测试开发工程师,日常的工作是需要与先进的测试技术死磕,学习 -> 实践 -> 新技术落地 -> 搞定 bug。用最快的速度、最少的投入来攻克一个个难题。领导觉得是个高潜人才,于是升职加薪做了管理。 但是问题来了。做为一个技术,与一个技术点死磕,似乎是件很简单的事情。但是,做为一个管理,不仅要学会向上管理(和领导去争取资源),还要学会向下兼容(和同事愉快沟通)、还要能够合理管理各方的时
边界值分析法是一种很实用的黑盒测试用例方法,它具有很强的发现故障的能力。边界值分析法也是作为对等价类划分法的补充,测试用例来自等价类的边界。 这个方法其实是在测试实践当中发现,Bug 往往出现在定义域或值域的边界上,而不是在其内部。为检测边界附近的处理专门设计测试用例,通常都会取得很好的测试效果。 在用边界值分析法的时候,一般规定了取值范围以及值的个数的场景。 在分析等价类案例,划分等价类的时
等价类划分是一种重要的、常用的黑盒测试方法,不需要考虑程序的内部结构,只需要考虑程序的输入规格。它将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完整性和代表性。 需要把用户所有可能输入的数据,划分成若干份(若干个子集),然后从每一个子集当中选取少数具有代表性的数据作为测试用例,这种方法被称为——等价类划分法。 在有限的测试资源的情况下,用少量有代表性的数据得到比较好的测试
测试管理平台是贯穿测试整个生命周期的工具集合,它主要解决的是测试过程中团队协作的问题。在整个测试过程中,需要对测试用例、Bug、代码、持续集成等等进行管理。下面分别从这四个方面介绍现在比较流行的管理平台。 ![](https://ceshiren.com/uploads/default/original/3X/5/c/5c4e637fe1f84f97d597e2ab85951a6fe324a
项目管理是在项目活动中运用知识、技能、工具和方法,以便达到项目要求。 软件项目管理有其特定的对象、范围和活动,着重关注成本、进度、风险和质量的管理,还需要协调开发团队和客户的关系,协调内部各个团队之间的关系,监控项目进展情况,随时报告问题并督促问题的解决。 软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对人员(People)、产品(Product)、过程(Process
本章介绍基于 Jenkins API 调用的跨平台 API 对接。 ## 基于Jenkins实现跨平台API对接 Jenkins 提供了远程访问应用编程接口(Remote Access API),能够通过 Http 协议远程调用相关命令操作 Jenkins 进行 Jenkins 视图、任务、插件、构建信息、任务日志信息、统计信息等,非常容易与其配合更好的完成 CI/CD 工作。 Jenkin
深入了解测试过程中被测系统的架构与数据流,有助于理解业务逻辑,梳理业务用例以及促进部门协同。 更深的理解业务逻辑是指要分析公司是做什么的,公司的重要的商务决策是什么,公司内部数据流是怎么运行的,有哪些常见的业务场景。这也能考验对公司业务的负责程度,可以更好的去服务业务部门,为公司创造价值。 ## 开源项目litemall系统架构 下面以开源项目 litemall 为例,分析一下这个项目中的系统
测试平台的数据展示与分析,我们主要使用开源工具ECharts来进行数据的展示与分析。 ## ECharts简介与安装 ECharts是一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表,功能非常强大,目前ECharts已经发布到ECharts 5版本。我们的项目也选择Echarts来作为我们的数据展示与分析工具。 ECharts官网: ```
首先将 Vue.js 下载到本地,本章就以本地的 Vue.js 为例。在本地创建一个工作区即创建一个文件夹,使用 vscode 打开,将 Vue.js 放到工作区目录下。 ## 创建挂载元素 首先创建一个 index.html 的文件,使用 <script src="./vue.js"></script>加载 vue.js,这里的 ./vue.js 路径根据自己 Vue.js 文件位置而定。
Vue.js 是一套用于构建用户界面的渐进式框架,在目前的前端开放中比较流行的前端框架。 Vue 被设计成自底向上的逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或已有项目整合。但是学习 Vue.js 需要一定的 HTML、CSS、和 JavaScript 基础,所以本章节将不对这些基础内容进行讲解。 ## Vue的组件化开发 目前的前端开发中组件化开发成为了潮流
这里的路由是指的页面之间的路径管理器,简单的理解为 vue-router 就是链接路径的管理系统。vue-router 是 Vue.js 官方的路由插件,它和 vue.js 是深度集成的,适合用于构建单页面应用。vue-router 就是将组件映射到路由上面。在 vue-router 单页面应用中,是路径之间的切换,也就是组件的切换。 ## vue router 路由配置 在 Vue 中,路
测试用例(Test Case)是为特定的目的而设计的一组测试输入、执行条件和预期结果的文档。它的作用其实就是为了测试是否满足某个特定需求。测试用例是指导测试工作进行的依据。 ## 测试用例的组成 标准的测试用例通常由以下几个模块组成: - 用例编号:测试用例的唯一标识。 - 模块:标明被测需求具体属于哪个模块,主要为了更好识别以及维护用例。 - 用例标题:又称之为测试点,就是用一句话来描述测
本章介绍 Web 后端开发中数据持久化技术 TKMyBatis。 ## TKMyBatis简介 TKMybatis 是基于 Mybatis 框架开发的一个工具,内部实现了对单表的基本数据操作,只需要简单继承 TKMybatis 提供的接口,就能够实现无需编写任何 sql 即能完成单表操作。 下面简单介绍下 MyBatis , MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存
从事软件测试行业,每天面对的被测对象都是软件。如果想要更好的去完成测试工作,首先需要对被测对象,也就是对软件要有基本的了解。 ## 软件 与计算机系统操作有关的计算机程序、可能有的文件、文档及数据。 程序好理解,就是可以操作的产品。比如 wps、微信、QQ、网页等等这些都是程序。比如说需求文档、设计文档、用户手册这些东西都属于文档。在页面中展示的,还有用户输入的内容这些都是数据。 所以说程
Vuetify 是 Vue 的语义化组件框架,旨在提供整洁、语义化和可重用的组件,使得构建应用程序更方便。 Vuetify 核心是为了提供各种可重复使用的,即插即用并且适合各种项目规格的组件。 - Vue 的语义成分。利用 Vue 的功能组件,所有基于标记的用于援助主部件的类,比如一个 card 题目,可以使用 v-card-title 来处理 - 成型容易。Vuetify 被设想为从底层创建。
软件测试技术是软件开发过程中的一个重要组成部分,是贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程。其目的是尽快尽早地发现在软件产品中所存在的各种问题,与用户需求、预先定义的不一致性。检查软件产品中可能存在的 Bug,并且编写缺陷报告,交于开发人员修改。软件测试人员的基本目标是发现软件中的错误。 软件测试技术就相当于是软件测试人员的武器。作为软件测试人员,必须要清楚
Hook 技术需要预先分析目标应用的源代码和逻辑,根据目标测试场景设置目标、逻辑和数据,然后运行时动态的对目标函数参数值、逻辑或者返回值做修改,达到修改现有函数逻辑、实现目标测试场景的目的。 ## Hook的价值 在测试中,虽然通过修改数据以实现测试场景的需求,大部分情况下都可以通过 Mock 技术实现,但是还有一小部分场景,例如需要修改应用内部函数的参数、返回值或运行逻辑等情况,这时就需要用
一般在构建应用时需要访问后端的 API 接口获取后端数据并展示。做这件事的方法有很多种(比如 axios,vue-resource,fetch-jsonp),使用 promise 的 HTTP 客户端 axios 是其中非常流行的一种方式。axios 也支持 RESTful 请求调用规范。 promise 是一个用来传递异步操作信息的对象,主要是用来解决回调的问题。 ## axios介绍 a
软件测试是软件质量保证的关键步骤。越早发现软件中存在的问题,修复问题的成本就越低,软件质量也就越高,软件发布后的维护费用越低。 为了能更好的保障软件质量,在软件测试的实践中,慢慢形成了一些流程用来达到这一目标。下面就来介绍一下常见的测试流程。 ## 传统测试流程 在传统的测试流程中包含了如图所示的步骤。 下面分别介绍下每一步流程的含义。 ### 单元测试 单元测试是对软件中的基本组成单位
Swagger UI 允许任何人(无论您是开发团队还是最终用户)都可以可视化 API 资源并与之交互,而无需任何实现逻辑。它是根据您的 OpenAPI(以前称为 Swagger)规范自动生成的,具有可视化文档,可简化后端实现和客户端使用。 ## 为什么使用Swagger - 跨语言性,支持 40 多种语言,Swagger 已经慢慢演变成了 OpenAPI 规范; - Swagger UI 呈现
- Java 异常类 首先让我们简单了解或重新学习下 Java 的异常机制。 Java 内部的异常类 Throwable 包括了 Exception 和 Error 两大类,所有的异常类都是 Object 对象。 Error 是不可捕捉的异常,通俗的说就是由于 Java 内部 JVM 引起的不可预见的异常, Java 虚拟机会选择终止线程。如 OutOfMemoryError ,就是 Jav
Frida 通过 C 语言将 QuickJS 注入到目标进程中,获取完整的内存操作权限,达到在程序运行时实时地插入额外代码和数据的目的。官方将调用代码封装为 python 库,当然你也可以直接通过其他的语言调用 Frida 中的 C 语言代码进行操作。 ## Frida安装和启动 ## - Frida 支持 python2 和 python3 版本,演示所使用的版本为 python3.8 ``
服务与服务之间传递数据包,往往会因为不同的应用场景,使用不同的通讯协议进行传递。比如网站的访问,常常会使用 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
混合应用测试或微信小程序测试,都会涉及到 WebView 组件,这节内容将分析一下 WebView 的技术原理。首先通过日志分析查看 Appium 的运行过程。 ## WebView日志分析 要想查看 ChromeDriver 的日志,需要在 Capability 里开启 一个开关项 showChromedriverLog。让 Appium 运行测试用例时能够生成 ChromeDrive
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/6/b/6b7c415433c9acc8c4e15708b60b419da5eb9ed3.png) ![](https://ceshiren.com/uploads/default/original/3X/8/d/8dec96d8de9bc7b8ceab15cf3117a3b772c7dc7
当 webdriver 遇到无法完成的操作时,可以使用 JavaScript 来完成,webdriver 提供了 execute_script() 方法来调用 js 代码。 执行 js 有两种场景: - 在页面上直接执行 js - 在某个已经定位的元素上执行 js JavaScript 是一种脚本语言,有的场景需要使用 js 脚本注入辅助我们完成 Selenium 无法做到的事情。 S
![](https://ceshiren.com/uploads/default/original/3X/9/f/9f1091a2de1d0f0bf718036424b512c9677b9a1c.jpeg) H5性能该如何测试呢?很多人不知道该如何下手。其实可以借用W3C协议完成自动化H5性能测试。 因为W3C标准是浏览器标准,一般浏览器都支持W3C标准,它规定使用者可以通过api查询性能信息
浏览器访问:https://hub.docker.com/_/nginx 查看Nginx镜像详细信息。 ![](https://ceshiren.com/uploads/default/original/3X/9/b/9b2f342d5c5485928137d8cb6a329ee781a34575.png) 下载镜像,默认会下载lastest最新版本的软件,可以指定软件的版本。例如:ngi
断言是 UI 自动化测试的三要素之一,是 UI 自动化不可或缺的部分。我们使用定位器定位到元素后,通过脚本进行业务操作的交互,想要验证交互过程中的正确性就需要用到断言。 ## 常规的UI自动化断言 分析正确的输出结果,常规的断言一般包含以下的几个情形: - 比较大小 - 包含或者不包含 - 验证布尔值 示例代码: ``` #比较大小 price = driver.find_element
使用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/8/b/8ba328f398094dfe0cfc56fa865fe3fd0776a1fc.png) ![](https://ceshiren.com/uploads/default/original/3X/9/a/9aedc656617e8dbe272173e62d2e5f7605b4
![](https://ceshiren.com/uploads/default/original/3X/e/f/efd4f6ab53cc4a449657509b655cf5e6499878e5.jpeg) 在 UI 自动化测试过程中,面对复杂的业务场景,经常会遇到这样的挑战: - 简单的录制/回放速度快,但无法适应复杂场景; - 编写自动化测试脚本比较灵活,但工作量大且可维护性差; - 以往的
在上一篇文章完成首页浏览压测任务后,我们开始下单-支付场景的压测实践。 ``` 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.id as product_sku_id, p2.sp1, p2
在日常的工作中,常常需要制作自己的项目的镜像,一般通过以下两种方式制作镜像:Docker commit、Dockerfile。 ## Docker commit Docker commit一般用做从一个运行状态的容器来创建一个新的镜像。定制镜像应该使用Dockerfile来完成。 ``` docker commit 容器名 新镜像名:tag ``` 使用这种方式的缺点是:1.对外不
性能压测,是保障服务可用性和稳定性过程中,不可或缺的一环。我们将从性能压测的设计、实现、执行、监控、问题定位和分析、应用场景等多个纬度对性能压测的全过程进行拆解,以帮助大家构建完整的性能压测的理论体系,并提供有例可依的实战。 01 性能环境要考虑的要素 系统逻辑架构,即组成系统的组件、应用之间的结构、交互关系的抽象。最简单最基本的就是这三层架构。 三层逻辑结构图 - 客户层:用户请
01 性能环境要考虑的要素 系统逻辑架构,即组成系统的组件、应用之间的结构、交互关系的抽象。最简单最基本的就是这三层架构。 三层逻辑结构图 - 客户层:用户请求端。 - Web层:处理客户端所有的业务请求逻辑和服务端数据。 - 数据库层:维护业务系统的数据。 - 更复杂的逻辑结构 - 逻辑架构中的任意一层,有可能是在独立的物理集群机器上,也有可能跨多个物理机
在大话测试数据(一)文章中,我提到,获取数据的第一步是获取概念上数据。这一步看起来简单,其实不是那么容易。获取概念数据和获取需求的过程是交织在一起的,事实上,它们其实是一个事儿,因为数据是需求中最重要的组成部分。 需求工程是个大话题,目前有很多种流派和实践方式来来搞定需求,但它们的思想都比较一致,那就是:不断的由粗到精的迭代(如下图)。关于需求这里不再展开,如果大家有兴趣的话,推荐两本我觉得还
![](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的基础用法:录制回放功能,断言,聚合报告。李政道教授谈论学习方法,他表明我们可以获取很多信息。 但是,从了解到理解还有一段路要走。只有亲手练了才能变成理解,能获取