关于软件测试:一文搞懂测试左移和测试右移的-WhyHowWhat

软件测试技术该当贯通整个软件开发生命周期、对软件产品(包含阶段性产品)进行验证和确认的流动过程,其外围指标是尽快尽早地发现软件产品中所存在的各种问题 bug—— 与用户需要、事后定义的不一致性。然而,传统的软件测试流程是:接到我的项目后参加需要评审,而后依据需要文档写写用例和筹备脚本,等开发提测之后正式开始测试、提 Bug、回归测试,测试通过后就完结了。而后,我的项目交给运维上线,之后测试人员再投入下一个我的项目,持续反复这样的流程。这样的流程看似没什么问题,但毛病是:测试过程是在肯定工夫距离之内产生的,测试人员必须期待产品齐全构建能力找到谬误和故障。不可否认,破费的工夫超过了能够约定的工夫,测试人员就十分被动,因为期待代码成为测试人员的瓶颈。而在挪动互联网和 DT 时代,互联网产品迭代周期短、速度快、频次高,促成了麻利开发和继续交付等研发模式的全面风行,这也给传统软件测试形式带来了更大的工夫压力。而测试左移以及测试右移的意义就在于可能让测试领有更多的主动权,有更短缺的工夫进行测试,同时不会像之前因为品质差危险高每次都延期上线,并且产品的线上品质也能有保障。不论是测试左移还是测试右移,都是为产品质量服务。测试人应该秉持这样的理念:不要把提测认为是测试流动的开始,上线是测试流动的完结,更不要认为品质只是测试同学须要关注的。测试左移是向测试之前的开发阶段挪动。测试左移的准则反对测试团队在软件开发周期晚期和所有干系人单干。因而他们能清晰地了解需要以及设计测试用例去帮忙软件“疾速失败”,促使团队更早的批改所有的 Bug。更深刻的参加和了解会促成测试人员获取产品残缺的常识,彻底想分明各种场景,并依据软件行为设计实时的场景,这些都会帮忙团队在编码实现之前辨认出一些缺点。测试左移聚焦在使测试人员在全副和最重要的我的项目阶段参加进来。这就是测试人员把焦点从发现 Bug 转移到 Bug 的预防上,同时也驱动我的项目的商业指标。随着测试团队的责任的进步,团队不在仅仅聚焦在“测试软件去发现 Bug”,而是踊跃团队单干,参加我的项目初始阶段的打算和建设强健无效的测试策略,而测试策略又为团队提供好的测试领导力和领导,使团队聚焦在产品的久远的视角,而不仅仅是测试工作。测试左移首先为测试人员提供了设计测试的机会,无论这些测试是被聚焦在客户的体验还是冀望,也促使开发人员依据这些测试去开发软件以满足客户需要。测试右移是测试流动向产品公布之后的步骤挪动。测试右移是产品上线了之后也能够进行一些测试流动。次要关注的是产品性能及可用性监控,以及新性能的测试。通过测试右移能够在生产环境做监控,监控线上性能和可用率,一旦线上产生任何问题,尽快反馈,提前反馈,给用户良好的体验。在霍格沃兹测试学院的测试开发课程教学体系,曾经整顿了当下最风行最实用的测试左右移技术栈,这里供参考: 代码审计零碎 SonarQube 实战测试用例与 JaCoCo 代码覆盖率数据分析实战ASM 插桩技术与 JVM-SandBox 我的项目实战精准化测试平台构建实战(可参考之前文章)ELK 深度解读与最佳利用实际测试数据采集、同步、存储与剖析实战线上品质监控与数据分析实战测试平台开发实战(SpringBoot+Vuejs+Bootstrap)以上,测试左移和测试右移是古代互联网研发和测试技术体系的必然趋势,也是大厂对中高级测试开发工程师的必备技能要求。测试开发工程师会通过测试左移,更深刻染指开发工作,提前与开发人员一起制订测试计划,推动代码评审、代码审计、单元测试、自动化冒烟测试、测试精准化剖析以及研发自测等来保障研发阶段的品质。另外,也会通过测试右移,参加配置部署,将自动化测试用例配置到继续交付链中,并全流程监控公布后的利用品质。

January 30, 2023 · 1 min · jiezi

关于软件测试:一文搞定十大排序算法动画图解

排序的定义排序,就是重新排列表中的元素,使表中的元素满足按关键字递增或递加的过程。为了査找不便,通常要求计算机中的表是按关键字有序的。排序的确切定义如下:算法的稳定性:若待排序表中有两个元素 Ri 和 Rj,其对应的关键字 keyi = kcyj , 且在排序前 Ri 在 Rj 的后面。应用某一排序算法排序后,Ri 依然在 Rj 的后面尽的后面,则称这个排序算法是稳固的。否则称排序算法是不稳固的。须要留神的是,算法是否具备稳定性并不能掂量—个算法的优劣,它次要针对算法的性质进行形容。只需举出一组关徤字的实例,即可阐明一个算法是不稳固的。工夫复杂度:[1](来自百度百科)剖析:随着模块n的增大,算法执行的工夫的增长率和 f(n) 的增长率成正比,所以 f(n) 越小,算法的工夫复杂度越低,算法的效率越高。空间复杂度:[2](来自百度百科)相似于工夫复杂度的探讨,一个算法的空间复杂度 S(n) 定义为该算法所消耗的存储空间,它也是问题规模n的函数。渐近空间复杂度也经常简称为空间复杂度。空间复杂度(SpaceComplexity)是对一个算法在运行过程中长期占用存储空间大小的量度。一个算法在计算机存储器上所占用的存储空间,包含存储算法自身所占用的存储空间,算法的输入输出数据所占用的存储空间和算法在运行过程中长期占用的存储空间这三个方面。算法的输入输出数据所占用的存储空间是由要解决的问题决定的,是通过参数表由调用函数传递而来的,它不随本算法的不同而扭转。存储算法自身所占用的存储空间与算法书写的长短成正比,要压缩这方面的存储空间,就必须编写出较短的算法。算法在运行过程中长期占用的存储空间随算法的不同而异,有的算法只须要占用大量的长期工作单元,而且不随问题规模的大小而扭转,咱们称这种算法是“就地"进行的,是节俭存储的算法,有的算法须要占用的长期工作单元数与解决问题的规模 n 无关,它随着n的增大而增大,当n较大时,将占用较多的存储单元,例如疾速排序和归并排序算法就属于这种状况。算法的分类能够依照是否是比拟类的算法来分类,也能够依照排序过程中数据是否都存在于内存中来分类:如下:依照外部排序和内部排序分类:依照是否为比拟类的排序来分:插入排序(Insertion-Sort)的算法形容是一种简略直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应地位并插入。算法形容一般来说,插入排序都采纳in-place在数组上实现。具体算法形容如下: 从第一个元素开始,该元素能够认为曾经被排序;取出下一个元素,在曾经排序的元素序列中从后向前扫描;如果该元素(已排序)大于新元素,将该元素移到下一地位;反复步骤3,直到找到已排序的元素小于或者等于新元素的地位;将新元素插入到该地位后;反复步骤2~5。动图演示C代码实现算法剖析插入排序在实现上,通常采纳in-place排序(即只需用到O(1)的额定空间的排序),因此在从后向前扫描过程中,须要重复把已排序元素逐渐向后挪位,为最新元素提供插入空间。1959年Shell创造,第一个冲破O(n2)的排序算法,是简略插入排序的改进版。它与插入排序的不同之处在于,它会优先比拟间隔较远的元素。希尔排序又叫放大增量排序。算法形容先将整个待排序的记录序列宰割成为若干子序列别离进行间接插入排序,具体算法形容:1.抉择一个增量序列t1,t2,…,tk,其中ti > tj,tk=1;2.按增量序列个数k,对序列进行k 趟排序;3.每趟排序,依据对应的增量ti,将待排序列宰割成若干长度为m 的子序列,别离对各子表进行间接插入排序。仅增量因子为1 时,整个序列作为一个表来解决,表长度即为整个序列的长度。动图演示C代码实现算法剖析希尔排序是基于插入排序的以下两点性质而提出改良办法的: 插入排序在对简直曾经排好序的数据操作时, 效率高, 即能够达到线性排序的效率但插入排序一般来说是低效的, 因为插入排序每次只能将数据挪动一位工夫复杂度:最坏状况下为O(n^2),均匀工夫复杂度为O(nlogn);空间复杂度:归并排序须要一个大小为1的长期存储空间用以保留合并序列,所以空间复杂度为O(1);算法稳定性:从下面图片中能够看出,数字5在排序后替换了地位,所以它是不稳固的算法。抉择排序(Selection-sort)是一种简略直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,寄存到排序序列的起始地位,而后,再从残余未排序元素中持续寻找最小(大)元素,而后放到已排序序列的开端。以此类推,直到所有元素均排序结束。算法形容n个记录的间接抉择排序可通过n-1趟间接抉择排序失去有序后果。具体算法形容如下:4.初始状态:无序区为R[1…n],有序区为空;5.第i趟排序(i=1,2,3…n-1)开始时,以后有序区和无序区别离为R[1…i-1]和R(i…n)。该趟排序从以后无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R替换,使R[1…i]和R[i+1…n)别离变为记录个数减少1个的新有序区和记录个数缩小1个的新无序区;6.n-1趟完结,数组有序化了。动图演示C语言实现算法剖析体现最稳固的排序算法之一,因为无论什么数据进去都是O(n2)的工夫复杂度,所以用到它的时候,数据规模越小越好。惟一的益处可能就是不占用额定的内存空间了吧。实践上讲,抉择排序可能也是平时排序个别人想到的最多的排序办法了吧。堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。沉积是一个近似齐全二叉树的构造,并同时满足沉积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。算法形容7.将初始待排序关键字序列(R1,R2….Rn)构建成大顶堆,此堆为初始的无序区;8.将堆顶元素R[1]与最初一个元素R[n]替换,此时失去新的无序区(R1,R2,……Rn-1)和新的有序区(Rn),且满足R[1,2…n-1]<=R[n];9.因为替换后新的堆顶R[1]可能违反堆的性质,因而须要对以后无序区(R1,R2,……Rn-1)调整为新堆,而后再次将R[1]与无序区最初一个元素替换,失去新的无序区(R1,R2….Rn-2)和新的有序区(Rn-1,Rn)。一直反复此过程直到有序区的元素个数为n-1,则整个排序过程实现。动图演示代码实现:算法剖析:堆排序是一种抉择排序,整体次要由构建初始堆+替换堆顶元素和开端元素并重建堆两局部组成。其中构建初始堆经推导复杂度为O(n),在替换并重建堆的过程中,需替换n-1次,而重建堆的过程中,依据齐全二叉树的性质,[log2(n-1),log2(n-2)…1]逐渐递加,近似为nlogn。所以堆排序工夫复杂度个别认为就是O(nlogn)级。冒泡排序是一种简略的排序算法。它反复地走访过要排序的数列,一次比拟两个元素,如果它们的程序谬误就把它们替换过去。走访数列的工作是反复地进行直到没有再须要替换,也就是说该数列曾经排序实现。这个算法的名字由来是因为越小的元素会经由替换缓缓“浮”到数列的顶端。算法形容10.比拟相邻的元素。如果第一个比第二个大,就替换它们两个;11.对每一对相邻元素作同样的工作,从开始第一对到结尾的最初一对,这样在最初的元素应该会是最大的数;12.针对所有的元素反复以上的步骤,除了最初一个;13.反复步骤1~3,直到排序实现。动图演示C语言实现算法剖析若文件的初始状态是正序的,一趟扫描即可实现排序。所需的关键字比拟次数C和记录挪动次数M均达到最小值:Cmin = N - 1, Mmin = 0。所以,冒泡排序最好工夫复杂度为O(N)。若初始文件是反序的,须要进行 N -1 趟排序。每趟排序要进行 N - i 次关键字的比拟(1 ≤ i ≤ N - 1),且每次比拟都必须挪动记录三次来达到替换记录地位。在这种状况下,比拟和挪动次数均达到最大值:Cmax = N(N-1)/2 = O(N2)Mmax = 3N(N-1)/2 = O(N2)冒泡排序的最坏工夫复杂度为O(N2)。因而,冒泡排序的均匀工夫复杂度为O(N2)。疾速排序的根本思维:通过一趟排序将待排记录分隔成独立的两局部,其中一部分记录的关键字均比另一部分的关键字小,则可别离对这两局部记录持续进行排序,以达到整个序列有序。算法形容疾速排序应用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法形容如下:14.从数列中挑出一个元素,称为 “基准”(pivot);15.从新排序数列,所有元素比基准值小的摆放在基准后面,所有元素比基准值大的摆在基准的前面(雷同的数能够到任一边)。在这个分区退出之后,该基准就处于数列的两头地位。这个称为分区(partition)操作;16.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。动图演示C语言实现算法剖析:当数据有序时,以第一个关键字为基准分为两个子序列,前一个子序列为空,此时执行效率最差。而当数据随机散布时,以第一个关键字为基准分为两个子序列,两个子序列的元素个数靠近相等,此时执行效率最好。所以,数据越随机散布时,疾速排序性能越好;数据越靠近有序,疾速排序性能越差。归并排序是建设在归并操作上的一种无效的排序算法。该算法是采纳分治法(Divide and Conquer)的一个十分典型的利用。将已有序的子序列合并,失去齐全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。算法形容17.把长度为n的输出序列分成两个长度为n/2的子序列;18.对这两个子序列别离采纳归并排序;19.将两个排序好的子序列合并成一个最终的排序序列。动图演示C语言实现算法剖析归并排序是一种稳固的排序办法。和抉择排序一样,归并排序的性能不受输出数据的影响,但体现比抉择排序好的多,因为始终都是O(nlogn)的工夫复杂度。代价是须要额定的内存空间。计数排序不是基于比拟的排序算法,其外围在于将输出的数据值转化为键存储在额定开拓的数组空间中。作为一种线性工夫复杂度的排序,计数排序要求输出的数据必须是有确定范畴的整数。算法形容20.找出待排序的数组中最大和最小的元素;21.统计数组中每个值为i的元素呈现的次数,存入数组C的第i项;22.对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加);23.反向填充指标数组:将每个元素i放在新数组的第C(i)项,每放一个元素就将C(i)减去1。动图演示C语言实现算法剖析计数排序是一个稳固的排序算法。当输出的元素是 n 个 0到 k 之间的整数时,工夫复杂度是O(n+k),空间复杂度也是O(n+k),其排序速度快于任何比拟排序算法。当k不是很大并且序列比拟集中时,计数排序是一个很无效的排序算法。基数排序是依照低位先排序,而后收集;再依照高位排序,而后再收集;顺次类推,直到最高位。有时候有些属性是有优先级程序的,先按低优先级排序,再按高优先级排序。最初的秩序就是高优先级高的在前,高优先级雷同的低优先级高的在前。算法形容24.获得数组中的最大数,并获得位数;25.arr为原始数组,从最低位开始取每个位组成radix数组;26.对radix进行计数排序(利用计数排序实用于小范畴数的特点);动图演示C语言实现算法剖析基数排序基于别离排序,别离收集,所以是稳固的。但基数排序的性能比桶排序要略差,每一次关键字的桶调配都须要O(n)的工夫复杂度,而且调配之后失去新的关键字序列又须要O(n)的工夫复杂度。如果待排数据能够分为d个关键字,则基数排序的工夫复杂度将是O(d*2n) ,当然d要远远小于n,因而基本上还是线性级别的。基数排序的空间复杂度为O(n+k),其中k为桶的数量。一般来说n>>k,因而额定空间须要大略n个左右。桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的要害就在于这个映射函数的确定。桶排序 (Bucket sort)的工作的原理:假如输出数据遵从均匀分布,将数据分到无限数量的桶里,每个桶再别离排序(有可能再应用别的排序算法或是以递归形式持续应用桶排序进行排)。算法形容27.设置一个定量的数组当作空桶;28.遍历输出数据,并且把数据一个一个放到对应的桶里去;29.对每个不是空的桶进行排序;30.从不是空的桶里把排好序的数据拼接起来。动图演示C语言实现算法剖析桶排序最好状况下应用线性工夫O(n),桶排序的工夫复杂度,取决与对各个桶之间数据进行排序的工夫复杂度,因为其它局部的工夫复杂度都为O(n)。很显然,桶划分的越小,各个桶之间的数据越少,排序所用的工夫也会越少。但相应的空间耗费就会增大。(end)点一下难看,就少一个 Bug! ...

January 30, 2023 · 1 min · jiezi

关于软件测试:一文搞定-Postman-接口自动化测试

文末获取测试开发进阶指南 -本文适宜曾经把握 Postman 根本用法的读者,即对接口相干概念有肯定理解、曾经会应用 Postman 进行模仿申请等基本操作。工作环境与版本:Window 7(64位)Postman (Chrome App v5.5.3)P.S. 不同版本页面 UI 和局部功能位置会有点不同,不过影响不大。首先咱们来思考一下,如果要达到自动化接口测试成果,在根本的模仿申请上还须要做哪些呢?我粗略概括为 3 个问题(欢送在评论区留言更多补充倡议):如何判断接口是否申请胜利?如何进行接口批量、定期测试?如何解决依赖接口问题(比方商品下单的接口必须要求先登录)?所以,接下来就次要分为 3 个局部,介绍如何解决这 3 个问题。首先,既然是自动化测试,那么咱们必定须要通过工具 Postman 或者代码,帮咱们直接判断后果是否合乎预期。那么在接口测试上,大体就两个思路:判断申请返回的 code 是否合乎预期判断申请返回的内容中是否蕴含预期的内容(关键字)接下来咱们看看如何利用 Postman 来解决上述的问题:在 Postman 中相干的性能在十分显眼的中央,Tests 性能的应用须要咱们有肯定的编程语言根底,目前反对的脚本语言即为 JavaScript 。但比拟好的一点是,咱们不须要再去思考上下文问题以及运行环境的问题 ,也就是说咱们只须要在这边实现后果逻辑判断的代码块即可。而 Postman 还为咱们提供了一些罕用的代码模板,在 Tests 面板左边的 SNIPPETS 功能区中,所以对 JavaScript 不大理解问题也不大。代码编写相干将在下文进行具体介绍。先看上图的代码局部,咱们能够发现 responseCode 、 responseBody 和 tests 三个变量(可间接应用) :responseCode :蕴含申请的返回的状态信息(如:code)。responseBody:为接口申请放回的数据内容(类型为字符串)。tests :为键值对模式,用于示意咱们的测试后果是胜利与否,最终展现在 Test Results 中。key :(如:code 200)咱们能够用来当做后果的一个形容。value:其值为布尔型,ture 示意测试通过, false 示意测试失败。所以上述代码应该不难理解了,而有了返回后果的数据以及示意后果胜利与否的形式,那么咱们“接口后果判断”的问题也就根本解决了。另外还有几个比拟罕用的:responseTime :申请所耗时长postman :能够做的比拟多,比方获取返回数据的头部信息:postman.getResponseHeader("")设置全局变量:postman.setGlobalVariable("variable_key", "variable_value");更多功能能够查看官网文档。Postman 在 SNIPPETS 功能区中为咱们提供的代码模板曾经能解决大部分状况了,以下先挑几个跟后果判断相干的进行解说:Status code : Code is 200Response body: Contains stringResponse body: is equal to stringResponse body: JSON value checkResponse time is less than 200ms以上介绍的这些根本曾经足够实现对繁多接口的测试了,但咱们晓得如果没有批量、定时工作, 那么这些都将毫无意义,所以持续 …想要进行接口的批量测试、治理,那么咱们须要将待测试的接口全副都保留到同一个汇合(Collections)中,你能够认为就是保留到同一个文件夹中。先看看 Postman 中的操作步骤:通过以上步骤,咱们失去一个待测的接口汇合,为了简化状况,我这边每个接口胜利与否的条件都是用 code 是否为 200 来判断:以上准备就绪后,咱们就能够开始批量运行接口进行测试了:点击Run 后,会新关上一个页面:Environment :用于切换接口运行的环境,这里先不论,前面再讲Iteration :用于设置接口一共要运行的次数。Delay : 设置每次运行接口之间的工夫距离,单位为毫秒。Data File : 上传测试数据文件 (下文独自讲)咱们曾经理解了,如何让多个接口循环运行屡次,然而当初有个问题,按目前这个步骤,每次运行时接口的参数都是一样的,那么就算咱们运行个100次、1000次意义也不大。先看看咱们写好的一个登录性能的接口:当初登录的账号和明码参数都是写死的,也就是不过咱们执行多少次,都是拿这个账号去测试。那么如果想要测试账号密码参数应用其它值有没有异样怎么办呢?( 想要每次都手动改的能够跳过这部分 /手动滑稽)这里咱们先简略讲一下在 Postman 中应用如何“变量”,如下图:援用一个变量的语法:{{变量名}}, 图中能够看到,咱们将账户和明码字段的参数值都设置为变量:{{username}} 、{{password}} 。批改完间接点击运行 (Send) 当然是不行的,因为目前这两个变量还未被赋值,不过咱们能够在 Pre-request Script 面板中进行赋值操作:Pre-request Script 与 Tests 相似,区别在于:Pre-request Script 中的脚本是在执行申请之前运行,而Tests 中的脚本则是在申请实现之后执行。所以,咱们能够在 Pre-request Script 功能区中用脚本先个下面两个变量进行赋值,如:然而用 Pre-request Script 进行赋值操作依然不能解决咱们的问题,因为依照这种写法,不管运行多少次其实都还是用固定(写死)的数据进行测试。当然既然是脚本语言,也会有更灵便的用法,这边先不将。接下来咱们讲讲 Data File , 在运行汇合前的这个选项就是用来上传测试数据(文件)以赋值给相应变量的。咱们先以 CSV 格局的测试数据为例:数据格式相似表格,第一行示意对应的变量名,上面 4 行示意 4 组账号密码数据(其中两组为正确数据) ,咱们保留一份内容为上述示例数据后缀名为.csv 的文件后,再次开始测试看看成果,咱们抉择运行次数为 4 (对应 4 组测试数据)、抉择对应的 CSV 文件运行后,能够看到咱们的后果的确如咱们的预期。接口 Request 运行的后果为两次胜利两次失败,也就是每一次运行都赋值了不同的账号密码的测试数据 (在最新的桌面客户端版本中能够看到每次具体的申请状况,这边就不再细说了)。如果应用 Json 文件的话,那么格局如下:Postman 提供了一个 Monitors (监视器)性能,反对咱们提交一个测试工作,依照设置的定时器进行运行,如每小时测试一次,具体操作如下:讲完接口后果判断和汇合批量测试后,咱们再来看看比较复杂的状况,即依赖申请问题,比方咱们的购物下订单接口要求必须先登录后才可拜访。但大部分依赖问题其实实质上就是一个接口间数据传递的问题,比方调用登录接口后返回一个标识,假如为 token ,那么咱们申请下订单接口时只有一起携带 token 参数进行申请即可。所以,问题变为: ...

January 30, 2023 · 2 min · jiezi

关于软件测试:一文彻底理解-CookieSessionToken

很久很久以前,Web 基本上就是文档的浏览而已,既然是浏览,作为服务器,不须要记录谁在某一段时间里都浏览了什么文档,每次申请都是一个新的 HTTP 协定,就是申请加响应,尤其是我不必记住是谁刚刚发了 HTTP 申请,每个申请对我来说都是全新的。这段时间很嗨皮。然而随着交互式 Web 利用的衰亡,像在线购物网站,须要登录的网站等等,马上就面临一个问题,那就是要治理会话,必须记住哪些人登录零碎,哪些人往本人的购物车中放商品,也就是说我必须把每个人辨别开,这就是一个不小的挑战,因为 HTTP 申请是无状态的,所以想出的方法就是给大家发一个会话标识 (session id), 说白了就是一个随机的字串,每个人收到的都不一样,每次大家向我发动 HTTP 申请的时候,把这个字符串给一并捎过去,这样我就能辨别开谁是谁了。这样大家很嗨皮了,可是服务器就不嗨皮了,每个人只须要保留本人的 session id,而服务器要保留所有人的 session id !如果拜访服务器多了,就得由成千上万,甚至几十万个。这对服务器说是一个微小的开销 ,重大的限度了服务器扩大能力,比如说我用两个机器组成了一个集群,小 F 通过机器 A 登录了零碎,那 session id 会保留在机器 A 上,假如小 F 的下一次申请被转发到机器 B 怎么办?机器 B 可没有小 F 的 session id 啊。有时候会采纳一点小手腕:session sticky ,就是让小 F 的申请始终粘连在机器 A 上,然而这也不论用,要是机器 A 挂掉了,还得转到机器 B 去。那只好做 session 的复制了,把 session id 在两个机器之间搬来搬去,快累死了。 起初有个叫 Memcached 的支了招:把 session id 集中存储到一个中央,所有的机器都来拜访这个中央的数据,这样一来,就不必复制了,然而减少了单点失败的可能性,要是那个负责 session 的机器挂了,所有人都得从新登录一遍,预计得被人骂死。 也尝试把这个单点的机器也搞出集群,减少可靠性,但不论如何,这小小的 session 对我来说是一个惨重的累赘于是有人就始终在思考,我为什么要保留这可恶的 session 呢,只让每个客户端去保留该多好?可是如果不保留这些 session id , 怎么验证客户端发给我的 session id 确实是我生成的呢?如果不去验证,咱们都不晓得他们是不是非法登录的用户,那些不怀好意的家伙们就能够伪造 session id , 随心所欲了。嗯,对了,关键点就是验证!比如说,小 F 曾经登录了零碎,我给他发一个令牌 (token),里边蕴含了小 F 的 user id,下一次小 F 再次通过 Http 申请拜访我的时候,把这个 token 通过 Http header 带过去不就能够了。不过这和 session id 没有本质区别啊,任何人都能够能够伪造,所以我得想点儿方法,让他人伪造不了。那就对数据做一个签名吧,比如说我用 HMAC-SHA256 算法,加上一个只有我才晓得的密钥,对数据做一个签名,把这个签名和数据一起作为 token ,因为密钥他人不晓得,就无奈伪造 token 了。 ...

January 30, 2023 · 2 min · jiezi

关于软件测试:一文带你了解接口测试价值与体系

如果把测试简略分为两类,那么就是客户端测试和服务端测试。挪动端的测试包含 UI 测试,兼容性测试等,服务端测试包含接口测试。接口测试检查数据的替换,传递和管制治理过程,它绕过了客户端,间接对服务端进行测试。 接口测试的价值服务端非常复杂,就像下图的阿里外围链路图,蕴含大概 150 个组件,组件与组件之间进行交互,造成了密集的后端网络。UI 测试无奈笼罩这么简单的组件交互网络,所以要绕过客户端,间接应用接口测试对服务端进行测试。 接口测试的体系对行业的各种测试进行分层,越往上,发现 bug 的工夫越晚,老本越高。接口测试(Service)相比 UI 测试,能够更早发现问题,更快的品质反馈;同理,单元测试(Unit)相比接口测试,能够更早发现问题,更快的品质反馈,破费的老本更低。 分层测试: 客户端测试与服务端测试的关系尽管接口测试覆盖面广,然而也不能应用接口测试代替客户端测试。UI 测试波及到了用户体验的问题,这部分是无奈用接口测试进行代替的。

January 30, 2023 · 1 min · jiezi

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

K8S目前是业界容器编排畛域的事实标准,是简直所有云原生架构的首选。目前随着云原生架构越来越风行,测试开发人员须要把握K8S技术栈曾经成为越来越迫切的需要。 Kubernetes 开源于 2014 年,是谷歌 10 多年大规模容器管理系统 Borg 的开源版本。Kubernetes 这个单词在首字母 K 和尾字母 s 之间有 8 个字母,因而称为 K8S。这种称呼形式和 i18n(internationalization)是统一的,如果做过本地化国际化的人应该对 i18n 这样的叫法很相熟。对于一个刚刚接触容器的初学者来说,搞清楚容器编排是什么,搞清楚 K8S 是什么是一件十分不容易的事件,编排二字赋予了它十分多的意义。 大多数人了解 K8S 是容器集群的治理技术,这个形容是不残缺的,如果 K8S 仅仅是一个治理多台节点上容器的管理软件的话,那么业界间接称说为容器集群就好了。而不是像当初这样称其为容器编排畛域的事实标准,谷歌和 Linux 也不会为了它一起开办了 CNCF 云原生基金会。所以 K8S 除了是一个容器集群管理软件外它还提供了针对容器的网络,调度,权限,资源,平安,硬件等治理和设计的能力。 接下来通过 2 个案例来带大家体验一下其中的奥秘。 01在理论介绍 K8S 的容器编排实例前须要先理解一下 K8S 中最根本的资源类型--POD。能够说 POD 是 K8S 中最重要的资源,其余所有的资源都是围绕着 POD 并为其提供服务的。用一句话阐明 POD 的定义:POD 是由多个容器组成的逻辑概念,这些容器独特配合对外提供服务, 同时 POD 也是 K8S 中最小的调度单位,POD 中的容器必须调度在同一台机器上不可分割。这么说比拟形象,用一个实例来展现一下 POD 到底是什么。通过下载并配置 jenkins 中 K8S 的插件来买通两者之间的通信,使得 jenkins 在运行 pipeline 时能够动静的在 K8S 中创立 POD 并在其中一个容器中通过 jnlp 动静的创立并向 jenkins 注册 slave 节点(容器), 后续这个 pipeline 中所有的工作都将在这个 POD 中的容器中执行。通过这样的机制实现了更弱小的 jenkins pipeline 的高可用和负载平衡架构。从此实现了在 K8S 中能够动态创建 jenkins 的 slave 节点运行工作的能力, 并在工作完结后回收这些资源。 ...

January 30, 2023 · 2 min · jiezi

关于软件测试:穿越时空的git之创建版本库和常用命令操作

Git 是一个开源的分布式版本控制系统,能够无效、高速地解决从很小到十分大的我的项目版本治理。Git 弱小的分支治理,远远超过 SVN。那 git 如何创立版本库?如何进行一些罕用的操作呢?欲知答案如何,请看下文合成。小时候看过一部印象很深的剧叫做《穿越时空的爱恋》,今日也厚着脸皮导演一部《穿越时空的git》,不上映,纯属自嗨!what is 版本库?无论咱们平时应用git的频率如何,然而从事IT这个行业的小伙伴肯定常常听到有人在说,哪个哪个牛X的我的项目在哪个仓库,哪个我的项目的仓库被人歹意增加issue(之前就据说了阿波罗打算的代码仓库中issue被很多无关的中文评论占楼~哎,咱们测试工程师肯定不要这样做,为这个行业尽一份力); 说了这么多废话,其实咱们平时说的仓库就是版本库,版本库又名仓库,英文名叫repository,置信很多用GitHub的小伙伴常常看到这个单词; 我就简略的把它了解成一个目录文件夹,外面能够放各种文件,和平时的应用治理一样,能够删除、批改;然而Git的”文件夹“更弱小一点,它忘性好-Git能够"记住"整个治理的历史,还能”存档“。如何创立一个版本库,很简略: 1)抉择一个门路(you like just ok!),创立一个空目录 $ mkdir mygit$ cd mygit$ pwd/Users/qinzhen/mygit #这里就是我的Mac上创立的仓库地址了2)仓库地址创立好了,当初就是一个一般的文件夹,后应用git init命令将它变成”Git文件夹“,也就是把这个目录变成Git能够治理的仓库 $ git initInitialized empty Git repository in /Users/qinzhen/mygit/.git/它会提醒说在你的目录下创立了一个空的Git仓库,并且目录下多了一个.git,这个时候就算创立实现了。 在看命令之前先来用一张图理解几个概念,能够不便了解和记忆: 工作区(Working Directory)长期仓库(暂存区,Staging Area)Git仓库(Repository)咱们就是先在工作区进行文件的编辑操作;而后add到长期仓库,能够add多个;最初再commit一起提交到仓库中。接下来正式进入实操:1)在mygit门路下,创立文件readme.txt,输出以下内容: I want to study Git2)利用git add命令将文件提交到长期仓库(运行胜利不会输入任何音讯,看不到输入不要慌~) $ git add readme.txt3)再用git commit命令将文件从暂存区提交到仓库去 localhost:mygit qinzhen$ git commit -m "study git"[master 64f5ced] study git1 file changed, 2 insertions(+), 2 deletions(-)命令解释: -m : 增加正文,对本次提交写一个阐明1 file changed :1个文件被扭转,也就是readme.txt;2 insertions(+):2行插入了内容,也就是咱们输出的两行内容2 deletions(-):2行内容缺失了,因为我是把readme.txt文件里原有的内容删除后增加的内容,所以会有次改变提醒,若是齐全新建的就只会有增加的记录1)咱们先用git status查看以后仓库的状态 ...

January 30, 2023 · 3 min · jiezi

关于软件测试:iOS自动化真机测试验证环境过程中常见问题解析

本章节次要解说 iOS 自动化真机配置以及在 iOS 真机执行自动化时常见问题与解决办法。 真机应用的Capability与模拟器不同,真机测试须要如下的 Capability形式一:设置 App 门路,启动 App(主动装置 App) { "app": "/Users/seveniruby/Library/Developer/Xcode/DerivedData/UICatalog-ftyzdbgapjmxxobezrnrxsshpdqh/Build/Products/Debug-iphoneos/UICatalog.app", "automationName": "XCUITest", "platformName": "ios", "xcodeOrgId": "xxxxxx", "xcodeSigningId": "iPhone Developer", "udid": "9df22446af15919c494c85b4c1c8b00eaa3a5bd0"}形式二:依据 App 包名启动 App { "platformName": "ios", "bundleId": "com.example.apple-samplecode.UICatalog", "automationName": "XCUITest", "deviceName": "iPhone", "udid": "auto", "xcodeOrgId": "xxxxx", "xcodeSigningId": "iPhone Developer"}应用Appium Desktop验证环境以上步骤实现后,呈现下图示意真机环境配置胜利 常见问题问题一 问题二 问题三 解决办法:重启手机或者拔掉 IOS 数据线,从新连贯电脑问题四 note: Using new build systemnote: Building targets in parallelnote: Planning buildnote: Constructing build descriptionerror: No signing certificate "iOS Development" found: No "iOS Development" signing certificate matching team ID "L62JHCGMQW" with a private key was found. (in target 'WebDriverAgentLib' from project 'WebDriverAgent')error: No profiles for 'com.facebook.WebDriverAgentRunner.xctrunner' were found: Xcode couldn't find any iOS App Development provisioning profiles matching 'com.facebook.WebDriverAgentRunner.xctrunner'. Automatic signing is disabled and unable to generate a profile. To enable automatic signing, pass -allowProvisioningUpdates to xcodebuild. (in target 'WebDriverAgentRunner' from project 'WebDriverAgent')问题五 ...

January 30, 2023 · 1 min · jiezi

关于软件测试:iOS-自动化测试踩坑一-技术方案环境配置与落地实践

挪动端的自动化测试,最常见的是 Android 自动化测试,我集体感觉 Android 的测试优先级会更高,也更凋谢,更容易测试;而 iOS 相较于 Android 要平安稳固的多,但也是一个必须测试的方向,这个系列文章记录了 iOS 自动化测试的一些实际。 Xcode 下载地址:https://developer.apple.com/d...下载安装好的图标如下 : 先来看目前支流的 iOS 挪动测试框架 Appium:目前最罕用的 App 自动化测试框架,具备跨平台性Calabash-IOS :BDD 模式,没有过多的理解应用KIF:KIF 应用 XCTest 框架,须要对 Objective—C 、Swift 和 XCTest 把握程度较高,这个对测试工程师来说学习老本太大XCTest:苹果官网提供的 iOS 测试框架,要求同 KIF 统一WebDriverAgent:由 Facebook 推出的一款 iOS 挪动测试框架,也是 Appium 跨平台的底层驱动;WDA 自身也是一个残缺的基于 webdriver 协定的框架Uiautomation :在 Xcode8 后废除之前的 Android 自动化咱们抉择的是 Appium 框架作为底层的驱动框架,过后就介绍说 Appium 的长处之一就是跨平台性,其实也就是因为其底层封装了 WebDriverAgent,而咱们冀望的是: 做一套能够跨平台反对的 App 测试计划,能够在公司的 Android 和 iOS 版本间自在切换测试并且在编程语言上要是测试工程师罕用的 Java 或 Python,升高学习老本综上起因,那么最终的抉择仍然是 Appium。Appium 官网提供了一个演练的 iOS App,以此为例进行演示。 Appium 演练 example 地址:https://github.com/appium/ios... ...

January 30, 2023 · 2 min · jiezi

关于软件测试:app自动化测试iOS元素定位新手篇

除了通用定位形式外,iOS 还有其余非凡的定位形式,本章节仅介绍 iOS 特有定位。 PredicateString定位样本元素截图: 应用 PredicateString,根本定位形式是由元素属性名、运算符、目标值组成。 元素属性比拟运算符==,>=,<=,>,<,!=,<>,可用来比拟数值或字符串例如: label == "SYSTEM (TEXT)"逻辑运算符AND,OR,NOT,AND等同于&&;OR等同于||;NOT等同于!例如: label == "SYSTEM (TEXT)" AND enabled == truelabel == "SYSTEM (TEXT)" OR name == "SYSTEM (TEXT)"label == "SYSTEM (TEXT)" && NOT enabled != true含糊匹配LIKE? 和 都能够作为通配符,?匹配一个字符,匹配多个字符。例如: label LIKE "SYSTEM (TEXT)"label LIKE "?YSTEM (TEXT)"label LIKE "SYSTEM??TEXT)"label LIKE "* (TEXT)"label LIKE "SYSTEM*"其余BEGINSWITH,ENDSWITH,CONTAINS例如: # 匹配属性为 label ,value为 SYSTEM 结尾的元素label BEGINSWITH "SYSTEM"# 匹配属性为 label ,value为 (TEXT) 结尾的元素label ENDSWITH "(TEXT)"# 匹配属性为 label ,value蕴含 TEXT 结尾的元素label CONTAINS "TEXT"其余定位请参考 App 控件定位章节哦,如果大家有其余想理解的知识点也能够在下方留言哦!小编尽量满足大家的需要哈~ ...

January 30, 2023 · 1 min · jiezi

关于软件测试:UI-自动化测试应不应该投入有没有前途怎样做最明智

