caicai 发布的文章

Charles是一个HTTP代理服务器、HTTP监视器、反转代理服务器。它可以查看所有连接互联网的HTTP通信。这些包括request, response现HTTP headers (包含cookies与caching信息)。移动端的话,这款工具更加适用于苹果设备,安卓的话有点反应缓慢。

一、下载安装Charles

1、下载地址:

https://www.charlesproxy.com/

2、安装Charles

下载完成后直接进行安装即可,如果不注册每次只能使用30分钟,关于如何注册破解,可以网上下载jar包替换。

 

二、使用Charles

1、打开charles

2、录制pc端

默认打开就开始录制了,直接将Proxy-Windows Proxy勾选,此时在pc端任意链接互联网的http通信都能抓包。

3、录制移动端

本篇文章即主要针对如何对iOS移动设备进行抓包

1)查看本机的IP,win+R,输入cmd,命令输入ipconfig即可查看

或打开Charles的Help-Local IP Address

2)查看Charles的HTTP Proxy的Port,在Proxy-proxy setting中,如下图所示

3)手机端连接无线网(与pc连接同一网段),在无线网详情中选择HTTP代理-手动模式,如下图所示

输入服务器ip,即你步骤1当中查询的本机ip;

输入端口,即你步骤2中查询的端口号;

填写完成之后点击返回即可

4)确保Charles录制按钮已经打开,即红色圆点的按钮

5)在手机端进行操作,charles即可进行抓包

 

最基本抓包功能就这样了,还是很简单的,关于其他的分析以及扩展使用,可以在其他文章中查看。

之所以写这篇文章,主要是大部分测试还是处于弱势地位,线上一旦出问题,大部分人想到的是:你这个没测?基于这点,这篇文章也许可以给你一个明确的答案,这到底是谁的责任。

一、先解决问题

线上爆发重大bug,这时候不是追究责任的时候,而是动员所有可调用的资源,尽快解决这一问题,将损失降到最低。而一般公司在这之前就应该制定好出现重大问题的补救流程和方案以及对应的人员分配。

二、定义bug的性质

解决问题后,定义线上发生的问题的性质,是第三方引起的,不可抗拒的问题,还是自身疏忽导致的错误?且爆发的问题的严重程度,关于bug严重程度的区分,可以参看我的另一篇文章。(传送门:http://blog.jianjiexuan.com/testdocument/42.html

三、分析产生bug的根源

1、需求未涉及,或需求当初定义的不够详细造成。

 这个一般由需求、设计、测试都承担责任,需求的责任最重。之所以说设计和测试也有连带责任,是因为需求评审的时候也参与进去了,而需求都是通过大家一致确认可行通过才执行的。当然,有些公司对于需求评审也不是很重视,也没有专门写需求文档的人,甚至一些小公司直接都是口头表达,这样的需求连记录都没有,实在没办法追责。不过,一般这样的公司也不会追责,如果追责的话,建议设计(产品)、测试一句:你可以刷新简历了。

2、设计过程、开发过程未实现造成。

 这种问题是需求检查到了有未完成的需求,但是设计和开发并没有进行弥补。则为设计与开发的责任,而设计的责任最大。

3、测试过程中的疏漏造成。

 测试过程中的疏漏有2种情况,一种是测试用例没有覆盖,一种是测试用例覆盖了没有执行。第一种参与过测试用例评审的都有责任,但是设计测试用例的人承担最大责任。第二种则完全是测试责任。当然,很多公司根本就不具备评审测试用例或者有专门写测试用例的人,本来管理流程就乱,一人做多种职位的事情,这时候如果硬要追责,建议测试一句:你可以刷新简历了。

4、交付部署中出现问题造成。

 比如版本错误、发布错误、部署错误,一般在设计(产品)、配置、测试经理共同承担责任。

5、私自改动代码造成。

 只能开发哥哥完全承担了。

四、分析总结

 对于这次的事件进行分析与总结,确定是谁的问题后,应该吸取教训,并给出措施,给下次的版本一个参考。

 

其实这套方案肯定是基于自身的流程和管理都非常明确的公司执行。并不适合小团队去执行,小团队建议还是大家一起承担,否则,只会让员工提前离开。如果你不是领导者,愿你不需要看到这篇文章。

 

在复杂的脚本中,会涉及到jmeter的多个元件,而元件之间的作用域和执行顺序这时候就很重要了,放错位置不仅会造成数据获取不正确,严重还会无法执行,下面即为大家介绍一下元件作用域与执行顺序。

1、元件的作用域

  • 配置元件(config elements):会影响其作用范围内的所有元件(同级别或父级起作用)
  • 前置处理程序(Per-processors):在起作用范围内的每一个sample元件之前执行
  • 定时器(timers):对其作用范围内的每一个sampler有效(同级别或父级起作用)
  • 后置处理程序(Post-processors):在其作用范围内的每一个sampler元件之后执行(同级别或父级起作用)
  • 断言(Assertions):对其所用范围内的每一个sampler元件执行后的结果执行校验
  • 监听器(Listerners):收集其作用范围的每一个samoler元件的信息并出现(同级别或父级起作用)
  • sampler元件不和其他元件相互作用,因此不存在作用域的问题

2、元件的执行顺序

  • 配置元件
  • 前置处理器
  • 定时器(首次也是定时器先执行再执行sampler)
  • Sampler
  • 后置处理器(只在有结果可用情况下执行)
  • 断言(只在有结果可用情况下执行)
  • 监听器(只在有结果可用情况下执行)

如果在同一作用域内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序依次执行

备注:如果两个相同配置元件作用于同一个采样器,那么这两个配置元件会进行合并,完全一样的取排序靠近的配置元件(如父子级关系)

例1:zuoyongyu1则执行结果是:one显示网页b的地址加上了a的参数(HTTP默认请求都有网页,必须取其一,那么取就近的地址,参数不受影响)。

例2:

zuoyongyu2

后置处理器debug,作用域里按照顺序执行,无就近原则。

3、元件的部分概念

  • 断言:可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。
  • 前置处理器及后置处理器:负责在生成请求之前完成工作。前置处理器常常用来修改请求的设置。
  • 后置处理器:负责在生成请求之后完成工作。后置处理器常常用来处理响应的数据,我们主要在动态关联中用到后置处理器的正则表达式提取器

这只算一个小技能,并没有什么难度,大家可以体验一下:

1、首先打开jmeter,在测试计划下,右击添加“线程组”

2、在工作台下,右击添加“非测试元件—HTTP代理服务器”

1)输入端口号,可以自定义,如9887