昨天公布了《实战| UI 调度自动化测试平台(基于 Python)》文章之后,看到不少测试同学吐槽本人公司的 UI 自动化测试成果差而保护老本高,就是一件劳民伤财的个体流动。常常也会有同学问,UI 自动化测试应不应该投入?有没有前途?怎么做比拟理智?针对这个痛点问题,本文整顿了霍格沃兹测试学院校长,资深测试架构师@思寒老师的认识和最佳实践经验,供大家参考,也欢送有教训的同学留言探讨。 从公司价值角度:没有 UI 自动化测试并不影响公司和测试团队的生存;从集体价值角度:没有 UI 自动化并不影响找工作,然而会影响找大公司的工作;兼容性测试价值:没有 UI 自动化测试,最起码兼容性测试是不可能做好的。所以当你没有 UI 测试的时候,你只能祷告你们的研发队伍很给力。实质只是看这几十万是怎么花的,要么是研发凭能力省下来、要么是测试凭能力省下来,要么是第三方公司凭能力挣的,要么是用户体验受损导致公司损失掉的。非功能测试:内存透露、页面性能、弱网都须要对具体页面的拜访,人手是否能够足够快的能够反复的在各种不同场景下巡回测试,或者有理由不测试,比方 AB 测试或者品质监控很好。继续集成/继续交付:研发均匀每几个小时就会打进去他感觉有信念的测试包,你如何疾速的做出品质反馈。政治价值观:你如何应答 CXO 们对测试团队执行效率的吐槽?缩小承接的需要、升高公司的倒退速度、加人、找外包还是进步手速?你须要有应答的策略。你的产品单元测试、接口测试十分成熟,而前端团队很给力,根本不出 UI 问题,有靠谱的研发团队在为品质兜底;你的自动化程度很差,搞自动化非但不胜利还让公司损失惨重,你用血个别的教训胜利让领导接收了 UI 自动化测试无用论;你的公司 2 个月公布一个大版本,你有为期 2 周以上的测试工夫能够充沛的豪华节约;你的公司是富甲一方的甲方,你有数十人的外包测试团队能够帮你甩锅;你的工作国企铁饭碗,即便用户骂娘你依然能够居安思危,比方1230x;你是 CXO 的小舅子;测试金字塔PageObject 设计模式互联网服务架构与测试流程继续集成与交付正当的应用 UI 自动化测试以上,对于 UI 自动化测试的实战经验,欢送大家留言探讨。举荐霍格沃兹出品《测试开发从入门到高级实战零碎进阶》课程,贴近大厂一线实际,内容深度行业当先。

January 30, 2023 · 1 min · jiezi

关于软件测试:UI-自动化测试实战二-测试数据的数据驱动

数据驱动就是通过数据的扭转驱动自动化测试的执行,最终引起测试后果的扭转。简略来说,就是参数化在自动化测试中的利用。测试过程中应用数据驱动的劣势次要体现在以下几点:1.进步代码复用率,雷同的测试逻辑只需编写一条测试用例,就能够被多条测试数据复用,进步了测试代码的复用率,同时进步了测试代码的编写效率。2.异样排查效率高,测试框架根据测试数据,每条数据生成一条测试用例,用例执行过程互相隔离。如果其中一条失败,不会影响其余的测试用例。3.代码可维护性高,清晰的测试框架利于其余测试工程师浏览,进步代码的可维护性。数据量小的测试用例能够应用代码的参数化来实现数据驱动,数据量大的状况下倡议大家应用一种结构化的文件(例如 YAML,JSON 等)来对数据进行存储,而后在测试用例中读取这些数据。Pytest 提供了 @pytest.mark.parametrize 装璜器来进行参数化,能够应用参数化来实现数据驱动。代码如下:下面的代码首先应用 @pytest.mark.parametrize 装璜器,传递了两组数据,测试结果显示有两条测试用例被执行,而不是一条测试用例。也就是 Pytest 会将两组测试数据主动生成两个对应的测试用例并执行,生成两条测试后果。当测试数据量大的状况下,能够思考把数据存储在结构化的文件中。从文件中读取出代码中所须要格局的数据,传递到测试方法中执行。这里举荐大家应用 YAML 类型的文件来存储测试数据。YAML 应用动静字段进行结构化,它以数据为核心,比 Excel、CSV、JSON、XML 等更适宜做数据驱动。上面,咱们将下面参数化的两组数据存储到 YAML 文件中,创立一个 data/searchdata.yml 文件,代码如下:下面的代码定义了一个 yaml 格局的数据文件 searchdata.yml ,文件中定义了一个列表,列表中有两组数据,最初生成的是这样的数据格式:[["alibaba", "BABA", 200],["JD", "JD", 20]] 。下一步将测试用例中参数化的数据革新成从 searchdata.yml 文件中读取,代码如下:下面的代码,只须要应用 yaml.safe_load() 办法,就来读取 searchdata.yml 文件中的数据,别离传入到用例 test_search() 办法中实现数据的输出与后果的验证。而如果应用 Excel、CSV 文件格式进行数据的存储,须要先从 Excel 文件中读取数据,再解析成须要的格局。而应用 YAML 则齐全省去了这个过程。以上,对于其余环节的数据驱动,在后续章节分享。【

January 30, 2023 · 1 min · jiezi

关于软件测试:RPC接口测试技术websocket-自动化测试实践

WebSocket 是一种在单个 TCP 连贯上进行全双工通信(Full Duplex 是通信传输的一个术语。通信容许数据在两个方向上同时传输,它在能力上相当于两个单工通信形式的联合。全双工指能够同时(刹时)进行信号的双向传输( A→B 且 B→A )。指 A→B 的同时 B→A,是刹时同步的)的协定。 WebSocket 通信协议于 2011 年被 IETF 定为规范 RFC 6455,并由 RFC7936 补充标准。WebSocket API (WebSocket API 是一个应用WebSocket 协定的接口,通过它来建设全双工通道来收发音讯) 也被 W3C 定为规范。 而 HTTP 协定就不反对长久连贯,尽管在 HTTP1.1 中进行了改良,使得有一个 keep-alive,在一个 HTTP 连贯中,能够发送多个 Request,接管多个 Response。 然而在 HTTP 中 Request = Response 永远是成立的,也就是说一个 request 只能有一个response。而且这个response也是被动的,不能被动发动。 websocket 罕用于社交/订阅、多玩家游戏、协同办公/编辑、股市基金报价、体育实况播放、音视频聊天/视频会议/在线教育、智能家居与基于地位的利用。 websocket 接口不能应用 requests 间接进行接口的调用,能够依赖第三方库的形式来实现调用,以下内容介绍如何调用第三方库实现 websocket 的接口自动化测试。 实战应用 python 语言实现 websocket 的接口自动化 环境筹备1.装置 pyhton3 环境下载须要的运行库2.下载须要的运行库pip install websocket-client 实战演示连贯 websoket 服务器import loggingfrom websocket import create_connectionlogger = logging.getLogger(__name__)url = 'ws://echo.websocket.org/' #一个在线的回环websocket接口,必须以websocket的形式连贯后拜访,无奈间接在网页端输出该地址拜访wss = create_connection(url, timeout=timeout)发送 websocket 音讯 ...

January 30, 2023 · 2 min · jiezi

关于软件测试:RPC接口测试技术Tcp-协议的接口测试

首先明确 Tcp 的概念,针对 Tcp 协定进行接口测试,是指基于 Tcp 协定的下层协定比方 Http ,串口,网口, Socket 等。这些协定与 Http 测试方法相似(具体查看接口自动化测试章节),但在测试过程中须要做些调整。 SocketSocket 又称套接字,过程可通过套接字进行网络通信,使多个设施具备交互能力。Socket 适宜对传输速度和安全性有严格要求的利用,比方手机内核与外界进行测试数据的传输。反对 Socket 设施不止计算机,还会有挪动端,如果测试 Socket 协定,须要有收发 Socket 数据的能力或代理 Socket 的能力。下图展现了失常的 Socket 通信流程:如果测试 Socket 协定,须要做以下革新,即利用 Socket 代理,进行 Socket 数据的接管:须要特地留神,须要利用可更改 Socket 地址,才可应用代理。以 Python 的 Socket 为例,上面是一个简略的 Socket 客户端和服务端: # 客户端import socket # 导入 socket 模块s = socket.socket() # 创立 socket 对象host = '127.0.0.1' # 获取本地主机名port = 12345 # 设置端口号s.connect((host, port))print(s.recv(1024).decode())s.close()# 服务端import socket # 导入 socket 模块s = socket.socket() # 创立 socket 对象host = '127.0.0.1' # 获取本地主机名port = 12345 # 设置端口s.bind((host, port)) # 绑定端口s.listen(5) # 期待客户端连贯while True: c,addr = s.accept() # 建设客户端连贯 print(addr) c.send('收到信息'.encode()) c.close() # 敞开连贯客户端可与服务端进行交换,但 Socket 地址不可更改,即上述客户端代码的 127.0.0.1 和 12345 端口不能通过配置文件进行更改。如果不能更改这两者,就堵死了通向代理的路线:如何进行批改?以客户端代码为例,可通过配置文件来配置 host 和 port : ...

January 30, 2023 · 2 min · jiezi

关于软件测试:Python-自动化测试四

在理论的测试工作中,通常须要对多组不同的输出数据,进行同样的测试操作步骤,以验证咱们的软件品质。这种测试,在功能测试中十分消耗人力物力,然而在自动化中,却比拟好实现,只有实现了测试操作步骤,而后将多组测试数据以数据驱动的模式注入,就能够实现了。后面文章学习了参数化,当数据量十分大的时候,咱们能够将数据寄存到内部文件中,应用的时候将文件中的数据读取进去,不便测试数据的治理。数据与测试用例别离治理,能够利用内部数据源 YAML、JSON、Excel、CSV 治理测试数据。YAML 是一种容易浏览、适宜示意程序语言的数据结构、可用于不同程序间替换数据、丰盛的表达能力和可扩展性、易于应用的语言。通过缩进或符号来示意数据类型。pyyaml 模块在 Python 中用于解决 YAML 格局数据,次要应用 yaml.safe_dump() 和 yaml.safe_load() 函数将 Python 值和 YAML 格局数据互相转换。工作中经常应用 YAML 格局的文件存储测试数据。装置案例创立用例文件以及数据文件来实现数据驱动的测试案例,创立一个文件夹 testdata,在这个文件夹下创立 data.yml 和 test_yaml.py 文件。创立 data.yml 文件:创立“test_yaml.py”,代码如下:代码剖析:yaml 文件里定义了列表数据,通过 open() 办法获取 data.yml 文件对象,应用 yaml.safe_load() 加载这个文件对象,将 YAML 格式文件转换为 Python 值,别离传到到用例中生成多条用例别离执行。运行后果:运行后果中 [1-2] 和 [20-30] 代码传入的两组参数,别离传入 test_foo() 用例办法中执行,并且别离生成两条测试后果。以上,pytest 组合 YAML 实现数据驱动,YAML 文件作为用例数据源,管制测试用例的执行,使测试用例数据保护更加方便快捷。

January 30, 2023 · 1 min · jiezi

关于软件测试:DubboadminZookeeper-的环境搭建与-Couldnotextractarchive

$ brew install zookeeper==> Downloading https://homebrew.bintray.com/...... 先来看dubbo-admin的装置;咱们先找到它在apache下的官网GitHub,官网也有相干介绍,中英文版都有(毕竟本来是中国人开发的~),可依据爱好自选钻研 1)首先咱们须要选一个版本,默认的是develpoBranch,为了保障稳固少坑,咱们抉择稳固的tags 0.2.0版本 将0.2.0分支版本clone到本地 $ git clone -b 0.2.0 git@github.com:apache/dubbo-admin.git 2)clone实现后会有一个dubbo-admin门路,cd进去,而后执行mvn package命令进行编译 $ cd dubbo-admin/$ lsDISCLAIMER README.md doc dubbo-admin-ui pom.xmlLICENSE README_ZH.md dubbo-admin-distribution mvnwNOTICE codestyle dubbo-admin-server mvnw.cmd$ mvn package[INFO] Scanning for projects...... 第一次编译的话会在线在线很多依赖,可能要稍稍等一会了~ 这里插播一条踩坑广告在编译实现时你可能会失去如下的dubbo-admin-ui 编译失败报错:Could not extract the Node archive: Could not extract archive…这有可能网络稳定或者须要梯子等起因导致文件装置不残缺(或者其余什么我不晓得的起因…) 总之解决办法就是找到报错的文件门路,删除它,毫不犹豫删除它从新mvn clean package编译(万能的重启大法!) 重启大法后BUILD SUCCESS 1)间接执行zkServer,会有操作命令提醒如下: $ zkServerZooKeeper JMX enabled by defaultUsing config: /usr/local/etc/zookeeper/zoo.cfgUsage: ./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd} 2)应用start便可启动zookeeper: $ zkServer startZooKeeper JMX enabled by defaultUsing config: /usr/local/etc/zookeeper/zoo.cfgStarting zookeeper ... STARTED ...

January 30, 2023 · 1 min · jiezi

关于软件测试:测试开发-AppCrawler-自动遍历测试实践三动手实操与常见问题汇总

上两篇文章介绍了主动遍历的测试需要、工具抉择和 AppCrawler 的环境装置、启动及配置文件字段根本含意,这里将以理论案例更加粗疏的阐明配置文件的用法和一些非凡场景的解决。实操演示惯例应用上面咱们持续之前的例子,在雪球搜寻框输出搜寻内容后的页面开始:testcase:设置测试用例,输出 alibaba 后,点选"阿里巴巴" ' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)yaml 写法如下:testcase: name: "XueQiuTestDemo AppCrawler" steps: - { xpath: "//*[contains(@resource-id,'image_cancel')]", action: click } - xpath: home_search action: click - xpath: search_input_text action: alibaba  - { xpath: 阿里巴巴, action: click }selectedList:遍历范畴设定 接上一步点选"阿里巴巴"后达到如下界面: 咱们先看demo配置文件中的原始写法,如下: selectedList:- given: [] when: null then: [] xpath: "//[contains(name(), 'Button')]" action: null actions: [] times: 0- given: [] when: null then: [] xpath: "//[contains(name(), 'Text') and @clickable='true' and string-length(@text)<10]" action: null actions: [] times: 0- given: [] when: null then: [] xpath: "//[@clickable='true']/[contains(name(), 'Text') and string-length(@text)<10]" action: null actions: [] times: 0- given: [] when: null then: [] xpath: "//[contains(name(), 'Image') and @clickable='true']" action: null actions: [] times: 0- given: [] when: null then: [] xpath: "//[@clickable='true']/[contains(name(), 'Image')]" action: null actions: [] times: 0- given: [] when: null then: [] xpath: "//[contains(name(), 'Image') and @name!='']" action: null actions: [] times: 0- given: [] when: null then: [] xpath: "//[contains(name(), 'Text') and @name!='' and string-length(@label)<10]" action: null actions: []  times: 0原始文件中将所有可点击的控件类型都包含了进去,再加上了局部 text 长度的限度 当初咱们依照本人平时的简便写法从新编写,先设置所有 clickable 等于 true 的控件进行点击:在 Android 中,一个控件如果绑定了用户响应行为的事件,那么 clickable 的属性值就是 trueselectedList: - { xpath: "//[@clickable='true']", action: click }blackList:黑名单,将不想要被点击的元素退出黑名单中 配置文件原始写法如下,示意将带有2位数字的排除在外,可能是App中蕴含了很对对于股价展现的,不须要挨个点击:blackList:- given: [] when: null then: [] xpath: ".[0-9]{2}." action: null actions: [] times: 0咱们当初心愿不要点击到叉号❌和勾销按钮,否则会跳出此页面,那么就能够把其退出黑名单中,如下: ' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E) blackList: - xpath: ".[0-9]{2}." - xpath: //[@resource-id='action_delete_text'] - xpath: //[@resource-id='action_close']firstList: 优先被遍历这里咱们设置让text蕴含"股票"的优先遍历 firstList: - { xpath: "//*[contains(@text,'股票')]", action: click }lastList:最初被点击在页面中有很多标签页(例如综合、股票、用户、组合):  每个标签页上面对应着很多控件须要被操作,可是在以后页面下的控件未被遍历完的时候就有可能会点击到其余标签页中了,咱们心愿的是在一个标签页下齐全遍历完结后最初再点击标签控件,这个就能够借助lastList来实现,让元素在点进标签页后的内容为最初遍历lastList: - { xpath: "//[contains(@resource-id,'ti_tab_indicator')]//", action: click }backButton: 当所有元素都被点击后默认后退控件定位AppCrawler是不晓得后退按钮是哪一个的,这个可能会造成的一种状况是,当咱们进入一个页面时,还没有对这个页面齐全遍历就点到了后退按钮,这样就会造成测试不充沛 因而咱们能够给它设置一个默认的后退按钮,使所有事件实现后再 backbackButton: - { xpath: "//*[contains(@resource-id,'action_back')]", action: click }这里还要阐明一点,如果 backButton 没有配置,当遍历第一个页面的时候被点击了,再下一个页面的时候,因为曾经被遍历过了,所以就不会优先去遍历这个回退按钮了,对前面的遍历测试没有大的影响,可能就是第一个页面会有遍历不齐全的概率。maxDepth: 遍历的最大深度有时候咱们的页面档次可能很深,每次遍历测试的需要可能不同,有时候可能须要在短时间内测试次要罕用界面的性能,有时候可能须要全面的测试,所以测试的深度就不雷同,咱们能够依附 maxDepth 来进行需要定制,这里以遍历 2 层深度为例:maxDepth: 2非凡技巧findBy:定位形式的抉择findBy 能够设置定位形式,有 default、android、id、xpth 形式可选,默认状态会主动判断是否是要 Android 定位或者 iOS 定位。当咱们的定位很精准的时候,用默认的 default 速度会快一点;若是定位符写的不是很精准,在切换到 Android 定位的时候可能找不到,这个时候就能够尝试将其设置为 Xpath形式定位。findBy: "xpath"defineUrl = List[String]():用来确定url的元素定位 xpath,他的 text 会被取出当做 url 因素;就是说如果想要以后的页面布局与某个控件之间有层级关系,给定一个标记控件,以此来辨别不同的界面(语言的形容怎么样都有点艰涩,还是联合上面的示例来了解吧。。。)有时候咱们会遇见这种状况:设置了 clickable 未 true 的控件都被遍历,可是运行时发现很多控件都没有被遍历到,个别这种状况有一下两种起因:元素属性 clickable 自身就为 false 或者它的父节点等都为 false,这样天然是无奈遍历到的。还有一种状况是同属性的控件在两个tag页面都存在,在其中一个tag页遍历一遍之后,再到下一个tag页中就会默认曾经遍历,不会再进行遍历,如下这种:在“股票”和“用户”tag页中,“加自选”和“关注”控件的clickable及id属性一样。 ...

January 30, 2023 · 2 min · jiezi

关于软件测试:利器-AppCrawler-自动遍历测试工具实践一

本文为霍格沃兹测试学院学院学员课程学习笔记,零碎学习交换文末加群。AppCrawler 是由霍格沃兹测试学院校长思寒开源的一个我的项目,通过名字咱们大略也能猜出个方向,Crawler 是爬虫的意思,App 的爬虫,遍历 App :官网 GitHub 上对这款工具的解释是:一个基于主动遍历的 App 爬虫工具。反对 Android 和 iOS,反对真机和模拟器。最大的特点是灵活性,可通过配置来设定遍历的规定。这里顺便提一下的是谷歌也公布了一款主动遍历的工具,名字简直一样,叫做 App  Crawler (差了一个空格),设计的思维也统一,然而这款工具目前还在开发欠缺中,思寒大佬的工具比谷歌的早了两年工夫,厉害啊!Google App Crawler 链接:https://developer.android.com...上面来看看 AppCrawler 的作用和价值。需要背景' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)互联网的业务需要背景:业务变更疾速业务线泛滥业务流程简单依赖第三方接口较多测试工作常见问题:UI 自动化只能笼罩外围业务逻辑,新性能来不及上自动化产品业务测试量较大,新版公布后,老性能来不及全面回归,容易漏测工夫长,强度大的工作后,人容易产生困乏,对数字的位数,文字的显示等错误信息的敏感度降落产品的界面深度很深,且蕴含大量的展现信息性能专项测试回归难度大:内存透露、健壮性测试、弱网等测试太多这个时候咱们须要一种伎俩,能够达到两方面的目标:Code less: UI 自动化用例保护老本降到最低 Automate:  尽可能的自动化笼罩回归业务而主动遍历就能够满足咱们对上述的业务的需要;接着再来看咱们对主动遍历测试的一些需要,既然要用主动遍历,那么具体要等到什么样的成果?工具抉择2.1 遍历工具需要主动遍历的需要:可控:能够定义遍历的门路,指定须要测试的业务,保障外围业务的笼罩优先级可定制:可实现主动输出、主动滑动等根底行为后果剖析:点击前后的截图比照后果的数据建模2.2 工具比照2.2.1 Monkey首先来看业界用的较早也是常常听过的一款工具—— Monkey参考链接:Monkey 官网链接:https://developer.android.com... Monkey Script :https://github.com/gb112211/A...这是 Android 官网提供的一个工具,在 Android 的官网咱们能够看到对这款工具的解释如下: 没错,谷歌本来设计这款工具是为了对 App 进行压力测试的,而并不是主动遍历测试,留神的是这里的压力测试并不是咱们平时意义上的对服务端的压力,而是对 App 前端的压力。上面是思寒对 App 压力测试的起因解释:谷歌晚期在设计 Android 的时候,Android 须要响应滑动、输出、音量、电话等事件,晚期 activity 设计不欠缺的时候,谷歌心愿测试 activity 的性能,把所有的数据批量化的输入给 activity,看 activity 一秒钟能够解决多少数据。所以晚期 Monkey 是用来做 Android 的一个压力测试的工具。因为 Monkey 在测试过程中的“随机”性,凑巧能够被用来做主动遍历测试,然而 monkey 的毛病行业很显著,就是不满足咱们的两个主动遍历需要:可控性和可定制。毛病:不反对业务行为定制,无奈灵便的管制,常常会点到内部的 App 无奈回归原测试 App;或者点击到登记和退出,造成无奈持续前面的测试;因而 monkey 在通过调研理解后没有成为咱们做主动遍历测试的首选。2.2.2 MaximMaxim 也是一款主动遍历工具,由咱们国内的一名叫做 zhangzhao 的工程师开发,官网给出的定义是:An efficient Android Monkey Tester, available for emulators and real devices 基于遍历规定的高性能 Android Monkey,实用于真机/模拟器的 APP UI 压力测试。官网 GitHub 地址:https://github.com/zhangzhao4...咱们来看看这款工具的优缺点:长处:基于Monkey二次开发,也用了一些 AppCrawler 的设计思路,领有定制化性能;因为底层基于了 Monkey,所以运行速度还是比拟快的;毛病:因为是基于 Monkey,所以不具备跨平台性,只能测试 Android,不能测试 iOS,Web 等;这款工具没有开源,然而能够间接应用,在 GitHub 上下载后依据官网阐明操作即可,这里不做重点阐明。重点来看一下工具的特点和选择性:- 配置文件,官网给出了配置文件的示例,以 json 格局进行编写:接触过 AppCrawler 后会发现写法十分类似,只不过 AppCrawler 是以 YAML 文件进行书写。抉择:这也是一款很优良的工具,可在肯定水平上进行定制,如果只测试 Android 零碎的话,能够思考选用 Maxim 做主动遍历,速度绝对较快;如果想要跨平台或者对开源工具进行二次开发,那就要 AppCrawler 退场了。2.2.3 AppCrawler再来看明天的配角 AppCrawler,看看它为何满足咱们的测试需要,它的优缺点有在哪里。先来看它与其余框架的关系构造 与其余框架的关系 长处:跨平台性:AppCrawler 是基于 Appium 开发的,所以反对 Android 和 iOS。可控性:对测试的页面,控件类型的抉择,测试的深度等都可自在管制;可定制:可自定义操作,如输出,滑动等;毛病:运行速度较慢:AppCrawler 是基于 Appium 开发具备了跨平台的长处,然而也因为这层封装造成了运行速度绝对较慢;应用门槛高:正因为应用灵活性的问题,也造成了应用门槛的进步,次要基于 YAML 文件中应用 Appium 的相干技术常识进行配置,这就对使用者有了肯定的技术要求;装置和启动' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)3.1 下载因为较大,官网也给出了打包后的百度网盘下载地址 最新版本下载地址: https://pan.baidu.com/s/1dE0JDCH 这里以目前最新的2.4.0为例 如何本人编译打包:1)从 GitHub 上 Clone 源码,以后开源的最新 2.4.0 版本对应的分支是 2.3.1 AppCrawler 官网 GitHub 地址:https://github.com/seveniruby...2)切换到分支:git checkout 2.3.1 3)执行 mvn clean compile 4)应用 maven 构建:执行 mvn assembly:single 命令进行编译即可装置 :AppCrawler 自身是个 jar 包,不须要装置,须要装置的是运行时所依赖的环境:Java版本:Java8、Java10 (未测试过,作者说反对)Appium:Appium 1.8 以上 因为 AppCrawler 是基于 Appium 开发的,所以 Appium 的环境是必不可少的Appium的装置形式可参考另外一篇博客:  Windows (Win10)、Mac 下装置 Appium;查看帮忙文档:间接应用命令 java -jar appcrawler-2.4.0-jar-with-dependencies.jar,能够看到如下帮忙文档信息 相干参数含意和局部注解如下:$ java -jar appcrawler-2.4.0-jar-with-dependencies.jar----------------AppCrawler 2.4.0 [霍格沃兹测试开发学社特地纪念版]Appium 1.8.1 Java8 testedapp爬虫, 用于主动遍历测试. 反对Android和iOS, 反对真机和模拟器我的项目地址: https://github.com/seveniruby/AppCrawler--------------------------------Usage: appcrawler [options] -a, --app <value> Android或者iOS的文件地址, 能够是网络地址, 赋值给appium的app选项 #装置App,理论中应用较少 -e, --encoding <value> set encoding, such as UTF-8 GBK #在Windows下可能会产生乱码,对其编码格局进行设置 -c, --conf <value> 配置文件地址 #简单且重要,是AppCrawler定制的外围 -p, --platform <value> 平台类型android或者ios, 默认会依据app后缀名主动判断 -t, --maxTime <value> 最大运行工夫. 单位为秒. 超过此值会退出. 默认最长运行3个小时 -u, --appium <value> appium的url地址 #运行依赖于appium,不加此参数就应用默认的appium地址端口 -o, --output <value> 遍历后果的保留目录. 外面会寄存遍历生成的截图, 思维导图和日志 --capability k1=v1,k2=v2... # 和appium的capability设置统一 appium capability选项, 这个参数会笼罩-c指定的配置模板参数, 用于在模板配置之上的参数微调 -r, --report <value> 输入html和xml报告 --template <value> 输入代码模板 --master <value> master的diff.yml文件地址 --candidate <value> candidate环境的diff.yml文件 --diff 执行diff比照 -vv, --verbose 是否展现更多debug信息 --demo 生成demo配置文件学习应用办法 --help示例appcrawler -a xueqiu.apkappcrawler -a xueqiu.apk --capability noReset=trueappcrawler -c conf/xueqiu.json -p android -o result/appcrawler -c xueqiu.json --capability udid=[你的udid] -a Snowball.appappcrawler -c xueqiu.json -a Snowball.app -u 4730appcrawler -c xueqiu.json -a Snowball.app -u http://127.0.0.1:4730/wd/hub#生成demo例子appcrawler --demo#启动曾经装置过的appappcrawler --capability "appPackage=com.xueqiu.android,appActivity=.view.WelcomeActivityAlias"#从曾经完结的后果中从新生成报告appcrawler --report result/#新老版本比照appcrawler --candidate result/ --master pre/ --report ./这里顺便说一下的是以后版本的diff性能还不欠缺,也绝对较简单,目前先不做深入研究Quick Start:1) 启动appium $ appium[Appium] Welcome to Appium v1.14.1[Appium] Appium REST http interface listener started on 0.0.0.0:47232)启动模拟器或真机,保障 adb devices 可有找到你的设施$ adb devicesList of devices attachedFKFBB19120151100 device3) 依据参考文档中的命令,启动遍历一个曾经装置过的 App (以示例中的雪球 App 为例): java -jar appcrawler-2.4.0-jar-with-dependencies.jar --capability "appPackage=com.xueqiu.android,appActivity=.view.WelcomeActivityAlias"这个命令执行后会以默认的形式去执行用例,而后遍历遍历准则:它的遍历准则是,找页面的里档次最深的元素,也就是处于核心地位元素会被优先遍历局部遍历成果展现:测试后果如果没有应用 -o 参数指定 log 输入的门路,AppCrawler 就会在当前目录下生成以工夫为命名的文件夹,外面保留了所有的数据,文件、截图、log $ ls20191129154742appcrawler-2.4.0-jar-with-dependencies.jar关上文件夹会发现如下,每一步都会进行截图(这也是速度变慢的起因之一吧)以及对于的 dom 文件,这里会看到有几个 steps 文件,这个只是随便点了某个操作来告知用户正在操作,真正的执行步骤是从这之后开始。' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)测试报告在测试 log 中有一个 index.html 文件,关上它会看到方才运行的测试报告,AppCrawler 会把每一次点击当做一个测试用例,没一个页面当做是一个测试套件;将界面和界面内的控件点击模仿成了测试套件和测试用例的关系;胜利的用 Succeed 示意,Canceled 是遍历的时候发现有这个可点击的控件,然而最初却没遍历到的控件。报告中也能够查看对应页面操作事件的截图 ' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)测试 log在生成的文件夹中有 appcrawler.log,外面记录了具体的执行步骤的 log 信息(加上 -vv 参数运行的话会失去更多更多的 log 信息)  截取局部 log 展现如下: 2019-11-29 15:48:10 INFO [Crawler.996.doElementAction] current element = MainActivity.tag=ImageView.depth=242019-11-29 15:48:10 INFO [Crawler.997.doElementAction] current index = 22019-11-29 15:48:10 INFO [Crawler.998.doElementAction] current action = click2019-11-29 15:48:10 INFO [Crawler.999.doElementAction] current xpath = //[@resource-id="com.xueqiu.android:id/decor_content_parent"]//[@resource-id="android:id/content"]//[@resource-id="com.xueqiu.android:id/mainContent"]//[@resource-id="com.xueqiu.android:id/main_content"]//[@resource-id="com.xueqiu.android:id/pager"]//[@resource-id="com.xueqiu.android:id/layout_refresh"]//[@resource-id="com.xueqiu.android:id/list"]//[@resource-id="com.xueqiu.android:id/today_topic_container"]//[@resource-id="com.xueqiu.android:id/time_line_topic_item_case2"]//[@resource-id="com.xueqiu.android:id/today_topic_container"]//[@resource-id="com.xueqiu.android:id/time_line_topic_footer"]//[@resource-id="com.xueqiu.android:id/feedback"]2019-11-29 15:48:10 INFO [Crawler.1000.doElementAction] current url = MainActivity2019-11-29 15:48:10 INFO [Crawler.1001.doElementAction] current tag path =hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.view.ViewGroup/androidx.viewpager.widget.ViewPager/android.widget.RelativeLayout/android.view.ViewGroup/androidx.recyclerview.widget.RecyclerView/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.FrameLayout/android.widget.ImageView2019-11-29 15:48:10 INFO [Crawler.1002.doElementAction] current file name = MainActivity.tag=ImageView.depth=242019-11-29 15:48:10 INFO [Crawler.1071.doElementAction] need input click2019-11-29 15:48:10 INFO [AppiumClient.53.findElementByURI] find by uri element= MainActivity.tag=ImageView.depth=242019-11-29 15:48:10 INFO [AppiumClient.245.findElementsByURI] findElementByAndroidUIAutomator new UiSelector().className("android.widget.ImageView")2019-11-29 15:48:10 INFO [AppiumClient.60.findElementByURI] find by xpath success2019-11-29 15:48:10 INFO [Crawler.1080.doElementAction] mark 20191129154742/1_Steps.tag=.name=NOT_FOUND.clicked.png to 20191129154742/2_MainActivity.tag=ImageView.depth=24.click.png2019-11-29 15:48:10 INFO [AppiumClient.141.mark] read from 20191129154742/1_Steps.tag=.name=NOT_FOUND.clicked.png2019-11-29 15:48:11 INFO [AppiumClient.154.mark] write png 20191129154742/1_Steps.tag=.name=NOT_FOUND.clicked.png2019-11-29 15:48:11 INFO [AppiumClient.161.mark] ImageIO.write newImageName 20191129154742/2_MainActivity.tag=ImageView.depth=24.click.png2019-11-29 15:48:11 INFO [Crawler.1095.$anonfun$doElementAction$5] click elementindex 等于几就示意第几次事件,action 示意以后的操作,xpath 就示意以后操作的元素的 xpath 表达式。补充阐明' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)总说 AppCrawler 慢,其余工具绝对较快,起因为何,先来看他们的架构组成 - appcrawler- appium、atx- appium on Uiautomator2 server、atx on Uiautomator2、maxim、adb shell uiautomator、改良版本Uiautomator2 server- Uiautomator2- AccessibilityService底层有个叫 AccessibleServices 货色,它能够获取 Android 所有界面的控件,uiautomator 获取元素进行操作的时候就是靠 AccessibleServices 去获取控件,而后去触发肯定的行为,uiautomator 就是将其进行了包装;基于 uiautomator,Appium 开发了一个 uiautomator server,ATX 开发了一个uiautomator2,maxim 就处于这一层。Appium 走的是 HTTP 协定,ATX 走的是 JSON-RPC 协定,AppCrawler 处于最上层 所以 AppCrawler 因为多了两层封装,再加上运行过程中退出了截图(能够在配置中勾销,然而勾销后不利于后果的查看),运行起来天然就慢了。改良冀望:前期冀望 AppCrawler 团队能够将其依据需要指定底层操作,绕过很多不必要的流程来减少效率,这样性能十分欠缺的同时也能保障效率到这里只是实现了 AppCrawler 的一个根本意识,既然提到了它的定制化的特点,就须要通过配置文件来实现了,下一篇将进行具体的介绍。 ...

January 30, 2023 · 3 min · jiezi

关于软件测试:测试开发-AppCrawler-自动遍历测试实践二定制化配置

定制化配置 主动遍历测试技术以及工具该如何抉择和疾速入门?通过比照和需要,最终抉择测试架构师思寒大佬的 AppCrawler 作为主动遍历测试的工具。以下就分享 AppCrawler 主动遍历测试的一些最佳实践经验。 模板文件生成 运行命令java -jar appcrawler-2.4.0-jar-with-dependencies.jar --demo, 会在当前目录下生成一个 demo.yml 文件,这个文件就是咱们进行定制化的配置文件模板: 执行命令生成demo.yaml模板配置文件$ java -jar appcrawler-2.4.0-jar-with-dependencies.jar --demo 2019-12-01 21:33:35 INFO [AppCrawler$.86.main]AppCrawler 2.4.0 [霍格沃兹测试开发学社特地纪念版]Appium 1.8.1 Java8 testedapp爬虫, 用于主动遍历测试. 反对Android和iOS, 反对真机和模拟器 我的项目地址: https://github.com/seveniruby...2019-12-01 21:33:35 INFO [AppCrawler$.223.parseParams] use default appium address 47232019-12-01 21:33:35 INFO [AppCrawler$.230.parseParams] appium address = Some(http://127.0.0.1:4723/wd/hub)2019-12-01 21:33:35 INFO [AppCrawler$.242.parseParams] result directory = 201912012133352019-12-01 21:33:36 INFO [AppCrawler$.286.parseParams] you can read /Users/qinzhen/Documents/TestDev/AppCrawler/demo.yml for demo 查看配置文件已生成$ lsappcrawler-2.4.0-jar-with-dependencies.jardemo.yml 关上配置文件demo.yaml如下: pluginList: []saveScreen: truereportTitle: ""resultDir: "20191201213335"waitLoading: 500waitLaunch: 6000showCancel: truemaxTime: 10800maxDepth: 10capability: noReset: "true" fullReset: "false" appium: "http://127.0.0.1:4723/wd/hub"testcase: name: "Ceshiren AppCrawler" steps: ...

January 30, 2023 · 3 min · jiezi

关于软件测试:通关小技巧有了软件测试题库的加持面试都有底气

面试,是决定求职者是否能进入到本人心仪岗位的敲门砖,而对于很多第一次加入软件测试面试的求职来说,想要通过面试就得通过hr的初面以及技术官技术面,前者还好说,能够依据状况临场发挥,而后者,就是实打实的专业性问题。很多人因为是第一次面试,所以明明有实力,但在面试时却因为缓和展现不进去,因而,提前做好技术性问题的筹备,就成了泛滥初试者的首选。 那么有什么“技术”能够让测试人在面试时有底气通关,拿下offer呢?其实想要有底气通关,一个“软件测试题库”就能够了,比方柠檬班软件测试培训机构旗下的软件测试题库小程序,外面蕴含全了整个软件测试阶段的面试题,并且还能将做过的错题进行整顿演绎,交换。当然,最要害的还是收费。这点置信不论是哪个测试人看到了,都会心动一番的吧,毕竟不花钱,专业性还强的通关“神器”谁不喜爱! 而除了给大家筹备“通过神器”之外,我也为大家浅备了一些初面的问题及答案。 如:为什么想来咱们公司面试?答复能够是:公司自身的高技术开发环境很吸引我;我心愿可能进入一家与我独特成长的公司;公司始终都稳固倒退,在近几年来在市场上很有竞争力;我认为贵公司可能给我提供一个不同凡响的倒退路线;这都显示出你曾经做了一些考察,也阐明你对本人的将来有了较为具体的远景规划。 你的职业规划? 答复:如果有幸进入贵公司,首先,我会尽快相熟我的项目的业务流程,尽早融入到团队中,和开发人员多沟通交流 ;其次,利用测试工具和所积攒的测试技巧,相熟某些业务的Bug可能性关键点 ,为客户提供称心的产品;再次,我会利用工作之余进行充电,及时总结工作,努力提高本人的专业技能,欠缺本人的性能测试自动化测试技能,在工作中缓缓积攒教训,使本人弱小起来,当前负责更重要的职务,为公司发明价值。 你对加班的认识答复:如果是工作须要我会责无旁贷加班,能够全身心地投入工作。同时,我也会进步工作效率,缩小不必要的加班。你对薪资的要求答复:我在软件测试行业曾经有xx年,参加过xxx我的项目多少个,有着丰盛的教训,因而,我心愿公司能依据我的状况和市场规范的程度,给我正当的薪水。总之,如何在面试中无效的沟通,是一门技术,更是一门艺术。

January 30, 2023 · 1 min · jiezi

关于软件测试:年后面了15个人发现这些测试人都有个通病

作者 | 程序员二黑 专一于软件测试畛域相干技术实际和思考,继续分享自动化软件测试开发干货常识!如果你也想学习软件测试,欢送退出我的交换群:832452893,一起交换和学习!年后的几天的工夫面了15集体,怎么说呢,基本上没有符合要求的,其实一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在10-20k,面试的人很多,但平均水平很让人悲观。看简历很多都是3年工作教训,但面试中,不提测试工具,仅仅根底的技术很多也知之不详,少数人数年的工作教训仅仅是功能测试堆起来的,毫无深度,对于APP自动化等等一问三不知,都停留接口测试的根底办法层面上,自动化进阶问题更是一问一个死,前沿技术最新动静也毫无关注。因为市场大批量流入这些不合格的自认优良的测试员,使得少数公司不得不升高了冀望,然而真正有实力的测试员,根本没有受到什么影响,要跳槽还是很容易的。如果对当初的工作不称心,又没有足够的教训,无妨先静下心来深造一番。 以上并不是歹意舆论。而是感觉测试者不要在工作中迷失了本人。目前就大量招聘信息来说,想要高薪得会以下几点 软件测试工程师须要把握的常识: 计算机常识,包含编程语言,把握至多1门开发语言,比方C、Java、C#等 一门脚本语言,比方Python、Perl、Ruby、Shell中对于测试工程师将来更广的职业倒退十分有帮忙。 数据库常识,对于绝大部分我的项目或互联网我的项目,都会有数据库,所以把握至多1门数据库,比方Oracle、SQl Server,DB② · Mysql等。 操作系统,比方Linux、Unix,Windows外围命令也十分重要。对于有些波及到网络的,网络和通信常识,比方TCP/IP协定也十分重要。 软件测试需要剖析与软件测试用例设计外围工程办法。把握支流的软件测试工具,比方性能测试工具JMeter/LoadRunner,自动化工具典型代表Selenium/UFT/Appium,测试管理工具等,事实上光有这些工具还不够,还须要真正了解其背地的实现原理。 把握外围的研发流程,比方RUP,测试流程,比方双V模型,或者是当初风行的麻利测试等,也是同样重要。办法是秘笈、工具是兵器、流程是套路。 如果你测试中有许多的困惑,那么我创立的软件测试技术交换群(832452893)将会是你接触良师益友的无益社区,同行或者能够给你带来一些实际性的帮忙与冲破。你也想晓得同行都在怎么致富吧! 当初很多软件测试人员,都会陷入到一个怪圈:看到他人升职加薪,又感觉为啥他人运气总是那么好,我和他差不多工夫进公司的啊!而后去跳槽,发现,当初的面试这么难的嘛,动不动就自动化测试,动不动就测试框架,软件测试不好做了,做 软件测试 的人太多了,我还是转行吧。 归总到一点,就是没从本人思考,从身上找起因。无论对于程序员来说,还是对于其余岗位,想要涨薪升职,本人的能力必定要跟得上,而惟一的方法就是通过学习来晋升本人。 接下来我将分享一下这些年来,我对于技术一些演绎和总结,和本人对作为一名 高级测试工程师须要把握那些技能的笔记分享,心愿能帮忙到有心在技术这条路线上一路走到黑的敌人! 软件测试工程师倒退布局路线一、测试根底理解测试的根底技能,把握支流缺点管理工具的应用,纯熟测试环境的操作与运维二、Linux必备常识Linux作为当初最风行的软件环境零碎,肯定须要把握,目前的招聘要求都须要有Linux能力。三、Shell脚本把握Shell脚本:包含Shell根底与使用、Shell逻辑管制、Shell逻辑函数四、互联网程序原理自动化必经之路:前端开发基础知识以及互联网网络必备常识四、互联网程序原理五、MySQL数据库软件测试工程师必备MySQL数据库常识,不仅仅停留在根本的“增删改查”。六、抓包工具Fiddler,Wireshark,Sniffer,Tcpdump各种抓包工具实用于各种我的项目,总有一款适宜你的七、接口测试工具接口测试神器,你绕不开的弱小工具:Jmeter。玲珑灵便:Postman八、Web自动化测试Java&Python理解自动化的目标,熟练掌握TestNG&unittest自动化框架,以及断言与日志解决九、接口与挪动端自动化业余接口调用、测试解决方案。组建残缺的web和接口自动化框架,Appium整体应用十、麻利测试&TestOps构建揭开TestOps的神秘面纱,继续集成Jenkins框架烂熟于心十一、性能测试&平安测试软件测试的此岸:性能测试和平安测试,选个方向致力爬坑吧!下面就是我为大家整理出来的一份软件测试工程师倒退方向常识架构体系图。心愿大家能照着这个体系,实现这样一个体系的构建。能够说,这个过程会让你痛不欲生,但只有你熬过去了。当前的生存就轻松很多。正所谓万事开头难,只有迈出了第一步,你就曾经胜利了一半,今人说的好“不积跬步,无以至千里。”等到实现之后再回顾这一段途程的时候,你必定会感叹良多。作为一位过来人也是心愿你们少走一些弯路,如果你不想再体验一次学习时找不到材料,没人解答问题,保持几天便放弃的感触的话,在这里我给大家分享一些自动化测试的学习资源,心愿能给你后退的路上带来帮忙。须要的敌人,加群(832452893)收费获取! 包含,软件测试学习路线图,50多天的视频教程、16个突击实战我的项目,30余个软件测试用软件,37份测试文档,70个软件测试相干问题,40篇测试教训级文章分享,还有2022软件测试面试宝典,还有软件测试求职的各类精选简历。加油吧,测试人!如果你须要晋升布局,那就口头吧,在路上总比在终点张望的要好。  将来的你必定会感激当初拼命的本人!

January 29, 2023 · 1 min · jiezi

关于软件测试:必知这些软件测试的面试技巧你必定用得上

对于面者来说如何顺利的通过面试,拿到心仪的offer,是大家最关怀的,而面试,除了本身能力外,当时充沛的筹备也是非常有必要,所以以下这些软件测试的面试技巧,你要提前晓得! 相熟简历在面试之前肯定要认真过一遍本人的简历。技术层面基本上问的都是你简历上写的内容,例如你简历上有个模块是[专业技能]列举了我会什么,面试官就会对照着简历一项一项问你。所以在简历上肯定不要夸张,不要把本人不会的、一点都不理解的写上去,被问到不会的会很难堪。 相熟我的项目对于这一块,置信不论是曾经在测试岗位工作过,还是初初入行的,都曾经具备了肯定的我的项目能力,只是不太分明面试官会从哪个方面下手去问而已。所以,在面试前,你能够提前去网上找找往期的面试真题刷一刷,提前对这些问题有个理解,当然,你也能够间接找业余的面试题库,比方柠檬班软件测试题库,这是培训机构下的一个收费题库,蕴含了高级功能测试、自动化测试、测试开发、性能测试等各阶段测试相干面试真题。  学会疏导面试时要学会疏导面试官将问题引到本人相熟、有劣势的畛域。如果面试官问的问题你答复不上,不要宁静太久,能够很大方地说“我对这个方面不是很理解,然而对于xxx方面比拟善于,我给您讲这个内容您看能够吗?”个别面试官都会批准的。 多总结 面试失败一次两次能够说是偶尔,然而次数太多就是本身问题。咱们无妨回顾剖析下这么屡次的面试过程中,本人是否意识到是哪一环节出了错使得本人失落offer。 总之,越是胆怯面试就越要多去面试,积攒面试的教训,面多了才相熟,面试的过程才不会缓和。在这里给大家一个小倡议:能够先约一些本人不太想去的公司面试,刷刷面试的教训,对面试熟络起来后面试本人心仪的公司才更加的得心应手。

January 19, 2023 · 1 min · jiezi

关于软件测试:绝对惊喜不花钱就能用的软件测试面试题库一定要拿下

软件测试题库哪里有?置信这是很多行将要去进行软件测试岗位面试的工程师们,都想要晓得的一个话题吧,毕竟软件测试我的项目内容这么多,谁也不能保障本人能答复上面试官们问的面试问题,因而,就想通过刷题的题海战术来晋升一下本人的面试通过率。那哪里有软件测试题库呢? 对于这一话题,我还是蛮有发言权的,前段时间,有网友曾叫我帮忙安利几个这样刷题题库,所以,应这位网友的要求,花了一个星期去理解,最初通过各方面的综合评定,我给他安利看就两个,别离是柠檬班软件测试题库、面试秘籍。尤其是柠檬班软件测试题库,倡议大家着重去看这个,收费不说,外面题型十分丰盛全面,知识点都有演绎总结,个别你须要坚固哪块都就能够针对性地训练。并且还开始有答题跟背题两个模式,背题模式会有答案显示在题目下方,错题都会生成错题集,难点也能够珍藏起来,非常适合长期用来备战面试。 当然,除了刷题备战技术问题,这些常见的面试问题,你也要所有筹备!比方:你对加班的认识?你能够这样答复:我是一个善始善终,负责的人,工作须要我会被动地加班,但同时我会进步工作效率,缩小不必要的加班。你如何了解测试这一份工作?答复:我感觉软件测试的次要工作是发现软件中的Bug,所以软件测试对于软件的品质有显著的改善作用。其次,测试人员测试的对象是开发人员开发进去的软件产品,所以对于开发工作能起到肯定的监督和推动作用。 你对薪资的要求?答复:我在软件测试行业曾经有xx年,参加过xxx我的项目多少个,有着丰盛的教训,因而,我心愿公司能依据我的状况和市场规范的程度,给我正当的薪水。如果你必须本人说出具体数目,请不要说一个宽泛的范畴,那样你将只能失去最低限度的数字,最好给出一个具体的数字。…… 总之,软件测试面试不仅仅只有技术面这一关须要器重,根底面这一同样也重要,所以,以上我为大家整顿的对于软件测试题库举荐以及常见面试题及答复话术你记得要拿走,有了它们的加持,拿下offer就很容易了!

January 18, 2023 · 1 min · jiezi

关于软件测试:知道了这些软件测试面试的题目以及答案offer手到擒来

软件测试属于技术类工种,因而,面试环节上也要比其余岗位的多上一个环节,别离是日常面试以及技术类问题面试,前者大家临场发挥就能搞定,而后者的话,因为技术性强,再加上很多人容易缓和,从而导致面试的通过率升高,所以,不少想在年后开始找工作的软件测试工程师们,就想要晓得哪里有比拟齐全的软件测试面试题及答案能够用作面试加持?  现如今要说软件测试面试题及答案比拟去齐全的中央,那必定就是非题库莫属了,比方前段时间理解到的柠檬班软件测试题库,外面就有高低3千多道相干的软件测试面试题,并且每个题目都是带有答案的,做起题来十分不便,要害还是全免费对外开放的,因而,想要趁着年假在家长期抱佛脚的人,倒是能够下来试试。  除此之外,我也为大家整顿了一部分面试官们可能会问到的软件测试面试以及答案,记得要珍藏好哟! 1、什么是并发?在lordrunne中,如何进行并发的测试?集合点失败了会怎么样?  答案:在同一时间点,反对多个不同的操作。LoadRunner中提供IP假装,集合点,配合虚构用户的设计,以及在多台电脑上设置,能够比拟好的模仿实在的并发。集合点,即是多个用户在某个时刻,某个特定的环境下同时进行虚构用户的操作的。集合点失败,则集合点的才操作就会勾销,测试就不能进行。 2、Jmeter中如何实现关联? 答案:上一个接口中通过正则表达式提取器或jsonpath解析器提取下一个接口须要的参数值保留到变量,而后再写一个接口通过${变量名}去获取变量。 3、eta测试与Alpha测试有什么区别?答案:Beta testing(测试),测试是软件的多个用户在一个或多个用户的理论应用环境下进行的测试。开发者通常不在测试现场Alpha testing(测试),是由一个用户在开发环境下进行的测试,也能够是公司外部的用户在模仿实际操作环境下进行的受控测试 4、你在测试中发现了一个 bug ,然而开发经理认为这不是一个 bug ,你应该怎么解决。答案:将问题提交到缺点治理库外面进行备案。与设计人员、开发人员和客户代表等相干人员探讨,确认是否是缺点;正当的阐述,向测试经理阐明本人的判断的理由,留神主观、谨严,不掺杂集体情绪。期待测试经理做出最终决定,如果依然存在争议,能够通过公司政策所提供的渠道,向下级反映,并有下级做出决定。

January 17, 2023 · 1 min · jiezi

关于软件测试:初级软件测试面试题以及答案年后你肯定用得上

软件测试工程师面试通常要经验技术面以及HR面,HR面个别都是日常问题,面试人能够临场发挥过来,但关乎岗位职责的技术面,可就没那么容易了,尤其是对于很多首次去面试测试岗位的没有任何测试岗位面试教训的转行人员,那么高级软件测试面试官都会问些什么样的问题呢? 1、网页解体的起因是什么?答案: 内存透露网页代码简单和浏览器bug 网页数据过多Ajax的Web服务破绽 2、发现的缺点越多,阐明软件缺陷就如许?答:其中的起因次要如下:(1)代码复用、拷贝代码导致程序员容易犯雷同的谬误。类的继承导致所有的子类会蕴含基类的谬误,反诬拷贝同一代码象征可能也复制了缺点。(2)程序员比拟操劳是能够导致某些间断编写的性能缺点,程序员加班是一种司空见惯的景象,因而膂力不只是容易编写一些缺点较多的程序,而这些间断埋伏缺点恰好是测试工程师大显神通的中央。(3)“缺点一个连着一个”不是一个客观规律,只是一个常见的景象。如果软件编写的比拟好,这种景象就不常见了。测试人员只有严肃认真的测试程序就能够了。 3、如果有个我的项目说充值1000元,到账只有800元,这个你该怎么排查问题? 答:须要弄清楚整个充值的数据流走向,包含页面操作,充值1000-->领取银行卡扣款1000-->托管银行账户+1000-->平台账户用户表余额+1000,确认是哪个环节出问题,同步查看数据库和日志剖析去进行具体排查。 4、什么是可迭代对象? python中内置的数据类型哪些是可迭代对象?答:1、可能应用for循环进行迭代操作(遍历)的都是可迭代对象字符串、列表、元组、汇合、字典,range对象,open关上的文件对象实现了序列语义的对象(对象领有一个_getitem_办法)实现了迭代协定的对象(对象领有_iter_办法) ……以上即是我整顿的局部软件测试面试常问问题,技术性面试题问题理解,绝非百十,倡议大家找个业余的面试领导,或者题库进行零碎的筹备。比方题库方面的话,你们能够看看,这个收费的软件测试面试小程序,名字是柠檬班软件测试题库,据说它本来是培训机构为本人的学员刷题开发的,前面不晓得啥起因,将题库降级迭代后,就对外收费凋谢了。 所以,我感觉如果你们须要刷题的,这个收费的题库应该还是蛮适宜长期抱佛脚的,毕竟是培训机构的下的,专业性也有。

January 16, 2023 · 1 min · jiezi

关于软件测试:Windows10安装卸载Mysql步骤和方法

1、彻底卸载Mysql进入控制面板-卸载程序 ,卸载MySQL(留神所有以mysql结尾的都卸载掉);关上C盘-programdata 删除MySQL的文件夹;进入c盘-Program Files 删除MySQL文件夹;关上搜寻 , 输出regedit,进入注册表 删除以下文件HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Control/MySQL,HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Control/MySQL,HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/MySQL, HKEY_CURRENT_USER/Software/MySQL .输出cmd 右键以管理员身份运行 输出命令 sc delete MySQL重启!2、Windows10下装置MySQL8.02.1 下载官网下载地址:https://dev.mysql.com/downloads/mysql/网盘地址:版本为8.0.22链接:https://pan.baidu.com/s/1lvQgy9SLVDMRTZtEb7AVZg 提取码:0qut2.2 装置解压文件解压到你装置的目录:D:\mysql-8.0.22-winx64(这是我的装置目录)在D:\mysql-8.0.22-winx64下新建data文件夹和my.ini文件,如下: 设置my.ini文件内容,如下: (留神:以下内容中有两个门路都是你的mysql装置门路,留神批改)[mysqld]# 设置3306端口port=3306# 设置mysql的装置目录basedir=D:\\mysql-8.0.22-winx64# 设置mysql数据库的数据的寄存目录datadir=D:\\mysql-8.0.22-winx64\\data# 容许最大连接数max_connections=200# 容许连贯失败的次数。这是为了避免有人从该主机试图攻打数据库系统max_connect_errors=10# 服务端应用的字符集默认为UTF8character-set-server=utf8# 创立新表时将应用的默认存储引擎default-storage-engine=INNODB[mysql]# 设置mysql客户端默认字符集default-character-set=utf8[client]# 设置mysql客户端连贯服务端时默认应用的端口port=3306default-character-set=utf82.3 设置环境变量关上零碎变量,新增MYSQL_HOME变量变量名:MYSQL_HOME值:D:\mysql-8.0.22-winx64 在path中增加%MYSQL_HOME%\bin 3 、启动MySQL和设置明码以管理员身份关上cmd,进入到D:\mysql-8.0.22-winx64\bin下 输出mysqld -install进行服务的增加;输出net start mysql启动服务;#这里特地阐明。如果启动服务提醒服务无奈启动,服务没有任何报错,那么#能够删除data文件夹,执行以下命令:mysqld --initialize --user=mysql --consolemysqld --installnet start mysql#而后重新启动服务即可输出mysql -u root -p进行登录数据库,这时提醒须要明码,而后就是用你下面的明码登录 进入到mysql后,输出以下内容批改明码为123456;ALTER USER root@localhost IDENTIFIED BY '123456'; 4 mysql8.0之前版本遗记明码如何批改?找到mysql的bin目录,输出:mysqld --skip-grant-tables;从新在开一个cmd窗口;找到bin目录:mysql就进入登陆状态了;5.7.22批改明码语句: update user set authentication_string=password('123456') where user='root' and host='localhost';5.6.批改明码语句: update user set password=password('123456') where user='root' and host='localhost';

January 14, 2023 · 1 min · jiezi

关于软件测试:Centos7下安装Dogtail-GUI自动化测试工具并打开sniff工具过程中遇到的问题解决方法

因为测试须要,需在Centos下进行liunxGUI软件自动化测试,所以用到了python的Dogtail 库,继而应用Dogtail 的sniff控件获取工具,然而遇到了很多问题记录如下。 1 环境Centos 7Python3.9.0 Python2.7.52 应用Python3装置Dogtailpip3 install dogtail我这里默认曾经装置好了,如下: 3 gi模块装置输出sniff,关上sniff控件辨认工具,然而间接报错ImportError: No module named 'gi'查阅很多材料说要装置python-gobject,所以装置下这个软件yum install python-gobject 4 pyatspi模块装置装置完后,持续输出sniff,又提醒如下:ModuleNotFoundError: No module named 'pyatspi'依据网友材料,应该是短少了pyatspi,所以装置它,不同的操作系统装置的包名称不一样,如下,这里是centos应用yum装置# OpenSUSE,您须要装置python-atspizypper in python-atspi# Ubuntu和衍生产品,它是python-pyatspiapt-get install python-pyatspi# RedHat,Fedora和衍生品来说,它是at-spi-pythonyum install at-spi-python 5 批改sniff的python版本好了,以上装置完后,仍然提醒如下,然而明明曾经装置了:ModuleNotFoundError: No module named 'pyatspi'狐疑是python版本的问题,因为有python2.7.5和python3.9.0,好了批改sniff文件 查找到sniff的目录,大家文件,发现应用的是python3.9,改为python2.7 6 装置pip(python2)以上批改完后,持续输出sniff,然而还是报错,提醒:没有 dogtail.config这个模块剖析起因是咱们之前装置dogtail的时候,应用的是pip3装置的,即环境装置到了python3里边,然而咱们以上步骤曾经把sniff的环境改为python2.7.5了,然而python2里咱们是没有装置dogtail的,所以装置dogtail输出pip install dogtail,然而提醒没有pip这个bash,即没有pip这个命令,这里的pip指的是python2环境的;那就装置pip2,命令如下: yum install python-pip ## 7 批改pip的命令解析器为python2以上执行完后,输出pip,还是提醒没有这个文件或目录,可是曾经装置好了呀批改/usr/bin/pip,把首行中的python3改为python2.7 再次输出pip,OK了 8 python2环境装置dogtail输出pip install dogtail,如下: 9 再次启动sniff输出sniff,这下OK了,如下;

January 14, 2023 · 1 min · jiezi

关于软件测试:Python函数的学习总结

1 函数的创立和调用1.1 函数创立创立函数即定义函数应用关键字def实现语法:def fname([pname]): ["comm"] [fuc]阐明:def:定义函数的,固定写法fname:函数名pname:参数,可选,指定向函数中传入的参数,若有多个的话,参数之间用逗号隔开comm:可选,函数的正文,即阐明函数的性能、传递的参数,晋升代码可浏览性fuc:函数体,可选,具体的函数性能,如有返回值,应用return()comm和fuc必须要进行缩进显示如果想定义空函数,函数体间接用pass作占位符即可# -*- coding:utf-8 -*-import randomdef mgame(num): """ 模仿石头剪刀布游戏: :param num: 输出一个0-2之间的任意一个整数(0:石头、1:剪刀、2:布) :return: 返回输出的num以及计算机随机给的数值 """ computernum = random.randint(0, 2) if num == computernum: print("平局!") elif num == 0 and computernum == 1 or num == 1 and computernum == 2 or num == 2 and computernum == 0: print("我赢了!") else: print("计算机赢了") return num, computernum后果: D:\Python37\python.exe F:/python_study/main.py过程已完结,退出代码 0运行上边的代码,不显示任何内容,也不会抛出异样,因为函数没有调用!!! 1.2 函数调用函数调用即执行函数简略了解一下:函数就是实现某种性能或者用处的工具,而调用函数就是应用这个工具语法:fname([pname])阐明:fname:函数名panme:参数,依据函数的定义来确定传入参数的类型以及是否传入参数# -*- coding:utf-8 -*-import randomdef mgame(num): """ 模仿石头剪刀布游戏: :param num: 输出一个0-2之间的任意一个整数(0:石头、1:剪刀、2:布) :return: 返回输出的num以及计算机随机给的数值 """ computernum = random.randint(0, 2) if num == computernum: print("平局!") elif num == 0 and computernum == 1 or num == 1 and computernum == 2 or num == 2 and computernum == 0: print("我赢了!") else: print("计算机赢了") return num, computernumout = mgame(2) # 调用函数,因为这个函数定义了有返回值,所以调用函数后,并且把后果给out变量;因为函数定义的时候有一个参数num,所以调用的时候给了一个传入参数2print(out) # 使出变量out的值后果: ...

January 13, 2023 · 3 min · jiezi

关于软件测试:内网机上使用pip离线安装whl包的方法

@TOC 1 思路先在有网络的机器上打包曾经下载的whl安装包把所有安装包的名称及版本号放到requirements.txt中把打包好的安装包和requirements.txt拷贝到内网机器上2 Python装置这个步骤间接略,大略思路为: 在内网机器上下载零碎对应的python版本,比方我的是python3.7.0(64位零碎)而后把python3.7.0安装包拷贝到内网机器上一步一部依照操作步骤装置即可,记得要勾选“装置pip”以及“减少门路到环境变量中”3 外网机上打包在外网机器Python的装置目录中新建一个文件夹,如packages: 进入到packages文件夹下,shift按住,鼠标右键“在此处关上命令行”,输出piplist查看零碎中装置了哪些python包,如下: 把所有包名及版本号,重定向到requirements.txt中pip freeze >requirements.txt 而后下载零碎中曾经装置的所有包到一个目录下,比方在packages的packages中,应用如下命令,此时packages下有两个文件: pip download -r requirements.txt -d packages 查看两个文件的内容,一个是打包好的安装包,一个是包的名字和版本号 4 内网机装置打好的包先复制方才外网机器上的文件夹pacjages到内网机器对应的目录 -进入到D:\Python37\packages下,关上命令行,执行装置pip install --no-index --find-links=packages -r requirements.txt 如果只是装置某一个包,进入到包的目录,间接应用:pip install XXXX包名

January 13, 2023 · 1 min · jiezi

关于软件测试:PycharmPyQt5Python35开发环境配置详细教程