2)输入HTTPS Domains(域名):输入自己主机的ip,查询:cmd输入ipconfig即可查看,如:192.168.1.1

3)目标控制器,选择上面的线程组

4)HTTP sampler settings中的Type选择“HttpClient4”

5)配置完手机端(下面的第3步),点击【启动】

shouji1

ps:关于HTTP代理服务器的一些扩展

如图所示,分组选择每个类型的含义:(颜色标出的是比较常用的方式)

shouji2

  • 不对样本分组(Do not group samplers):所有请求全部罗列
  • 在组间添加分隔(Add separators between groups):加入一个虚拟的以分割线命名的动作,运行同“不对样本分组”,无实际意义
  • 每个组放入一个新的控制器(Put each group in a new controller):执行时按控制器给输出结果
  • 只存储每个组的第一个样本(Store 1st sampler of each group only):对于一次url请求,实际很多次http请求的情况,这个选项很好用,因为我们常常是不关心后面的那些请求的。(当选择这个进行录制后,获取的http请求,可以选中图下模式)

shouji3

 

 

3、配置手机端

1)打开设置-无线网-详情,选择HTTP代理—手动

2)输入服务器ip:即为你上面填写在jmeter中的ip,即主机ip

3)输入端口:即为上面自定义的端口,9887

4、操作手机,按着需要录制的东西操作

5、录制完成后,点击HTTP代理服务器的停止按钮,然后删除掉不必要的请求,添加监听器,即可按着刚刚的操作运行查看结果。(有问题可调试解决)

备注:

工作台默认不保存在脚本里,如果需要保存,需要勾选图下内容:(一般情况下我们不需要保存工作台下面的内容)

shouji4

enlightened每个测试在工作一段时间后,都会迷茫,其实不仅仅是测试,很多工种都会这样,不知道下一步往哪个方向发展,觉得自己在虚度岁月,没有任何进步,开始慢慢的适应了现在的一成不变,这是很危险的,你能看到这篇文章,说明你想改变,恭喜你,你会有收获的。 测试或其他技术工种的发展方向大致是相同的:1、继续专研技术,成为中级测试、高级测试、测试专家等;2、管理方向,这就不仅仅是测试技术了,你得懂得很多团队的东西,最好能有几个证书;3、转相关行业,比如产品、开发什么的。大部分人会选择第一点,而第一点又能细分很多种,白盒的、性能的、数据库的,而我主要讲的是综合的,慢慢的提升以下能力,不管你去互联网哪家公司,你都能如鱼得水。

一、品德心态好

  为什么把这个放在第一位呢?很多人不在乎,认为有技术就行,其实这个不管在测试还是其他方面都很重要,你平易近人,凡事有理有据,不歇斯底里,大家就都愿意和你共事,这样的你也会在这样的工作氛围内更加得心应手,而且测试是需要吵架的,如何把握这个吵架的分寸就很重要,不影响彼此的关系还能把工作做好。