@TOC Pycharm装置装置教程 Python3.5装置1. 下载 官网下载地址 2. 抉择3.5(依据本身零碎抉择)版本下载 3. 下载实现,间接双击运行,即可,装置门路可选。 (留神:在双击运行后,关上装置程序界面,倡议抉择“减少环境变量”) 4. 环境变量设置如果步骤3曾经勾选了“减少环境变量”的话,就不必再设置环境变量。如果没有勾选,环境变量设置办法如下:找到本人的Python3.5的装置门路(例如我的是:D:\Python 3.5),把以下几个门路增加到零碎环境变量中。①计算机--邮件--属性,关上如下界面:②点击“高级零碎设置”,再点击“环境变量”,如下: ![在这里插入图片形容](https://img-blog.csdnimg.cn/2019111314592795.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L05vYW1hTmVsc29u,size_16,color_FFFFFF,t_70)![在这里插入图片形容](https://img-blog.csdnimg.cn/20191113145935475.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L05vYW1hTmVsc29u,size_16,color_FFFFFF,t_70)③在零碎变量中找到path,双击关上path,而后再门路的最开端退出:Python的门路,要以“;”隔开,即可:D:\Python35; D:\Python35\Lib; D:\Python35\Scripts; ![在这里插入图片形容](https://img-blog.csdnimg.cn/20191113145959922.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L05vYW1hTmVsc29u,size_16,color_FFFFFF,t_70)④验证Python是否装置胜利,开始---输出“cmd”,回车关上命令行,输出:Python,看到如下界面就示意Python装置胜利。 Pip装置以上装置python3.5的时候,默认曾经装置了pip工具,这里间接降级pip到最新即可。 python -m install --upgrade pipPyQt5装置pip install pyqt5pip install pyqt5-toolsPycharm中编译工具设置及pyqt5包的导入新建一个我的项目Ctrl+Alt+S,关上设置界面,点击我的项目下的“Project Interpreter” 点击如图的设置按钮 点击“Add...” 设置编译工具python.exe,具体依据本人的门路抉择 此时会主动导入编译工具下的包 ## 指定Qt Designer Ctrl+Alt+S,关上设置界面,点击“工具-内部工具”,点击“+” 设置参数如下:① program: D:\Python 3.5\Lib\site-packages\pyqt5_tools\Qt\bin\designer.exe,(换成本人的目录即可)②arguments: $FileDir$\$FileName$ ③working directory: $FileDir$## 指定PyUIC5 步骤和增加Qt Designer截然不同作用:把qt的UI文件转换成.py文件的工具具体参数如下: ① program: D:\Python 3.5\Scripts\pyuic5.exe(换成本人的目录即可)②arguments: $FileName$ -o $FileNameWithoutExtension$.py③working directory: $FileDir$## 指定PyRcc5 步骤和增加PyUIC5截然不同作用:将资源文件如图片等转成python代码能辨认的文件具体参数如下: ① program: D:\Python 3.5\Scripts\pyrcc5.exe(换成本人的目录即可)②arguments: $FileName$ -o $FileNameWithoutExtension$.py③working directory: $FileDir$## PyInstaller装置 ...

January 13, 2023 · 3 min · jiezi

关于软件测试:软件测试工程师-路在何方如何发展职业规划是怎样的

《测试架构师修炼之道》之 测试工程师职业规划读后感 读了《测试架构师修炼之道》之后,心田还是惶恐的,程序员35、40岁这两道坎如何应答,测试工程师其实也不例外。这本书第2章节次要讲了软件测试工程师的职业规划,内容还是十分不错的,对一些内容整顿下,留作笔记,以备后用。 @TOC 1、软件测试的职业倒退方向软件测试在职业倒退方向上,概括来讲分为“治理”和“技术”两大类。另外也能够在品质畛域倒退。 1.1、软件测试在治理上的倒退比拟风行的设置包含测试组长、测试经理、测试代表、测试主管、测试总监、测试部长等,不同的公司有所差别,依照治理级别的高下,大抵分为以下三级。 1.1.1、高级软件测试管理者:测试组长教训:个别由两年左右工作教训的工程师担当;上级:有企业规模和产品复杂度存在差别,可能会治理2-5名软件工程师;职责:个别不会负责整个产品,只是负责其中的一个或多个个性;从事的管理工作大多仅集中在测试计划的制订和执行上;常会负责产品重点、难点测试;此外还须要负责带新员工。1.1.2、中级软件测试管理者:测试经理、测试代表、测试主管教训:三者排名不分先后,都是中级管理者;个别由4年左右工作教训的工程师担当;上级:可能会治理10-20名软件测试工程师(包含测试组长);职责:次要负责对象为产品,重要的工作还是运作我的项目测试,制订并执行测试计划、测试总结后还需对产品品质进行评估。给出公布倡议;仍然还是产品骨干,还会负责产品测试重点、难点工作,所以也不会是纯正的管理者。技能:须要把握更多的治理常识,深刻了解我的项目价值,做好项目管理、品质治理、老本治理、工夫治理、风险管理、人力治理。还须要和开发人员、市场人员、服务人员等密切配合,沟通协调能力必不可少。1.1.3、高级软件测试管理者:测试总监、测试部长教训:个别都有10年以上软件测试工作教训;对象:次要是产品线或公司;职责:须要了解产品的商业指标,间接对产品胜利负责。对团队倒退负责,进行人员招聘和造就,留住要害人才,进步更你性能不合格人员,晋升团队胜任力和职业能力;负责我的项目财务管理(估算和管制);负责资源打算与调配;继续改良测试能力,晋升效率和产品质量,从测试的角度对交付产品的老本、周期和品质负责;仍然也不会是纯正的管理者,仍然须要对测试各种技术的当先性。1.2、软件测试在技术上的倒退在技术上的倒退仿佛不像在治理上的倒退那么明确,一种观点是测试资格和能力分为助理软件测试工程师(或者是实习软件测试工程师)、高级、中级、高级、主任(或资深)软件测试工程师。然而作者认为没有突出“软件测试技术”,作者更偏向一种简略分法---产品测试技术和专项测试技术。产品测试技术:把某个具体(或一类)产品测试得更好的技术;专项测试技术:不针对具体的产品,而是测试畛域广泛的技术。 1.2.1、产品测试专家:软件测试架构师方向:软件测试在技术上能够向产品测试技术专家方向倒退;别称:有些公司称产品测试技术专家为软件测试零碎架构师(书中简称为测试架构师)测试架构师和零碎架构师的区别: 1.2.2、专项测试工程师方向:还能够向专项测试工程师方向倒退,成为软件测试某畛域的专家;分类: ①从测试体系角度看:测试体系中任何一个环节,测试策略、测试剖析设计、测试执行、测试评估、测试流程等每个畛域蕴含了很多能够深刻倒退钻研的技术,比方自动化测试技术、测试工具(产品测试模仿工具和测试流程管理工具)开发、缺点剖析、测试评估等技能; ②从产品质量属性看:专项测试技术还蕴含性能测试技术、可靠性测试技术、安全性测试技术等;测试技术类专项测试技术: 品质属性类专项测试技术: 1.3、“角色”和“段位”如果只为没有发生变化,工作两年的测试工程师和工作3年的测试工程师差异在哪里?工作3年的测试工程师和工作4年的测试工程师差异又在哪里?书中作者援用了姜汝祥的《请给我后果》这本书中的一个对于“秘书九段”的故事,从中找到了答案(此故事后续独自找进去分享)。总结:测试组长、测试经理、测试架构师、测试总监等,都是被赋予了不同责任的“角色”,“角色”的转变在肯定水平上反映了职业的倒退。然而不能说“倒退”肯定要“角色”发生变化。从“秘书”变成了“老板”,是“倒退”没错,同样从“一段秘书”降级为“二段秘书”也是“倒退”。 一般测试工程师的“测试六段”: 测试一段:执行测试用例,记录问题反馈给开发,使得开发能读懂问题形容的含意;测试二段:对产品需要有肯定的理解,能依据产品需要 剖析、设计产品的测试用例;发现问题能初步定位;测试三段:对需要和实现有较深刻理解,设计用例会留神用例的有效性,测试用例会思考应用自动化测试等办法晋升测试执行的效率;测试四段:深刻了解产品需要和实现,了解产品的隐形需要,对产品性能、可靠性、易用性等非功能属性的测试均为有所波及,并把握其中的测试方法,会应用测试缺点剖析技术,会评估产品质量;测试五段:一直谋求最适宜产品的测试技术,关注测试过程改良,推动产品测试技术的提高;测试六段:走向前端,做缺点预防,能将测试方法标准化,并固化为测试工具和流程。1.4、软件测试在品质畛域的倒退方向:能够向“品质治理”畛域倒退;品质和软件测试的了解:“软件测试”是一种“品质流动”,然而不能认为“品质”流动就是“软件测试”。品质的倒退:工业革命期间,“品质”叫“质量检验”(QI),就是关注“产品是否合乎工厂制订的规范”;随着社会生产力的倒退,“品质管制(QC)”被提出,标记着开始从用户的角度来评估品质。在ISO9000(1986,1994)中又进一步倒退为“质量保证(QA)”,“品质是设计进去的” “品质就是满足用户的需要” “客户满意度”成为新的品质倒退方向。当初品质进一步倒退为“卓越经营”,品质曾经被提到了企业策略的角度。“品质治理”也成为了古代企业治理中十分重要的一个环节。方向1-产品流程设计:例如IPD方向2-企业品质管理者:品质巨匠朱兰把“品质策动”、“品质管制”、“品质改良”称为品质治理三部曲。①品质策动:致力于制订品质指标并规定必要的运行过程和相干的资源以实现品质指标;②品质管制:致力于满足品质要求;③品质改良:致力于加强满足品质要求的能力。 品质管理体系办法: ①建设一个以过程改良为主体的品质管理体系; ②明确体系内各过程的相互依赖关系,使其互相协调; ③管制并协调品质管理体系各过程的运行,关注其中的要害过程,规定要害流动的运作形式和模式; ④了解为实现独特指标所须要的作用和责任,缩小因为职责不明导致的阻碍; ⑤子口头前确定做须要资源的需要; ⑥设定零碎指标以及各个过程的分指标,通过分指标的实现,确保实现预期的总指标; ⑦通过监控和评估,继续改良品质管理体系,一直进步组织的业绩。方向3-客户满意度治理专家: ①重点是辨认要害用户的称心因素和做好与用户接触点相干的质量保证; ②“要害用户满意度因素”是指通过对特定细分市场进行考察后,剖析得出这类用户对特定的产品质量要求和服务个性,并把要害客户满意度因素作为企业产品与服务策略的输出,使企业最大限度地放弃产品竞争力; ③“用户接触点相干的质量保证”:是指蕴含客户能够感知到的产品和服务,其中服务包含产品推广、招标达标、供货保障、工程交付、技术支持、备件反对和客户培训等。 ④还须要对用户有很好的需要和了解。这里的需要不仅仅局限于产品,而是客户可感知的方方面面。2、软件工程师职业规划倡议2.1、做治理还是做技术2.1.1、思维的转变①兴许受到中国传统观念“学而优则仕”的影响,很多人会不假思索地抉择做治理;②甚至会认为一个30岁的软件测试工程师还在做技术是一件丢人的事件;③其实先抛开问题不说,单纯从工夫来推断,本科生失常状况下23岁毕业,到30岁有7年工夫;研究生25岁毕业,到30岁只有5年工夫,对软件测试这种深刻难、且对从业者综合要求很高的职业来说,5年、7年其实并不算太长,对软件测试的了解只能算是“管中窥豹”而已;④所以倡议软件工程师在打算职业倒退里程碑时,能够把工夫放得更长一些,5年一个小台阶,10年一个大台阶。 2.1.2、软件测试在“技术方向”和“治理方向”上又是能够互相转换、穿插倒退的①这是因为软件是一门基于实际的学科,对软件测试来说,“治理”不可能是“相对的治理”;②软件测试的管理者首先要是产品测试技术专家,这是“做正确的事”的根底;很难设想一个不懂测试技术、不了解各项测试流动的软件测试管理者如何评估软件测试的重点、难点,如何做打算,如何评估危险管制我的项目进度;③“技术”也不能是“相对的技术”,不了解“价值” “指标” “老本”的技术人员容易犯的谬误就是陷入“唯技术论”中,不足“治理”思维会让他们制订的测试策略不切实际,一纸空文的测试策略是没有意义的;④一个现实的测试团队,具备测试经理(测试代表)和 测试架构师两个角色。测试经理负责管理,测试架构师负责技术,但并不意味着测试经理只有治理,测试架构师只管技术。相同,两者要相熟彼此畛域的要害流动,可能评审要害的交付件,互相可能提供各自畛域要害流动的决策参考,能够互相备份;⑤所以倡议软件测试管理者肯定不要过早的放弃技术,走所谓的“纯治理”路线,把本人陷入各种治理会议、沟通协调中。不要认为读了几本书,加入了几次沙龙论坛、几次培训就能把握要害的测试技术办法,只有在产品测试中一直地实际、总结、再实际、再总结,能力一直晋升本人。如果技术有短板,测试管理水平也不能真正下来,随着测试资格的加深,职业能力和资格变得越来越不匹配,集体职业倒退路线反而越来越窄。 2.2、对测试工作“跳槽”的倡议2.2.1、不要轻易跳槽,学会“韬光养晦”100个集体心中有100个哈姆雷特,100集体心中有100个想跳槽的理由。概括无非就两种:一是遇到难以解决的问题;二是现有职业和本人的职业规划不符。①对于第一种状况,倡议是感性、谨慎、再感性、再谨慎、没有一个“完满”的公司,职场上遇到的问题很可能是“共性”问题,比方加班、绩效考评不偏心等,很难通过说跳槽能够彻底解决问题了;②低于第二种状况,如果通过跳槽能够取得更好的职业倒退机会和更广大的职业倒退舞台,比方公司更标准,职业倒退通道更明确,职位上有所晋升,当然要跳槽;③不倡议做“平级”之间跳动。当然如果B公司提供了比A公司高很多的薪水,兴许能够考虑一下。“平级”跳槽不会对集体能力晋升带来明确的好处,而且要思考适应新环境、新制度和新的人际关系这类隐形老本,思考相熟产品的老本,很多公司的HR对频繁跳槽的候选者有“稳定性差”的印象,当机会降临的时候,可能就抓不住了。④上策要学会“韬光养晦”。软件测试不仅须要实力,更须要时机。比方目前的公司临时提供不了“测试治理”的机会,与其自怨自艾,不如工作总寻找各种做“测试治理”的机会,如领导新共事工作、组织分享测试技术、改良测试流程等。另外能够察看那些优良的测试管理者是如何解决测试项目事务的,推敲他们解决问题的思路和办法,积攒本人的教训,晋升相干能力。有了这些筹备,当机会降临的时候,你能力抓住。机会只会垂青有筹备的人。 2.2.2、跳槽时除了思考公司,还要思考测试产品的持续性倡议在跳槽的时候,除了思考公司、薪水、职位之外,还要思考产品的持续性,让之前的教训尽可能多地“复用”。类似的产品,不同的公司,还给了你一个站在新的角度了解产品、扫视产品测试的机会。 2.3、软件测试守业2.3.1、软件测试征询比方:①测试技术培训;②测试团队成熟度评估及改良;③测试流程建设;④测试项目改良;⑤测试工具开发。。。。。。 2.3.2、软件测试高端外包①当初软件测试外包次要的运作思路是将公司认为非核心的局部外包进来进行测试,次要走“低端”;②产品的非功能属性包含性能、平安、可靠性、易用性、兼容性等畛域,每个畛域又有若干个子畛域,每个畛域简直都有本人的测试方法和测试工具,雇佣或培训测试人员把握相干技能,购齐相干的测试工具,再搭建测试环境进行测试,对任何一个团队来说,都是一笔不菲的开销;③软件测试高端外包内容针对的就是软件测试中的这些重要的非功能属性进行的专项测试。 2.3.3、测试工具开发①软件测试工具能够分为和产品相干的测试工具、和测试技术相干的测试工具、和测试治理相干的测试工具;②和产品相干的测试工具个别都是为了解决产品测试的具体问题而开发的,针对性都很强。如产品性能测试工具Avalanche、IXIA、LoadRunner;产品安全性测试工具Metasploit、BackTrack等。也能够依据产品测试难点有针对性地开发定制一些工具,如对一些公有协定开发协定异样测试工具、开发模仿用户大量呼入的测试工具等;③和测试技术相干的测试工具有针对产品特点的自动化测试平台(或二次开发)、用例设计工具等;④和测试治理无关的工具有测试缺点剖析管理工具,测试需要、用例跟踪管理工具等等。

January 13, 2023 · 1 min · jiezi

关于软件测试:软件测试面试技巧-这些问题的回答技巧你记得收藏

在当今竞争强烈的软件测试职场中,想谋一份令别人艳羡、让本人悲痛欲绝的工作,当时充分准备是十分必要的。因而,这些软件测试的面试技巧,肯定要记住,让你的面试通过率直线攀升,薪水也是蹭蹭上涨。   自我介绍自我介绍中尽量体现本人的劣势,比方毕业院校如果很有品质,就肯定要提;工作经验超过3年能够特意介绍一下,示意本人的工作教训比拟丰盛;而后挑本人比拟相熟而且有内容的工作经验做具体的阐明;这里最好针对公司的应聘岗位需要来介绍本人的工作内容,挑公司在意关怀的测试畛域,重点强调。自我介绍个别不倡议太长,然而也不要太简略,管制在1~2分钟以内即可。 与下级意见不统一时,你将怎么办? 很多软件测试工程师在面试的时候都会遇到考官给的各种各样的面试题,这也反映了测试工程师对企业的重要性,面试通常分为以下几个方面,因为篇幅无限,在这里就只给大家分享一些比拟常见的问题。 谈职业规划 不倡议大家说太久远的职业规划,显得不太事实,因为人生无常,打算赶不上变动,做太长的打算也没有意义,所以倡议做3-5年小指标。 说说你对行业、技术发展趋势的认识? 面试前理解分明公司的主营业务,面试岗位的技术需要,倒退状况,答复时能够说说公司的状况,依据公司的需要谈行业趋势及技术倒退,不能无边际的泛泛而谈。  相干业余技术问题倡议提前做好往期互联网大厂的面试真题背诵及刷题,能够在网上扒拉,也能够通过业余的题库进行刷题,前者互联网网上有很多,但比拟芜杂,容易浪费时间,后者,能够试试一个柠檬班软件测试题库,是一个小程序模式的,因为本就是软件测试培训机构依据业余开发进去的,外面波及到了功能测试、自动化测试、性能测试、平安测试各种真题及答案,专业性很强,要害还是收费! 这样,通过业余的刷题、背诵后,即便是在技术面试中,面试官发问的问题不是截然不同,你也照样能从相似的题目整合出新的答案。

January 12, 2023 · 1 min · jiezi

关于软件测试:Jmeter安装配置详细教程

1、Jmeter下载1.1、下载地址http://jmeter.apache.org/download_jmeter.cgi 1.2、抉择对应版本本文以windows版本为例,版本号为5.3:apache-jmeter-5.3.zip,下载下来先放着,后续用 2、JDK装置jmeter装置部署依赖java环境,所以得装置JDK 2.1、java环境查看命令行输出:java -version如果呈现以下内容,阐明java环境已装置,无需理睬,如果没有,须要装置JDK 2.2、JDK装置通过以上查看,如果没有java环境,那么须要装置JDK 2.2.1、JDK下载下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html下载账号:来自网友的共享 账号:oracle@trash.q-t-a.uk 明码:BugMeNot1 账号:thhgdtgdczslsvlqjv@twzhhq.com 明码:IDKmyPass1!抉择对应的零碎下载,本文以w7-64位为例: 2.2.2、JDK装置双击安装文件,依照提醒,能够一步步装置,两头会有两次抉择装置门路,第一次是装置Jre,第二次是装置Jdk,两次的装置目录,倡议独自放在一个磁盘的根目录,如下,笔者的是:D:jre1.8.0_261和jdk1.8.0_261 2.2.3、JDK环境变量配置新建零碎环境变量JAVA_HOME 编辑零碎变量Path 本文以w10为例:Windows10 电脑,新建变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;Windows7 电脑,在变量值最初输出%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;留神用;号分隔 新建零碎变量CLASSPATH变量变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar2.2.4、验证java环境如果呈现以下提醒,即示意装置胜利。 3、Jmeter环境部署3.1、环境配置解压之前下载的apache-jmeter-5.3.zip到D盘根目录 在零碎变量中增加JMETER_HOME变量名:JMETER_HOME变量值:D:\apache-jmeter-5.3 在已有的CLASSPATH中增加如下内容:;%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar; 在零碎变量path前面加上如下:%JMETER_HOME%\bin 4、验证jmeter命令行输出:jmeter,呈现以下内容,示意OK 5、批改语言5.1、临时性设置即设置后只对本次应用无效,重启后复原默认语言。抉择Options—>Choose Language—>抉择其余语言(例如:Chinese(Simplified)简体中文)设置胜利。重启Jmeter又会复原英文 5.2、永久性失效即永久性设置,设置后每次关上显示的语言都是一样的进入到Jmeter的bin目录下,找到jmeter.properties文档以记事本的形式关上查找language,找到language=en的行如下图,将en改为cn,并且去掉后面的#号,保留退出重启jmeter,语言设置胜利

January 12, 2023 · 1 min · jiezi

关于软件测试:解决pip-install-xxx安装Python包很慢或者报错问题

@TOC 1、问题景象景象就是:在cmd中应用pip install xxx装置Python的库或者包的时候,下载安装速度很慢,或者有时候间接报错。 2、解决思路这种问题,个别有三个解决办法,第一是改pip镜像源;第二种是查看本身网络是不是真的不好;第三种可能要依据报错信息去降级pip; 3、具体方法(永恒)这里说的次要是针对第一种,批改pip镜像源 顺次在如下门路中新建一个pip文件夹 在pip文件夹中新建一个pip.txt,内容如下:[global]timeout = 60000index-url = https://pypi.tuna.tsinghua.ed...[install]use-mirrors = truemirrors = https://pypi.tuna.tsinghua.ed... 而后把pip.txt另存为pip.ini,即点击另存为,文件名写“pip.ini”,保留类型选“所有文件” 再次在cmd 中试下pip install xxxx发现是不是很快了4、镜像源以上用的镜像源是清华大学的,当然咱们也能够改为其余的,以下提供一些罕用的镜像源 阿里云:http://mirrors.aliyun.com/pyp...中国科技大学:https://pypi.mirrors.ustc.edu...豆瓣:http://pypi.douban.com/simple/清华大学:https://pypi.tuna.tsinghua.ed...中国科学技术大学:http://pypi.mirrors.ustc.edu....5、具体方法(长期)以上办法是间接改了pip镜像源的配置,是永恒的办法,当然也能够间接应用命令,进行长期应用,仅本次应用无效而已,如下: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xxxxxxx# 这里的xxxxxxx为须要装置的具体安装包名称pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

January 12, 2023 · 1 min · jiezi

关于软件测试:Selenium启动IE11常见问题解决方法

@TOC 1、IE驱动问题1.1、问题景象selenium.common.exceptions.WebDriverException: Message: 'IEDriverServer.exe' executable needs to be in PATH. Please download from http://selenium-release.stora... and read up at https://github.com/SeleniumHQ... Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.ie.service.Service object at 0x000001541A09C1D0>>1.2、剖析从问题看,应该是IE驱动有问题,从新下载安装selenium对应的IE驱动下载地址如下:http://npm.taobao.org/mirrors/selenium 1.3、驱动调用①个别状况放在ie浏览器的装置地位,而后把门路退出零碎环境变量即可;②如果第一种不行,须要把驱动放在Python的装置目录下即可。 2、IE缩放比问题2.1、问题景象selenium.common.exceptions.WebDriverException: Message: Unexpected error launching Internet Explorer2.2、剖析这个是因为IE缩放比影响,须要把缩放比设置为100% 2.3、解决把缩放比设置为100%,即可 3、平安设置问题3.1、问题景象WebDriverException: Message: u'Unexpected error launching Internet Explorer. Protected Mode settings are not the same for all zones. Enable Protected Mode must be set to the same value (enabled or disabled) for all zones.'3.2、剖析这个是因为IE的平安设置导致的 ...

January 12, 2023 · 1 min · jiezi

关于软件测试:基于selenium的UI自动化实践

@TOC 1、需要阐明实现的需要是:获取某个博主博客的文章题目,而后把获取的题目内容保留到excel中2、实现目标实用于刚开始学习seleniumUI自动化的人,建设对UI自动化的根本认知3、非凡阐明后续代码只是来获取博主文章的题目,并无其它危险,所以不存在平安问题4、环境搭建具体参考:WebUI自动化环境搭建 5、实现思路# -*- coding:utf-8 -*-from selenium import webdriverfrom selenium.webdriver.common.keys import Keysimport timeimport reimport xlsxwriterdriver = webdriver.Chrome() # 关上Chrome浏览器driver.get("https://blog.csdn.net/xxxxxx") # 进入博客首页,这里是csdn博客,xxxxx是博主昵称time.sleep(1)driver.maximize_window() # 最大化窗口# 获取博客总页数listNum = driver.find_element_by_id("pageBox").textprint(listNum)number = re.sub("\D", "", listNum)number1 = list(number)print(number)print(number1)number2 = [int(i) for i in number1]print(number2)max_number = max(number2)print(max_number)# 获取博客题目time.sleep(2)mylist = []workbook = xlsxwriter.Workbook('./data.xlsx') # 获取的题目保留到当前目录的data.xlsxworksheet = workbook.add_worksheet()bold_format = workbook.add_format({'bold': True}) # 加粗# excel表格表头设计,保留六页数据worksheet.write('A1', u'第一页', bold_format)worksheet.write('B1', u'第二页', bold_format)worksheet.write('C1', u'第三页', bold_format)worksheet.write('D1', u'第四页', bold_format)worksheet.write('E1', u'第五页', bold_format)worksheet.write('F1', u'第六页', bold_format)row = 1col = 0try: for j in range(1, max_number): time.sleep(2) print("============第 %d 页数据==========" % j) for i in range(1, 41): mylist1 = driver.find_element_by_xpath(".//*[@id='mainBox']/main/div[2]/div["+str(i)+"]/h4/a").text # # 获取博客题目名称 print(mylist1) worksheet.write_string(row + i, col + j - 1, str(mylist1)) time.sleep(2) target = driver.find_element_by_xpath("html/body/div[6]/main/div[2]/div[41]/div/ul/li[9]") # 找到“下一页”元素 driver.execute_script("arguments[0].scrollIntoView();", target) # 拖动滚动条到指定的元素地位 time.sleep(1) target.click() # 下一页数据 driver.quit() # 敞开浏览器 workbook.close()except Exception as e: print("出错了,起因为:", e) driver.quit() # 敞开浏览器 workbook.close()6、实现成果 ...

January 12, 2023 · 1 min · jiezi

关于软件测试:软件测试Junit5-YAML-轻松实现参数化和数据驱动一

  编辑 登录:不同的用户名,不同的明码,不同的组合都须要做登录场景的测试,失常的排列组合下可能会产生多个用例 搜寻:不同的搜寻条件产生不同的搜寻后果,搜寻也是常见的测试项,单个搜寻参数或者多种搜寻参数的组合;同样也会产生多个用例。 参数化:咱们在写自动化用例的时候会有很多办法,个别咱们都会把数据通过参数来传递给办法,而不会间接在办法中写“死”,所以办法之间的数据传递都是通过参数化来进行,利用参数化进行数据与变量的对应;比方咱们的登录账号密码设置在参数中,再将参数传递到办法中。 public MainPage login(String username, String password) { sendKeys(inputUsername,username); sendKeys(inputPassword,password); click(loginBtn); return new MainPage(); } 数据驱动:将参数化中的数据起源变成从内部读取,参数有一个存放数据的中央,在用例执行的时候去去数据;这个数据存储的中央能够是咱们定义的数组、hashmap,也能够是从内部文件中(excel、csv、xml、yaml等)读取。 例如上述的搜寻案例,咱们能够将搜寻条件放入内部文件中,每次执行搜寻用例时,去文件中获取数据,依据获取到的数据执行不同的搜寻测试即可。 洗衣液 - - 帽子 - - 手套总结下来: 在执行测试工作过程中,有很多过程是须要动态变化的,如果每一次的变动都须要编码部署,那么整个执行的流程就会边长; 对于业务测试工程师来说,保护自动化代码有肯定的门槛,须要相熟编程语言和测试框架的构造; 定义好了数据驱动,将变动的数据放入配置文件中进行保护,既便捷(无需找到对应代码批改部署),也升高了保护的门槛(业务测试只须要在配置文件中批改数据即可) 与测试数据的数据驱动大致相同,次要也是不便业务测试保护,升高保护门槛和代码批改部署出错的危险;批改配置文件,整个业务行为和形象是不必扭转的,当然,在UI自动化中配合PO一起应用会“风味更佳”。 手工录制测试步骤,间接生成代码比拟艰难,能够生成步骤的配置文件,让代码去读配置文件,实现自动化的回放;(此方面自己临时仅理解过,还未实际落地,实践上是能够实现的。) 不要在测试用例内实现大量的数据驱动:用例通过PO的调用是可能十分清晰展现出业务执行场景的,业务才是用例的外围;一旦在用例里应用了大量数据驱动,如调用各种yaml、csv等数据文件,会造成用例可读性变差,保护复杂度变高; 测试数据的数据驱动测试步骤的数据驱动定位符行为流断言的数据驱动不同数据格式文件的比照 编辑1080×331 48.6 KB 从上述比照后果中,Json 和 YAML 对于数据结构的反对和书写水平是较好的;然而, YAML 的写法更简洁,并且还能够正文,因而最举荐应用的就是(从表格中的所处都地位也可猜到~)…位于C位的YAML!那么到底什么是YAML,又如何应用,上面简略来理解一下 yaml 的语法 大小写敏感应用缩进示意层级关系缩进时不容许应用Tab键,只容许应用空格。缩进的空格数目不重要,只有雷同层级的元素左侧对齐即可示意正文yaml 反对的三种数据结构 纯量(scalars):单个的、不可再分的值,例如数字、字符串、布尔值等对象:键值对的汇合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)键值对模式 key: value #行内对象 person: { name: allen, age: 25 } #以-结尾示意为一个数组里的值 - A - B - C #数组内嵌套子数组,用一个空格缩进示意 - - a - aa - - b - bb对象和数组能够联合应用,造成复合构造languages: - Ruby - Perl - Python websites: YAML: yaml.org Ruby: ruby-lang.org Python: python.org Perl: use.perl.org ...

January 11, 2023 · 2 min · jiezi

关于软件测试:软件测试Python-自动化测试三-pytest-参数化测试用例构建

est 的实用个性,接下来讲 Pytest 参数化用例的构建。如果待测试的输出与输入是一组数据,能够把测试数据组织起来用不同的测试数据调用雷同的测试方法。参数化顾名思义就是把不同的参数,写到一个汇合里,而后程序会主动取值运行用例,直到汇合为空便完结。pytest 中能够应用 @pytest.mark.parametrize 来参数化。parametrize( ) 办法源码: 主要参数阐明 argsnames :参数名,是个字符串,如两头用逗号分隔则示意为多个参数名 argsvalues :参数值,参数组成的列表,列表中有几个元素,就会生成几条用例 应用办法 应用 @pytest.mark.paramtrize() 装璜测试方法 parametrize('data', param) 中的 “data” 是自定义的参数名,param 是引入的参数列表 将自定义的参数名 data 作为参数传给测试用例 test_func 而后就能够在测试用例外部应用 data 的参数了创立测试用例,传入三组参数,每组两个元素,判断每组参数外面表达式和值是否相等,代码如下:运行后果:整个执行过程中,pytest 将参数列表 [("3+5",8),("2+5",7),("75",30)] 中的三组数据取出来,每组数据生成一条测试用例,并且将每组数据中的两个元素别离赋值到办法中,作为测试方法的参数由测试用例应用。同一个测试用例还能够同时增加多个 @pytest.mark.parametrize 装璜器, 多个 parametrize 的所有元素相互组合(相似笛卡儿乘积),生成大量测试用例。场景:比方登录场景,用户名输出状况有 n 种,明码的输出状况有 m 种,心愿验证用户名和明码,就会波及到 nm 种组合的测试用例,如果把这些数据一一的列出来,工作量也是十分大的。pytest 提供了一种参数化的形式,将多组测试数据主动组合,生成大量的测试用例。示例代码如下:运行后果:剖析如上运行后果,测试方法 test_foo( ) 增加了两个 @pytest.mark.parametrize() 装璜器,两个装璜器别离提供两个参数值的列表,2 * 3 = 6 种联合,pytest 便会生成 6 条测试用例。在测试中通常应用这种办法是所有变量、所有取值的齐全组合,能够实现全面的测试。上面讲联合 @pytest.fixture 与 @pytest.mark.parametrize 实现参数化。如果测试数据须要在 fixture 办法中应用,同时也须要在测试用例中应用,能够在应用 parametrize 的时候增加一个参数 indirect=True,pytest 能够实现将参数传入到 fixture 办法中,也能够在以后的测试用例中应用。parametrize 源码:indirect 参数设置为 True,pytest 会把 argnames 当作函数去执行,将 argvalues 作为参数传入到 argnames 这个函数里。创立“test_param.py”文件,代码如下:运行后果:下面的后果能够看出,当 indirect=True 时,会将 login_r 作为参数,test_user_data 被当作参数传入到 login_r 办法中,生成多条测试用例。通过 return 将后果返回,当调用 login_r 能够获取到 login_r 这个办法的返回数据。 ...

January 11, 2023 · 1 min · jiezi

关于软件测试:软件测试Pb协议的接口测试

Protocol Buffers 是谷歌开源的序列化与反序列化框架。它与语言无关、平台无关、具备可扩大的机制。用于序列化结构化数据,此工具对标 XML ,反对自动编码,解码。比 XML 性能好,且数据易于解析。更多无关工具的介绍可参考官网。 Protocol Buffers官网:https://developers.google.com... Protocol Buffers 为跨平台设计,以 Python 为例,使用者配置 .proto 文件,利用 Protocol Buffers 工具即可生成 Python 代码,此代码就是使用者想要的数据结构。 如果编程语言换成了 Java ,使用者可应用雷同的 .proto 文件,利用 Protocol Buffers 工具生成 Java 代码,此代码可被 Java 进行解析。 这么做的益处是能够跨语言交换,试想 Java 与 Python 间的数据通信,只须要利用 .proto 确定格局,就可随心编程,这个过程惬意无比。基于 Protocol Buffers 的测试也无比难受。 你可抉择本人的语言进行测试,比方 Python 。因为数据格式基于 .proto 配置文件,获取到这个文件即可生成数据类,比方下述 .proto 内容通过 protoc --python_out=./ ./addressbook.proto 命令即可生成 addressbook_pb2.py 文件: syntax = "proto2"; package tutorial; message Person {optional string name = 1;optional int32 id = 2;optional string email = 3; ...

January 11, 2023 · 2 min · jiezi

关于软件测试:软件测试PageObjectPO设计模式在-UI-自动化中的实践总结

PO的思维最早是2013年由IT大佬Martin Flower提出的:https://martinfowler.com/blik...没错,就是他--- 没错,就是他 --- 在他的文章里有这样一张经典样图,图片中展现了测试代码中间接操作HTML元素和应用PO模式将page对象封装成一个HTML页面,通过特定办法来操作元素的比照;如下图: 咱们晓得,PO次要就是利用在UI自动化测试上(Web端和App端均实用),因而2015年,Selenium官网给出了PO的设计准则阐明:https://github.com/SeleniumHQ... 对官网的准则进行解读,咱们能够失去如下的信息: 用公共办法代表UI所提供的性能如企业微信的通讯录页面,其中有“增加成员”、“批量导入,导出”、“设置所在部门”、“删除”等性能,这些性能都能够封装成通讯录这个UI界面所提供的办法;当然,局部数据较多或者较为简单,复用性也比拟高的话,例如增加成员,也能够独自抽离进去做一个page。 办法应该返回其余的PageObject或者返回用于断言的数据咱们既然以页面为对象进行业务操作,那么一个办法完结后必然要有返回值:要么返回一个页面,这个页面能够是当前页(因为可能还要在这个页面进行其余操作),能够是其余页面(咱们操作某个办法后很可能会跳转到另一个页面进行下一步操作);要么返回须要断言的值,测试用例总归有预期后果的对吧,那么最初必定要有办法返回一个值,用来给咱们做断言,来判断用例执行是否合乎预期后果。 不要返回null或者写一个void没有返回值的办法,这样的办法没有意义,既不能为下一步操作创造条件,也不能为用例的断言提供后果。 同样的行为不同的后果能够建模为不同的办法这个就比拟好了解了,拿最简答的登录场景来说:同样的行为: 无论输出的账号密码正确与否,都是依照输出账号密码,点击登录这样的行为去操作不同的后果:账号密码谬误和正确失去的登录响应肯定是不同的。建模为不同的办法:对于登录页来说,就能够依据登录信息正确与否建模出正确登录、账号谬误登录、明码谬误登录等办法了 不要在办法内加断言对一个测试用例的执行后果进行判断肯定是在测试用例里的,办法只是提供给咱们业务上须要的操作,因而断言不要加在办法里,而是应该写在用例里 不要裸露页面外部的元素给内部咱们应用PO的目标就是为了进步测试用例的可读性和可维护性,只有咱们人能操作的事,通过page对象封装好的客户端都能够做到;就相似于一个接口,咱们只关怀申请操作后接口的返回值是什么,而不须要关怀接口外部到底是如何工作的 不须要建模UI内的所有元素一个UI页面可能会蕴含很多的元素,然而咱们只有依据理论业务需要,将咱们用的上的元素进行建模即可 以页面为单位独立建模 暗藏实现细节 实质是面向接口编程 page :实现对页面的封装 driver :实现对Web、Android、Ios、接口的驱动 testcase :调用各类page实现业务流程并进行断言 data :配置文件和数据驱动 utils :其余便捷的性能封装(可选) 1.3.3 PO的长处 缩小例如find click这类样板代码的反复 测试用例的可读性进步,只关怀业务流程 测试用例可维护性进步,UI页面频繁被批改了,咱们只须要去批改对应PO即可,用例无需批改 说的再多,不如入手,上面以QQ邮箱登录为例,演示PO模式在UI自动化中的利用 2.1 登录场景预设登录页面提供login性能——LoginPage类+login办法登录页面内有多少元素并不关怀,暗藏外部细节登录胜利和失败会返回不同的页面loginSuccess——MainPage(进入主页面)loginFail——LoginPage(停留在登录页)通过办法返回值判断登录是否合乎预期 1)创立根底类BasePage,初始化driver,并封装罕用的元素操作方法,如click、sendKeys等 package poshow.page; import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement; import java.util.List; public class BasePage { public static WebDriver driver; public WebElement findElement(By by){return driver.findElement(by);} public List<WebElement> finElements(By by){return driver.findElements(by);} public void click(By by){findElement(by).click();} public void sendKeys(By by,String context){findElement(by).sendKeys(context);} ...

January 11, 2023 · 2 min · jiezi

关于软件测试:软件测试MockServer-服务框架设计

 大部分现有的 mock 工具只能满足 HTTP 协定下简略业务场景的应用。然而面对一些简单的业务场景就显得顾此失彼,比方对 socket 协定的利用进行 mock,或者对于领取接口的失败重试的定制化 mock 场景。 为解决上述问题,霍格沃兹测试学院设计并研发了 CSRMockServer 在上面的文章中简称 mock server。 mock server 相较于这些 mock 工具,具备规定更灵便、定制化更强、反对拓展多协定的特点。在本章节将会从架构设计介绍如何实现以上的特点,而在实战章节,会针对具体的测试场景,演示不同的解决方案。 框架设计 若想实现上述特点,肯定要有一个正当的架构设计。mock server 架构设计: 编辑 框架的设计次要分为五个局部: 客户端 客户端次要负责与 mock 服务的交互,由测试人员制订 mock 的申请响应规定,以及启动/进行 mock 服务。代理 负责申请和响应的收发,接管到申请后,先转发给 Mock 引擎,mock 引擎收到申请响应数据进行解决后,再返回给代理响应信息,代理给服务器返回模仿的响应值。协定(protocol) 不同的协定的申请、响应数据格式往往不雷同,既有规范的 json 构造体,也有二进制或十六进制的数据类型。这部分数据须要在协定层进行解决之后,才好进行相干的逻辑解决。所以协定层(protocol)次要负责和协定相干的数据处理。protocol 还具备很强的很拓展性,如果一个零碎波及到了多协定的 mock,测试人员能够给不同的协定指定不同的规定,以此达到多协定 mock 的作用。具体的应用会在前面的章节进行演示。Mock引擎 mock 逻辑的驱动引擎,依据不同功能模块的申请,分发给 mock 服务的对应的实现接口。后盾服务 提供与 mock 服务交互的对外接口。设计长处 提供了后盾服务接口,测试人员增加规定、管制 mock 服务更加灵便定制化更强,内置反对依据索引、耗费、mock 后增加动作等操作通过切换不同的 protocol 与代理服务,即可实现多协定的反对,扩展性强mock server 框架就先介绍这些,前面将会演示 mock server 的应用流程哦。

January 11, 2023 · 1 min · jiezi

关于软件测试:软件测试Junit5-架构新特性及基本使用常用注解与套件执行

  编辑 什么是 Junit5,在 Junit5 的官网介绍文档中这写到:Junit5 由JUnit Platform + JUnit Jupiter + JUnit Vintage3局部形成,借用 IBM Developer 的一张图来阐明 JUnit 5 的架构:JUnit Platform:JUnit Jupiter:JUnit Vintage: 嵌套单元测试Lambda反对参数化测试反复测试动静测试JUnit 4 与 JUnit 5 中的注解比拟 编辑 1)创立 maven 工程 XUnit,pom.xml中增加Junit5的依赖。2)其余的 XUnit 框架通用的设计运行规定可参考:《如何利用 xUnit 框架对测试用例进行保护》。3)增加用例@Test,再在用例执行前后增加@BeforeEach、@AfterEach:运行后果:4)在测试类执行前后增加@BeforeAll和@AfterAll:测试后果:5)在测试用例test1上退出注解@Disabled,使test1生效。测试后果:从测试后果中咱们能够看到 test1 用例被 ignore,没有被执行。6)别离将test1和test2用@DisplayName加上用例展现名称。测试后果:7)对测试用例2加上注解@RepeatedTest,使其额定反复执行3次:测试后果:从测试后果中咱们能够看到测试用例2被额定反复执行了3次8)对于@Nested嵌套执行举例如下:测试后果:由测试后果能够看出,@Nested的执行程序为先执行@Nested嵌套外层的用例,再以顺叙模式执行@Nested用例,而后再执行第二层嵌套的用例:外层->顺叙嵌套->第二层嵌套。@RunWith 是从Junit4迁徙过去的,@RunWith 连同它的参数 JUnitPlatform.class(一个基于 JUnit 4 且了解 JUnit Platform 的 Runner)让您能够在 Eclipse 内运行 JUnit Jupiter 单元测试。Eclipse 尚未原生反对 JUnit 5。将来,Eclipse 将提供原生的 JUnit 5 反对,那时咱们不再须要此注解;Junit5官网给出了代替它的注解: 有两个包testcasedemo, junit5demo,利用 @RunWith+@SelectPackages 将包中测试类顺次运行。套件类:测试后果:@RunWith+@SelectPackages+@IncludePackages配合应用过滤出须要执行的测试包testcasedemo.demo2。套件类:测试后果:@RunWith+@SelectPackages+@ExcludePackages配合应用过滤出不须要执行的测试包testcasedemo.demo2。套件类:测试后果:将 junit5demo 包下的 TestJunit5demo 和 testcasedemo.demo2 所有测试类过滤出来并执行。套件类:测试后果:在testcasedemo.demo2.TestDemo2的办法testDemo2上加上注解@Tag:过滤并执行办法testDemo2:套件类:测试后果:Junit5官网:https://junit.org/junit5/docs/current/user-guide/#overviewIBM Developer:https://www.ibm.com/developerworks/cn/java/j-introducing-junit5-part1-jupiter-api/index.htmlhttps://www.ibm.com/developerworks/cn/java/j-junit5/index.html ...

January 11, 2023 · 1 min · jiezi

关于软件测试:软件测试Jenkins-踩坑四基于接口自动化测试完成

1.对于应用Jenkins创立job实现自动化测试,外围在于我的项目的拉取和执行,至于job的创立大同小异,须要理解的能够参考文章:[Jenkins之job创立、参数化与定时构建以及时区偏差填坑] 2.另外还须要的就是执行机的环境(以GitHub拉取我的项目为例),须要具体细节操作可自行百度Google或参考文章:[Jenkins如何治理、配置、运行node节点,用slave进行分布式运行] 须要配置Java运行环境(我用的是jdk1.8)须要有maven环境须要有git环境须要将git的公钥退出GitHub的SSH key3.曾经存在一个接口自动化测试的我的项目 上面就仅重点介绍须要留神的点。 1)新建job后,在【源码治理】中选中Git,Repository URL中填入GitHub中的我的项目地址: 2)在【Credentials】中咱们须要Git的认证才能够应用git去拉取代码,点击【增加】,这里抉择的是SSH的形式。 【Username】中填写你Git的用户名,能够应用git config user.name命令查看。 【Private Key】中填入你Git的私钥,能够应用cd ~/.ssh进行查找,将id_rsa中的内容填入即可。 在构建中咱们抉择以shell的形式执行: . ~/.bash_profile是为了引入我的环境变量配置cd …ApiTest是为了进入我设置的我的项目目录下mvn clean install -Dtest=SearchTest目标是为了应用maven制订执行SearchTest踩坑时刻: 这里有一个坑须要留神,如果是用docker启用的Jenkins服务,在你创立完job间接在master上构建后,会报找不到你写的这些shell命令的谬误,因为你这个服务时跑在容器里的,而这些shell命令是须要在容器外执行的,解决办法有两种: 4.从新构建一个带有环境的Jenkins变量 5.将master创立成一个slave,在slave节点上运行即可 我应用的是第二种办法: 创立好slave后在job中设置运行在master_slave节点上: 执行构建,在控制台输入中查看log,BUILD SUCCESS!构建胜利,用例执行了11个,失败了3个。 1)插件装置,先在Jenkins的【插件治理】中搜寻装置Allure插件,如下: 2)回到job中,在【构建后的操作】中抉择Allure Report,填入allure-result的门路 踩坑时刻: 这里Results的门路要留神填写你理论的寄存门路,Jenkins例子和网上很多文章都间接写了填写target/allure-results,如果你的门路不对,必定就找不到数据;比方我这里在后面曾经设置了一个我的项目子目录,所以要填入子目录的门路。 再次执行构建,查看后果: 构建实现后咱们能够看到曾经有了allure报告的标识点击查看,报告完满展现以上,欢送大家一起交换探讨。

January 11, 2023 · 1 min · jiezi

关于软件测试:软件测试Jenkins-踩坑三-Email-配置与任务邮件发送

在系统管理->插件治理中下载插件:1.通过网页端 QQ 邮箱的设置进入到邮箱客户端设置页面。2.找到邮箱的根底信息。3.在 Jenkins:系统管理->系统配置中,最底部找到邮件告诉,关上高级:4.填入配置信息后如下:5.留神到在配置的下方有个"通过发送测试邮件测试配置",咱们能够讲其勾选,填入邮箱地址,点击Test configuration来先测试一下邮件的发送.6.如果依照下面的形式,点击Test configuration会呈现以下报错: 这是因为应用 QQ 邮箱登录,须要填入的是 QQ 邮箱的受权码,这是用于登录第三方客户端的专用明码。具体的获取形式可参考: 7.批改完受权码后,再次测试,很可能又会收到如下报错:java.net.SocketException: Connection closed by remote host这是因为咱们还须要在设置Jenkins Location中配置系统管理员邮件地址,此地址要和邮件告诉中的用户名统一。 根底信息配置与上述统一,惟一要留神的是这里须要从新生成一个受权码。这里次要就是配置展现的模板格局,罕用的格式化的参数有:这里抉择以 HTML 的格局展现,填入模板:咱们还能够在Default Triggers中依据本人的须要配置邮件的触发条件: 8.在构建的工作配置中,抉择"Editable Email Notification"9.配置邮件发送至Recipient List中配置的邮件地址10.保留后构建我的项目,查看后果,邮件发送胜利以上,欢送大家一起交换探讨。

January 11, 2023 · 1 min · jiezi

关于软件测试:软件测试Jenkins-踩坑-job-创建参数化定时构建及时区偏差问题解决

1)启动 Jenkins 后在首页点击"开始创立一个新工作"。2)输出工作名称,抉择自在格调,点击“确定”。1) 任意输出形容,而后勾选"抛弃旧的构建", 在"放弃构建的最大个数中"输出 3。1)勾选"参数化构建过程",抉择增加"字符参数"2)设置参数名称、默认值和形容1)在"构建触发器"中勾选"定时构建",日程表中输出H2/ ,示意每两分钟构建一次。1)在构建中抉择执行 shell,简略的执行一条打印语句,打印下面设置好的参数param;设置好之后保留即可。 能够看到构建后果是每 2 分钟构建一次,且只保留最近的 3 次构建,参数 param应用了默认值Jenkins。 关上控制台输入能够看到执行的日志信息。 如果想要批改参数值,抉择Build with Parameters,批改参数,点击开始构建即可。 在上述设置定时构建时,输出了一行命令H2/ 来示意每隔 2 分钟构建一次,这是一种crontab的写法,具体形容分五个局部: 星号(*):代表所有可能的值,例如 month 字段如果是星号,则示意在满足其它字段的制约条件后每月都执行该命令操作。 逗号(,):能够用逗号隔开的值指定一个列表范畴,例如,“1,2,5,7,8,9”。 中杠(-):能够用整数之间的中杠示意一个整数范畴,例如 “2-6” 示意 “2,3,4,5,6”。 正斜线(/):能够用正斜线指定工夫的距离频率,例如 “0-23/2” 示意每两小时执行一次。同时正斜线能够和星号一起应用,例如 /10,如果用在 minute 字段,示意每十分钟执行一次。然而理论在 Jenkins 中进行定时构建时,写法类似然而还是有区别,还是以上述的H2/ 来示意每隔 2 分钟为例,当咱们用/2 写法时:能够看到 Jenkins 倡议咱们应用H来代表通配符,因而在示意每隔多久时倡议应用H/的形式。 另外,如果示意每天上午 9 点构建,如果应用0 9 :能够看到 Jenkins 倡议咱们应用H 9 的形式:上面是一些罕用定时形式的参考示例:1.每 30 分钟构建一次:H/30 。2.每 2 小时构建一次:H H/2 。3.每天早上 9 点构建一次:H 9 。4.每天 8 点、12 点、21 点各构建一次:H 8,12,21 。5.周一至周五,每天 22 点到 23 点之间每隔 3 分钟构建一次:H/3 22-23 * 1-5。运行结束后,会发现一个问题,构建的工夫与咱们理论的工夫不统一: ...

January 11, 2023 · 1 min · jiezi

关于软件测试:软件测试Git实战四-Git分支管理实操搞定在线合并和本地合并

  编辑 相似于SVN这种集中式版本治理,三年前刚来上海工作时候,在华为驻场下班,华为用的就是SVN,印象最深的就是那个小乌龟的图标;起初到里面工作,慢慢发现用Git的十分多,缓缓学习理解发现Git这种分布式的版本治理的确很好很弱小,前面也就重点学习Git的分支管理策略了(其实SVN我当初压根就不会了,哈哈。。。) 编辑 centralized workflows 以Bitbucket的官网文档的实例作为简略介绍:例如Mary当初想要开发,在开发前她能够通过checkout命令建设一个新的分支: 编辑 Feature Branch Workflow: comit changesBefore she starts developing a feature, Mary needs an isolated branch to work on. She can request a new branch with the following command git checkout -b marys-feature master 而后Mary能够在这个本地进行相干的更改: git status git add <some-file> git commit 接着她能够一直将本地批改上传至个性分支的核心仓库中,直到本人全完批改实现 编辑git push -u origin marys-feature 编辑git push 而后,她在git gui(GitHub或GitLab等)中提交pull申请,申请将marys个性合并到master中,团队成员将主动收到告诉。 编辑 Mary的共事Bill收到了pr,Bill感觉在合并到正式我的项目中之前还须要做一些批改,于是在pr的回复中对Mary进行告知,接着Mary持续批改开发,实现后再次提交pr: 编辑 一旦Bill筹备承受pull request,有人须要将该特色merge到稳固的我的项目中(这能够由Bill或Mary来实现) ...

January 11, 2023 · 2 min · jiezi

关于软件测试:软件测试Git实战五-让工作更高效搞定Git的分支管理

 上一篇讲到Git的分支治理实操,在线合并和本地合并都进行了实操。毕竟:光说不练是假把式。而只练不整顿,只能是傻把式了。分支治理到底如何进行治理呢?先以GitLab上的一张经典的图打头,作为一个总体概览,也不便了解分支的治理和走向: 现假如公司有名为Hogwarts_Online2的开发我的项目,其中蕴含了上线分支master,开发分支develop,测试分支release,和集体开发的个性分支 1.1)与近程仓库建设连贯,在本地创立本人的分支,并拉取develop分支的文件: 1.2)在以后分支中创立新的文件gitflowDemo.txt,输出内容“study git”;而后add,commit 批改分支 vi gitflowDemo.txt #提交批改 git add gitflowDemo.txt git commit -m "add demo"1.3) 通过git pull命令查看近程develop分支是否和以后分支有抵触: $ git pull origin develop From ssh://47.95.238.18:10022/root/hogwarts_online2 * branch develop -> FETCH_HEAD Already up to date. 注: push之前先拉去近程代码,以防在开发过程中,近程被他人更新过新版本代码。如有代码抵触,两人协商抵触解决办法。多人开发的时候,抵触是不可避免的。 1.4) git push将批改推至近程个性分支origin gitflowDemo: 编辑 1080×444 58.8 KB 1.5) 在GitLab上进行merge request,并在develop分支上进行merge:如果想要撤回这次merge可用git merge --abort create merge request: 编辑 1080×146 26.9 KB 抉择develop分支: 编辑 964×872 53.3 KB 没有抵触,可间接merge: 编辑 最终咱们能够看到胜利merge进develop分支中: ...

January 11, 2023 · 1 min · jiezi

关于软件测试:软件测试Git-实战三-Github-必会高频基础命令与-IDE-的-Git-集成

GitHub 上咱们能够 fork 他人的我的项目,为了与他人产生一种协作关系,将别人的我的项目在本人本地创立也一个,这里以霍格沃兹测试学院(Hogwarts)的演练环境做演示: 1.1) 点击fork按钮对我的项目进行fork: 1.2)fork实现后就能够在咱们本人的GitHub账户下见到被fork的我的项目: 2.1)接着咱们应用git clone命令将fork的我的项目clone到本地: 这个时候能够将此我的项目看做是本人的一个我的项目,能够任意批改; 2.2)我的项目的作者能够看到有哪些人fork了本人的我的项目: 3.1) 先在本地批改README.md文件为: Hogwarts_Online2 霍格沃兹测试学院定向班第二期演练 try it3.2)将文件提交到本地仓库: 编辑 这个时候能够看到提交的作者曾经变成咱们本人了;也能够应用git remote -v命令来查看,可见当初本地仓库与近程仓库间接关联的是fork之后的我的项目: 编辑 3.3)只用git push命令将本地仓库的文件推到近程仓库中去: 编辑 如下图能够看到曾经胜利将批改后的README.md文件推到了GitHub上: pr:全称 pull request,当咱们批改了 fork 后的我的项目后,因为不能间接批改他人的我的项目,这个时候想要将本人的批改与原我的项目合并,就能够应用 pr 来向原我的项目作者进行申请 4.1)发动 pr,点击 New pull request: 而后咱们能够看到仓库门路从我的仓库向原作者我的项目仓库地址发动 pr 申请,在上面能够看到我对我的项目的批改 diff: 4.2)这个时候咱们点击Create new pull request按钮,填写形容后再点击Create new pull request按钮: 编辑 编辑 这个时候原仓库保护人员就能够收到pr,并对其进行审核、评论、merge或close的操作: 编辑 5.1) 在文件批改没有抵触(conflict)的时候,能够间接merge: 5.2) 当文件批改有抵触的时候,就须要原作者去进行RResolve了: 5.3) 或者有抵触的pr间接close:总结下来有以下三种状况: 无抵触间接merge有抵触手工merge有抵触close并从新发动pr有时候咱们fork了我的项目,然而很有可能咱们对我的项目的批改会比原我的项目滞后,这就会导致pr的时候容易呈现conflict;为了能让咱们晓得以后的批改是否conflict,就须要应用git fetch命令了;应用 git fetch 拿下来一个近程分支的文件,看一下这个分支和我本人的有什么抵触。7.1)先应用git remote -v命令来查看本地仓库与近程仓库的关联关系 ...

January 11, 2023 · 1 min · jiezi

关于软件测试:软件测试Docker-镜像构建可以分享的快乐

 通过上一篇 Dockerfile 语法与指令的学习,本节就开始应用Dockerfile 来制作本人的 Docker 镜像啦。 Docker 镜像构建 新建 app.py 文件 from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return 'Hello World! Hogwarts.' 本代码次要性能是当咱们拜访页面的时候显示一段文字“Hello World! Hogwarts.”。 新建 Dockerfile-build 文件 FROM python:3.7-alpine LABEL maintainer="hogwarts" # 工作门路设定为 /code WORKDIR /code # 复制 app.py 到容器内 /code 目录 COPY app.py /code # 创立环境变量给 Flask 应用 ENV FLASK_APP app.py ENV FLASK_RUN_HOST 0.0.0.0 # 装置 gcc 工具、python 的依赖 RUN apk add --no-cache gcc musl-dev linux-headers && pip install flask # 映射端口 EXPOSE 5000 STOPSIGNAL SIGTERM # 为容器设置默认启动命令 CMD ["flask", "run"] ...

January 11, 2023 · 1 min · jiezi

关于软件测试:软件测试BAT大厂都在用的Docker学会这三招面试工作轻松hold住

  编辑 上期咱们以Jenkins为例,一边实战一边理解Docker的根底命令。这期,咱们将带大家应用Docker搭建三个平时测试工作中十分有用的小工具。学会这三个实战之后,你就能够说对Docker不是浅尝即止在实践阶段,而是真正有肯定理解,也能为你的工作,真正的解决一部分问题。 官网下载node_exporter 。地址:https://prometheus.io/ 2.启动下载好的node_exporter文件 编辑 3.填写prometheus.yml配置文件内容 编辑 4.应用命令启动prometheus 5.输出ip和端口号进入prometheus的前端界面,而后进入Targets页面 6.在首页输出命令,而后点击execute,命令有不过这个展现界面不够敌对,而且不好保留。所以在业内,咱们经常将prometheus+grafana配合应用 7.启动grafana进入grafana界面,初始账号密码为admin/admin进入Add data sourcs->抉择prometheus配置prometheus 编辑 8.import模板 grafana dashboard内填写 编辑 Prometheus Data Source字段抉择prometheus点击 Import,就搭建胜利了留神,后方有坑:1.如果被监控的node_exporter是mac的话,要去prometheus官网下载mac版本的node_exporter执行,且mac须要批改一些配置参数。2.如果批改了prometheus.yml 须要重启镜像 1.下载prom/mysqld-exporter镜像 2.启动mysql服务 3.启动mysqld-exporter镜像留神:-e 之后的参数要填对,别离对应 用户名/明码@(ip:端口号)/mysql 4.在prometheus.yml的配置文件中增加mysql的配置,并docker restart prometheus ,从新加载prometheus的配置(能够参考下面的步骤2) 5.进入prometheus页面,查看Targets中mysql是否启动胜利6.依照下面的docker启动prometheus过程,配置好之后进去grafana页码,而后抉择data source,进入prometheus,输出prometheus的url,抉择“Save&Test” 7.导入mysql模板到grafana,mysql的模板id为6239,其余步骤和后面搭建服务器监控是一样的哦。 上面是mysql的监控成果 如果咱们的Web UI自动化测试用例有上千条,执行工夫经常须要1~2天,咱们用什么办法能够节俭这个执行工夫呢?接下来咱们就通过分布式UI自动化,即启动多个浏览器执行UI自动化测试用例,且每个浏览器执行的UI自动化测试用例都是不同的。这样子,就能够大大晋升咱们的UI自动化测试的效率。UITest层会将测试申请发送到GridHub层,而GridHub则会将这些测试申请转换为测试工作下发到每一个Node节点(在每台机器下面咱们能够装一个或多个Node节点。),随后Node节点驱动浏览器进行自动化测试。测试实现后,Node节点将测试后果发送到GridHub下面,GridHub再将后果转发回咱们的测试程序UITest中 (如下图所示) Selenium镜像网上有很多,官网下载即可。也能够定制化。而且还有非可视化的镜像。具备调试作用的近程UI服务的可视化镜像,还有轻量级简易版镜像版本。 1.底层镜像,能够做定制化selenium/base: Base image which includes Java runtime and Selenium Server JAR fileselenium/node-base: Base image for Grid Nodes which includes a virtual desktop environmentselenium/hub: Image for running a Grid Hub ...

January 11, 2023 · 1 min · jiezi

关于软件测试:软件测试BAT-大厂最流行的性能压测监控剖析技术体系解析

  编辑 互联网技术倒退这么多年,零碎稳定性和性能问题始终是研发和测试团队面临的次要线上问题。然而,提起性能测试,很多测试同学的反馈却很矛盾:一方面,感觉性能测试环节很简略,没发展前途;另一方面,面对零碎疑难杂症时,却又不知问题在哪里,无奈提出无效优化倡议。造成这种情况的实质起因是:1.“性能测试==压测工具”这种传统错误观点,对行业和集体都荼毒颇深,导致传统性能测试并重压测,而疏忽了性能监控与分析等高阶技能造就;2.性能测试是业余度较深的畛域,业界始终不足符合要求的行业标准和高品质的教学内容,进一步导致人才匮乏;随着行业倒退,尤其是互联网大厂基于开源工具的全新摸索实际,全新的性能测试技术体系曾经展示了其弱小的威力,亟待全面遍及。

January 11, 2023 · 1 min · jiezi

关于软件测试:软件测试App自动化之dom结构和元素定位方式包含滑动列表定位

 档对象模型dom利用: 最早利用于html和js的交互。界面的结构化形容, 常见的格局为html、xml。外围元素为节点和属性xpath: xml门路语言,用于xml 中的节点定位,XPath 可在 xml 文档中对元素和属性进行遍历如下咱们再来看一个App的dom:控件的基础知识和selenium一样,appium为挪动端形象出了一个控件模型,称为dom构造;会把所有的控件都了解为xml文件,在xml文件里,每个控件都有本人的类型和属性; 既然有了类型和属性,天然就能够依据这些来定位元素,又因为整个模型是xml,也就同样能够通过xpath的办法来定位各个控件的信息了,是不是似曾相识?在Web端自动化时候也介绍过相干元素定位形式,具体可在文章开端往期回顾第一条点击查看。 定位交互断言通过uiautomatorviewer对雪球App首页的解析失去如下图后果: 编辑 通过解析后果咱们能够看到元素的属性和类型有: nodeattributeclickablecontent-descresource-idtextboundsIOS和Android在控件属性和上略微有些不同(这里先说个概括,后续独自出IOS的文章加以阐明,欢送关注): dom属性和节点构造相似名字和属性的命名不同Appium 反对 WebDriver 定位策略的子集: 2.21 通过 “class” 查找 (例如, UI 组件的类型)-个别不举荐 这种就是通过判断控件类型来查找,例如TextView、ImageView等 编辑 在理论工作中,这种定位形式简直不必,因为一个页面中可能会有很多的TextView、ImageView等; appiumdriver.findElementByClassName("android.widget.TextView"); 如上所述,xpath是不仅能够在挪动端进行元素定位,并且是咱们最罕用的定位形式之一,在web端自动化咱们会首推CSS定位,而在挪动端定位咱们会首推xpath定位,良好的xpath定位语法会给咱们定位带来准确度和便当度,对速度的影响也齐全会在咱们的承受范畴以内 如下dom构造中,一个界面上有多同类型控件,这些控件有雷同的id或属性,不具备唯一性,所以无奈间接进行指定控件的定位操作,这个时候就该xpath大显神通了 如咱们要定位"画好一个关闭的圆"前面跟着的第二个RelativeLayout,具体写法如下: //上面两种写法均可实现 By.xpath("((//[@text='画好一个关闭的圆'])[2]/following-sibling::android.widget.RelativeLayout)[2]") By.xpath("((//[@text='画好一个关闭的圆'])[2]/following-sibling::*[@class='android.widget.RelativeLayout'])[2]") 很多控件都是有text属性的,然而appium是不反对间接对text进行定位的,而在理论工作中,咱们常常会拿text进行定位,这就要归功于xpath了,通过对xpath语法的封装,咱们就能够自定义一个依据text定位元素的办法来: public By ByText(String text){ return By.xpath("//*[@text='"+ text + "']"); } appiumdriver.findElement(ByText("关注")); 另外,须要定位Toast弹框时,有且仅有通过xpath的形式来实现:有时候咱们进行某个操作后会弹出音讯提醒,例如点击某个按钮或下拉刷新后可能会呈现相似"刷新胜利"的提醒语,而后几秒后隐没; 编辑 弹出的音讯很可能是Android零碎自带的Toast,Toast在弹出的时候会在以后界面呈现节点android.widget.Toast,随着音讯的隐没而隐没;这个时候咱们如果须要定位这个弹出音讯,对其进行测试的话,就能够应用定位xpath形式了。 System.out.println( appiumdriver.findElementByXPath("//*[@class='android.widget.Toast']").getText()); 后果: 编辑 更多xpath介绍可参考博客:推开Web自动化的大门达到“立功景象”-侦破selenium架构、环境装置及罕用元素定位办法或W3C:https://www.w3school.com.cn/x... 学过web自动化的同学晓得,在HTML中元素是有本人的id的,在挪动端,元素仍然有本人的id值,只不过名字叫做resource-id,如下: 注: 咱们看到id的值很长,其实理论应用只须要取斜杠/前面的局部就能够了,如下: By.id("statusTitle") 在挪动端自动化中有个非凡的定位形式就是依据accessibilityId定位,在dom中体现就是属性content-desc的值,如果Android中的content-desc中写入了值,便能够通过其进行定位: 编辑 这里比拟难堪。。。因为研发常常偷懒不写,找了半天也没能找到例子,大家晓得用法就好~另外要留神的是如果要写成"By.xxx"的模式,须要应用MobileBy MobileBy.AccessibilityId("AccessibilityId"); appiumdriver.findElementByAccessibilityId("AccessibilityId"); 有时候咱们须要对界面进行肯定的操作形式后能力找到咱们想要的元素,比方滑动列表进行查找等,这个时候就能够借助于android uiautomator了这里利用模拟器中的API Demo做演示,进入APIDemo中Views,而后滑屏寻找“Popup Menu”进行点击操作 ...

January 11, 2023 · 1 min · jiezi

关于软件测试:软件测试30-分钟轻松搞定正则表达式基础

  编辑 提起正则表达式,可能大家的第一印象是:既弱小好用但也艰涩难懂。正则表达式在文本处理中相当重要,各大编程语言中均有反对(跟 Linux 三剑客联合更是神兵利器)。正则表达式是对字符串操作的一种逻辑公式,就是用当时定义好的一些特定字符、及这些特定字符的组合,组成一个“规定字符串”,这个“规定字符串”用来表白对字符串的一种过滤逻辑。(来自百度百科)集体了解如下:某个大佬为了从字符串中匹配或找出合乎特定法则(如手机号、身份证号)的子字符串,先定义了一些通用符号来示意字符串中各个类型的元素(如数字用 \d 示意),再将它们组合起来失去了一个模板(如:\d\d模板就是指代两个数字),拿这个模板去字符串中比对,找出合乎该模板的子字符串。由几个例子去进一步了解,比方当初有一个字符串为:1.test是一个正则表达式,它的匹配状况:I am a tester, and My job is to test some software. 它既能够匹配tester中的test,又能够匹配第二个test。正则表达式中的test就代表test这个单词自身。2.\btest\b是一个正则表达式,它的匹配状况:I am a tester, and My job is to test some software. 它只能匹配第二个test。因为\b具备非凡意义,指代的是单词的结尾或结尾。故tester中的test就不合乎该模式。3.test\w是一个正则表达式,它的匹配状况:I am a tester, and My job is to test some software. 它匹配出了tester,也匹配出了第二个test。其中\w的意思是匹配字母数字下划线,示意的是数量,指有0个或多个\w。所以这个正则表白是的意思就是匹配结尾为test,后续跟着0个及以上字母数字下划线的子字符串4.test\w+是一个正则表达式,它的匹配状况:I am a tester, and My job is to test some software. 它只匹配了tester。因为+与不同,+的意思是1个或多个,所以该正则表达式匹配的是结尾为test,后续跟着1个及以上字母数字下划线的字符串。通过上述几个例子,应该能够看出正则表达式的工作形式,正则表达式由个别字符和元字符组成,个别字符就是例子中的‘test’,其指代的意思就是字符自身,t匹配的就是字母t;元字符就是例子中有非凡含意的字符,如\w, \b, , +等。后续介绍一些根底的元字符。元字符有很多,不同元字符有不同的作用,大抵能够分为如下几类。有些元字符专门用来指代字符串中的元素类型,罕用的如下: 编辑 通过上述表格中的数据能够发现,\w,\d,\s都有一个与之相同的元字符(将对应字母大写后就是了)。\w匹配所有字母数字下划线,那么\W就是匹配所有不是字母数字下划线的字符。只有记住其中3个,另外3个就很好记了。乍一看这几个元字符挺简略的,然而常常不必的话保不准会遗记,此处分享一下我的记忆办法。我把这几个元字符都当作是某一个单词的缩写(尽管可能就是某个单词的缩写,然而没有找到精确的材料去印证): \s是space(空间)的缩写\d是digit(数字)的缩写\w是word(能够了解成不是传统意义上的单词而是代码中的变量名,变量名可蕴含的元素就是字母数字下划线)的缩写好了,看到此处你应该曾经熟记了6个元字符了。接下来,\n和\t平时会常常用到,这个必定比拟熟了,最初一个元字符‘.’能够了解它匹配一行中的所有元素,因为遇到换行符后就不再进行匹配了(万事万物源于一点)。有些元字符用于示意某种元素的数量,如\d示意一个数字,当你想示意6位数字怎么办?当然能够\d\d\d\d\d\d ,但的确太麻烦了,为了简便就须要一些示意数量的元字符,上述能够写成\d{6},元字符详情如下: 编辑 这几个元字符还算比拟好记。示意0个或多个+示意1个或多个(这个可能会混同,或者你能够这么记, 示意10=0或多个,+示意1+0=1或多个)?示意0或1个,能够了解成某个人在问你这个类型的元素有还是没有呀?你答复可能有(1)也可能没有(0)。剩下的三个只有记住大括号是用来示意数量,后续咱们还会看到除了{}外,还有[]和()。它们各有各的作用。有些元字符没有具体的的匹配项,它只是一个形象的地位概念,它用来示意字符串中的各个地位。一个字符串的地位能够分成:字符串的结尾或结尾、单词的结尾或结尾。如字符串‘I am a tester_.’,I后面是字符串的结尾地位,英文句号前面为字符串的结尾地位,每一个word(留神此处指的不是传统意义上的单词)前后的地位即为单词的结尾或结尾,对于‘tester_’来说t后面是单词结尾,下划线是单词结尾。 ...

January 11, 2023 · 1 min · jiezi

关于软件测试:WebUI自动化中截图的使用

前言做UI自动化时,有时候可能因为须要把某个步骤的界面显示截图保留,这里我用到的是webdriver的截图性能。 环境搭建这里说的UI自动化指的是 web的UI自动化,应用的是Python+Selenium+webdriver写的,用Unittest框架来组织用例和脚本。具体环境搭建能够参考之前的环境搭建具体文章: https://blog.csdn.net/NoamaNelson/article/details/102971936 ### 封装截图性能creenShot.py driver:指的是应用哪个浏览器的驱动,我后边应用的是Chrome# coding=utf-8import timefrom selenium import webdriverdef sav_creenshot(driver): now=time.strftime("%Y-%m-%d-%H_%M_%S",time.localtime(time.time())) # 截图保留的文件名格局 pic_path = "./"+now+'_screen.png' # 截图保留的门路 # print(pic_path) driver.save_screenshot(pic_path) # 调用Driver的截图保留性能示例test_baidu.py写一个百度搜寻hello的实例,test_baidu.py # coding=utf-8from selenium import webdriverimport timeimport unittestimport loggingfrom creenShot import sav_creenshot # 导入刚刚封装的截图办法class Testbaidu(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() # 指定浏览器驱动 self.url = "https://www.baidu.com/" # URL地址 self.driver.maximize_window() # 最大化窗口 self.driver.get(self.url) # 获取拜访网址 self.log = logging.getLogger() # 记录日志 def tearDown(self): self.driver.close() # 敞开浏览器 def test_search(self): # 搜寻框输出“hello” self.log.info("输入框输出hello") self.driver.find_element_by_id("kw").send_keys("hello") self.driver.find_element_by_id("su").click() time.sleep(2) sav_creenshot(self.driver) # 截图 self.assertIn("hello", self.driver.page_source) self.log.info("搜寻胜利")if __name__ == "__main__": unittest.main() ...

January 11, 2023 · 1 min · jiezi

关于软件测试:自动化测试概况和认知

@TOC《测试架构师修炼之道》是我的一本枕边书,每次看的时候总是有不同的感触。明天来整顿下书中提到的自动化测试相干的常识,更多的是详情、认知或者实践方面的货色。 前言书中说测试架构师把握自动化测试的目标不是设计自动化架构或是具体来部署自动化,而是用好自动化。其实这一点我感觉对波及自动化测试的人员都是通用的,只是偏重点不同。 往往自动化测试后期投入老本可能会大一点,比方框架设计、技术选型、人力老本等等,然而这个步调确定好了之后,更多就是怎么去用好自动化,把它和业务联合起来。 书中次要从以下方面发展: 建设正确的自动化观点;如何评估自动化收益;自动化工具的选型。## 1、自动化测试假相 一提到自动化测试,大家很容易就想到 “7*24小时不间断测试”、“重复测试”、“效率高”等等,然而发现,自动化测试做的人多,胜利的却不多。其实起因有很多。 ### 1.1、自动化并不便宜,相同,自动化很贵 开发自动化脚本须要不少工夫,往往很多团队部署自动化的起因是因为我的项目紧,想通过自动化测试晋升效率,既然工夫都不够用了,哪有工夫去开发脚本呢?这无疑于缘木求鱼;自动化测试须要懂技术的人来操作,其过程也是开发代码,也须要业余的人才能胜任此工作;某些自动化工作须要购买和二次开发;总结为工夫老本、技术老本、人力老本,都是自动化测试须要思考的。所以说它很贵。在部署之前,肯定要思考团队的生产能力。 1.2、自动化脚本往往没有设想中的那么牢靠很多团队部署自动化另一个起因是想通过自动化来验证不会漏掉用例中的步骤,感觉自动化是忠实可靠的。但自动化测试给你的“OK”,可能真的只是空想,因为脚本只会依照指定的步骤去运行和确认后果,不会去捕获一些突发异样(至多不能全面的捕获)。另外,自动化工作或者环境可能并不是那么牢靠。无论是正确的自动化测试后果,还是谬误的自动化测试后果,都须要人再去确认。 1.3、自动化测试不是单靠测试就能搞定的事儿自动化测试须要SE、开发、测试、自动化工程师紧密配合能力无效运作起来。开发自动化脚本之前有很多先决条件: “需要”要确定分明,特地是用户的数去和输入,肯定要确认分明,这时候SE就要给力些;“UI”后者“命令行”须要确定下来,而且确定了最好不要随随便便批改,这样才利于自动化脚本中的一些“中间层”的设计,这须要开发给力;测试用例要尽快写进去,这须要测试给力。## 2、如何评估自动化收益? 2.1、自动化测试的施行老本公式:自动化施行老本 = 后期开发成本 + 前期的保护老本2.1.1、后期开发成本人力老本:和自动化开发人员相干的费用老本;工夫老本:自动化筹备工夫,自动化脚本开发、调试的工夫老本;金钱老本:工具购买、开发、保护的费用老本。 #### 2.1.2、前期保护老本产品变更引起的自动化测试脚本变更的老本;定位、修复自动化运行环境引起的脚本的健壮性问题的老本;定位、修复自动化运行环境引起的可靠性问题的老本;其它未知的引起测试脚本变更的因素引发的老本。 ### 2.2、自动化测试的运行次数自动化测试的收益和自动化测试运行的次数是成正比的,脚本可能被运行的越多,自动化测试的收益才会越高。 公式:自动化测试的收益 = 自动化测试运行的次数2.3、自动化测试施行老本计算公式:p = (k*n) / (c1+c2)k : 手工执行自动化用例所破费的工夫老本;n :自动化测试用例执行的次数;c1:破费在自动化测试后期的老本(工夫老本 + 人力老本 + 金钱老本);c2:破费在自动化测试前期的老本(工夫老本 + 人力老本 + 金钱老本);3、自动化测试工具介绍3.1、单元测试工具Parasoft系列单元测试工具工具名语言特点JtestJava代码剖析和动静类,组件测试JcontractJava实时性能监控及剖析优化C++TestC、C++代码剖析和动静测试CodeWizardC、C++代码动态剖析Insure++C、C++实时性能监控及剖析优化.test.Net代码剖析和动静测试Compuware系列单元测试工具工具名语言特点BoundsCheckerC++、DelphiAPO和OLE谬误查看、指针和泄露谬误查看、内存谬误查看TrueTimeC++、Java、Visual Basic代码运行效率查看、组件性能的剖析FailSafeVisual Basic主动错误处理和复原零碎JcheckMS Visual J++事件剖析工具TrueCoverageJava、C++ 、Visual Basic函数调用次数、所占比率统计以及稳定性跟踪SmartCheckVisual Basic函数调用次数、所占比率统计以及稳定性跟踪CodeReviewVisual Basic自动化源代码剖析工具Xunit系列单元测试工具工具名语言官方网站AunitAdahttp://www.libre.act-europe.frCppUnitC++http://cppunit.sourceforge.netComUnitVB、COMhttp://comunit.sourceforge.netDunitDelphihttp://dunit.sourceforge.netDotUnit.Nethttp://dounit.sourceforge.netHttpUnitWebhttp://c2.com/cgi/wiki?HttpUnitHtmlUnitWebhttp://htmlunit.sourceforge.netJUnitJavahttp://www.junit.orgJsUnit(Hieatt)Java Script 1.4以上http://www.jsunit.netPhpUnitPhphttp://phpunit.sourceforge.netPerlUnitPerlhttp://perlunit.sourceforge.netXmlUnitXmlhttp://xmlunit.sourceforge.net3.2、UI自动化测试工具工具名公司名官方网站WinRunnerHP Mercuryhttp://www.mercuryinteractive...QTPHP Mercuryhttp://www.mercuryinteractive...RobotIBM Rationalhttp://www.rational.comQARunCompuwarehttp://www.compuware.comSilkTestSeguehttp://www.segue.come-TestEmpirixhttp://www.expirix.com3.3、性能自动化测试工具工具名公司名官方网站WASMicrosofthttp://www.microsoft.comLoadRunnerHP Mercuryhttp://www.mercuryinteractive...QaloadCompuwarehttp://www.compuware.comTeamTest:SiteLoadIBM Rationalhttp://www.rational.comWebloadRadviewhttp://www.radview.comSilkperformerSeguehttp://www.segue.come-LoadExpirixhttp://www.expirix.comOpenSTAOpenSTAhttp://www.opensta.com注:本文内容次要来源于《测试架构师修炼之道》刘琛梅·著,版权归作者所有,本文只是整顿汇总成学习笔记,如有问题,请分割删除,谢谢。

January 11, 2023 · 1 min · jiezi

关于软件测试:MySql基础笔记7-正则表达式

@TOC 1、阐明MySQL能够通过 LIKE ...% 来进行含糊匹配MySQL中应用 REGEXP 操作符来进行正则表达式匹配## 2、REGEXP 操作符的正则模式 模式形容^匹配输出字符串的开始地位。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的地位。$</td><td style="width:70%">匹配输出字符串的完结地位。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的地位。.匹配除 "\n" 之外的任何单个字符。要匹配包含 '\n' 在内的任何字符,请应用象 '[.\n]' 的模式。[...]字符汇合。匹配所蕴含的任意一个字符。例如, '[abc]' 能够匹配 "plain" 中的 'a'。1负值字符汇合。匹配未蕴含的任意字符。例如, '2' 能够匹配 "plain" 中的'p'。p1|p2|p3匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。匹配后面的子表达式零次或屡次。例如,zo 能匹配 "z" 以及 "zoo"。* 等价于{0,}。+匹配后面的子表达式一次或屡次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。{n}n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',然而能匹配 "food" 中的两个 o。{n,m}m 和 n 均为非负整数,其中n <= m。起码匹配 n 次且最多匹配 m 次。3、理论应用1.查找以“张”结尾的所有数据 ...

January 11, 2023 · 1 min · jiezi

关于软件测试:MySql基础笔记6-排序分组连接的使用NULL值处理

@TOC 1、 排序1.1、作用应用 MySQL 的 ORDER BY 子句对读取的数据进行排序,返回搜寻后果 1.2、语法SELECT field1, field2,...fieldN FROM table_name1, table_name2...ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]你能够应用任何字段来作为排序的条件,从而返回排序后的查问后果。你能够设定多个字段来排序。你能够应用 ASC 或 DESC 关键字来设置查问后果是按升序或降序排列。 默认状况下,它是按升序排列。你能够增加 WHERE...LIKE 子句来设置条件。1.3、实际操作查找数据库pymysql_study的数据表study_tb1中study_password按升序和降序排序。 2、分组2.1、GROUP BY 语法SELECT column_name, function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY column_name;2.2、理论应用查问表study_tb1中study_name中的用户名各呈现了多少次 2.3、应用 WITH ROLLUPWITH ROLLUP 能够实现在分组统计数据根底上再进行雷同的统计(SUM,AVG,COUNT…)。SELECT fieldN , SUM(fieldN ) as fieldN FROM table_nameN GROUP BY fieldN WITH ROLLUP;在统计各用户名明码之和,(无实际意义,只是为了演示语法性能) 3、连贯的应用3.1、阐明在一张表中读取数据,绝对简略,然而在真正的利用中常常须要从多个数据表中读取数据,如何应用 MySQL 的 JOIN 在两个或多个表中查问数据;能够在 SELECT, UPDATE 和 DELETE 语句中应用 Mysql 的 JOIN 来联结多表查问INNER JOIN(内连贯,或等值连贯):获取两个表中字段匹配关系的记录。LEFT JOIN(左连贯):获取左表所有记录,即便右表没有对应匹配的记录。RIGHT JOIN(右连贯): 与 LEFT JOIN 相同,用于获取右表所有记录,即便左表没有对应匹配的记录。3.2、INNER JOIN查找study_tb2中study_username在study_tb1中对应的study_title对应的字段值 ...

January 11, 2023 · 1 min · jiezi

关于软件测试:MySql基础笔记5-WHERE-UPDATEDELETELIKEUNION使用

语法和实践转自https://www.runoob.com/mysql/mysql-where-clause.html@TOC 1、WHERE 子句1.1、语法SELECT field1, field2,...fieldN FROM table_name1, table_name2...[WHERE condition1 [AND [OR]] condition2.....查问语句中你能够应用一个或者多个表,表之间应用逗号, 宰割,并应用WHERE语句来设定查问条件。你能够在 WHERE 子句中指定任何条件。你能够应用 AND 或者 OR 指定一个或多个条件。WHERE 子句也能够使用于 SQL 的 DELETE 或者 UPDATE 命令。WHERE 子句相似于程序语言中的 if 条件,依据 MySQL 表中的字段值来读取指定的数据。1.2、用于 WHERE 子句操作符列表下表中实例假设 A 为 10, B 为 20 操作符形容实例= 等号,检测两个值是否相等,如果相等返回true (A = B) 返回false。 <>, != 不等于,检测两个值是否相等,如果不相等返回true (A != B) 返回 true。 > 大于号,检测右边的值是否大于左边的值, 如果右边的值大于左边的值返回true (A > B) 返回false。 < 小于号,检测右边的值是否小于左边的值, 如果右边的值小于左边的值返回true (A < B) 返回 true。 >= 大于等于号,检测右边的值是否大于或等于左边的值, 如果右边的值大于或等于左边的值返回true (A >= B) 返回false。<= 小于等于号,检测右边的值是否小于或等于左边的值, 如果右边的值小于或等于左边的值返回true (A <= B) 返回 true。 1.3、实际操作1、在前几章曾经创立的pymysql_study中查找study_username为张三的字段 ...

January 11, 2023 · 2 min · jiezi

关于软件测试:MySql基础笔记4-数据表创建删除和数据插入查询等操作

@TOC 1、创立数据表1.1、数据表信息表名表字段名定义每个表字段1.2、语法命令:CREATE TABLE table_name(column_name column_ytpe);事例:在pymysql_study中创立数据表study_tb1实例:mysql -u root -puse pymysql_study;CREATE TABLE study_tb1( study_id INT NOT NULL AUTO_INCREMENT, study_title PYMYSQLSTUDY(100) NOT NULL, study_author NOAMANELSON(40) NOT NULL, submission_date DATE, PRIMARY KEY (study_id) )ENGINE=InnoDB DEFAULT CHARSET=utf8;1.3、实例解析如果你不想字段为 NULL 能够设置字段的属性为 NOT NULL, 在操作数据库时如果输出该字段的数据为NULL ,就会报错。AUTO_INCREMENT定义列为自增的属性,个别用于主键,数值会主动加1。PRIMARY KEY关键字用于定义列为主键。 您能够应用多列来定义主键,列间以逗号分隔。ENGINE 设置存储引擎,CHARSET 设置编码。1.4、实际操作 2、删除数据表2.1、语法命令:DROP TABLE table_name ;事例:删除第一步在pymysql_study数据中新建的study_tb1数据表实例:mysql -u root -puse pymysql_study;drop TABLE study_tb1;2.2、实际操作 3、插入数据3.1、语法命令:INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );事例:1、因为方才删除了创立的数据表,那么先在pymsql_study数据库创立一个数据表study_tb1;2、在数据表study_tb1中插入3条数据;3.2、创立数据表study_tb1# 以下是在cmd中操作mysql -u root -pmysql->use pymysql_study;mysql->CREATE TABLE study_tb1( ->study_id INT NOT NULL AUTO_INCREMENT, ->study_title VARCHAR(100) NOT NULL, ->study_username VARCHAR(100) NOT NULL, ->study_password VARCHAR(50) NOT NULL, ->create_date DATE, ->PRIMARY KEY(study_id) ->)ENGINE=InnoDB DEFAULT CHAREST=utf8; ...

January 11, 2023 · 1 min · jiezi

关于软件测试:MySql基础笔记2-数据库创建删除选择等操作

在MySql数据库根底1 -Windows下装置配置图文教程的根底上,咱们来理解如何对数据库进行操作,比方常见的创立数据库、删除数据库、抉择数据库等;@TOC 1 、连贯数据库简略的办法是间接登录,应用如下命令(指的是本地数据库): mysql -u root -p 在明码界面输出登录明码即可; Enter password:****** 2、退出数据库输出exit回车即可 3、创立数据库形式一:应用create命令先应用show databases;来查看以后都有哪些数据库;命令:create DATABASE 数据库名;实例:create DATABASE pymysql_study; 形式二:应用mysqladmin间接在cmd命令行输出,不必进入mysql:mysqladmin -u root -p create pymysql_study1 4、删除数据库形式一:应用drop命令命令:drop database <数据库名>;实例:drop database pymysql_study; 形式二:应用mysqladmin间接在cmd命令行输出,不必进入mysql:mysqladmin -u root -p drop pymysql_study1 5、抉择数据库命令:use <数据库名>;事例:1、先创立一个数据库pymysql_study;2、抉择这个数据库;3、抉择这个数据库后,后边的操作就是对这个数据库进行的操作;实例:mysql -u root -pEnter password:******create DATABASE pymysql_study;use pymysql_study; 6、查看以后应用的是哪个数据库命令:select database();应用以上命令后能够看到咱们方才在上边应用use后抉择的是pymysql_study这个数据库

January 11, 2023 · 1 min · jiezi

关于软件测试:MySql基础笔记1-Windows下安装配置图文教程