1、首先,我们自己要语气平缓,有些人真的是天生语气就很冲(我身边有这样的人,基本没朋友),如果你是,一定要尽力去更改。虽然也许你本意只是阐述一个bug,但是别人听起来就是责怪,所以这是很头疼的。我之前也有,我明明是在讲bug,开发说你别这么激动,感觉我要吵架,其实真没有(宝宝好委屈(┬_┬)),因为不仅仅一个人这样说,我知道这肯定是我的问题,我肯定是要改的,所以就经常听些舒缓的音乐,看些心理或者周易之类的书,说话的时候每次注意点,形成习惯后,就会彻底改变。

2、讲问题要有理有据,对事不对人,测试很多时候对需求的理解和开发或者产需求的人有偏差,还有描述问题的时候和开发理解的有偏差,这时候难免会起争执。首先,有争执是好事,证明你有自己的想法,你去思考了,你在乎这个需求了,而争执的目的我们要清楚,就是希望产品更好,千万不要带着个人色彩,这样以后的工作大家都会尴尬。但是有争执不能歇斯底里,我们要讲事实摆道理,最重要的一点,一定要倾听别人的想法,坚持己见固然不错,前提是你真的是对的。如果别人说的有道理,你也可以称赞认同,记住,我们争执的目的。

3、对于同是测试的同事,要互相帮助,不要吝啬自己所会的,因为你一直在前进就不怕别人赶超,你帮助别人的同时,也能巩固自己的知识。我经常遇到这样的测试,自己偷偷的学习些技术,为什么说偷偷的呢,因为别的测试走过去的时候,她会迅速关掉正在看的东西(技术类的),首先你学习是好事,但是被看到又怎么了,别人有心也去学,这不是激励你么,再说别人真有心去学,肯定也能搜到,如果无心,看到就看到呗,反正不思进取。还有很多时候新手问问题,很多人会说,就这样啊,点一下写几个东西就好了,很简单的。拜托,你不想说就直说,想说就说清楚。如果你有这些问题,你一定要更改,你的突出不是阻止别人前进,而是加快自己前进的步伐,而且,好的心态,对你整个人生都是有帮助的。相信我。

二、业务熟悉

  作为一个合格的测试,不管你要测什么,你都要了解清楚你所要涉及的业务的所有需求,不能说了解,应该叫掌握、熟记于心。这是一个很庞大的事情,但是你必须这样,因为只有这样,任何一个改动你都能了如指掌,及时进行跟踪,别其他人问起,你却不知道,这样真的很尴尬。

1、熟悉你所测试的系统

  必须非常熟悉你所测试的系统,知道哪些需求是重要的,哪些的次要的,这样才能更好的合理分配你的测试资源。对于需求文档不全的公司,你可以自己编写需求文档,作为自己的参考红本书,有任何改动实时更新,并及时记到脑子里,这样的你,就像上战场打仗的将军,已经清楚敌人的排兵布阵,你怎么能不赢呢?

2、熟悉跟本系统有关的上下游系统业务

  有些系统会涉及到其他系统,虽然我们不需要测试,但是一些需求以及其他系统业务也是要掌握的,这样也可以给自己提供更广的测试思路。也用打仗来比喻的话,这就是需要知道整个国家之间的状态、彼此错综复杂的关系,才能纵横捭阖,在战场上给与一些意想不到的战术。

3、熟悉数据的交互

  熟悉后台与前台的数据交互,这样可以在你提问题的时候,更加有技术性,不仅仅是描述表面的。

三、掌控Deadline

  如果一个版本需求过多,那么开发的任务就多,测试人员要测试的点也就非常的多。这个时候,如果版本封板的时间都是由项目经理或者PM来定,那测试人员就会很被动。而通过测试自己评估需求需要测试的时间及优先级,就能给出一个合理的时间给项目经理或PM,而这个时间最终点就是Deadline。测试要在这个时间点前各种督促开发,根据优先级安排测试,这样可以掌控整个测试的节奏,不需要拼命的加班,也能高效率的完成工作。

四、测试技术

这一点估计才是大家真正想看的,也是对自己镀金很重要的部分,这决定你将处于什么位置。

1、懂得用jmeter、LoadRunner进行性能测试;

2、懂得搭建性能测试需要的环境,例如服务器、redis、memcache等等;

3、懂得一些抓包工具的使用,fidder、charles、Wireshark等等;

4、懂得一些基本命令(数据库、linux)的使用;

5、懂得一些自动化测试,会写一些基础脚本(java、python)进行接口自动化;

6、懂得如何编写性能测试报告并能够进行分析; 

7、懂得一些安全性能测试。

如果你能慢慢掌握以上四大点,基本你走到哪里都不愁高薪了。看看自己缺少哪点,再根据自己的实际情况去学习,祝愿大家都能学有所成!yes