@TOC 1、下载https://dev.mysql.com/downloads/mysql/ 关上以上链接,依据本人的零碎进行抉择(本文以64位零碎为例) 如果是32位零碎,请抉择msi装置 2、装置zip格局毋庸装置,下载下来是zip格局,间接解压到某个目录,留神目录不要有中文,本文目录为:D:\mysql-8.0.19-winx64 3、设置环境变量进入到D:\mysql-8.0.19-winx64\bin,复制该门路 顺次关上 “开始”-"计算机", 右键抉择“属性”,进入如下页面,点击“高级零碎设置”: 抉择“环境变量” 在零碎环境变量中找到path 在path的最初变加D:\mysql-8.0.19-winx64\bin,(用英文分号把各个门路隔开),确定即可 4、配置Mysql的配置文件进入到D:\mysql-8.0.19-winx64\目录,在该目录下新建 my.ini 配置文件编辑my.ini 配置以下根本信息:[client]# 设置mysql客户端默认字符集default-character-set=utf8 [mysqld]# 设置3306端口port = 3306# 设置mysql的装置目录basedir=D:\\mysql-8.0.19-winx64# 设置 mysql数据库的数据的寄存目录,MySQL 8+ 不须要以下配置,零碎本人生成即可,否则有可能报错# datadir=C:\\web\\sqldata# 容许最大连接数max_connections=20# 服务端应用的字符集默认为8比特编码的latin1字符集character-set-server=utf8# 创立新表时将应用的默认存储引擎default-storage-engine=INNODB5、启动Mysql进入到D:\mysql-8.0.19-winx64\bin目录下,按住shift键,鼠标右键,抉择“在此处关上命令窗口” 初始化数据库mysqld --initialize --console执行结束后,会输入以上信息,其中root用户的明码为初始默认明码:vzSn9>6V(tjw,后续登录会用到 输出以下装置命令mysqld install 启动输出以下命令即可net start mysql 6、登录Mysql如果是本地,并且曾经加了环境变量,间接在cmd中输出,mysql回车即可: 如果是其余装置形式,输出以下命令关上mysql,mysql -h 主机名 -u 用户名 -p-h : 指定客户端所要登录的 MySQL 主机名, 登录本机(localhost 或 127.0.0.1)该参数能够省略;-u : 登录的用户名;-p : 通知服务器将会应用一个明码来登录, 如果所要登录的用户名明码为空, 能够疏忽此选项。 如果咱们要登录本机的 MySQL 数据库,只须要输出以下命令即可:mysql -u root -p按回车确认, 如果装置正确且 MySQL 正在运行, 会失去以下响应:Enter password:若明码存在, 输出明码登录, 不存在则间接按回车登录。登录胜利后你将会看到 Welcome to the MySQL monitor... 的提醒语。而后命令提示符会始终以 mysq> 加一个闪动的光标期待命令的输出, 输出 exit 或 quit 退出登录。 ...

January 11, 2023 · 1 min · jiezi

关于软件测试:Unittest接口和UI自动化测试框架中的发送邮件服务如何使用

在写Unittest接口和UI自动化测试的时候,须要封装邮件模块来进行发送邮件。如何做呢?简略做一下整顿。 1、在框架工具集中封装send_mail.py如图,我的在common中封装了send_mail.py代码如下: #coding=utf-8from email.mime.text import MIMETextimport timeimport smtplibimport getpassfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.mime.base import MIMEBasefrom email import encodersimport emailimport osdef sendmain(file_path,mail_to = 'xxxx@sdsdsd.com'): mail_from = 'xxx@126.com' # 发送邮件账号 f = open(file_path,'rb') mail_body=f.read() f.close() #msg = email.MIMEMultipart.MIMEMultipart() msg = MIMEMultipart() # 结构MIMEBase对象做为文件附件内容并附加到根容器 contype = 'application/octet-stream' maintype, subtype = contype.split('/', 1) ## 读入文件内容并格式化 data = open(file_path, 'rb') file_msg = MIMEBase(maintype, subtype) file_msg.set_payload(data.read( )) data.close( ) encoders.encode_base64(file_msg) ## 设置附件头 basename = os.path.basename(file_path) file_msg.add_header('Content-Disposition', 'attachment', filename = basename) msg.attach(file_msg) print(u'msg 附件增加胜利') msg1 = MIMEText(mail_body,_subtype='html',_charset='utf-8') msg.attach(msg1) if isinstance(mail_to,str): msg['To'] = mail_to else: msg['To'] = ','.join(mail_to) msg['From'] = mail_from msg['Subject'] = u'zzzz我的项目接口自动化测试' msg['date']=time.strftime('%Y-%m-%d-%H_%M_%S') print(msg['date']) smtp = smtplib.SMTP() smtp.connect('smtp.126.com') smtp.login('xxx@126.com','123456') # 发送邮件账号密码 smtp.sendmail(mail_from, mail_to, msg.as_string()) smtp.quit() print('email has send out !')if __name__=='__main__': sendmain('../report/2017-08-18-10_18_57_result.html')2、 在主框架入口调用邮件模块 ...

January 11, 2023 · 1 min · jiezi

关于软件测试:通关必备软件测试面试小程序不要钱的一定要看看

软件测试作为一个技术工种,你的我的项目经验、技术能力,都是面试官最感兴趣的,而想要慌慌张张地答复好面试官们问出的技术问题,提前对相干的面试真题进行理解和背诵就十分重要。那么哪里有软件测试面试真题能够刷呢?这个能够白嫖的软件测试面试小程序,我感觉大家可能须要!! 名字为柠檬班软件测试题库,是培训机构依据这该业余开发进去的收费面试小程序,外面蕴含了所有测试岗位的学习材料,还有几千道测试题目,能够在线刷题,更惊喜的是连OPPO、华为、阿里巴巴这些大厂企业的面试真题也都有哟!  除此之外,我也同步为大家整顿了一些比拟常见的技术问题及答案!什么叫预测试,预测试是怎么进行的,预测试个别为多长时间?答:预测试就是凋谢刚刚开发实现,测试环境刚搭建起来,这时咱们要对系统的各种性能能不能跑通,业务流程能不能实现进行测试,就是冒烟测试,这就是转测试,咱们转测试大略须要一天的工夫。 测试员如何保障软件品质?  答:要保障软件的品质,参加我的项目的每一个成员都有责任参加质量保证。 1.测试策略:品质是多维度的,功能测试、性能测试、兼容性测试等多种测试类型的联合; 2.用例品质:采纳适合的用例办法,如何进行需要剖析,用例评审; 3.执行品质:如何保障执行深度(界面、关联、模块、数据库、日志)与广度(零碎测试类型)4.缺点品质:bug评审,引入适宜的Bug流程,测试过程监控。 联合你以前的学习和工作教训,你认为如何做好测试。答:依据我以前的工作和学习教训,我认为做好工作首先要有一个良好的沟通,只有沟通无障碍了,才会有好的合作,才会有更好的效率,再一个就是技术肯定要过关,做测试要有足够的急躁,和一个良好的工作习惯,不懂的就要问,实时与共事沟通这样的话能力做好测试工作。 总之,只有技术扎实,在面试过程中沉稳沉着,置信就肯定能拿到一个好问题~

January 11, 2023 · 1 min · jiezi

关于软件测试:软件测试-黑盒测试方法论场景法

 场景法就是模仿用户操作软件时的场景,次要用于测试零碎的业务流程。 测试不能只关注某个控件的边界值、等价类是否满足要求,也要关注它的次要性能和业务流程是否正确实现,这时就须要应用场景法来实现。 场景法 编辑 用例场景是用来形容流经用例门路的过程,这个过程从开始到完结遍历用例中所有根本流和备选流。 根本流:依照正确的业务流程来实现的一条操作门路即模仿正确的操作流程。备选流:导致程序呈现谬误的操作流程即模仿谬误的操作流程。当初的产品简直都是由事件触发来管制流程的,事件触发时的情景便成了场景,而同一事件不同的登程程序和处理结果便造成了事件流。 在应用场景法设计测试用例时,须要笼罩零碎用例中的主胜利场景和扩大场景,并且须要适当补充各种正反面的测试用例以及思考出现异常场景的情景。 场景法用例设计步骤 设计场景用例首先须要依据需要规格阐明得出功能模块流程图,形容出程序的根本流及备选流,其次依据根本流和备选流生成不同的场景,结构场景列表,最初对每一个场景生成相应的测试用例,对所有的测试用例从新复审,去掉多余的测试用例。确定测试用例之后,为每一个测试用例确定测试的数据值即可实现场景用例的设计。 实例 对淘宝网通过购物车购物的流程设计测试用例。 画流程图 整个业务通过流程图来示意如下图所示: 编辑 确定根本流和备选流 根本流 进入淘宝首页浏览商品进入单品页抉择商品规格和数量退出购物车返回购物车抉择商品结算,进入确定订单页提交订单付款胜利期待播种确认收货备选流 退出购物车时,不抉择商品规格和型号,返回根本流第 4 步。退出购物车时,商品库存有余,返回根本流第 4 步。退出购物车时,未登录,登录后返回根本流第 3 步。退出购物车后,持续选购,返回根本流第 4 步。退出购物车,未抉择商品,结算,返回根本流第 7 步。领取失败,返回根本流第 8 步。未抉择商品退出购物车,退出购物,完结。结构场景 登录后胜利购物(根本流)未抉择商品规格和型号就增加购物车(根本流 + 备选流 1)抉择的商品库存有余(根本流 + 备选流 2)未登录增加购物车(根本流 + 备选流 3)商品增加购物车后持续购物(根本流 + 备选流 4)进入购物车,未抉择商品间接结算(根本流 + 备选流 5)领取过程出错(根本流 + 备选流 6)没有增加商品到购物车(根本流 + 备选流 7)生成测试用例 编辑 最终生成的测试用例如上表所示,这种利用场景法设计进去的测试用例个别是对于等价类和边界值的补充,通常状况下是比较完善的。

January 10, 2023 · 1 min · jiezi

关于软件测试:软件测试-黑盒测试方法论等价类

 等价类划分是一种重要的、罕用的黑盒测试方法,不须要思考程序的内部结构,只须要思考程序的输出规格。它将不能穷举的测试过程进行正当分类,从而保障设计进去的测试用例具备完整性和代表性。须要把用户所有可能输出的数据,划分成若干份(若干个子集),而后从每一个子集当中选取多数具备代表性的数据作为测试用例,这种办法被称为——等价类划分法。在无限的测试资源的状况下,用大量有代表性的数据失去比拟好的测试成果。 等价类划分 等价类划分的根本思维就是先把可能的数据划分为不同的类别,而后再从每一类外面筛选有代表性的数据进行测试。这样筛选进去的数据,就能够代表这一类外面的全副数据。通过这种形式,测试用例的数量就能够缩小。 等价类分类 从曾经划分进去的这些范畴当中,又能够分为两种状况: 无效等价类:指合乎《需要文档》,输出正当的数据汇合。有效等价类:指不合乎《需要文档》,输出不合理的数据汇合。 编辑 因为软件不仅要可能接管正当的数据,不合理的数据也须要做出正确响应,所以在设计测试用例时,两种等价类都须要思考,这样的测试能力确保软件具备更高的可靠性。所有的无效等价类和有效等价类合起来,就是整个的测试数据范畴。等价类划分准则 通常依照以下规定进行划分等价类:1.如果规定输出的取值范畴或个数时,则划分一个无效等价类和两个有效等价类。如:注册用户名的长度限度 6~18 个字符,6~18 个字符是无效等价类,小于 6 个字符和大于 18 个字符则是两个有效等价类。2.如果规定了输出的汇合或规定必须要遵循的条件,则划分一个无效等价类,和一个有效等价类。如:注册用户名的格局要求必须以字母结尾时,以字母结尾是无效等价类,非字母结尾是有效等价类。3.如果输出条件是一个布尔值,则划分为一个无效等价类和一个有效等价类。如:在注册用户时须要遵循协定或条款是否承受时,“承受”是无效等价类,“不承受”则是有效等价类。4.如果输出条件时一组数据(枚举值),并且程序对每一个输出的值做不同的解决,则化为若干个无效等价类和一个有效等价类。如:网游中充值 VIP 等级(三个等级),对每个 VIP 的等级优惠不同,VIP1、VIP2、VIP3 不同等级是三个无效等价类,不是 VIP 用户则是有效等价类。5.如果输出条件规定了必须要遵循的某些规定下,则划分为一个无效等价类和若干个有效等价类(有效等价类须要从不同的角度去违反规定)。如:明码要求首位必须是大写字母的,首字母大写时无效等价类,首位小写字母的、首位为数字的或者首位为特殊字符的则是有效等价类。6.不是所有的等价类都有有效等价类。如:性别的抉择只有男或女两种。 等价类设计步骤 7.先划分等价类:找出所有可能的分类。8.确定无效等价类:需要中的条件。9.确定有效等价类:与条件相同的状况,再找到非凡状况(中文、英文、符号、空格、空)。10.从各个分类中筛选测试用例数据。划分等价类要点:文本框要求输出的长度、输出的类型、组成规定、是否为空、是否反复—辨别大小写、是否去除空格。 实例 等价类设计步骤的前3个步骤,能够通过等价类表这种办法来辅助进行剖析。 例:计算 1—100 的整数之和(包含 1 和 100) 以下面的计算器来举例,这次是计算1–100中的其中两个整数之和。 创立等价类表 在确立了等价类之后,可按下表的模式列出所有划分出的等价类表。 编辑 等价类表能够帮忙剖析如何划分等价类,是一个辅助工具,初学者能够这样写,等纯熟之后能够间接疾速的编写出测试用例。 设计用例的时候须要留神,应该依照以下准则来笼罩不同的等价类: 设计新的测试数据,尽可能多笼罩尚未被笼罩的无效等价类,反复这一步骤,直到将所有的无效等价类都被笼罩完为止。设计新的测试数据,只笼罩一个有效等价类,反复这一步,直到将所有的有效等价类都被笼罩完为止。设计测试用例 先编写一个很简略的用例,只蕴含最要害的一些信息,比方用例编号,属于的等价类,两个输入框中的测试数据,还有预期后果。 因为这里想要失去最终后果的话波及到了多个元素,这里就须要输出两个值。 在这种状况下,要采纳控制变量法,如果是要笼罩有效等价类的话,设计测试用例的时候,以后元素笼罩有效等价类,用例中波及到的其余元素要放弃无效。 编辑 每次一个单点有效输出让其余点无效输出排除更多不确定和烦扰。

January 10, 2023 · 1 min · jiezi

关于软件测试:软件测试-数据持久化技术Java

本章介绍 Web 后端开发中数据长久化技术 TKMyBatis。 TKMyBatis简介 TKMybatis 是基于 Mybatis 框架开发的一个工具,外部实现了对单表的根本数据操作,只须要简略继承 TKMybatis 提供的接口,就可能实现无需编写任何 sql 即能实现单表操作。 上面简略介绍下 MyBatis , MyBatis 是一款优良的长久层框架,它反对自定义 SQL、存储过程以及高级映射。MyBatis 罢黜了简直所有的 JDBC 代码以及设置参数和获取后果集的工作。MyBatis 能够通过简略的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,一般老式 Java 对象)为数据库中的记录。 具体内容请参考 https://mybatis.org/mybatis-3... 2 TKMyBatis疾速开始 Maven依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>4.0.3</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.0.3</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> 在启动类中配置 MapperScan 扫描 import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import tk.mybatis.spring.annotation.MapperScan; @SpringBootApplication @MapperScan("com.hogwartsmini.demo.dao") public class DemoApplication { public static void main(String[] args) { ...

January 10, 2023 · 3 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> ...

January 10, 2023 · 2 min · jiezi

关于软件测试:软件测试-测试平台开发前端开发之Vuejs-框架一

 Vue.js 是一套用于构建用户界面的渐进式框架,在目前的前端凋谢中比拟风行的前端框架。 Vue 被设计成自底向上的逐层利用。Vue 的外围库只关注视图层,不仅易于上手,还便于与第三方库或已有我的项目整合。然而学习 Vue.js 须要肯定的 HTML、CSS、和 JavaScript 根底,所以本章节将不对这些根底内容进行解说。 Vue的组件化开发 介绍 目前的前端开发中组件化开发成为了潮流,而所谓的组件化开发就是把页面拆分成多个组件,最初将每一个组件进行列举,造成咱们看到的网页。 例如:百度的首页,能够简略的分为以下图中的四个组件 编辑 先将这四块的组件开发实现之后,再将这些组件组装成一个残缺的页面。 组件开发的长处 在保护网页时,不须要在一个大的页面中去批改,而是去对应的组件中去批改数据。组件的资源是独立的,能够进步每个模块的重用性。比方上图的搜素框,在首页应用到了,在其余的中央也要用到同样的搜寻框,就能够一成不变的将组件拿过去间接用。组件之间能够互相嵌套。环境介绍和筹备 编译器 这里选用的是 vscode,其余编译器也可,vscode 下载地址:https://code.visualstudio.com/。 1 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:Element - The world's most popular Vue UI frameworkBootstrapVue:https://bootstrap-vue.org/Vuetify:Vuetify — A Material Design Framework for Vue.js这里次要应用的组件库是 vuetify。 ...

January 10, 2023 · 1 min · jiezi

关于软件测试:软件测试-被测系统架构与数据流分析

 深刻理解测试过程中被测系统的架构与数据流,有助于了解业务逻辑,梳理业务用例以及促成部门协同。 更深的了解业务逻辑是指要剖析公司是做什么的,公司的重要的商务决策是什么,公司外部数据流是怎么运行的,有哪些常见的业务场景。这也能考验对公司业务的负责水平,能够更好的去服务业务部门,为公司发明价值。 开源我的项目litemall零碎架构上面以开源我的项目 litemall 为例,剖析一下这个我的项目中的零碎架构。 litemall 这款产品是一个小的商城,以 SpringBoot 作为后端,Vue 管理员联合微信小程序作为前端,Vue 用户作为挪动端。 零碎架构litemall 的零碎架构如图所示: 编辑 技术架构 litemall 的技术架构如图所示: 编辑 开源我的项目Mall的零碎架构 Mall 我的项目是一套电商零碎,包含前台商城零碎及后盾管理系统,基于 SpringBoot + MyBatis 实现,采纳 Docker 容器化部署。前台商城零碎蕴含首页门户、商品举荐、商品搜寻、商品展现、购物车、订单流程、会员中心、客户服务、帮忙核心等模块。后盾管理系统蕴含商品治理、订单治理、会员治理、促销治理、经营治理、内容治理、统计报表、财务管理、权限治理、设置等模块。 零碎架构 Mall 的零碎架构如图所示: 编辑 业务架构 Mall 的业务架构如图所示: 编辑 公司架构组成 通过 litemall 和 mall 两个开源我的项目能够看出,为了更好的服务公司,须要理解公司的架构,公司架构个别分为业务架构和零碎架构。 业务架构 商业模式:也是目前大家最关怀的问题,公司怎么使得收益最大化。例如抖音的盈利模式以及其中裂变零碎是怎么参加的,这就须要理解你身处的业务部门的业务模式以及技术栈,以及公司的倒退模式与将来趋势。业务数据:理解角色、资源和数据。例如公司的账户管理中心中的角色有管理员、用户等,而这些角色又能够分为输入内容的人和生产内容的人,除了角色,还须要理解公司平台上的外围资源的品种以及数据信息。业务流程:理解业务数据中角色,角色的行为以及数据之间的集成关系。零碎架构 零碎架构就是要把业务架构进行落地施行,实现其中的商业模式与业务流程。 架构角色与技术栈:架构角色根本不会变,而技术栈会随着技术的倒退而一直变动。其中的具体实现有:网关:Apache/Nginx/F5利用开发:SpringBoot/SpringCloud通信协定:Dubbo/HTTP/PB数据处理:Hadoop/Spark/Flink数据存储:Redis/MySQL/Oracle/ES文档存储:MongoDB/HBase/Neo4j部署架构:架构角色的集成关系,对应业务架构中的业务流程。建模语言UML 为疾速理解公司的架构,能够应用对立的建模语言 UML 来剖析公司架构。罕用的编译语言工具有: plantuml(举荐)yeddraw.ioprocessonvisio (不罕用)以 plantuml 工具为例,能够设计以下图模型剖析公司架构: 用例图:用来形容商业模式、业务角色时序图:用来形容业务流程、调用关系部署图:用来形容零碎架构与集成关系流动图:用来剖析业务逻辑应用用例图梳理业务流程 @startuml left to right direction actor User as user actor Admin as admin package 商品 { usecase "公布商品" usecase "浏览商品" usecase "购买商品" usecase "下架商品" } package 订单 { usecase "结算订单" usecase "查问订单" usecase "退款" usecase "治理订单" } admin -up-> 公布商品 admin -up-> 下架商品 admin -up-> 治理订单 user --> 浏览商品 user --> 购买商品 user --> 结算订单 user --> 结算订单 user --> 查问订单 user --> 退款 @enduml ...

January 10, 2023 · 2 min · jiezi

关于软件测试:软件测试-被测项目需求你理解到位了么

需要剖析是开始测试工作的第一步,产品会先产出一个需要文档,而后会组织需要宣讲,在需要宣讲中剖析需要中是否存在问题,而后宣讲完结后,通过需要文档分析测试点并且预估排期。所以对于需要的了解十分重要。 需要文档产品经理在做完用户需要考察之后,会依据用户需要输入一份需要文档,在文档中会详细描述用户所需的性能和性能实现的成果。文档生成之后,产品经理会和开发测试一起开一个需要宣讲会,解说需要中的内容,并且会对需要中可能存在的问题进行探讨。 需要评审在需要宣讲的过程中,其实也须要对需要自身进行评审。需要评审能够从以下角度去进行思考。 业务场景角度 站在使用者的角度,思考用户会遇到的各种状况,反观各种状况在需要中是否都能找对对应形容,即用户故事 依据用户故事应该能构建出简略的流程图,各种门路之间的束缚关系,执行条件是否有明确正当的定义,即业务流程图 性能点角度 数据束缚是否全面、正当 存在分支的逻辑、形容是否笼罩所有门路 多状态流程,状态流转形容是否正当且残缺 权限形容是否明确 在评审的时候,能够从这几个角度进行思考,查看产品写的需要是否欠缺。若需要中有不欠缺的中央,要提出问题并和产品开发一起进行探讨。最终的指标是让需要更正当残缺。 需要剖析等产品经理把需要最终欠缺好之后,就能够具体的去剖析需要文档。需要剖析简略来讲就是把不直观的需要文档简化为直观的需要。 需要剖析步骤 明确测试范畴:把测试流动的边界确定好,因为很多模块都是有关联关系的,在剖析需要文档的时候,须要看要加的性能和之前的性能耦合性高不高,须要不须要对关联的功能模块也进行测试。 明确性能点:把需要文档中的性能点列出来。 明确业务流程:依据业务流程图梳理。 明确输入后果:不便验证。 剖析异样流程:进步零碎的容错性。 预估测试须要的工夫和资源:为测试计划的编写做好筹备。 为了进步需要剖析能力,就须要深刻的了解需要。 如何进步需要理解能力熟悉业务,理解零碎。任何零碎都有大的业务背景,只有相熟了业务知识能力更无效的应用零碎。任何零碎在应用过程中,都有一个相熟的过程,对系统越相熟,越容易发现零碎问题和业务问题。 用主观的思考形式站在用户的角度剖析。在满足客户要求的根底上,站在业务或者零碎现有实现的角度,给需要和开发人员一些设计上的倡议。 长于总结,乐于分享。把常常见到的用例设计的误区和一些好的需要剖析实例和需要剖析习惯分享给四周的人,这样能够集众人之所长,一直晋升需要剖析能力。

January 10, 2023 · 1 min · jiezi

关于软件测试:软件测试-软件项目管理与跨部门沟通协作

 项目管理是在我的项目流动中使用常识、技能、工具和办法,以便达到我的项目要求。 软件项目管理有其特定的对象、范畴和流动,着重关注老本、进度、危险和品质的治理,还须要协调开发团队和客户的关系,协调外部各个团队之间的关系,监控我的项目停顿状况,随时报告问题并督促问题的解决。 软件项目管理是为了使软件我的项目可能依照预约的老本、进度、品质顺利完成,而对人员(People)、产品(Product)、过程(Process)和我的项目(Project)进行剖析和治理的流动。 随着信息技术的飞速发展,软件产品的规模也越来越宏大,集体单打独斗的作坊式开发方式曾经越来越不适应倒退的须要。各软件企业都在踊跃将软件项目管理引入开发流动中,对开发履行无效的治理。 实际上,软件项目管理的意义不仅仅如此,进行软件项目管理有利于将开发人员的集体能力转化成企业的开发能力,企业的软件开发能力越高,表明这个企业的软件生产越趋于成熟,企业越可能稳固倒退。 同时,随着软件开发规模及开发队伍的逐步增大,软件开发不再是像过来那样一两个开发人员即可解决的事件。迫切需要一种开发标准来标准每个开发人员、测试人员与反对人员的工作,每个我的项目组成员按约定的规定准时实现本人的工作。同时采纳规范化治理,专业分工也能够升高对开发人员的要求,从而升高产品研发老本。 治理流程 编辑 需要阶段 项目经理:须要实现在项目管理工具中建设我的项目目录,剖析我的项目所需资源、危险等,预估我的项目的周期等流动。流动实现后输入一个蕴含大抵工夫布局的我的项目打算。产品:须要实现收集整理需要,环境剖析等流动。流动实现后输入需要文档。研发:要参加到需要剖析和环境剖析流动中。测试:要参加到需要剖析和环境剖析流动中。设计阶段 项目经理:须要实现监控我的项目进度,组织安顿本阶段的评审,工作合成、责任到人,细化我的项目打算等流动。流动实现后输入具体到各个性能的我的项目打算。产品:须要实现零碎功能设计。实现后输入零碎说明书。研发:须要实现零碎性能技术设计和数据库设计。实现后输入概要设计文档和具体设计文档。测试:须要组织测试计划评审。实现后输入一份测试计划。开发/单元测试阶段 项目经理:须要实现监控我的项目进度,调整人员安顿,跟踪解决技术难点等流动。流动实现后输入更新进度后的我的项目打算和我的项目进度报告。产品:参加需要细节沟通。研发:须要实现具体性能开发,组织 code review 和单元测试等流动。实现后输入性能代码和单元测试代码。测试:须要实现编写测试用例和组织测试用例评审等流动。实现后输入测试用例。集成测试阶段 项目经理:须要实现监控我的项目进度,跟踪解决技术难点等流动。流动实现后输入我的项目进度报告。产品:参加需要细节沟通和 Bug 批改计划的制订。研发:须要实现集成测试,Bug 批改等流动。实现后输入集成测试报告,部署测试环境。测试:反对研发进行集成测试,筹备测试数据。零碎测试阶段 项目经理:须要实现调配 Bug,跟踪解决技术难点等流动。流动实现后输入我的项目进度报告。产品:参加需要细节沟通和 Bug 批改计划的制订。研发:反对测试流动,批改 Bug。测试:须要实现测试环境搭建,补充测试数据,功能测试,自动化测试等流动。实现后输入零碎测试报告和缺点报告。软件项目管理的办法 编辑 制订我的项目打算 对于大我的项目,个别在我的项目启动或者立项时会制订一份欠缺的我的项目总体打算。有些公司可能会有本人的项目管理的工具。对于小我的项目或者版本,因为周期比拟短,个别一个月,所以间接制订简略的日程打算进行跟踪。 执行该打算并监控跟踪治理 我的项目打算制订并失去项目组评审确认后,项目组要依照打算中安顿的工作、工夫和人员去执行。项目管理人员须要对打算执行状况进行监控,比方每周查看工作实现状况,每个里程碑点查看里程碑内所有工作实现状况。监控的后果会在我的项目日程打算中刷新工作实现进度,以便在非里程碑工作工夫点时能够查看我的项目进度。必要时每周要召开我的项目例会并造成我的项目周报。每个里程碑完结时,要召开里程碑总结会议。 项目风险应答与问题解决 项目经理通过对我的项目周跟踪、里程碑跟踪流动,将发现我的项目停顿中呈现的问题及潜在问题,曾经影响或将要影响我的项目指标。项目组须要跟踪和剖析我的项目数据,对这些问题和危险进行辨认、剖析,策动相应的应答措施。 对问题解决或危险缓解措施的执行,项目经理须进行监督和管制,继续跟踪问题和危险状态变动,确保措施无效执行,直至问题敞开、危险缓解。对问题与危险的辨认、解决策动和状态跟踪等信息,项目经理应记录在我的项目周报和里程碑总结报告的问题跟踪表或者 危险跟踪表中。 我的项目收尾 我的项目收尾是我的项目最初一个重要的工作环节,要实现我的项目的各项收尾工作,保留我的项目资产,移交工作责任、进行我的项目总结与评估,并最终开释我的项目资源。软件我的项目的治理须要依赖管理工具,一款合乎需要的软件项目管理工具能够帮忙团队更好的治理我的项目,更好的去实际开发模型。 跨部门沟通合作 与产品沟通 因为产品的岗位职者就是要设计产品性能,产出产品需要文档,那么能够得出须要和产品沟通的阶段有以下四个: 需要评审会在剖析需要阶段在测试用例编写阶段在测试过程中总之,只有波及到需要方面的问题,都须要和产品进行深刻沟通,这样才能够深刻残缺的了解产业务的逻辑和我的项目的需要。这样最终交出去的软件才是合乎用户需要的。 与研发沟通 在剖析需要阶段在测试用例编写阶段在测试过程中在线上监控发现 Bug 时在需要剖析和测试用例编写阶段,如果遇到一些需要的实现伎俩和逻辑不是很明确的话,就须要和研发进行进一步的沟通。 在测试过程中,如果发现 Bug 的话也要和研发进行沟通,接下来还有帮助复现 Bug,提交 log,验证 Bug 等等,这些流动都须要和研发进行进一步沟通。 同理,在我的项目上线后,如果线上监控呈现了 Bug 时,也须要同样的沟通步骤。 上下游配合测试 当初公司中的一个我的项目,往往会波及多个团队,比如说服务端,客户端,数据库等等。那么在我的项目测试的时候,就须要多个团队的测试人员单干联调,这样会更加容易进行测试,并且能够更好的发现问题。 那么在这种上下游配合联调测试的时候,应该留神哪些问题呢?做到哪些能够使单干更加顺畅呢? 测试计划沟通:和上下游模块沟通各自负责的测试计划安顿、测试范畴、测试重要场景、跨团队测试数据的结构、配合的形式,把团队间的影响降到最低。环境对接:理解相互之间接口的调用问题,接口是否沟通分明,接口是否满足需要等,确保联调环境的可用。熟悉业务:理解对方的业务、申请权限等,防止后续影响测试进度。

January 10, 2023 · 1 min · jiezi

关于软件测试:软件测试-软件测试入门必会流程管理平台

 JIRA 是目前比拟风行的测试流程管理系统,当初很多大厂应用的都是 JIRA。为什么大厂更爱用 JIRA 呢?其实就是因为它的定制性十分的强。能够本人定义流程,本人定义界面,本人定义字段。通过这些自定义的形式,就能够让整个零碎更贴合公司的业务。而且 JIRA 的各种插件也十分的丰盛,能够满足公司的各种业务需要。 在测试工作当中的一些工作流程,比方测试用例和 Bug 都能够用 JIRA 平台去进行跟踪治理。 JIRA中的基本概念 JIRA 中有一些根本的概念须要先理解一下。 首先是 Project,这个概念很简略,就是一个“我的项目”。开发一个 App 是一个我的项目,开发一个微信小程序也是一个我的项目。能够说,在项目管理领域内能够看作“我的项目”的,都是 JIRA 中的我的项目。 Issue 则是 JIRA 的外围,也能够翻译成问题。我的项目就是由一个一个的问题组成的。治理不同的问题,能够用不同的问题类型。 JIRA 里有一些预制好的问题类型,比如说 Task 工作、Sub-Task 子工作。能够间接抉择应用,也能够本人创立新的问题类型。 一个问题会有很多属性,比如说名称、详细描述、提交人、提交工夫、优先级、状态等等。这些属性就是 Field 字段。零碎曾经定义好了一些罕用的字段。也能够创立一些自定义的字段。 一个 Issue 也会有不同的状态,比方待办,进行中,已实现。Workflow 工作流就是用来定义 Issue 的状态以及状态间的流转的。 JIRA治理测试用例流程 接下来介绍一下在 JIRA 中如何治理测试用例。 创立测试用例治理我的项目 在 JIRA 中创立一个流程治理类型的我的项目,命名为【测试用例治理我的项目】。测试用例能够在这个我的项目中进行治理。 编辑 新建测试用例 在【测试用例治理我的项目】我的项目中创立一个新的 issue。点击【新建】,能够看到新建测试用例的界面。这外面能够填写测试用例的内容。 比方填写一条最根本的 UI 验证用例。 编辑 点击【新建】按钮即可创立一条测试用例。 查看并编辑测试用例 能够点击编辑按钮,进入测试用例编辑页面批改测试用例的内容。 编辑 查看用例状态转换 执行测试用例时,能够点击页面上的状态转换按钮,切换测试用例的不同状态。 通过这些状态,就能够对测试用例进行治理了。如果在执行测试用例的时候,执行的理论后果与预期后果不统一,这时就是发现了 Bug。这时就须要把 Bug 也提到 JIRA 当中进行治理。 ...

January 10, 2023 · 1 min · jiezi

关于软件测试:软件测试-一文带你了解测试流程的体系

 软件测试是软件质量保证的关键步骤。越早发现软件中存在的问题,修复问题的老本就越低,软件 品质也就越高,软件公布后的维护费用越低。 为了能更好的保障软件品质,在软件测试的实际中,缓缓造成了一些流程用来达到这一指标。上面就来介绍一下常见的测试流程。 传统测试流程 在传统的测试流程中蕴含了如图所示的步骤。 编辑 上面别离介绍下每一步流程的含意。 单元测试 单元测试是对软件中的根本组成单位进行的测试。目标是测验软件根本组成单位的正确性。 测试阶段:编码后测试对象:最小模块测试人员:开发测试根据:代码、正文、具体设计文档测试方法:白盒测试集成测试 集成测试是在软件系统集成过程中所进行的测试。目标是查看软件模块之间的接口是否正确。 测试阶段:单元测试实现后测试对象:模块间的接口测试人员:开发测试根据:单元测试模块、概要设计文档测试方法:黑盒与白盒联合冒烟测试 冒烟测试是在软件开发过程中的一种针对软件版本包的疾速基本功能验证策略,是对软件基本功能进行确认验证的伎俩。 测试阶段:提测后测试对象:整个零碎测试人员:测试测试根据:冒烟测试用例测试方法:黑盒测试(手工或自动化伎俩)零碎测试 零碎测试是对曾经集成好的软件系统进行彻底的测试,以验证软件系统的正确性和性能等是否满足其规约所指定的要求。 测试阶段:冒烟测试通过后测试对象:整个零碎测试人员:测试测试根据:需要文档、测试计划、测试用例测试方法:黑盒测试个别零碎的次要测试工作都集中零碎测试阶段。依据不同的零碎,所进行的测试品种也很多。 在零碎测试中,又包含如下测试品种: 功能测试:功能测试是对产品的各性能进行验证,以查看是否满足需要的要求。性能测试:性能测试是通过自动化测试工具模仿多种失常、峰值以及异样负载条件来对系统的各项性能指标进行测试。平安测试:平安测试查看系统对非法入侵的防备能力。兼容测试:兼容性测试次要是测试零碎在不同的软硬件环境下是否可能失常的运行。验收测试 验收测试是部署软件之前的最初一个测试操作。验收测试的目标是确保软件准备就绪,向软件购买都展现该软件系统满足其用户的需要。 测试阶段:公布前测试对象:整个零碎测试人员:用户/需求方测试根据:需要、验收规范测试方法:黑盒测试软件测试模型 软件测试过程是一种形象的模型,用于定义软件测试的流程和办法。家喻户晓,开发过程的品质决定了软件的品质,同样的,测试过程的品质将间接影响测试后果的准确性和有效性。软件测试过程和软件开发过程一样,都遵循软件工程原理,遵循管理学原理。 随着测试过程治理的倒退,软件测试专家通过实际总结出了很多很好的测试过程模型。这些模型将测试流动进行了形象,并与开发流动有机的进行了联合,是测试过程治理的重要参考根据。 上面介绍几种常见的测试模型。 V 模型 V 模型是开发模型中瀑布模型的一种改良。瀑布模型将软件生命周期划分为打算、剖析、设计、编码、测试和保护六个阶段,因为晚期的谬误可能要等到开发前期的测试阶段能力发现,所以可能带来重大的结果。 V 模型在这点改良了瀑布模型,在软件开发的生存期,开发流动和测试流动简直同时开始,在开发流动进行的时候,测试流动开始进行相应的文档筹备工作,从而改良软件开发的效率和成果。 编辑 V 模型的长处是明确的标注了测试过程中存在着那些不同的测试类型,并且能够分明的表白测试阶段和开发过程各阶段的对应关系。 然而,它也有一些毛病。比方容易让人误会为测试是在开发实现之后的一个阶段。而且因为它的程序性,当编码实现之后,正式进入测试时,这时发现的一些 Bug 可能不容易找到其本源,并且代码批改起来很艰难。在理论工作中,因为需要变更较大,应用 V 模型可能导致要反复变更需要、设计、编码、测试,返工量会比拟大。 W 模型 W 模型从 V 模型演变过去。绝对于 V 模型,W 模型减少了软件各开发阶段中应同步进行的验证和确认流动。 W 模型由两个 V 字型模型组成,别离代表测试与开发过程,图中明确示意出了测试与开发的并行关系。测试与开发是同步进行的,有利于尽早的全面发现问题。 编辑 W 模型认为测试随同着整个软件开发周期,而且测试的对象不仅仅是程序,需要、设计等同样要测试。 W 模型有利于尽早地全面的发现问题。例如,需要剖析实现后,测试人员就应该参加到对需要的验证和确认流动中,以尽早地找出缺点所在。 对需要的测试也有利于及时理解我的项目难度和测试危险,及早制订应答措施,这将显著缩小总体测试工夫,放慢我的项目进度。 应用 W 模型的长处很显著。首先测试的流动与软件开发同步进行,而且测试的对象不仅仅是程序,还包含需要和设计。这样能够尽早发现软件缺陷可升高软件开发的老本。 然而 W 模型还是有一些毛病存在。比方开发和测试仍然是线性的关系,需要的变更和调整,仍然不不便。而且如果没有文档,根本无法执行 W 模型。应用 W 模型对于我的项目组成员的技术要求也更高。 ...

January 10, 2023 · 1 min · jiezi

关于软件测试:软件测试-做为测试那些必须掌握的测试技术体系

 软件测试技术是软件开发过程中的一个重要组成部分,是贯通整个软件开发生命周期、对软件产品(包含阶段性产品)进行验证和确认的流动过程。其目标是尽快尽早地发现在软件产品中所存在的各种问题,与用户需要、事后定义的不一致性。查看软件产品中可能存在的 Bug,并且编写缺点报告,交于开发人员批改。软件测试人员的根本指标是发现软件中的谬误。 软件测试技术就相当于是软件测试人员的武器。作为软件测试人员,必须要分明理解能够通过哪些伎俩去保障产品的品质。只有晓得了这些,能力更好的实现测试的工作。 软件测试分类 软件测试的分类能够依照不同的维度去划分,一般来说能够依照上面的这些维度去划分。 按开发阶段分类 单元测试集成测试冒烟测试零碎测试验收测试按测试施行组织分类 测试:非正式验收测试 测试:内测后的公测按测试执行形式分类 动态测试:不启动被测对象的测试,比方代码走读,代码评审,文档评审,需要评审等。动静测试:启动被测试对象的测试,比方白盒测试,黑盒测试等。按是否查看代码分类 黑盒测试:指的是把被测的软件看作是一个黑盒子,不去关怀盒子外面的构造是什么样子的,只关怀软件的输出数据和输入后果。白盒测试:指的是把盒子盖子关上,去钻研外面的源代码和程序后果。按是否手工执行分类 手工测试:由人去一个一个的去执行测试用例,通过键盘鼠标等输出一些参数,查看返回后果是否合乎预期后果。通常用于黑盒测试方法或零碎测试阶段。自动化测试:把以人为驱动的测试行为转化为机器执行的一种过程。按测试对象分类 性能测试:查看零碎是否满足需要规格说明书中规定的性能。平安测试:各种的攻打伎俩,例如 SQL 注入、XSS 等。兼容性测试:软件和硬件之间是否可能施展很好的效率工作,会不会影响导致系统的解体。文档测试:测试软件产品中的各类文档。易用性测试:用户体验测试。业务测试:测试人员将零碎的各个模块串接起来运行、模仿实在用户理论的工作流程,满足永续需要定义的性能进行测试的过程。界面测试:也称为 UI 测试。测试用户界面的功能模块的布局是否正当,整体格调是否统一、各个控件的搁置地位是否合乎客户的应用习惯,还要测试操作界面操作便捷性、导航简略易懂性、页面元素的可用性,页面元素的可用性、界面中文字是否正确,命名是否对立,页面是否好看、文字、图片组合是否完满。装置测试:测试程序的装置、卸载。其余分类 回归测试:批改了旧代码后,从新执行测试以确认批改后没有引入新的谬误或导致其余代码产生谬误。随机测试:指测试中的所有输出数据都是随机生成的,其目标是模仿用户的实在操作,并发现一些边缘性的谬误。探索性测试:试能够说是一种测试思维技术。它没有很多理论的测试方法、技术和工具,然而却是所有测试人员都应该把握的一种测试思维形式。探索性强调测试人员的主观能动性,摈弃繁冗的测试计划和测试用例设计过程,强调在碰到问题时及时扭转测试策略。黑盒测试 黑盒测试又叫功能测试、数据驱动测试或基于需要规格说明书的功能测试。该类测试重视于测试软件的功能性需要。 采纳这种测试方法,测试工程师把测试对象看作一个黑盒子,齐全不思考程序外部的逻辑构造和外部个性,只根据程序的需要文档,检查程序的性能是否合乎它的性能阐明。测试工程师无需理解程序代码的外部结构,齐全模仿软件产品的最终用户应用该软件,查看软件产品是否达到了用户的需要。 黑盒测试方法能更好、更实在地从用户角度来考查被测系统的功能性需要实现状况。在软件测试的各个阶段,如单元测试、集成测试、零碎测试及验收测试等阶段中,黑盒测试都施展着重要作用,尤其在零碎测试和确认测试中,其作用是其余测试方法无奈取代的。 白盒测试 白盒测试又称构造测试、通明盒测试、逻辑驱动测试或基于代码的测试。白盒法能够全面理解程序外部逻辑构造、对所有逻辑门路进行测试。 白盒测试罕用的办法有代码检查法、动态构造分析法、动态品质度量法、逻辑笼罩法、根本门路测试法。 分层测试体系 编辑 其中 Unit 代表单元测试,API 代表接口测试,UI 代表页面级的零碎测试。分层的自动化测试提倡产品的不同档次都须要自动化测试,这个金字塔也正示意不同档次须要投入的精力和工作量。对于测试金字塔,越靠下越容易自动化,越靠下老本越低,越靠下效率越高。 分层测试顾名思义就是分多个档次一个档次一个档次的测试,比方先测完两头接口层,再测最上层的界面。当然了,也能够同时测试。 分层测试的测试方法还是原来的测试方法,但对测试人员的代码能力还有自动化测试程度有较高要求,同时要求测试人员和开发团队真正的了解麻利开发和麻利测试,甚至要求开发团队达到开发即测试、测试即开发的能力。 单元测试 对软件中的最小可测试单元进行检查和验证。具体的说就是开发者编写的一小段代码,用于测验被测代码的一个很小的、很明确的性能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。 接口测试 接口测试是测试零碎组件间接口的一种测试,次要用于检测内部零碎与零碎之间以及外部各个子系统之间的交互点。 测试的重点是要查看接口参数传递的正确性,接口性能实现的正确性,输入后果的正确性,以及对各种异常情况的容错解决的完整性和合理性。 接口测试能够更早染指,染指越早越能更早的发现问题,还能够缩短我的项目周期,可能发现更底层的 Bug,缩小开发成本。 因为不同端(前端,后端)的工作进度不一样,所以要针对最开始进去的接口,以及须要调用其余公司的(银行,支付宝,微信,QQ 等)一些接口进行接口测试及验证数据,从平安层面来说,只依赖前端进行限度曾经齐全不能满足零碎的平安要求(绕过后面切实太容易),须要后端同样进行管制,在这种状况下就须要从接口层面进行验证。前后端传输、日志打印等信息是否加密传输也是须要验证的,特地是波及到用户的隐衷信息,如身份证,银行卡等。 UI 测试 UI 测试测的是利用中的用户界面是否如预期工作。比方,用户的输出须要触发正确的动作,数据须要能展现给用户看,UI 的状态须要产生正确变动等。 对于 UI 测试,能够采纳动态测试方法,也能够采纳动静测试方法。 对于用户界面的布局,格调,字体,图片等与显示相干的局部测试应该采纳动态测试,比方点检表测试,行将测试必须通过的项用点检表一条一条列举出,而后通过观察确保每项是否通过。 对用户界面中各个类别的控件应该采纳动静测试,即编写测试用例或者点检表,对每个按钮的响应状况进行测试,是否合乎概要设计所规定的条件,还能够对用户界面在不同环境下的显示状况进行测试。 UI 测试须要关注的内容包含通过浏览测试对象可正确反映业务的性能和需要,这种浏览包含窗口与窗口之间、字段与字段之间的浏览。各种拜访办法 (Tab 键、鼠标挪动和快捷键)是否反对。还有窗口的对象和特色,比方菜单、大小、地位、状态和核心等都符合标准。

January 10, 2023 · 1 min · jiezi

关于软件测试:测试面试-某-BAT-大厂测试开发面试真题与重点解析

背景介绍自己计算机专业毕业后在北京某事业单位混迹了三年半,能够说一事无成吧  ,再加上没有北京户口,也不想持续蹉跎岁月,遂信心到互联网企业寻求冲破。 前后加入过几家互联网公司的测试开发岗位面试,其中两次百度的面试,一次止步三面,另一次止步于四面。这里就次要总结一下百度的面试经验和心得体会。总体感觉百度的面试官比拟重视根底,问题不难然而覆盖范围比拟全面。相对而言,另一家互联网大厂的面试则比拟重视我的项目教训,对框架的意识之类的。 第一次面试百度,一面和二面还比较顺利,都是算法、数据结构之类的问题,但三面的时候,面试官感觉我的经验与百度不 Match,于是让我写个全排列,妥妥的挂掉,过后本人的根底技能还是不可靠  。 第二次面试是在半年之后,这时因为曾经加入了霍格沃兹测试学院的《测试开发实战进阶》课程,果然自信了好多,始终闯关到四面。因为自己习惯于记录学习笔记,面试完通常也会记下来问题,供本人查缺补漏,在这里也供各位小伙伴参考。 一面我的项目教训 遇到的某个难点是什么?如何解决的? Java 中的容器有哪些?它们的区别和个性? Java 多线程的创立 Python 中办法的参数是值传递还是援用传递? Python 中元组和列表的区别 Flask 的某个问题(忘了 ) 性能测试关注哪些指标? Linux 中查找某个文件并删除它 Linux 查问 CPU、内存的指令 Git 的常见操作,如 git stash 算法:快排的实现 算法:数组中查找呈现次数过半的数(这个没写好,据说空间复杂度高了 ) 算法:查找链表的倒数第三个数 Java 的接口与抽象类的区别 二面我的项目教训 测试的过程 京东登录页面怎么测? 算法:二叉树的深度计算 算法:一亿个无序数找出 Top 100(这个也没写好,空间复杂度高了,应该用堆排序) UI 测试的过程 本人解决的最亮点的技术难点是什么? TCP 和 UDP 的区别?如何保障 TCP 的可靠性? 关上一个网页都产生了哪些事? 如果一个普通用户,他的百度首页打不开,问题怎么定位?写出定位流程。 三面持续问我的项目教训和技术难点 理解当初的工作环境,背景等 户口,家庭状况,伴侣工作等 Web View 怎么测试? UI 测试做的是 iOS 还是 Android?讲讲 iOS 的 UI 怎么测? ...

January 10, 2023 · 1 min · jiezi

关于软件测试:接口测试实战-Android-高版本无法抓取-HTTPS怎么办

 在接口测试中,置信很多人都遇到过 Android 高版本(Android7.0 以上)零碎无奈抓包的问题。 因为在测试过程中对剖析定位问题很不不便,所以就想找开发的同学帮忙,后果开发也说搞不定,那只能本人解决了。 问题剖析 问题起因剖析如下: 问题:Android6.0 及以下零碎能够抓包,而 Android7.0 及以上零碎不能抓包;起因:Android7.0+ 的版本新增了证书验证,所以 App 内不再像原来一样默认信赖用户的证书;参考网上材料失去如下解决方案: 计划一 在 Android 工程目录的 res 底下创立一个 xml 文件夹,而后在外部创立一个名为 “network_security_config.xml”的文件; 编辑 在 AndroidManifest 里的标签中,增加代码: 编辑 而后从新编译打包即可抓包,这对开发童鞋来说,也很不便。然而,因为测试的是企业微信小程序,想让企业微信的开发人员帮我这么干,几乎是白日做梦,更不用说平安等问题… 计划二 找一个低于 6.0 或者等于 6.0 版本的 Android 设施或者模拟器,即可解决。然而思考到:治标不治本,公司自身就没有这样的设施,再加上找了几个模拟器,都是 Android7.0 版本的,所以此计划,间接抉择放弃。 而后只好再去找开发,开发钻研了半天,后果过去通知我,我的 iOS 是能够抓包的啊,Android 的就不晓得了,一瞬间我都有点想掀桌子了… 只好再找测试开发同学征询解决方案: 应用计划一换个工具抓,例如 Fidder,或者 BurpSuite 等(这个尝试后发现还是不行)间接去 NG 那里拦挡,然而我须要抓取的有一部分是第三方的接口(后方曾经高能,此路不通)最初,还是有点不死心,本人持续搜寻各种材料,终于黄天不负有心人,找到了满足条件的最终解决办法。 最终解决方案 Charles + VirtualXposed + JustTrustMe 实现步骤 进入 Github 下载如下两个 Page VirtualXposed:GitHub - android-hacker/VirtualXposed: A simple app to use Xposed without root, unlock the bootloader or modify system image, etc.&nbsp;4JustTrustMe:GitHub - Fuzion24/JustTrustMe: An xposed module that disables SSL certificate checking for the purposes of auditing an app with cert pinning&nbsp;3第一步 ...

January 10, 2023 · 1 min · jiezi

关于软件测试:LR性能测试常见问题及处理方法五

在 《LR性能测试常见问题及解决办法(四)》的根底上追加。@TOC 17、谬误状态码:-50017.1、谬误景象-500 Internal Server Error服务器外部谬误,脚本运行进行。17.2、谬误剖析服务器碰到了意外状况,使其无奈持续回应申请。17.3、解决办法呈现此谬误是致命的,阐明问题很重大,须要从问题的呈现地位进行查看,此时须要此程序的开发人员配合来解决,而且产生的起因依据理论状况来定,测试人员无奈独自解决问题,而且应该尽快解决,以便于前面的测试。18、错误码:Error -2797918.1、谬误景象LoadRunner申请无奈找到:在录制Web协定脚本回放脚本的过程中,会呈现申请无奈找到的景象,而导致脚本运行进行。谬误景象:Action.c(41): Error -27979: Requested form not found [MsgId: MERR-27979]Action.c(41): web_submit_form highest severity level was "ERROR",0 body bytes, 0 header bytes [MsgId: MMSG-27178]"这时在tree view中看不到此组件的相干URL。18.2、谬误剖析所抉择的录制脚本模式不正确,通常状况下,基于浏览器的Web利用会应用"HTML-based script"模式来录制脚本;而没有基于浏览器的Web利用、Web利用中蕴含了与服务器进行交互的Java Applet、基于浏览器的利用中蕴含了向服务器进行通信的JavaScript/VBScript代码、基于浏览器的利用中应用HTTPS平安协定,这 时则应用"URL-based script"模式进行录制。18.3、解决办法关上录制选项配置对话框进行设置,在"Recording Options"的"Internet Protocol"选项里的"Recording"中抉择"Recording Level"为"HTML-based script",单击"HTML Advanced",抉择"Script Type"为"A script containing explicit"。而后再抉择应用"URL-based script"模式来录制脚本。19、谬误提醒:Web_find生效19.1、谬误景象LoadRunner不执行查看办法:在录制Web协定脚本中增加了查看办法Web_find,然而在脚本回放的过程中并没有执行。谬误景象:在脚本中插入函数Web_find,在脚本中设置文本以及图像的检查点,然而在回放过程中并没有对设置的检查点进行查看,即Web_find生效。19.2、谬误剖析因为查看性能会耗费肯定的资源,因而LoadRunner默认敞开了对文本以及图像的查看,所以在设置检查点后,须要开启查看性能。19.3、解决办法关上运行环境设置对话框进行设置,在"Run-time Settings"的"Internet Protocol"选项里的"Perference"中勾选"Check"下的"Enable Image and text check"选项。20、谬误提醒:回放时会呈现谬误,提醒进行脚本运行20.1、谬误景象LoadRunner回放Web Services协定脚本谬误:LoadRunner 8.0版本在录制Web Services协定的脚本时失常,但在回放时会呈现谬误,提醒进行脚本运行。谬误景象:利用LoadRunner 8.0版本来录制Web Services协定的脚本没有任何谬误提醒,回放脚本时会呈现如下谬误提醒"Error:server returned an incorrectly formatted SOAP response"。20.2、谬误剖析呈现此谬误的起因是LoadRunner8.0在录制Web Services协定的脚本时存在一个缺点:如果服务器的操作系统是中文的,VuGen会主动将WSDL文件的头改为<?xml version="1.0"encoding="zh_cn" ?>,所以才会有此谬误提醒。20.3、解决办法下载两个补丁,别离为"LR80WebServicesFPI_setup.exe"和"lrunner_web_ services_patch_1.exe"装置上即可。http://wenku.baidu.com/view/a...

January 10, 2023 · 1 min · jiezi

关于软件测试:一个简单的登录功能你真的会测试吗

前段时间看了《测试工程师全栈技术进阶与实战》一书,播种颇丰。书中刚开始是以一个登录性能开始的,这个例子十分具备代表性。说到这个登录性能,人人认为很简略,然而要设计好的测试用例,还是要费一番功夫的。把书中的这块的货色整顿了下,大略是这样的。 性能测试用例输出已注册的用户名和正确的明码,验证是否登录胜利;输出已注册的用户名和不正确的明码,验证是否登录失败,并且提示信息正确;输出未注册的用户名和任意明码,验证是否登录失败,并且提示信息正确;用户名和明码两者都为空,验证是否登录失败,并且提示信息正确;用户名和明码两者之一为空,验证是否登录失败,并且提示信息正确;如果登录性能启用了验证码性能,在用户名和明码正确的前提下,输出正确的验证码,验证是否登录胜利;如果登录性能启用了验证码性能,在用户名和明码正确的前提下,输出谬误的验证码,验证是否登录失败,并且提示信息正确;更多功能测试用例用户名和明码是否辨别大小写?页面上的明码框是否加密显示?后盾零碎创立的用户第一次登陆胜利时,是否提醒批改明码?遗记用户名和遗记明码的性能是否可用?前端页面是否依据设计要求限度用户名和明码长度?如果登陆性能须要验证码,单击验证码图片是否能够更换验证码?更换后的验证码是否可用?刷新页面是否会刷新验证码?如果验证码具备时效性,须要别离验证时效内和时效外验证码的有效性。如果用户登录胜利然而会话超时,持续操作是否会重定向到用户登录界面?不同级别的用户(如管理员用户和普通用户)登录零碎后的权限是否正确?页面默认焦点是否定位在用户名的输入框中?Tab和Enter等键是否能够失常应用?安全性测试用例验证存储在后盾的用户明码是否加密;验证用户明码在网络传输过程中是否加密;验证明码是否具备有效期,以及到期后是否提醒用户须要批改明码;不登录的状况下,在浏览器地址栏中间接输出登录后的URL,验证是否会重定向到用户登录界面;验证明码输入框不反对复制和粘贴;验证明码输入框输出的明码是否都能够在页面源码模式下查看;在用户名和明码的输入框中别离输出典型的“SQL注入攻打”字符串,验证零碎返回的页面;用户名和明码的输入框中别离输出典型的“跨站脚本攻打”字符串,验证零碎的行为是否被篡改;间断屡次登录失败的状况下,验证零碎是否会阻止后续的登录以应答暴力破解明码;同一用户在用一终端的多种浏览器上登录,验证登录性能的互斥性是否合乎设计预期;同一用户先后在多台终端的浏览器上登录,验证登录是否具备互斥性。性能压力测试用例验证单用户登录的响应工夫是否短于3s;验证单用户登录时,后盾申请数量是否过多;验证高并发场景下用户登录的响应工夫是否短于5s;验证高并发场景下服务器端的监控指标是否合乎预期;验证高集合点并发场景下,是否存在资源死锁和不合理的资源期待;同一时间大量用户间断登录和登出,验证服务器端是否存在内存泄露。兼容性测试用例不同浏览器下,验证登录页面的显示以及性能正确性;雷同浏览器的不同版本下,验证登录页面的显示以及性能正确性;不同挪动设施终端的不同浏览器下,验证登录页面的显示以及性能正确性;不同分辨率的界面下,验证登录页面的显示以及性能正确性。

January 10, 2023 · 1 min · jiezi

关于软件测试:有了这些软件测试面试话术offer想不拿到都难

软件测试是一个简单且重要的技术岗位,因而,大多数互联网企业在面试时,都会谨严看待每一个面试者。而,作为行将去进行面试测试人来说,想要在面试中,从容稳固地答复好面试官们提出的问题,后期的软件测试面试话术筹备就少不了。那么有哪些有用的软件测试面试话术能够用上呢?接下来跟着我的脚步一起来看看吧! 一、自我介绍自我介绍基本上是任何行业面试过程中必不可少的一个流程,你能够这样答复:面试官,上午/下午好。我是XXX,明天来面试贵公司的软件测试工程师岗位,接下来,我介绍一下我本人。我会Linux零碎操作和相干命令的应用,我的项目中搭建过测试环境。用过MySQL数据库,应用SQL语句进行数据查问。我会Python开发语言,能够配合Selenium的测试脚本编写。最近做过的一个我的项目是XXXXX管理系统,在其中负责XXXX模块的测试工作,他的次要性能是XXXX,设计和编写了XXX条用例,发现了XXX个bug。 我感觉我的性情比拟适宜做测试工作,仔细的我做测试是有肯定劣势的,而且我有很好的沟通、协调能力,当咱们测试和开发人员产生不统一的见解时,容易沟通,问题更容易解决。 二、面试官常见问题答复 1、你为什么要来到原来的公司?我心愿能取得一份更好的工作,如果机会降临,我会抓住。我感觉目前的工作,曾经达到高峰,即没有升迁机会。2、联合你以前的学习和工作教训,你认为如何做好测试?依据我以前的工作和学习教训,我认为做好工作首先要有一个良好的沟通,只有沟通无障碍了,才会有好的合作,才会有更好的效率。再一个就是技术肯定要过关,做测试要有足够的急躁,和一个良好的工作习惯,不懂的就要问,实时与共事沟通这样的话能力做好测试工作。 3、你对薪资的要求?软件测试行业曾经有10年,参加过xxx我的项目,对自动化、性能....因而,我心愿公司能依据我的状况和市场规范的程度,给我正当的薪水。 三、常被问到的技术问题技术问题是决定你是否能进入岗位的最初,倡议在正式面试前,提前对往期的一些面试真题进行理解,能够上网上查找,也能够进题库进行刷题,如一个培训机构下的收费面试题库——柠檬班软件测试题库,你就能够看看,各个阶段的软件测试面试题和答案都有,次要是收费! 以下为技术问题:1、怎么保障用例的品质,怎么保障编写的用例能笼罩所有场景?答复:首先,仔细分析需要,浏览需要文档,后期多和SE沟通,吃透需要,站到用户的角度多思考一些场景,保障用例的覆盖度;其次,在测试用例的设计中,应用比方等价类划分、边界值剖析以及谬误揣测法等多种测试用例设计办法追加测试用例,并组织用例评审,多汲取他人的意见,缩小脱漏;最初,通过技术手段监控覆盖率,应用jacoco进行代码覆盖率的验证,弄清具体笼罩了百分之多少,而后再从新补救测试用例设计的有余,保障测试覆盖率;2、登录的按钮不能点击,应如何排查问题?答复:1、前端没有响应用户点击事件,导致申请公布进来2、前端发动http申请,然而后端接口返回异样,前端捕捉异样之后没有解决3、网络异样,公布进来申请,然而前端也没有做出提醒4、内存不够导致横蛮卡死 3、fiddler如何抓包?答复:电脑端关上fiddler后,关上浏览器后,fiddler会主动开启本地代理,进行抓包,获取申请和参数。手机端须要在网络处进行设置,设置成登录fiddler的电脑的IP地址和8888端口,把fiddler作为代理服务器,连贯手机和fiddler后进行抓包…………作为测试人员,千万不要胆怯面试,只有把握好以上的面试技巧,还怕不能过面试?

January 10, 2023 · 1 min · jiezi

关于软件测试:一个简单的软件测试流程附带流程详解

该流程为笔者整顿的一个小型我的项目的测试流程,不代表测试的全副。更适宜于一些小公司的测试流程。仅供参考。 流程图 流程合成目标:本流动的用意负责人:负责执行本流动的角色参加人:配合执行本流动的角色进入准则:可能发展本流动所须满足的因素或条件输出:执行本流动须要应用的数据或文档流动:将本流动的输出转化为输入的一系列口头输入:本流动所产生的数据或文档实现准则:标记本流动实现的因素或条件1、设计用例目标:确保为发现至今未发现的缺点提供根据负责人:用例设计师参加人:主测人进入准则:《具体设计》评审通过输出:《需要规格说明书》《概要及具体设计》《业务逻辑流程图》《现场利用场景》流动:①根据输出文件使用设计办法设计用例; ②部门内对用例进行Review; 设计标准:①可读性高②笼罩全副需要点,思考到各边界值、异样条件 输入:测试用例实现准则:部门内Review通过2、评审用例目标:确保对需要规格场景覆盖率达到100%负责人:用例设计师参加人:主测人、开发代表、项目经理、利用工程师、测试经理进入准则:部门内Review通过输出:测试用例流动:①评审用例设计的构造是否清晰,是否无效对需要规格笼罩②是否从用户角度来设计测试场景和应用流程的用例③是否无效笼罩业务逻辑,对程序要求是否正当 输入:评审通过的用例实现准则:对需要规格和业务逻辑流程的覆盖率达到100%3、版本转测目标:严把转测入口,管制版本转测品质负责人:主测人参加人:主测人、测试代表、测试配合人,项目经理进入准则:部门内Review通过输出:转测单据流动:①测试人员核查转测单据的版本号是否否和立项要求②测试人员核查转测单据附件是否蕴含残缺的《研发自测试报告》《转测阐明》③测试人员核查转测单据是否填写性能形容,缺点修复状况 输入:转测单据实现准则:转测单据审核通过,不通过打回,从新转测审核。4、廓清范畴目标:确保笼罩批改点和危险点及影响范畴负责人:测试代表责任人:主测人、开发代表、项目经理进入准则:版本转测输出:《需要规格说明书》《业务逻辑流程图》《修复缺点清单及影响范畴》流动: ①基于需要规格及业务逻辑流程,剖析新增需要及修复缺点的影响范畴; ② 根据可能影响的模块,划分版本测试范畴,明确测试重点;输入: 版本测试范畴实现准则:我的项目干系人对版本测试范畴廓清统一5、制订打算目标:领导测试过程责任人:测试代表参加人:主测人、开发代表、项目经理进入准则:测试范畴廓清结束输出:我的项目里程碑打算流动:①明确范畴②布局工夫③设定策略 ④关联用例 输入:测试计划实现准则:项目组审核通过6、评估版本目标:确保版本具备可测试性负责人:主测人进入准则:版本转测输出:转测版本、开发自测报告、转测阐明文档测试流动:①核实输出文档是否残缺和正确;②抽检开发自测报告执行状况;③对转测版本进行冒烟测试;④冒烟测试包含自动化测试,手工重点功能测试 输入:转测版本是否具备可测试性实现准则:冒烟测试通过7、执行测试目标:发现问题负责人:主测人参加人:其余测试人员进入准则:转测版本具备可测试性输出:转测版本、测试计划流动:①按计划执行测试提交缺点;②反馈版本测试停顿和状况; 输入:缺点列表、产品危险、测试状况实现准则:用例执行率100%,且在测试最初一天主测全人力投入未发现重大及以上缺点。8、产品培训目标:产品应用和推广负责人:利用工程师参加人:利用工程师,前端技术人员进入准则:测试实现输出:《硬件新品培训文档》、《操作软件类培训文档》、《硬件程序包培训文档》、《原理性培训文档》流动:①硬件新品技术参数,操作,性能培训;②操作软件降级,操作,性能培训;③硬件程序包降级应用阐明; ④服务,软件实现原理阐明。 输入:《培训总结》实现准则:部门内Review通过9、编写报告目标:出现测试过程负责人:测试代表参加人:主测人进入准则:测试实现输出:测试过程所有输出、输入文件和过程数据流动:①记录整个测试过程和后果;②剖析过程数据和产品质量;③部门内对报告进行Review; 输入:《测试报告》实现准则:部门内Review通过10、公布评审目标:评审是否达到公布状态负责人:测试代表参加人:项目组相干干系人进入准则:《测试报告》部门内Review通过输出:《测试报告》和《公布评审表》流动:①评审过程品质; ②评审遗留缺点影响;③评审产品危险项影响; 输入:《评审意见表》实现准则:所有评审组成员签字确认能够完结测试11、反对现场目标:独立和帮助解决现场问题负责人:利用工程师参加人:研发共事、前端共事进入准则:前端反馈现场问题输出:现场问题根本信息流动:①通过信息剖析和独立解决问题; ②复现现场帮助开发解决问题; 输入:《现场问题解决办法和躲避措施》实现准则:问题闭环

January 10, 2023 · 1 min · jiezi

关于软件测试:面试秘籍初级软件测试面试会问什么看这里

随着互联网的一直倒退,企业对于IT方面的人才需求也越来越大,在谋求人才数量的同时,也重视人才品质。而面试就成为把握品质的拦门砖,因而,你想要走心仪的公司,那么你在面试中的体现将会间接决定你求职的成败。  所以,想要面试不失败,你就只有在面试前做好充沛的筹备,才可能对面试中的各种状况、各种问题应答自若。那么,在高级软件测试面试中,HR会问什么的问题呢?个别,咱们能够将问题分为两类:一是常见问题、二是技术问题。常见问题有:1、谈谈你职业规划?答复:我刚开始,会先相熟公司的产品和业务,而后把测试的本职工作做好,之后呢,为了进步测试和工作效率,会晋升本人的自动化测试技术,帮忙公司实现自动化测试,落地之后,缓缓倒退成为一位资深的测试工程师,为公司带来更多的价值。 2、为什么到职?答复:原来的工作与本人的职业规划不合,我想从事本人所学业余的工作;原来的工作曾经没有倒退空间了,我心愿能取得一份倒退空间更大的工作。3、你对加班的认识答复:如果是工作须要我会责无旁贷加班,能够全身心地投入工作。同时,我也会进步工作效率,缩小不必要的加班。 技术问题有: 1、做残缺个我的项目一共写多少条测试用例? 答案:根据本人我的项目的理论状况来答复。示例:不太记得具体数据了,我的项目总共是2000多条用例吧。最近的迭代版本写了200多条用例; 2、软件上线或者公布测试通过规范有哪些?软件发版前须要做哪些测试工作?答案:公布规范:1.须要笼罩的测试用例都测试实现了,得出覆盖率,依照我的项目要求来比对覆盖率;2.查看残余的bug数量,也是依照我的项目要求来,比方我的项目要求残余bug不能超过20个,那就不能留新和从新关上的bug超过这个数字;3.还要查看残余bug的重大水平,个别要害和阻断剂级别的bug会影响用户应用的不能剩下;公布前测试要做的工作:1.写测试报告,评估测试品质:包含bug数量和级别,看是否达到公布规范;2.个别还要相干的人员做一个验收测试。 3、如果有一天你的工作提前完成,领导十分开心,他立即给你安顿了别的工作要你当天实现。你会怎么做? 答案:领导安顿别的工作是对我工作能力的必定,但要当天实现,这个须要先去评估这个工作的工作量,如果当天能实现,那就回复领导“没问题,上班前实现”;如果当天感觉实现不了,就回复领导“尽量实现,下班前会汇报工作进度” 以上技术问题仅是极少局部,倡议大家在做刷题筹备时,找好足够的面试真题,给你们举荐一个好去处——题库,柠檬班软件测试题库外面蕴含有高级功能测试、自动化测试、性能测试等各个阶段的面试真题3千多道,并且每题都设有答案,最最要害的是“收费”!!! 

January 9, 2023 · 1 min · jiezi

关于软件测试:测试面试-一道大厂算法面试真题你能答上来吗附答案

 时光飞快,眨眼又到一年年底! 年底其实是跳槽换坑的绝佳机会,毕竟能够「年前面试,年后入职」,而且面试越早,好坑位较多,可抉择的余地也较大。倡议有换工作动向的测试同学能够多发发简历,多找找面试机会的。哪怕为明年的金三银四(人才流动顶峰)积攒点面试教训,都是极好的。 最近霍格沃兹测试学院学员 @ZZ 同学就去挑战了某大厂测试开发岗位。尽管没有面试胜利,但也收(shen)获(shou)满(ci)满(ji)。上面就是他的面试教训分享,一起来康康吧! 测试开发考查范围广 面试大厂测开岗位,最大的感触就是 —— 难!!! 这里凭记忆简略列举了这次技术面试考核重点(范畴很广,发问很多): Linux、Shell、Redis、MQ、Kakfa、ELK、Selenium、TestNg、Jenkins、Vue 生命周期、VueX、Vuerouter … 根本每一个技能点都会出一道题,让你剖析并给出本人的答案。另外,除了技术根底考核,也会着重问我的项目实战经验。 面试完不禁汗颜 :当初大厂测试开发考查范畴这么广的吗?年薪 35W+ Offer 挑战的确不小!还是要持续好好学习,夯实根底,筹备好再来! 一道算法面试题,试试看? 上面是这次面试的一道算法题,看起来不是很难,然而在面试中,难免会有点缓和,做起来还是有拍板大。同为测试的你,须要花几分钟解答呢? 本文也汇总整顿了霍格沃兹测试学院同学的一些答案供参考(Python/Java/Shell 版本都有),欢送在留言区留下你的答案! 【原题要求】:返回一个 IP 数组,并且按 IP 最初一位排序返回。(编程语言随便,只须要可能正确排序返回即可) 编辑 参考答案 Shell 版本 来自@Yvan: 编辑 来自@LensAclrtn: 编辑 来自网友@warmPhoto: 编辑 Python 版本 来自@Ronnie浩浩: 编辑 来自@天马: 编辑 来自@坏蛋: 编辑 编辑 来自@坏蛋: 编辑 来自@Nobita: 编辑 编辑 Java 版本 来自@小鸣: public void test8(){ / string="192.0.0.1?!289.0.0.1!0.0.0.0!192.163.10.28?192.0.0.1" 要求:返回一个IP数组,并并且按ip最初一位排序返回。 */ String ip_str = "192.0.0.1?!289.0.0.1!0.0.0.0!192.163.10.28?192.0.0.1"; String ip = "(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)”\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)"; Pattern pattern = Pattern.compile(ip); Matcher matcher = pattern.matcher(ip_str); List<String> list = new ArrayList<String>(); while(matcher.find()){ String s=matcher.group(); list.add(s); } Collections.sort(list, new Comparator<String>() { public int compare(String o1, String o2) { return o1.split("\.")[3].compareTo(o2.split("\.")[3]); // return 0; } }); for(String ip1: list){ System.out.println(ip1); } } ...

January 6, 2023 · 1 min · jiezi

关于软件测试:测试开发基础-Python-算法与数据结构面试题系列一附答案

工夫复杂度问题已知 AList = [1, 2, 3],BSet = {1, 2, 3} (1)从AList和BSet中查找4,最坏工夫复杂度哪个大?(2)从AList和BSet中插入4,最坏工夫复杂度哪个大? 答: 对于查找,列表和汇合的最坏工夫复杂度都是O(n),所以一样的。 列表操作插入的最坏工夫复杂度为o(n), 汇合为o(1),所以Alist大。set是哈希表所以操作的复杂度基本上都是o(1)。 用 Python 实现一个二分查找的函数答: n = len(arr) left = 0 right = n - 1 while left <= right : mid = (left + right) // 2 if arr[mid] < target: left = mid + 1 elif arr[mid] > target: right = mid - 1 else : print(f"index:{mid},value:{arr[mid]}") return True return False if name == '__main__': l = [1, 3, 4, 5, 6, 7, 8] binary_search(l, 8) ...

January 6, 2023 · 3 min · jiezi

关于软件测试:软件测试面试-Python-算法与数据结构面试题系列二附答案

排序实现有一组“+”和“-”符号,要求将“+”排到右边,“-”排到左边,写出具体的实现办法。 答: 如果让+等于 0,-等于 1 不就是排序了么 from collections import deque from timeit import Timer s = "++++++----+++----" # 办法一 def func1(): new_s = s.replace("+", "0").replace("-", "1") result = "".join(sorted(new_s)).replace("0", "+").replace("1", "-") return result # 办法二 def func2(): q = deque() left = q.appendleft right = q.append for i in s: if i == "+": left("+") elif i == "-": right("-") # 办法三 def func3(): data = list(s) start_index = 0 end_index = 0 count = len(s) while start_index + end_index < count: if data[start_index] == '-': data[start_index], data[count - end_index - 1] = data[count - end_index - 1], data[start_index] end_index += 1 else : start_index += 1 return "".join(data) if name == '__main__': timer1 = Timer("func1()", "from main import func1") print("func1", timer1.timeit(1000000)) timer2 = Timer("func2()", "from main import func2") print("func2", timer2.timeit(1000000)) timer3 = Timer("func3()", "from main import func3") print("func3", timer3.timeit(1000000)) # 1000000 测试后果 # func1 1.39003764 # func2 1.593012875 # func3 3.3487415590000005 # func1 的形式最优,其次是 func2 ...

January 6, 2023 · 5 min · jiezi

关于软件测试:软件测试基于-JMeter-完成-Dubbo-接口的测试

JMeter 默认是不反对 Dubbo 接口测试的,然而咱们能够通过拓展的插件或 jar 包实现此性能。 JMeter 插件拓展 1.1 插件下载 测试 Dubbo,咱们须要下载 Dubbo 的插件,在 Apache 的 Dubbo 插件 GitHub 中能够找到:https://github.com/thubbo/jme... 3 点击进入,这里咱们抉择以后的最新版本 2.7.8 进行下载。 1.2 插件装置 插件下载好后只须要将 jar 包放入到 jmeter 的 lib 下的 ext 文件夹即可。 因为我的 JMeter 是应用 Mac 的 Homebrew 装置的,所以我的门路为 /usr/local/Cellar/jmeter/5.3_1/libexec/lib/ext,具体的依据本人的装置门路寻找即可,如下能够看到我的 jar 包已放入。 % pwd/usr/local/Cellar/jmeter/5.3_1/libexec/lib/ext% ls | grep jmeter-plugins-dubbo-2.7.8-jar-with-dependencies.jarjmeter-plugins-dubbo-2.7.8-jar-with-dependencies.jar 1.3 重启 JMeter 重启 Jmeter 后再采样器可,以看到 Dubbo Sample 的存在。 测试接口筹备 这里在本地筹备好了一个 Dubbo 的测试 demo 供演示应用,provider的办法如下,间接调用办法,返回一个用户信息列表: public class UserServiceImpl implements UserService { @Overridepublic List<UserAddress> getUserAddressList(String userId) {UserAddress userAddress1 = new UserAddress(1, "杭州市西湖区", "1", "Tester1", "12345678", "Y");UserAddress userAddress2 = new UserAddress(2, "杭州市余杭区", "2", "Tester2", "12345678", "N");return Arrays.asList(userAddress1, userAddress2);}} ...

January 6, 2023 · 1 min · jiezi

关于软件测试:软件测试-Dubbo-接口测试原理及多种方法实践总结

1、什么是 Dubbo? Dubbo 最开始是利用于淘宝网,由阿里巴巴开源的一款优良的高性能服务框架,由 Java 开发,起初奉献给了 Apache 开源基金会组织。 上面以官网的一个阐明来理解一下架构的演变过程,从而理解 Dubbo 的诞生起因: 繁多利用架构 当网站流量很小时,只需一个利用,将所有性能都部署在一起,以缩小部署节点和老本。此时,用于简化增删改查工作量的数据拜访框架(ORM)是要害。 垂直利用架构 当访问量逐步增大,繁多利用减少机器带来的加速度越来越小,晋升效率的办法之一是将利用拆成互不相干的几个利用,以晋升效率。此时,用于减速前端页面开发的 Web 框架(MVC)是要害。 分布式服务架构 当垂直利用越来越多,利用之间交互不可避免,将外围业务抽取进去,作为独立的服务,逐步造成稳固的服务中心,使前端利用能更疾速的响应多变的市场需求。此时,用于进步业务复用及整合的分布式服务框架(RPC)是要害。 流动计算架构 当服务越来越多,容量的评估,小服务资源的节约等问题逐步浮现,此时需减少一个调度核心基于拜访压力实时治理集群容量,进步集群利用率。此时,用于进步机器利用率的资源调度和治理核心(SOA)是要害。 2、Dubbo 架构简介 Dubbo 比拟有特点的中央就是这个注册核心,平时咱们测试较多的 HTTP 接口,间接申请接口,调用后端服务即可;而 Dubbo 是要先走注册核心获取服务的地位,上面来举个现实生活中的例子来阐明。 事实举例 好比大家平时约敌人一起进来吃饭,据说川菜馆“赠李白”不错,而后须要找这家饭店在哪(用小蓝或小黄App),晓得了具体的地址才登程,至于是走路,打车还是骑车,就随便了。 这里 App 就相当于注册核心(Registry),咱们这群吃货就是消费者(Consumer),商家属于生产者(Provider)。商家把本人的信息注册在 App 上,消费者依据 App 查问到商家的信息,再依据信息找到商家进行生产。 2.1、Zookeeper 简介 之前常常有小伙伴问我 zk 干啥的?怎么用?上面就来简略理解一哈: ZK,全称就是zookeeper,是 Apache 软件基金会的一个软件我的项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。 上面的图示也能够清晰的阐明zk的部署和工作的一些形式(具体的技术细节需要的话能够针对zk专门搜寻学习): Leader:集群工作的外围,事务申请的惟一调度和解决者,保障事务处理的程序性。对于有写操作的申请,需对立转发给Leader解决。Leader需决定编号执行操作。 Follower:解决客户端非事务申请,转发事务申请转发给Leader,参加Leader选举。 Observer观察者:进行非事务申请的独立解决,对于事务申请,则转发给Leader服务器进行解决.不参加投票。 3、什么是 Dubbo 接口? 所谓的 Dubbo 接口,其实就是一个个 Dubbo 服务中的办法,而测试 Dubbo 接口就相当于咱们测试人员充当消费者或者发明消费者去"生产"这个办法。 具体的形式有很多,代码、工具、命令皆可,在接下来的内容中来一一演示。 4、Dubbo 接口测试(发明消费者) 以下我将以本地的一个简略的 Dubbo 服务 demo 为例,演示 Dubbo 测试的各种办法。 ...

January 6, 2023 · 4 min · jiezi

关于软件测试:软件测试-电商业务的性能测试一-必备基础知识

  编辑 1.1 测试步骤总览 需要剖析与测试设计(性能需求指标+业务模型拆解) 测试数据筹备和结构(基于模型的数据筹备) 性能指标预期(性能需求指标) 发压工具配置及脚本编写(压力策略) 测试过程(预计的前置筹备过程和压测工夫点布局) 后果剖析与测试报告 1.2 测试模型剖析 如下的测试模型来简略的阐明测试中须要关注的点和测试的目标 编辑 字段阐明 1、横轴 : 代表并发数,也就对应着Jmeter外面的线程数 2、Utizilation(U) :资源利用率 3、Throughput(X): 吞吐量,对应QPS或TPS 4、ResponseTime® :响应工夫 拐点 剖析: 第一条虚线处的拐点代表着随着并发数的减少,资源利用率(CPU资源等)和吞吐量也在随同着递增, 这个时候咱们的响应工夫有小幅度的减少,然而在可承受的范畴之内;在这个点是做容量布局最好的参考点 第二条虚线处的拐点示意随着并发数的持续减少,系统资源曾经达到了瓶颈,吞吐量开始显著降落,响应工夫会大幅减少,也就是说曾经达到了性能的瓶颈,申请队列开始挤压,这个时候曾经重大影响用户体验或者有零碎解体的危险。 编辑 2.1 需要剖析与测试设计 此处从性能需求指标与业务模型拆解两方面着手, 1、指标场景分类: 新上线零碎性能测试:要求容量测试,零碎最大容量系统升级类性能测试:和基线版本比照,性能不降落新零碎性能优化测试:随同调优指标的性能测试注:在前面的演示中,会以新零碎上线的容量测试为例,指标为获取零碎最大容量 字段阐明:基准测试:见下图,我的了解就是性能测试,找到最优的QPS(TPS)点 编辑 容量测试 :见下图,我的了解为压力测试,在达到性能瓶颈后持续加压,测试零碎的最大承载量 编辑 新零碎想要确定测试基准,就须要拿到数据,而产品个别是不会间接通知咱们QPS 的,产品会通知咱们 PV/UV 天。 依据 PV 、UV 再联合业务场景来计算确认咱们的测试需要;将其转化为小时或分钟,或秒;另外业务场景可能会几种在某个时间段,比方工作日的8个小时工夫: UV :或者外卖产品则集中在午饭和晚饭的2个小时时间段,如果UV 为1000w/天,那么顶峰时段占了总用户数的80%: 1000w 80% / (43600) = 每秒的并发用户数 PV :PV 能够间接对应到QPS指标,好比一个电商产品,产品别离给出了首页、商品页、订单页的PV,便可依此来进行性能测试的基准设计。如果粗略的按24小时算QPS的话就是QPS = PV(天)/24/3600 2、依据具体的性能测试需要,确定测试类型以及压测的模块(web/mysql/redis/零碎整体) 3、后期要与相干人员充沛沟通,初步确定压测计划及具体性能指标 4、QA实现性能测试设计后,需产出测试计划文档发送邮件到项目组,并且再次与相干人员沟通(或者组织性能测试评审),确认是否满足需要 2.2、测试数据筹备和结构 数据的筹备能够如下几点: 1、接口申请参数:本人结构、日志获取、高低关联 本人结构&nbsp;:本人抓包等,这个有个问题就是后端可能有缓存而造成对理论压力水平的影响日志获取:举荐罕用,通过日志或数据库获取大批量的数据而后打散例如,咱们的申请是通过Nginx转发的,那么能够通过Nginx的日志来获取申请数据,现有如下的log: 编辑 当初咱们能够利用Linux 三剑客中的awk 命令配合上排序的shell命令对log进行提取过滤,找出访问量最高的申请: $ cat access.log | awk '{print $7}' | sort | uniq -c | sort -nr | head -15 ...

January 6, 2023 · 1 min · jiezi

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

 一、利用背景 因为本章的内容是应用jq工具配合实现,因而在开始局部会先花肯定的篇幅介绍jq机器应用,如果读者曾经相熟jq,能够间接跳过这部分。 先来看利用场景,App 常常会有一些信息展现的列表页,比方商家的菜品、股票的公司、文章的列表展现等,例如上面这样: 编辑 菜品不够吃的话~不是,是菜品数量较少不够测试的量,如果咱们想要测试几百个菜品时,会不会在刷的时候是否有性能影响,展现是否失常,列表展现的边界值测试等; 而要测就得有数据展现,这个时候要是通过后端去找或者造这么多数据是有点麻烦的,其实咱们这个测试的测试点就是要测试前端页面的展现和性能,只有有这部分数据就能够,无所谓数据是否实在从数据库得来。 这个时候能够就能够利用mock的伎俩,对这种大数据进行等价类的生成,使前端能够拿到这类数据即可,而Charles正是咱们实现手工mock测试的利器之一! 二、jq 简介 2.1 jq 的概述与用处 按常规,先看官网对jq的解释: jq 官网地址:https://stedolan.github.io/jq/ 编辑 大略意思就是轻量灵便的Json解决命令行。 用处 说到这大略有些人有点感觉它能用来做什么了,为啥手工mock要应用jq了?没错!要用它来解决接口返回的json数据以达到mock的成果。 2.2 jq 的下载安装 Mac:Mac还是判若两人的简略(香~),装了Homebrew&nbsp;的话一条命令brew install jq即可其余零碎:jq 的官网很贴心,给出了各个系统的下载方式及其相干所需下载工具的链接,具体的就查看官网吧,链接如下https://stedolan.github.io/jq... 编辑 2.3 jq 的根本应用 根本过滤&nbsp;.最简略的过滤,.这是一个过滤器,它承受输出,并将其不变地生成为输入。 简略的说就是原样输入来:     $ echo '{"jq": "jqTest"}' | jq '.'    {      "jq": "jqTest"    } 对象过滤&nbsp;.key、.key1.key2、.["key"]能够通过.key或.key1.key2的形式来获取对应的value,这样的形式是不是有点像jsonpath?     $ echo '{"jq": {"jqTest": 1} }' | jq '.jq'    {      "jqTest": 1    }     $ echo '{"jq": {"jqTest": 1} }' | jq '.jq.jqTest'    1     $ echo '{"jq": {"jqTest": 1} }' | jq '.["jq"]'    {      "jqTest": 1    } 索引过滤&nbsp;.key[index]、.key[ startIndex: endIndex]其实就是在对象过滤的根底上加个索引而已,学过编程的都懂的~ 左闭右开,当然是针对数组的操纵,这里就以一种对象过滤写法根底上举例子, .key[index]     $ echo '{"jq": ["jqTest",1] }' | jq '.jq[0]'    "jqTest"  .key[ startIndex: endIndex]     $ echo '{"jq": ["jqTest",1] }' | jq '.jq[0:1]'    [      "jqTest"    ] 对象构建&nbsp;{}&nbsp;、[]能够利用{} 、[]构建新的对象(数组)     $ echo '{"jq": ["jqTest",1] }' | jq '{ newJq: .jq[1], }'    {      "newJq": 1    } 如果其中一个表达式有多个后果,那么输入也会产生多个后果     $ echo '{"user":"stedolan","titles":["JQ Primer", "More JQ"]}' |jq '{user, title: .titles[]}'    {      "user": "stedolan",      "title": "JQ Primer"    }    {      "user": "stedolan",      "title": "More JQ"    } 如果key是不存在的,value将会赋值为null     $ echo '{"user":"stedolan","titles":["JQ Primer", "More JQ"]}' |jq '{user111, title: .titles[]}'    {      "user111": null,      "title": "JQ Primer"    }    {      "user111": null,      "title": "More JQ"    } 如果再键的四周加括号就意味着它将作为表达式进行计算。     $ echo '{"user":"stedolan","titles":["JQ Primer", "More JQ"]}' |jq '{(.user): .titles[]}'    {      "stedolan": "JQ Primer"    }    {      "stedolan": "More JQ"    } 其余常见用法:计算         echo "10" | jq '(.+2)*5'        echo null | jq '{a: 1} + {b: 2} + {c: 3} + {a: 42}'        echo '["xml", "yaml", "json"]' | jq '. - ["xml"]'        echo '{"a":5}' | jq ‘.a+=10'     获取长度         echo '[[1,2], "string", {"a":2}, null]' | jq '.[] | length’    数组运算这里要特地介绍一下数组的运算操作,也是上面实现目标的伎俩 jq 对于数组能够有并集(’+’)和差集(’-’)的操作: 并集('+'):有数组a,b; a+b就会失去一个蕴含所有a,b数组元素的新数组:         $ echo '{"a": [1,2,3] ,"b": [3,4,5]}' | jq '.a+.b'        [          1,          2,          3,          3,          4,          5        ]    差集('-'):有数组a,b; a-b就会失去一个只蕴含a中元素,不蕴含b中元素的新数组: ...

January 6, 2023 · 1 min · jiezi

关于软件测试:软件测试-白盒测试方法论

白盒测试又称为构造测试、通明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计办法。盒子指的是被测试的软件,白盒指的是盒子是可视的,即分明盒子外部的货色以及外面是如何运作的。"白盒"法全面理解程序外部逻辑构造,对所有逻辑门路进行测试。"白盒"法是穷举门路测试。在应用这一计划时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。 白盒测试通过查看软件外部的逻辑构造,对软件中的逻辑门路进行笼罩测试。在程序不同中央设立检查点,检查程序的状态,以确定理论运行状态与预期状态是否统一。 白盒测试的度量依据待测产品的外部实现细节来设计测试用例。白盒测试的执行伎俩能够涵盖单元测试、集成测试。个别应用代码覆盖率作为白盒测试的次要度量指标。 代码覆盖率常见概念语句笼罩:每行代码都要笼罩至多一次(最根底,不能保障残缺度)断定笼罩:断定表达式的虚实至多笼罩一次断定/条件笼罩:断定笼罩与条件笼罩都必须笼罩条件组合笼罩:断定表达式中的所有条件组合都须要笼罩分支笼罩:控制流中的每条边都要被笼罩一次门路笼罩:所有的门路都要尽量笼罩指令笼罩:一行代码会被编译为多条指令,尽可能的笼罩所有指令办法笼罩:每个办法至多要被笼罩一次类笼罩:每个类至多被笼罩一次覆盖率统计的工具EMMA:是一个开源、面向 Java 程序的测试覆盖率收集和报告工具。它通过对编译后的 Java 字节码文件进行插桩,在测试执行过程中收集覆盖率信息,并通过反对多种报表格局对覆盖率后果进行展现。Cobertura:是一款优良的开源测试覆盖率统计工具,它与单元测试代码联合,标记并剖析在测试包运行时执行了哪些代码和没有执行哪些代码以及所通过的条件分支,来测量测试覆盖率。除了找出未测试到的代码并发现 bug 外,Cobertura 还能够通过标记无用的、执行不到的代码来优化代码,最终生成一份好看详尽的 HTML 覆盖率检测报告。Jacoco:是一个开源的覆盖率工具,针对 Java 语言,是当初最风行的 Java 覆盖率统计工具。流程笼罩流程笼罩用门路覆盖率表白,是利用代码执行流代表流程。执行时须要对流程进行裁剪取得一个适宜业务的小规模的业务子集。 流程覆盖率 = 测试通过的门路 / 业务子集门路 精准化测试精准化测试是一套计算机测试辅助剖析零碎。精准化测试的外围组件蕴含软件测试示波器、用例和代码的双向追溯、智能回归测试用例选取、覆盖率剖析、缺点定位、测试用例聚类分析、测试用例主动生成零碎。这些性能残缺的形成了精准化测试技术体系。 精准化测试强调代码调用链与黑盒测试用例之间的关联。能够依据代码变更主动剖析影响范畴。比如说研发批改了 1 行代码,性能用例有 1000 条,其实很多用例和这 1 行代码是没有关系的。精准化测试能够判断出有哪些测试用例和改变的这 1 行代码有关系。比如说这 1000 条用例当中,只有 20 条和批改的代码有关系。那么测试的范畴能够大大缩减,测试效率就会进步。 精准化测试还有一个很有价值的作用,就是在黑盒测试过程中,借助代码流程覆盖率领导测试流动。比方在黑盒测试完结之后,察看代码的笼罩状况,发现有一些门路没有被笼罩到,这个时候就须要持续补充用例,始终到代码流程能够很全面的笼罩。这是零碎测试与底层白盒测试相结合的一个办法。 精准化测试还能够用线上数据推导无效的测试用例。比方测试一个零碎,这个零碎是有大量历史数据的。这时就能够提取其中一段时间的数据,应用这些数据持续测试这个零碎。测试实现后统计这些测试数据中哪些数据对于测试覆盖率的减少是有帮忙的。能够应用大数据的办法,主动提取出对于测试覆盖率有增益成果的数据。这种办法能够看出哪些测试数据笼罩的代码是雷同的。这些测试数据其实就属于同一个汇合,在这种汇合中,只取一个测试数据就能够。利用线上数据反推无效测试用例也是精准化测试的重要作用。 因为精准化测试须要对底层白盒测试相当理解,对于测试人员要求比拟高,所以当初实现起来有肯定的难度。目前行业中还没有开源的精准化测试的工具。现阶段只能通过 Jacoco 等覆盖率统计的工具,本人去实现精准化测试平台。

January 6, 2023 · 1 min · jiezi

关于软件测试:软件测试面试时掌握这些回答技巧让你获得更高薪酬

置信很多人都碰到过因为面试前筹备有余而导致面试失败的工夫吧,所以,为了进步面试成功率,帮忙大家尽快拿到高薪offer,我给你们总结了几个方面的软件测试面试技巧,心愿对行将加入软件测试面试的你有所帮忙。  一、自我介绍面试过程中肯定要加快语速,做到条理清晰。特地是做自我介绍时,能够适当多介绍本人会什么,有哪些重要教训,取得哪些问题(最好有数据)等,时长管制在1~2分钟即可,如:你好,我叫xx,毕业于xxx,目前有两年的功能测试教训。最近的一份工作是xxx公司,次要参加APP零碎测试,负责某APP某方面的功能测试,次要使用xxx等常见的黑盒测试方法。  二、常见问题1、你的测试职业倒退是什么?测试教训越多,测试能力越高。所以我的职业倒退是须要工夫积攒的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年积攒测试教训,按如何做好测试工程师的要点去要求本人,不断更新本人改过本人,做好测试工作。 2、为什么到职?感觉工作没有学习倒退的空间,本人想在面试工作的相干产业中多加学习,或是前一份工作与本人的生涯规划不合等等,答复的答案最好是踊跃侧面的。 3、冀望薪资是多少?我上一份工作的工资是8000,老板给我涨薪到10000留我,不过我感觉贵公司的倒退空间更大,所以心愿的薪资在9000-10000。 三、技术问题 这是面试中的重要环节,作为面试者,如果对这一环节的面试没得信息,那就倡议你在面试前提前刷题背答案做筹备,这里有一个收费的刷题小程序柠檬班软件测试你题库你们能够试试,外面蕴含了功能测试、自动化测试、性能测试……各个软件测试阶段的最新面试题及答案。 之后你就能够长期抱佛脚将外面的面试进行相熟和背诵,这样即便到了面试,面试官问题的问题不是截然不同,但也能依据所刷过的题目整顿出适合的答案进行答复。 其实,退职场中,不论是面试还是工作,咱们都须要解决各种各样的问题,有的简略,有的麻烦。但只有咱们认真去做了,就会有回报的。  

January 6, 2023 · 1 min · jiezi

关于软件测试:buff加持不花钱就能用的软件测试面试题库绝对是面试前必备

软件测试面试不同于其余岗位的面试那样,询问一些常见问题即可过关,作为技术类岗位,在进行软件测试面试时,面试官个别会分两个方向进行发问,一个是常见问题,另一个则是软件测试岗位相干技术问题。  如果说前者齐全不须要筹备,全靠本人临场发挥就能应酬过来的话,那后者就须要提前进行筹备,如刷面试题,背上往期面试题答案,毕竟能不能进入到本人心仪的岗位,全靠技术题答复得如何。 而既然须要刷题,那必定就少了软件测试面试题库的存在。明天,我就依据理论状况,为大家分享一个能够免费刷软件测试面试题的题库小程序以及上局部常问的面试题,心愿对行将进行软件测试面试的你们有所帮忙!一、软件测试面试题库柠檬班软件测试题库,是个小程序模式的,在手机上搜搜就能够找到了,外面的面试题目都是有设置答案的,应用时,能够本人先答题,再对答案,当然也能够间接就背诵答案,但绝对后者,我更倡议你们先本人答。 二、软件测试面试题及答案 问题:软件品质个性是指软件的哪些?答案:功能性、可靠性、易用性、效率、可维护性和可移植性 问题:web测试做了多久? web测试方法? 答案:根据理论公司我的项目状况来答复,比方:公司公司我的项目次要以web为主,所以在公司web测试有2年,web测试,次要笼罩性能、界面,采纳的办法次要以黑盒测试为主;另外可能也须要进行兼容性测试、性能测试。 问题:晓得restful格调吗?怎么做的 答案:理解--- restful 架构设计格调简洁档次--所有皆资源--测试方法接口一样get post patch更新-- delete删除;--接口测试方法。  问题:uat测试和预生产测试的内容? 答案:UAT测试-验收测试,用于用户体验的环境,实在用户参加的测试;预生产测试-跟生产环境不定期同步,放弃和生产环境的设置、数据─致性的环境。内部测试组负责测试,更新新版本到正式环境之前走下基本功能的测试。  好了,以上就是给大家分享的一个收费软件测试面试题库以及常见技术性面试问题和答案,有须要记得珍藏哟!         

January 5, 2023 · 1 min · jiezi

关于软件测试:软件测试-App测试时常用的adb命令你都掌握了哪些呢

 adb 全称为 Android Debug Bridge(Android 调试桥),是 Android SDK 中提供的用于治理 Android 模拟器或真机的工具。 adb 是一种功能强大的命令行工具,可让 PC 端与 Android 设施进行通信。adb 命令可执行各种设施操作,例如装置和调试利用。 adb组成 采纳了客户端-服务器(C/S)模型,包含三个局部: 编辑 adb Client:运行在电脑上,能够在命令行中运行 adb 命令来调用该客户端。Client 实质上就是 Shell,用来发送命令给 Server。发送命令时,首先检测 PC 上有没有启动 Server,如果没有 Server,则会主动启动一个,而后将命令发送到 Server。adb Server:运行在电脑上的后盾过程,用于治理客户端与运行在模拟器或真机的守护过程通信。adb Daemon:守护过程作为一个后盾过程在 Android 设施或模拟器零碎中运行。它的作用是连贯 adb 服务端,并且为运行在主机上的 adb 客户端提供一些服务。adb工作原理 编辑 当 adb 客户端启动时,客户端会先查看 adb 服务端是否启动。如果没有,会先启动服务端过程。adb 服务端在启动后,会与 5037 端口绑定,并监听 adb 客户端收回的命令。 而后服务端会与所有正在运行的 Android 设施建设连贯。它通过扫描 5555 到 5585 之间的奇数号端口查找 Android 设施。服务端一旦发现 Android 设施上的 adb 守护过程在运行,便会与相应的端口建设连贯。每个 Android 设施都应用一对端口,偶数端口用于控制台连贯,奇数端口用于 adb 连贯。 ...

January 4, 2023 · 3 min · jiezi

关于软件测试:软件测试-白盒测试方法论

白盒测试又称为构造测试、通明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计办法。盒子指的是被测试的软件,白盒指的是盒子是可视的,即分明盒子外部的货色以及外面是如何运作的。"白盒"法全面理解程序外部逻辑构造,对所有逻辑门路进行测试。"白盒"法是穷举门路测试。在应用这一计划时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。 白盒测试通过查看软件外部的逻辑构造,对软件中的逻辑门路进行笼罩测试。在程序不同中央设立检查点,检查程序的状态,以确定理论运行状态与预期状态是否统一。 白盒测试的度量依据待测产品的外部实现细节来设计测试用例。白盒测试的执行伎俩能够涵盖单元测试、集成测试。个别应用代码覆盖率作为白盒测试的次要度量指标。 代码覆盖率常见概念语句笼罩:每行代码都要笼罩至多一次(最根底,不能保障残缺度)断定笼罩:断定表达式的虚实至多笼罩一次断定/条件笼罩:断定笼罩与条件笼罩都必须笼罩条件组合笼罩:断定表达式中的所有条件组合都须要笼罩分支笼罩:控制流中的每条边都要被笼罩一次门路笼罩:所有的门路都要尽量笼罩指令笼罩:一行代码会被编译为多条指令,尽可能的笼罩所有指令办法笼罩:每个办法至多要被笼罩一次类笼罩:每个类至多被笼罩一次覆盖率统计的工具EMMA:是一个开源、面向 Java 程序的测试覆盖率收集和报告工具。它通过对编译后的 Java 字节码文件进行插桩,在测试执行过程中收集覆盖率信息,并通过反对多种报表格局对覆盖率后果进行展现。Cobertura:是一款优良的开源测试覆盖率统计工具,它与单元测试代码联合,标记并剖析在测试包运行时执行了哪些代码和没有执行哪些代码以及所通过的条件分支,来测量测试覆盖率。除了找出未测试到的代码并发现 bug 外,Cobertura 还能够通过标记无用的、执行不到的代码来优化代码,最终生成一份好看详尽的 HTML 覆盖率检测报告。Jacoco:是一个开源的覆盖率工具,针对 Java 语言,是当初最风行的 Java 覆盖率统计工具。流程笼罩流程笼罩用门路覆盖率表白,是利用代码执行流代表流程。执行时须要对流程进行裁剪取得一个适宜业务的小规模的业务子集。 流程覆盖率 = 测试通过的门路 / 业务子集门路 精准化测试精准化测试是一套计算机测试辅助剖析零碎。精准化测试的外围组件蕴含软件测试示波器、用例和代码的双向追溯、智能回归测试用例选取、覆盖率剖析、缺点定位、测试用例聚类分析、测试用例主动生成零碎。这些性能残缺的形成了精准化测试技术体系。 精准化测试强调代码调用链与黑盒测试用例之间的关联。能够依据代码变更主动剖析影响范畴。比如说研发批改了 1 行代码,性能用例有 1000 条,其实很多用例和这 1 行代码是没有关系的。精准化测试能够判断出有哪些测试用例和改变的这 1 行代码有关系。比如说这 1000 条用例当中,只有 20 条和批改的代码有关系。那么测试的范畴能够大大缩减,测试效率就会进步。 精准化测试还有一个很有价值的作用,就是在黑盒测试过程中,借助代码流程覆盖率领导测试流动。比方在黑盒测试完结之后,察看代码的笼罩状况,发现有一些门路没有被笼罩到,这个时候就须要持续补充用例,始终到代码流程能够很全面的笼罩。这是零碎测试与底层白盒测试相结合的一个办法。 精准化测试还能够用线上数据推导无效的测试用例。比方测试一个零碎,这个零碎是有大量历史数据的。这时就能够提取其中一段时间的数据,应用这些数据持续测试这个零碎。测试实现后统计这些测试数据中哪些数据对于测试覆盖率的减少是有帮忙的。能够应用大数据的办法,主动提取出对于测试覆盖率有增益成果的数据。这种办法能够看出哪些测试数据笼罩的代码是雷同的。这些测试数据其实就属于同一个汇合,在这种汇合中,只取一个测试数据就能够。利用线上数据反推无效测试用例也是精准化测试的重要作用。 因为精准化测试须要对底层白盒测试相当理解,对于测试人员要求比拟高,所以当初实现起来有肯定的难度。目前行业中还没有开源的精准化测试的工具。现阶段只能通过 Jacoco 等覆盖率统计的工具,本人去实现精准化测试平台。

January 4, 2023 · 1 min · jiezi

关于软件测试:软件测试-App常见bug解析

  性能Bug 内容显示谬误 前端页面展现的内容有误。 编辑 这种谬误的产生有两种可能 1、前端代码写的文案谬误 2、接口返回值谬误 性能谬误 性能谬误是在测试过程中最常见的类型之一,也就是产品的性能没有实现。比方图中的公众号登录不胜利的问题。 编辑 界面展现错乱 产品界面上的元素展现重叠(如下图),这类型的谬误个别是前端代码问题。 编辑 界面展现后盾信息 前端页面展现了不应该呈现的后端日志信息(如下图),这类的谬误个别是因为后端服务谬误导致。 编辑 推送信息谬误 推送音讯中蕴含了不正确的内容(如下图),此类问题个别是后端服务谬误导致的。 编辑 解体 解体是 app 很常见的一类 Bug。比方用户正在应用某个 app,忽然利用就进行响应,界面上弹出【强制敞开谬误】的窗口须要强制敞开利用。而 iOS 的 app 则很多应用就会呈现闪退的景象。 设施的多样性造成了手机更加容易呈现 app 的解体,通常在网络异样时 app 上还在进行数据交互,即会呈现解体。产生解体的起因有很多,有可能是代码中存在多余空格、开发人员对该段代码的解决欠佳,未做异样解决等等。 这些异样在最坏的状况下,不仅影响本 app 的应用也可能会导致系统故障,操作系统解体,整个 app 无奈再持续应用。 这一类的问题会导致客户体验十分差,影响产品的口碑。所以升高解体率是 app 测试中十分重要的一项指标。 性能Bug 加载速度慢 应用程序第一次启动速度慢进入到某一个界面加载速度慢启动某一个有动画成果的界面,动画执行过程加载速度慢并且有卡顿响应某一个用户事件时,长时间无响应(ANR)其余 太占用手机内存太耗电和流量在应用利用的过程中,点击某一个事件进入的页面呈现白屏的闪动等

January 4, 2023 · 1 min · jiezi

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

 TCP 协定是在传输层中,一种面向连贯的、牢靠的、基于字节流的传输层通信协议。 环境筹备 对接口测试工具进行分类,能够如下几类: 网络嗅探工具:tcpdump,wireshark代理工具:fiddler,charles,anyproxyburpsuite,mitmproxy剖析工具:curl,postman,chrome Devtool抓包剖析TCP协定 tcpdump tcpdump 是一款将网络中传送的数据包的“头”齐全截获下来提供剖析的工具。它反对针对网络层、协定、主机、网络或端口的过滤,并提供 and、or、not 等逻辑语句去掉无用的信息。 让 tcpdump 时刻监听 443 端口,如果有同样就输出到 log 文件中 sudo tcpdump port 443 -v -w /tmp/tcp.log 利用这条命令,会把失去的报告放到目录 /tmp/tcp.log 中。 罕用参数含意port 443监听 443 端口-v输入更加具体的信息-w把数据写到 log 中 wireshark wireshark 也是一款网络嗅探工具,它除了领有 tcpdump 性能,还有更多扩大性能,比方剖析工具,然而在接口测试中,抓包过程往往都是在服务器进行,服务器个别不提供 UI 界面,所以 wireshark 无奈在服务器工作,只能利用 tcpdump 抓包生成 log,而后将 log 导入 wireshark 应用,在有 UI 界面的客户端上进行剖析。 抓包剖析 TCP 协定 抓取一个 http 的 get 申请: 在百度上搜 mp3&nbsp;http://www.baidu.com/s?wd=mp3用 tcpdump 截获这个 get 申请,并生成 log用 wireshark 关上 tcpdump 生成的 log应用 wireshark 查看 log: ...

January 4, 2023 · 1 min · jiezi

关于软件测试:技术分享-接口自动化测试中文件上传该如何测试

 在服务端自动化测试过程中,文件上传类型的接口对应的申请头中的 content-type 为 multipart/form-data; boundary=…,碰到这种类型的接口,应用 Java 的 REST Assured 或者 Python 的 Requests 均可解决。 实战练习 Python 版本 在 Python 版本中,能够应用 files 参数上传文件,files 要求传递的参数内容为字典格局,key 值为上传的文件名,value 通常要求传递一个二进制模式的文件流。 url = 'https://httpbin.ceshiren.com/...' >>> files = {"hogwarts_file": open("hogwarts.txt", "rb")} >>> r = requests.post(url, files=files) >>> r.text { "args": {}, "data": "", "files": { "hogwarts_file": "123" }, "form": {}, ...省略... "url": "https://httpbin.ceshiren.com/post" }Java 版本 Java 须要应用 given() 办法提供的 multiPart() 办法,第一个参数为 name, 第二个参数须要传递一个 File 实例对象,File 实例化过程中,须要传入上传的文件的绝对路径+文件名。 ...

January 4, 2023 · 1 min · jiezi

关于软件测试:电商类项目如何用JMeter-做-Restful-接口压力测试软件测试测试开发自动化测试

性能测试对于“用户基数大、并发峰值高、业务链简单、零碎更新快”的互联网企业来说,是软件生命周期里至关重要的一环。 无论是大型电商促销流动如“淘宝双11”、“京东618”等极限峰值业务,还是金融类产品的正式上线,背地都是性能测试和研发运维同学在微小压力下摸索实际的身影。 每个业务上线之前,都须要对罕用性能及重要接口做压测,确保接口的稳定性。接口响应工夫及错误率指标,那更须要重点关注。在做接口压测时,Restful因为扩展性强、构造清晰、平安简略低耦合、对服务器的性能要求低等个性,成为目前名企大厂互联网公司最罕用的架构。 Restful次要劣势如下: 1、轻量级架构,间接基于 http(s)。前后端拆散,后端只负责数据处理,前端体现形式能够是任何前端语言。可缩小流量; 2、前端无关化,后端只负责数据处理;前后端人员只需接口文档便可实现前后端交互,无需过多相互了解; 3、数据形容简略,个别以 xml,json格局做数据交换,避免了注入型等平安问题; 4、扩展性强、构造清晰。 5、服务器性能优化,因为前端是 Web 页面,通过nginx便可获取,服务器次要压力放在了接口上。

January 4, 2023 · 1 min · jiezi

关于软件测试:软件测试-Appium-用例录制

 Appium Desktop 是一款用于 Mac、Windows 和 Linux 的开源利用,它提供了 Appium Server,Appium Inspector 以及相干的工具的组合。 Appium Desktop 是个图形界面,能够设置选项、启动/进行服务器、查看日志等性能。Appium Inspector 能够查看应用程序的元素,并进行根本的交互、录制等性能。 下载及装置 下载地址: https://github.com/appium/app... 下载对应零碎的 Appium 版本,装置实现之后,点击 “Start Server”,就启动了 Appium Server。 在启动胜利页面点击右上角的放大镜,进入到创立 Session 页面。配置好 desirecapability 信息之后,点击“Start Session”启动会话就展现出上面的页面。Appium Inspector 元素定位页面: 编辑 左侧为屏幕快照:能够在左侧应用鼠标抉择 UI 元素,会看到它们高亮显示。 两头为页面 DOM 树结构:在利用层次结构中会间接将元素的属性值标记在树上,这对于 Appium 定位元素很不便。 右侧为元素的详细信息:当元素被选中,右侧会展现出元素的具体属性信息列表。这些属性将决定 Appium 定位元素的策略。 另外 Appium Inspector 还提供了页面刷新,页面操作,录制,元素的点击、输出等性能。 Appium自动化用例录制 Appium Inspect 提供了定位元素与录制用例的性能,应用 Appium Inspect 能够查看挪动设施的 UI 布局构造,不便脚本的编写和生成。上面以 Android 零碎为例。在 Android 模拟器上装置 ApiDemos-debug.apk 利用。 测试利用下载地址: https://github.com/appium/sam... 下载该 apk 并装置到测试设施,之后会基于该 app 进行自动化测试。 ...

January 4, 2023 · 2 min · jiezi

关于软件测试:软件测试-接口测试中请求超时该怎么办

 A 发送申请,而后期待 B 的响应,同时开始超时计时,如果在超时工夫内胜利接管到响应,则完结期待和计时。如果到了超时工夫还没有接管到响应,则完结期待同时此次通信失败,这个过程叫做申请超时。在接口自动化测试过程中,也经常会碰到申请超时的场景。 如下图所示,测试用例 2 没有设置超时解决,遇到服务端阻塞,测试用例 2 始终处于期待的状态,前面的测试用例都不执行: 编辑 如下图所示,如果测试用例 2 设置了 3s 的超时工夫,遇到服务端阻塞,测试用例 2 在 3s 之后则抛出异样,测试用例 3 失常执行: 编辑 实战练习 编辑 编写三条测试用例,在 test_two 测试用例中设置超时工夫为 3 秒,超过 3s 还没有失去响应的话则抛出异样,而后失常执行前面的测试用例。 Python 版本 Python 能够在调用申请办法时传入 timeout 参数管制超时工夫。 import requestsclass TestReq:def test_one(self):r = requests.post("https://httpbin.ceshiren.com/post")assert r.status_code == 200def test_two(self): 通过timeout 参数设置超时工夫,设置超时工夫为0.1s,模仿超时场景r = requests.post("https://github.com/post", timeout=0.1)assert r.status_code == 200def test_three(self):r = requests.post("https://httpbin.ceshiren.com/post")assert r.status_code == 200 Java 版本 Java 须要通过增加 RestAssured 的配置信息来解决超时的申请。通过 setParam() 设置超时工夫,第一个参数为连贯的类型,第二个参数为超时的最大时长,单位是 3000 毫秒。 ...

January 4, 2023 · 1 min · jiezi

关于软件测试:技术分享-专项测试技术初识Hook

Hook 技术须要事后剖析指标利用的源代码和逻辑,依据指标测试场景设置指标、逻辑和数据,而后运行时动静的对指标函数参数值、逻辑或者返回值做批改,达到批改现有函数逻辑、实现目标测试场景的目标。 Hook的价值在测试中,尽管通过批改数据以实现测试场景的需要,大部分状况下都能够通过 Mock 技术实现,然而还有一小部分场景,例如须要批改利用外部函数的参数、返回值或运行逻辑等状况,这时就须要用到 Hook 技术。 单元测试之外,Mock 技术的次要作用是对服务、接口进行 Mock,通过代理等形式将被测服务发送到依赖服务的申请转发给 Mock 服务,再由 Mock 服务依据规定组装预期的返回数据响应给被测服务,达到预期的测试场景。 Hook 技术次要用于服务外部代码逻辑上的批改,当函数间传递的参数或者函数内的逻辑须要进行批改时,数据的传递并没有通过网络,Mock 服务无奈对其进行操作,只能通过 Hook 技术通过在运行的代码中插入额定的代码或者在内存中进行操作。这种更精密更底层的批改,相比 Mock 技术能实现更多的批改范畴,适用性更广,难度也更大。JVM Sandbox简介JVM-Sandbox 是 alibaba 开源的一个 JVM 沙箱容器,只能解决指标为 Java 利用的场景,次要的特点是反对热插拔(能够在指标利用运行中随时进行 Hook 的加载和解除)、能够同时操作挂载多个指标利用,相互之间独立设置互不烦扰、反对的指标利用 JDK 版本较广(6-11)。工具自身性能很多,在这里仅介绍和应用它用作 Hook 的局部性能。 JVM Sandbox装置与启动下载我的项目的 github 地址:https://github.com/alibaba/jv...。下载所需版本的二进制压缩包,解压(演示所应用的版本为 1.3.3)。环境筹备官网申明反对的零碎有:Linux/UNIX/MacOS,这几个零碎只须要下载解压缩就能够间接运行。官网并未反对 Windows 零碎,所以须要进行如下批改:装置 Git Bash。装置 JDK(版本 6-11,演示所用版本为 1.8.0_192),门路中不能带有空格。在 Shell 脚本中会有 Java 命令的调用,所以电脑中须要,并且因为 Git Bash 运行 Shell 脚本时的目录问题。批改启动脚本bin/sandbox.sh ,将脚本中 183-188 行内容正文。imageimage1080×277 95.5 KB启动脚本因为启动脚本中应用了相对路径,所以运行时须要切换到我的项目的 bin 目录下操作。在 bin 目录中执行语句./sandbox.sh -p 指标利用pid ,当呈现如下提示信息,阐明 JVM-Sandbox 曾经胜利启动了。$ ./sandbox.sh -p 6204 ...

January 4, 2023 · 2 min · jiezi