51Testing软件测试网

 
 

常用链接

  • 我的随笔
  • 我的评论
  • 我参与的随笔

留言簿(3)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔档案

  • 2021年6月 (1)
  • 2021年3月 (1)
  • 2020年9月 (1)
  • 2020年3月 (1)
  • 2020年1月 (2)
  • 2019年12月 (3)
  • 2019年11月 (5)
  • 2019年10月 (1)
  • 2019年9月 (2)
  • 2019年8月 (14)
  • 2019年7月 (20)
  • 2019年6月 (15)
  • 2019年5月 (12)
  • 2019年4月 (19)
  • 2019年3月 (20)
  • 2019年2月 (9)
  • 2019年1月 (16)
  • 2018年12月 (17)
  • 2018年11月 (21)
  • 2018年10月 (16)
  • 2018年9月 (20)
  • 2018年8月 (22)
  • 2018年7月 (3)
  • 2018年6月 (1)
  • 2018年5月 (7)
  • 2018年4月 (1)
  • 2018年3月 (3)
  • 2018年2月 (6)
  • 2018年1月 (2)
  • 2017年9月 (8)
  • 2017年8月 (28)
  • 2017年7月 (3)
  • 2016年11月 (1)
  • 2016年6月 (1)
  • 2016年4月 (1)
  • 2016年2月 (2)
  • 2015年7月 (1)
  • 2015年5月 (1)
  • 2015年4月 (2)
  • 2015年3月 (1)
  • 2015年2月 (2)
  • 2015年1月 (6)
  • 2014年12月 (3)
  • 2014年11月 (3)
  • 2014年10月 (3)
  • 2014年9月 (2)
  • 2014年8月 (8)
  • 2014年7月 (16)
  • 2013年12月 (5)
  • 2013年11月 (1)
  • 2013年10月 (3)
  • 2013年9月 (2)
  • 2013年8月 (2)
  • 2013年7月 (3)
  • 2013年5月 (1)
  • 2013年4月 (2)
  • 2013年3月 (2)
  • 2013年2月 (3)
  • 2013年1月 (4)
  • 2012年12月 (4)
  • 2012年11月 (4)
  • 2012年10月 (3)
  • 2012年9月 (4)
  • 2012年8月 (3)
  • 2012年7月 (4)
  • 2012年6月 (2)
  • 2012年5月 (2)
  • 2012年4月 (1)
  • 2012年3月 (2)
  • 2012年2月 (2)
  • 2012年1月 (1)
  • 2011年12月 (3)
  • 2011年11月 (2)
  • 2011年10月 (1)
  • 2011年9月 (4)
  • 2011年8月 (3)
  • 2011年7月 (2)
  • 2011年6月 (4)
  • 2011年5月 (4)
  • 2011年4月 (2)
  • 2011年3月 (4)
  • 2011年2月 (4)
  • 2011年1月 (7)
  • 2010年12月 (7)
  • 2010年11月 (5)
  • 2010年10月 (4)
  • 2010年9月 (7)
  • 2010年8月 (7)
  • 2010年7月 (3)
  • 2010年6月 (3)
  • 2010年5月 (4)
  • 2010年4月 (4)
  • 2010年3月 (5)
  • 2010年2月 (3)
  • 2010年1月 (4)
  • 2009年12月 (3)
  • 2009年11月 (3)
  • 2009年10月 (1)
  • 2009年9月 (3)
  • 2009年8月 (2)
  • 2009年7月 (3)
  • 2009年6月 (1)
  • 2009年5月 (2)
  • 2009年4月 (4)
  • 2009年3月 (5)
  • 2009年1月 (1)
  • 2008年11月 (2)
  • 2008年7月 (5)
  • 2008年6月 (4)

文章分类

  • 行业资讯(45) (rss)
  • 软件业务知识(43) (rss)
  • 软件开发知识(33) (rss)
  • 软件测试工具(39) (rss)
  • 软件测试技术(157) (rss)
  • 软件测试管理(40) (rss)
  • 软件测试职业发展(57) (rss)

51testing软件测试网

搜索

  •  

最新评论

  • 1. re: 淘宝后台技术大揭秘,不看这篇你双十一要损失几个亿!
  • 关注官方公众号“Atstudy网校”,点击中间菜单栏“双11”,领取双十一技术内幕资料。
  • --51testing
  • 2. re: 软件测试流程的一点感悟
  • 提交缺陷时只需要描述现象即可,过多的分析可能会误导开发
  • --凡客诚品
  • 3. re: 软件测试流程的一点感悟
  • 阿达宿建德江阿斯顿
  • --凡客礼品卡
  • 4. re: 手机软件测试的经验总结
  • 很好啊~不错
  • --乐蜂网
  • 5. re: 手机软件测试的经验总结
  • 很好啊~
  • --罗莱家纺

阅读排行榜

  • 1. 软件测试流程的一点感悟(1091)
  • 2. 5年经验之谈:月薪3000到30000,测试工程师的变“行”记!(940)
  • 3. 测试自动化及软件测试工具的比较(857)
  • 4. 银行线上信贷系统如何做好接口测试?手把手教你接口工具Postman(825)
  • 5. 软件为什么要做异常测试?测试员必知的22个测试点总结!(806)

评论排行榜

  • 1. 软件测试流程的一点感悟(4)
  • 2. 软件测试的原则和经验 (4)
  • 3. 嵌入式软件测试技巧(2)
  • 4. 手机软件测试的经验总结 (2)
  • 5. 常用软件测试工具的分析与比较(1)

Powered by: 博客园
模板提供:沪江博客
IT博客 | 首页 | 发新随笔 | 发新文章 | 联系 | 聚合 | 管理

如何编写接口测试用例?测试工程师必备技能!

自动化始终只是辅助测试工作的一个手段,对于测试人员而言,测试基础和测试用例的设计才是核心。如果测试用例的覆盖率或者质量不高,那将这部分用例实现为自动化用例的意义也就不大了。


那么,接口测试用例应该怎么编写呢?

1、接口测试

接口:主要是子模块或者子系统间交互并相互作用的部分。

这里说的接口是广义的,客户端与后台服务间的协议;插件间通信的接口;模块间的接口;再小到一个类提供的方法;都可以理解为接口。因此,可以分析,系统间的接口包含三部分:输入、处理逻辑、输出。

接口测试:是指针对模块或系统间接口进行的测试。

2、应该怎么分析一个接口?

获取接口文档:和黑盒测试一样,我们是从需求文档中去挖掘测试点,设计测试用例。对于接口测试,同样是有对应的接口文档的。

分析接口文档,提取测试点:

1)输入: 接受哪些参数、参数的类型、可选参数和必选参数等;根据输入参数采用等价类、边界值分析法等进行设计;

2)业务逻辑:对于一个接口,不同的输入参数或组合,流程或状态的转移是不同,可以根据业务逻辑画出流程图或状态转移图,确保每种状态至少被访问了一次;

3)输出:根据文档规定的输出,反向设计测试数据,使所有的输出状态都被包含了;

测试用例:同时对输入、业务逻辑、输出进行考虑时,肯定会存在用例的冗余,在最大限度覆盖业务功能和规则下,选取最优用例集合。同时,需要考虑异常数据和场景。

3、怎么确定用例的覆盖率?

在没有特殊要求的情况下,至少需要考虑以下内容:

1)业务功能覆盖是否完整

2)业务规则覆盖是否完整

3)参数验证是否达到要求(边界、业务规则)

4)接口异常场景覆盖是否完整

如果接口需求还包含性能或者安全要求,还要对接口进行性能测试和安全测试,就需要考虑:性能指标是否满足要求、安全指标是否满足要求。

4、接口测试发现的典型问题

接口测试经常遇到的bug和问题,如下:

(1)传入参数处理不当,导致程序crash;

(2)类型溢出,导致数据读出和写入不一致;

(3)因对象权限未进行校验,可以访问其他用户敏感信息;

(4)状态处理不当,导致逻辑出现错乱;

(5)逻辑校验不完善,可利用漏洞获取非正当利益等。

5、如何编写接口测试用例?

创建接口测试用例:

/home/csg/pyrequest-master/interface/add_event_test.py




对上述代码进行分析:

1、在接口测试之前,调用test_data.py文件中的init_data()方法,初始化数据库中的测试数据;

2、创建AddEventTest测试类,继承unittest.TestCase类;

3、创建测试用例,调用添加发布会接口,并验证接口返回的数据;

注意:

1、把JSON格式的结果转化为字典赋值给self.result变量,加self的目的是在tearDown()方法中打印self.result变量,打印的结果可以在测试报告中显示,即将接口返回数据打印出来;

2、如果不使用self,又想在报告中显示每个接口返回数据,就只能是在每个用例中print出result,相比来说,还是第一种方法比较方便。

集成测试报告

当用例数量较多,就需要分类管理和执行,为解决这个问题,unittest单元测试框架提供了discover()方法,然后再适用HTMLTestRunner生成HTML格式的测试报告。

创建/home/csg/pyrequest-master/interface/run_tests.py文件:


对上述代码进行分析:

1、还是先调用test_data.py文件中的init_data()函数来初始化测试数据;

2、unittest框架提供的discover()方法查找interface目录下,匹配到文件名*_test.py结尾的测试文件;

3、now按一定格式生成当前时间;

4、将文件名命名为now当前时间_result.html并且保存report目录下;

5、HTMLTestRunner为unittest单元测试框架的扩展,利用它提供的HTMLTestRunner()类来代替unittest单元测试框架的TextTestRunner()类,运行discover中匹配到的测试用例,生成HTML格式的测试报告;

运行测试脚本:python run_tests.py:

1、可能需要安装configparser库,pip install configparser;

2、在运行过程中,出现了错误:


应该是数据表里create_time字段需要一个默认值,于是修改test_data.py文件,给每个测试数据都增加create_time默认值为当前时间,再次运行就没有这个错误了; 

3、但是继续执行又出现了错误:


问了下度娘,应该是读取文件的时候使用的是ASCII编码,而不是utf-8,自己多余,在每个测试用例的开头都增加了-*- coding:utf-8 -*-,画蛇添足了,去掉后再次运行就没这个错误了; 

4. 但是运行结果全部是failed的,查看具体的error信息:


原来还是要在每个测试数据前加上utf-8编码的声明,但是每个用例的注释信息不能是中文,奇怪了,没深入研究,反正都修改为英文后,再次运行成功了。

完整的自动化测试报告如下图所示:


6、总结

其实,作者自己完全的封装了一个类似Robot的工具,这个好处是抛开了框架的束缚,可以自由的编写测试用例的内容,只要是python的代码,就可以采用这个工具,自由发挥测试内容,并且结果的展示也比较丰富和友好,如果不打算研究Robot的,其实可以用这个工具。

欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                     群:                    755431660

posted @ 2018-11-29 18:12 51testing 阅读(173) | 评论 (0) | 编辑 收藏
 
软件测试员必知!压力测试总共需要几个步骤?思路总结篇

在运维工作中,压力测试是一项很重要的工作。比如在一个网站上线之前,能承受多大访问量、在大访问量情况下性能怎样,这些数据指标好坏将会直接影响用户体验。今天我们就来深入了解下压力测试!


首先,什么是压力测试?

软件压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。软件压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。通常要进行软件压力测试的资源包括内部内存、CPU 可用性、磁盘空间和网络带宽。

压力测试涵盖,性能测试,负载测试,并发测试等等,这些测试点常常交织耦合在一起。

顾名思义:压力测试,就是被测试的系统,在一定的访问压力下,看程序运行是否稳定/服务器运行是否稳定(资源占用情况)。

比如:2000个用户同时到一个购物网站购物,这些用户打开页面的速度是否会变慢,或者网站是否会奔溃。

压力测试的步骤

(1)确定存量数据的规模(用户一般会要求制造出3-5年的存量数据);

(2)确定需要进行压力测试的业务(一般是用户使用最频繁,或者业务操作复杂的业务);

(3)确定操作用户的的数量、各类操作用户的比例;

(4)峰值业务量的要求(一般是1个小时内最多要处理的笔数);

(5)对实时业务响应时间的要求(如在峰值情况下,单笔业务的处理时间(如小于60秒));

(6)对于批量处理过程的时间要求(如进行日终(月终、年终)处理、与外系统间批量数据传输时的时间)。

以上信息,通常需要业务人员来确定。

为了进行压力测试的技术准备,需要如下资料:

(1)系统概要设计(了解系统技术架构,确定测试方法);

(2)如果自己开发接口程序,需要了解接口报文规范;

(3)数据库设计(我们需要据此编写程序,准备存量数据)。

为了开发脚本需要了解如下信息:

(1)操作手册(脚本录入或者手工开发脚本);

(2)参数化脚本(动态化数据需要进行关联);

(3)脚本回放(验证脚本是否可以成功的创建数据)。

测试场景:

(1)单用户运行压力测试场景;

(2)多用户运行测试场景,查看系统资源消耗等调优工作开始。

另外,还有测试环境的事情需要落实。压力测试一般要求环境配置较高,最好与生产环境一致或者接近。

几款流行的压力测试工具

(1)JMeter

Apache JMeter是Apache组织开发的基于Java的压力测试工具,用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域。 它可以用于测试静态和动态资源例如静态文件、Java小服务程序、CGI脚本、Java 对象、数据库, FTP服务器, 等等。

JMeter可以用于对服务器、网络或对象模拟巨大的负载,来在不同压力类别下测试它们的强度和分析整体性能。

另外,JMeter能够对应用程序做功能回归测试,通过创建带有断言的脚本来验证你的程序是否返回了期望的结果。

为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

(2)LoadRunner

LoadRunner是惠普旗下一款自动负载测试工具,它能预测系统行为,优化性能。LoadRunner强调的是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来帮助更快的确认和查找问题。此外,LoadRunner 能支持最宽范的协议和技术,量身定做地提供解决方案。

(3)其他测试工具

Siege是一款开源的压力测试工具,可以根据配置对一个WEB站点进行多用户的并发访问,

记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。

TCPCopy是一种请求复制(所有基于tcp的packets)工具,可以把在线请求导入到测试系统中去。

TCPCopy的特点是可以拷贝线上真实流量,模拟用户数据。

最后,软件压力测试和性能测试的区别:

二者区别在于他们不同的测试目的

软件压力测试是为了发现系统能支持的最大负载,他的前提是要求系统性能处在可以接受的范围内,比如经常规定的页面3秒钟内响应;

所以一句话概括就是:在性能可以接受的前提下,测试系统可以支持的最大负载。

软件性能测试是为了检查系统的反映,运行速度等性能指标,他的前提是要求在一定负载下,如检查一个网站在100人同时在线的情况下的性能指标,每个用户是否都还可以正常的完成操作等。

概括就是:在不同负载下(负载一定)时,通过一些系统参数(如反应时间等)检查系统的运行情况。比如我们说某个网站的性能差,严格上应该说在N人同时在线情况下,这个站点性能很差)。

总之,就像一个方程式:综合性能=压力数*性能指数,

综合性能是固定的:

软件压力测试是为了得到性能指数最小时候(可以接受的最小指数)最大的压力数,软件性能测试是为了得到压力数确定下的性能指数。

总结:

在项目上线之前,都需要做压力测试,目的是看下我们的网站能抗住多少的压力,能承担多少并发,如果不做压力测试,一旦出现大访问量时,我们的网站会挂掉,所以压力测试真的很重要,都应该重视起来!

欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                     群:                    755431660

posted @ 2018-11-28 17:30 51testing 阅读(110) | 评论 (0) | 编辑 收藏
 
跟大神一起15分钟制作一个属于自己的Linux操作系统!
     摘要: 计算机已成为现代人日常工作、学习和生活中必不可少的工具。操作系统是计算机之魂,作为用户使用计算机的接口,它负责调度执行各个用户程序,使计算机完成特定的任务;作为计算机硬件资源的管理者,它负责协调计算机中各类设备高效地工作。操作系统的重要性不言而喻,市面上主流的操作系统有Windows、Unix、Linux、Mac OS X。Linux于1991年由芬兰大学生Linus开发,是一个类Unix的开源版...  阅读全文
posted @ 2018-11-27 17:48 51testing 阅读(97) | 评论 (0) | 编辑 收藏
 
如何进行Python数据分析?正确的“入门之路”三部曲!

Python是一种面向对象、直译式计算机程序设计语言,由于他简单、易学、免费开源、可移植性、可扩展性等特点,Python又被称之为胶水语言。下图为主要程序语言近年来的流行趋势,Python受欢迎程度扶摇直上。


由于Python拥有非常丰富的库,使其在数据分析领域也有广泛的应用。

一、为什么要用Python做数据分析?在我看来,大概有3大理由。

广度:各行各业都有自己的商业场景,每一个行业都需要使用数据来辅助决策。面对现在人人谈大数据的情境,数据分析是一个你不得不会的技能。

精度 :Python是一门编程语言。也许从前的你完全依靠excel的默认设置生成图表,从不思考为什么做一张数据图,而使用编程工具的你必须从图表长宽开始思考每一步成形的理由,从而更精地理解数据。

高效 :传统的数据工作涵盖大量的重复不动脑操作,比如把日表合成周表,比如批量删除某个字段,比如批量删除空值。这些工作通过鼠标点击软件没有办法编成工作流,但却可以通过python程序编写自动化,省去大量时间。


基础库总结

这里是对你会经常接触的重要的库的简要总结:

NumPy:拥有大量的科学计算的核心功能。由于它的内部运算是通过C语言实现的,所以比用Python写成的同样的函数,它的速度会快许多。但它并不是最用户友好的包。

SciPy:跟NumPy非常相似,但是有更多的方式来从分布中取样,计算检验统计量,等等。

MatPlotLib:主要的画图框架。不太讨喜,但却是必备的包。

Pandas:基本上是对NumPy/SciPy进行轻量的包装,使它们更用户友好一些。对于和表格数据交互非常理想,Pandas中把表格数据称为数据框(DataFrame)。对画图功能也有一些包装,使得无需使用MPL(Meta-Programming Library,元编程库)就可以快速实现画图。我使用Pandas而非其他的工具来操作数据。

机器学习和计算机视觉

Crab:灵活、快速的推荐引擎

gensim:人性化的话题建模库

hebel:GPU 加速的深度学习库

NuPIC:智能计算 Numenta 平台

pattern:Python 网络挖掘模块

PyBrain:另一个 Python 机器学习库

Pylearn2:一个基于 Theano 的机器学习库

python-recsys:一个用来实现推荐系统的 Python 库

scikit-learn:基于 SciPy 构建的机器学习 Python 模块

pydeep:Python 深度学习库

vowpalporpoise:轻量级 Vowpal Wabbit 的 Python 封装

skflow:一个 TensorFlow 的简化接口(模仿 scikit-learn)

Caffe: 一个 Caffe 的python接口

OpenCV:开源计算机视觉库

pyocr:Tesseract 和 Cuneiform 的包装库

pytesseract:Google Tesseract OCR 的另一包装库

SimpleCV:一个用来创建计算机视觉应用的开源框架

上面列举的只是其中一部分,还有很多很多。当然,他们很多并非是用Python来实现,但都共同的提供了Python接口,甚至好几个都把Python当成了头等公民(First-Class)。

在此并非想说Python这门语言很强大或者复杂,而恰恰相反,得益于Python的简洁和包容。才让它在数据挖掘领域有如此的地位。

二、Python数据分析流程

1、数据获取:公开数据、Python爬虫

外部数据的获取方式主要有以下两种。

第一种是获取外部的公开数据集,一些科研机构、企业、政府会开放一些数据,你需要到特定的网站去下载这些数据。这些数据集通常比较完善、质量相对较高。

另一种获取外部数据的方式就是爬虫。

比如你可以通过爬虫获取招聘网站某一职位的招聘信息,爬取租房网站上某城市的租房信息,爬取豆瓣评分评分最高的电影列表,获取知乎点赞排行、网易云音乐评论排行列表。基于互联网爬取的数据,你可以对某个行业、某种人群进行分析。

常用的的电商网站、问答网站、二手交易网站、婚恋网站、招聘网站等,都可以爬到非常有价值的数据。

Python具有灵活易用,方便读写的特点,其可以非常方便地调用数据库和本地的数据,同时,Python也是当下网络爬虫的首选工具。

Scrapy

Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

2、数据整理

NumPy(Numeric Python)

提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。

Pandas(Python Data Analysis Library)

Pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

3、建模分析

每种计算机编程语言,似乎都有自己成名或适用的领域。

在这个大家都在谈云计算、大数据、深度学习的时代,让我们来看看,这些领域里面的代表吧。


说句不负责任的话,Python已经成为数据分析领域里事实上的标准语言。

Scikit-learn

从事数据分析建模必学的包,提供及汇总了当前数据分析领域常见的算法及解决问题,如分类问题、回归问题、聚类问题、降维、模型选择、特征工程。

4、数据可视化

matplotlib:一个 Python 2D 绘图库

bokeh:用 Python 进行交互式 web 绘图

ggplot:ggplot2 给 R 提供的 API 的 Python 版本

plotly:协同 Python 和 matplotlib 工作的 web 绘图库

pyecharts:基于百度 Echarts 的数据可视化库

pygal:一个 Python SVG 图表创建工具

pygraphviz:Graphviz 的 Python 接口

PyQtGraph:交互式实时 2D/3D/ 图像绘制及科学/工程学组件

SnakeViz:一个基于浏览器的 Python's cProfile 模块输出结果查看工具

vincent:把 Python 转换为 Vega 语法的转换工具

VisPy:基于 OpenGL 的高性能科学可视化工具

如果在Python中看可视化,你可能会想到Matplotlib。除此之外,Seaborn是一个类似的包,这是用于统计可视化的包。你可以做很复杂的图和一些代码。还有Bokeh,它有很多互动功能,可以做很多不同类型的图。类似Bokeh的还有Plotly。它在浏览器中呈现图,能够进行互动的可视化。虽然Python的绘图功能没有R那么强大,但是我看好它的发展前景。

三、总结

开始的时候,你可能考虑的问题不是很周全,总会遇到各种各样的问题,举例如下:

1.环境配置,工具安装、环境变量,对小白太不友好;

2.缺少合理的学习路径,上来 Python、HTML 各种学,极其容易放弃;

3.Python有很多包、框架可以选择,不知道哪个更友好;

4.遇到问题找不到解决办法,学习停滞不前;

5.网上的资料非常零散,而且对小白不友好,很多看起来云里雾里;

6.懂得技巧,但面对具体问题无法系统思考和分析;

但随着你经验的积累,慢慢就会找到分析的方向,有哪些一般分析的维度,比如Top榜单、平均水平、区域分布、同比环比、相关性分析、未来趋势预测等等。随着经验的增加,你会有一些自己对于数据的感觉,这就是我们通常说的数据思维了。

真若有心于数据领域,甚或欲从事数据科学之职业。请对Python有信心,值得你付出时间。想走机器学习之路,Scikit-learn是你最好的选择,一边操作实例,一边阅读文档,再辅助以相关的理论基础,持之数日,则大业可成也。

欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                     群:                    755431660

posted @ 2018-11-26 17:39 51testing 阅读(65) | 评论 (0) | 编辑 收藏
 
超实用!手把手教你如何3步进行Web渗透测试!

一个偶然的机会,有幸邀请到了一家国外专门做web安全的公司来对自己的web系统做安全测试。4周下来,我与几位安全专家多次沟通,完成了对自己系统的威胁建模,渗透测试,白盒测试,一共发现了28个漏洞。经验宝贵,因此有必要好好总结下。


现在,随着企业信息化建设的开展,越来越多的重要数据会以电子媒介的形式存放,这在方便企业办公的同时,也造成了极大的安全隐患。近年来,随着APT攻击的蔓延,使得越来越多的企业遭受不可挽回的重大损失。

在目的明确、装备精良、经验丰富的“雇佣军”式的攻击者面前,传统的安全设备已显得力不从心,企业需要做的是定期开展专业的渗透测试,来降低风险,加固安全。

那么,什么是渗透测试?

渗透测试,是渗透测试工程师完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标网络、主机、应用的安全作深入的探测,发现系统最脆弱的环节。

如果说安全检测是“横向地毯式自动化扫描”,那么渗透测试就是“纵向深度人工化入侵”。

可见渗透测试的目的是发现目标系统潜在的业务漏洞风险。

安全问题都体现在输入输出的问题上,能够分析数据流就有迹可循了。先知道渗透测试的流程,用工具找到漏洞,了解并且复现它。

如何进行Web渗透测试?

完整web渗透测试框架

当需要测试的web应用数以千计,就有必要建立一套完整的安全测试框架,流程的最高目标是要保证交付给客户的安全测试服务质量。


立项:项目建立,时间安排,人力分配,目标制定,厂商接口人确定;

系统分析&威胁分析:针对具体的web应用,分析系统架构、使用的组件、对外提供的接口等,以STRIDE为威胁模型进行对应的安全威胁分析,输出安全威胁分析表,重点关注top3威胁;

制定测试用例:根据威胁分析的结果制定对应的测试用例,测试用例按照模板输出,具备可执行性;

测试执行&漏洞挖掘:测试用例执行&发散测试,挖掘对应的安全问题or漏洞;

问题修复&回归测试:指导客户应用开发方修复安全问题or漏洞,并进行回归测试,确保安全问题or漏洞得到修复,并且没有引入新的安全问题;

项目总结评审:项目过程总结,输出文档评审,相关文档归档。

2、Web应用的渗透测试流程

主要分为3个阶段,分别是:信息收集→漏洞发现→漏洞利用,下面仔细分析一下各个阶段流程:

一、信息收集

在信息收集阶段,我们需要尽量多的收集关于目标web应用的各种信息,比如:脚本语言的类型、服务器的类型、目录的结构、使用的开源软件、数据库类型、所有链接页面,用到的框架等

脚本语言的类型:常见的脚本语言的类型包括:php、asp、aspx、jsp等

测试方法:

1 爬取网站所有链接,查看后缀

2 直接访问一个不存在页面后面加不同的后缀测试

3 查看robots.txt,查看后缀

服务器的类型:常见的web服务器包括:apache、tomcat、IIS、ngnix等

测试方法:

1 查看header,判断服务器类型

2 根据报错信息判断

3 根据默认页面判断

目录的结构:了解更多的目录,可能发现更多的弱点,如:目录浏览、代码泄漏等。

测试方法

1 使用字典枚举目录

2 使用爬虫爬取整个网站,或者使用google等搜索引擎获取

3 查看robots.txt是否泄漏

使用的开源软件:我们如果知道了目标使用的开源软件,我们可以查找相关的软件的漏洞直接对网站进行测试。

测试方法

指纹识别(网络上有很多开源的指纹识别工具)

数据库类型:对于不同的数据库有不同的测试方法。

测试方法

1 使应用程序报错,查看报错信息

2 扫描服务器的数据库端口(没做NAT且防火墙不过滤时有效)

所有链接页面:这个跟前面的获取目录结构类似,但是这个不只是获取网站的所有功能页面,有时候还可以获取到管理员备份的源码。

测试方法

1 使用字典枚举页面

2 使用爬虫爬取整个网站,或者使用google等搜索引擎获取

3 查看robots.txt是否泄漏

用到的框架:很多网站都利用开源的框架来快速开发网站,所以收集网站的框架信息也是非常关键的。

测试方法

指纹识别(网络上有很多开源的指纹识别工具)

二、漏洞发现

在这个阶段我们在做测试的时候要对症下药,不能盲目的去扫描,首先要确定目标应用是否使用的是公开的开源软件,开源框架等、然后在做深一度的漏洞扫描。

关于开源软件的漏洞发现

开源的软件:常见的开源软件有wordpress、phpbb、dedecms等

开源的框架:常见的开源框架有Struts2、 Spring MVC、ThinkPHP等

中间件服务器:常见的中间件服务器有jboss、tomcat、Weblogic等

数据库服务:常见的数据库服务mssql、mysql、oracle、redis、sybase、MongoDB、DB2等

对于开源软件的测试方法

1 通过指纹识别软件判断开源软件的版本信息,针对不同的版本信息去开放的漏洞数据库查找相应版本的漏洞进行测试

2 对于默认的后台登录页、数据库服务端口认证等入口可以进行简单的暴力破解、默认口令尝试等操作

3 使用开源的漏洞发现工具对其进行漏洞扫描,如:WPScan

关于自主开发的应用

手动测试:这个阶段,我们需要手工测试所有与用户交互的功能,比如:留言、登入、下单、退出、退货、付款等操作

软件扫描:使用免费的软件扫描,如:appscan、wvs、netsparker,burp等

可能存在的漏洞

Owasp关键点

代码安全之上传文件

代码安全之文件包含

代码安全之SSRF

逻辑漏洞之密码重置

逻辑漏洞之支付漏洞

逻辑漏洞之越权访问

平台安全之中间件安全

三、漏洞利用

针对不同的弱点有不同的漏洞利用方式,需要的知识点也比较多。一般这个阶段包括两种方式,一种是手工测试,一种是工具测试

手工测试

手工测试是通过客户端或服务器访问目标服务,手工向目标程序发送特殊的数据,包括有效的和无效的输入,观察目标的状态、对各种输入的反应,根据结果来发现问题的漏洞检测技术。手工测试不需要额外的辅助工具,可由测试者独立完成,实现起来比较简单。但这种方法高度依赖于测试者,需要测试者对目标比较了解。手工测试可用于Web应用程序、浏览器及其他需要用户交互的程序。

这种方式对于有特殊过滤等操作,或者网络上没有成型的利用工具的时候可以使用。

工具测试

网络上有很多好用的免费利用工具,比如针对sql注入的sqlmap、针对软件漏洞的matesploit等。

欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                     群:                    755431660

posted @ 2018-11-23 17:45 51testing 阅读(135) | 评论 (0) | 编辑 收藏
 
开始你的第一个JMeter脚本:利用Jmeter录制脚本的2种方法汇总

JMeter是一款在国外非常流行和受欢迎的开源性能测试工具,像LoadRunner一样,它也提供了一个利用本地Proxy Server(代理服务器)来录制生成测试脚本的功能。


但Jmeter与LoadRunner相比也有很多的不同点,那么我们就先来看看这两个工具的异同:

1、jmeter 的架构跟loadrunner原理一样的,都是通过中间代理,监控&收集并发客户端发现的指令,把他们生成脚本,再发送到应用服务器,再监控服务器反馈的结果的一个过程.

2、Jmeter安装简单,只需要解压Jmeter文件包到C盘上可以了,其实是没有安装.要是你想执行调试测试脚本,前提是:装上jdk和netbean插件.而LoadRunner安装包有1G多,在一台P3.0,1G内存的PC上安装要一个多小时.要是装过较旧的盗版还不能再装新版,解决办法倒是有,但麻烦且花时间.

3、Jmeter没有IP欺骗功能,IP欺骗是指在一PC台上多个IP地址来分配给并发用户.这个功能对于模拟较真实的客户环境来说,是较有用.LoadRunner有此功能.

4、Jmeter也提供了一个利用本地ProxyServer(代理服务器)来录制生成测试脚本的功能,但是这个功能并不好用,测试对象的个别参数却要手工增加上去,还得附带装个IE代理,如GoogleToolbarDownloader这些插件来捕捉参数.但是有一个工具bodboy,利用这个工具可以录制操作,然后选择将脚本保存为Jmeter脚本,然后利用Jmeter可以打开并修改脚本

5、Jmeter的报表较少,对于要分析测试性能不足以作为依据.如要知道数据库服务器或应用程序服务的CPU,memory等参数,得在相关服务器上另外写脚本记录服务器的性能.

6、Jmeter做性能测试,主要是通过增加线程组的数目,或者是设置循环次数来增加并发用户,而LoadRunner可以通过在场景中选择要设置什么样的场景,然后选择虚拟用户数。

7、Jmeter可以通过逻辑控制器实现复杂的测试行为,相当于LoadRunner中的测试场景

8、Jmeter可以做web程序的功能测试,利用Jmeter中的样本,可以做灰盒测试,LoadRunner主要用作性能测试

9、Jmeter是开源的,但是使用的人较少,网络上相关资料不全面,需要自己去揣摩,而LoadRunner是商业软件,如果是正版,有技术支持,同时,网络上的资料相当多。

10、Jmeter的脚本修改,主要是对Jmeter中各个部件的熟悉程度,已经相关的一些协议的掌握情况,而不依赖于编程,而LoadRunner除了复杂的场景设置外,还需要掌握函数,修改脚本。

依我看来,Jmeter更像一个瑞士军刀,小巧,且功能齐全。初次认识Jmeter的时候,我觉得它不好,是因为相比LR来说,它没有脚本录制功能,也许不是没有,只是我不知道。

那么下面我们就一起来看看利用Jmeter录制脚本的两种方法:

第一种方法:通过bodboy来录制脚本。

Badboy是一款不错的Web自动化测试工具,如果你将它用于非商业用途,或者用于商业用途但是安装Badboy 的机器数量不超过5台,你是不需要为它支付任何费用的。也许是一种推广策略,Badboy提供了将web测试脚本直接导出生成JMeter 脚本的功能,并且这个功能非常好用,也非常简单。你可以跟着下面的试验步骤来迈出你在开源世界的第一步。

1.打开badboy工具,点击工栏目上的红色圆形按钮,在地址栏目中输入被测试项目的地址。


录制完成后,点击工具栏旁边黑色按钮,结束录制。

选择“文件”→Export to Jmeter…


2.打开Jmeter工具,选择“文件”-->“打开”选择刚才保存的文件(.jmx类型),将文件导入进来了。


第二种方法,通过JMeter自身设置来录制脚本。

这种方法是我才发现的(鄙视一下自己的无知,嘻嘻~!),觉得方法比较简单。

1. 打开JMeter工具

创建一个线程组(右键点击“测试计划”--->“添加”---->“线程组”)

创建一个http代理服务器(右键点击“台”--->“添加”--->“非测试元件”--->“http代理服务器”)

完整的设置参照下图:


2.下面来设置一下IE浏览器

IE--->“internet属性”--->“连接”--->“局域网设置”


设置为本机IP就可以了,注意端口号要与Jmeter上的端口号一致。默认都是8080端口。

3. 现在点击jmeter上的“启动”按钮,打开浏览器输入需要录制web项目地址,jmeter会自动记录你IE所访问的页面。


总结:

第二种方法是我刚才知道的一种,关于这两种方法哪个更好,现在还不知道,但第二方法有通过IE浏览器辅助的,我想可能只要IE能打开的,它都能记录,但它录制的脚本看上去比较乱。

还有就是http代理服务器的设置,(比如:分组:每一个组放入一个新的服务器---只有这一个选项才能正常录制),有时间再仔细比较一下两种方法的不同之处。

欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                     群:                    755431660

posted @ 2018-11-22 18:06 51testing 阅读(90) | 评论 (0) | 编辑 收藏
 
敏捷测试VS传统测试对比,6招玩转敏捷测试!

随着这几年敏捷概念和方法的流行,越来越多的组织和项目选择了敏捷开发模式。那么对于测试人员来说,究竟敏捷测试与传统测试有什么区别?测试人员在一个敏捷项目中需要如何转变才能适应当前这种流行的测试模式呢?今天我们就来探讨一下!


一、什么是敏捷测试?

首先,究竟什么是敏捷测试?在我个人看来,敏捷测试是一种注重“以人为本”,快速迭代的开发方式。因为人是一个项目中的关键所在,故以人为本;快速迭代,即我们进行短周期的开发,上线,反馈,优化,使得项目易于调整,故而敏捷。

二、敏捷测试在项目中的应用形式:

体现在三个方面:每日站会、极限编程、测试驱动开发。

每日站会:也就是每天早晨15分钟到30分钟的会议时间,最多不超过45分钟,会议形式是项目组中的成员占到白板前逐个介绍昨天完成的事项,遇到的问题,或好的方法分享,今天计划完成的工作内容等;

对于存在的问题,项目成员可以提出自己的好的见解帮助同事;白板上会写上需求池、开发就绪、开发中的SR、已完成SR、测试就绪、测试中的SR、测试完成的SR、验收就绪、验收中的SR、验收完成的SR;

每个SR会写上story的内容,开发人员,计划开始时间,计划结束时间,实际开始、结束时间、完成该SR用了多少时间,计划用多长时间等;通过分析白板上story的进度情况,看项目是否存在进度延迟的情况,若存在,项目经理提出疑问,分析原因,找出改进方法。

极限编程(Extreme Programming,XP)是一种可以使开发人员快速生产高质量代码的软件开发过程。XP中开发人员可以结对编程,提高代码的质量。

测试驱动开发,敏捷测试中每个story都有计划开始和结束的时间点,开发人员对自己负责的story进行分析设计的时候,测试人员需要对story进行分析设计测试用例,在开发提交测试人员测试story的时候,开发人员需要向测试人员show case,说明开发的story功能已经实现可以开始测试了;此时测试人员根据测试用例进行测试;如果到story需要提交给测试人员进行测试的时间点了开发人员还未完成story功能的开发,测试人员就要督促开发人员进行提交测试,延迟提交或存在分析的情况下,需要反馈给项目进行重新制定措施。

三、敏捷测试与传统测试的区别

1.项目相当于开发与测试并行,项目整体时间较快。

2.模块提交较快,测试时较有压迫感。

3.工作任务划分清晰,工作效率较高。

4.项目规划要合理,不然测试时会出现复测的现象,加大工作量。

5.发现问题需跟紧,项目中人员都比较忙,问题很容易被遗忘。

6.耗时、或较难解决对项目影响不大的问题一般会遗留到下个阶段解决。

7.发现BUG能够很快的解决,对相关的模块的测试影响比较小。

8.版本更换比较勤,影响到测试的速度。

9.要多与开发沟通。

10.要注意版本的更新情况。

11.测试人员几乎要参加整个项目组的所有会议。

四、敏捷测试中的关键过程

在一个sprint中,测试人员的工作内容主要分为五个部分:user story分析、测试用例设计开发、测试执行和分析、测试持续集成、回归测试。这五个部分的工作均要持续到sprint结束,只是启动时刻有早有晚,具体如下图所示


user story分析工作:敏捷测试是不断确认客户的需求得以圆满实现,因此对用户需求的分析、理解需要一直持续下去,发现有偏差及时纠正,及时设置合理的验收点、测试项。

Testcase Develop工作:设计测试用例,完成测试代码的开发、测试数据的准备,并及时与开发人员沟通软件接口,确保测试代码能够成功驱动业务代码。

Testing & Analysing工作:执行测试,统计测试覆盖率,分析测试结果,若发现bug,及时沟通,并协助定位bug。

Continuous Integration工作:将测试代码进行集成,以保证当前功能若被后续集成代码污染是能够及时得到报警,不断地完善软件产品的功能基线。

RegressionTesting工作:在完成全部user story后,对所有代码进行完整的回归测试,对所有bug修复情况进行确认。

五、敏捷测试人员怎么提高开发生产率呢?

在敏捷测试中,测试人员则是帮助加快进度的人,也就是提高生产率的人。

1、若缺陷发现越及时越容易修改

比如在1天内就能发现,则1天内发生的改动很少,很容易找到问题。这就需要一个自动测试工具来以接近实时地发现缺陷。

比如如果在每天能进行一次持续集成,则集成测试不能通过的原因会很单一很容易定位。设想一个数字电视系统,从授权/编码/加密/复用/调制/发送/接收/分流/解密/显示……环节很多信息很不透明,若在最后一刻才做集成,基本上无法判断问题出在哪里。

2、若发现缺陷的人就是制造缺陷的人,则越容易修改。

比如如果开发人员有自动测试工具能快速看看自己写的程序有没有问题,而不是交给测试人员发现,则更容易修改。想象一下编译器就知道了,如果编译活动都要委派给别人(最然现在很难想象,在软件开发的极早期其实就是这样的),效率会很低。

3、一个开发人员花费在查找和修改bug的时间越少,则开发效率越高。

另外一个推论是:在0缺陷的产品上增加一个功能,比缺陷缠身的产品上要容易得多。

因此1和2两条的推论就是开发效率提高。

六、敏捷测试的人做什么?

1. 不断推进自动化测试的效率和效果。

2. 不断推进持续集成的效率和效果。

3. 不断提高开发人员开发功能而非处理缺陷的时间(即使缺陷是开发人员自己制造自己修改)。

当然有一个前提,就是每个软件对待需求/进度/质量/成本的目标和策略是不同的,敏捷测试人员不能有本位主义,不能片面追求测试活动本身的效果,而是应该帮助开发团队达成其目标和策略。

七、总结:

测试人员是敏捷团队非常重要的一环,测试人员的成长对敏捷团队非常重要。从传统测试工作转入敏捷测试工作必然会遇到很多不适,但是只要坚持对敏捷的学习和各种新工具的开发使用,一切都能够适应下来。

谁都知道,变化,才是永远不变的,敏捷则是我们应对变化的武器。

欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ 群: 755431660 

posted @ 2018-11-21 17:53 51testing 阅读(145) | 评论 (0) | 编辑 收藏
 
精选22个Python实用技巧,秀技能必备这份技术列表!

被人工智能捧红的 Python 已是一种发展完善且非常多样化的语言,其中肯定有一些你尚未发现的功能。那么今天或许我能够让你学到一些新技巧。

Python的发展:

“人生苦短,我用 Python”,Python 的经典 slogan 讲究争分夺秒,自 20 世纪 90 年代初首次录入 TIOBE,Python 花了 10 年才首次进入指数前 10 名,随着它的不断应用与发展,Python 逐渐在网络安全与数据科学等领域大放异彩。

Python 最初是 Perl 的继承者,用于编写构建脚本,并且作为一种胶水语言,它被广泛用于连接各种软件组件。但随着不断应用与发展,Python 逐渐进入了其它领域,比如网络安全与数据科学。如今,在大型嵌入式系统中运行 Python 也变得非常普遍,并且随着人工智能与数据分析等领域的大热,Python 也得到了前所未有的高度关注,相信它也会保持向前。

目前在全球范围内它已经是大学的首选编程语言,同时也征服了工业界。越来越多人使用 Python,反映在 TIOBE 指数上就是它稳扎稳打地一步步向上爬,从前 10 到前 5,如今终于进入了前 3。

Python的必备技巧:

1、简洁的表达式

点评:Python因为简洁高效而出名,就是因为语法非常简单,而且内置了很多强大的数据结构:

比如我们可以大量用推导列表来生成很多简洁的代码

比如我们可以用if else组合,本来需要2-3行代码写的,一行搞定!

2、排序

忽略想起了一句台词,“有人的地方就有江湖”,那么有数组这样的数据结构一定涉及到排序,取最大值,取最小值。

点评:这个heapq库非常好用,尤其是我们在取一些列表的头部数据,比如最大几个,最小几个经常用到,很实用的一招!啥也不说了,赶紧背下来!

3、查询

排序和查询都是好基友,长的数据结构里面(字典,列表)里面我们一定会有查询,过滤的需求。有的时候,我们需要从一个很长的列表里面,找到某一个或者某一类的元素,怎么办,很简单,用高级函数filter :

1).用lambda配合filter过滤

点评:lambda是一个非常简洁的函数表达方式,短小精悍,加上配合filter一起使用,非常漂亮。比如我们通过 字符串里的startswith内置函数,非常方便的过滤出列表里面我们需要的数据!(Python3稍微改一下再filter之外再加一个list,不然生成的是迭代器地址)

点评:正则是一个非常不错的过滤方法,有的时候好的正则顶的上几十行代码,精通正则对玩数据分析,数据清洗是必需的技能!

4、碾平list

有的时候我们会遇到复杂的数据结构,比如列表里面套列表,层层嵌套,非常麻烦。可以碾平的方法:

传统方法

点评:这里面就是用递归来解决的,思路非常简单清晰,但是递归一定要有出口,设计的时候要注意。

另外还有两种高手的写法,理解起来比较复杂,这里就不过多说明,感兴趣的可以找一找。

5、带条件的推导列表

推导列表应该是我最喜欢的一种Pythonic方式,它的演变有很多手法,这几种都是非常常见的,多读几遍,背下来!

6、漂亮的添加字典的方法

设计数据结构的时候,字典是必须的!很多时候我们会用带下面的字典更新的方法,当然更好的是collections模块里面的defaultdict!

点评:dict.update还是比较平易近人的,这个dict(dict,**options)用法我第一次看到的时候也是楞了一些,什么鬼,现在见多了,也就习惯了!

Python的精选技巧:

1、all 或 any

Python 如此受欢迎,原因之一是因为它具有可读性和可表达性。

人们经常开玩笑说 Python 是“可执行的伪代码”,但是当你可以这样编写代码时,你就很难反驳了。

2、bashplotlib

你想在控制台(console)上绘制图形吗?

1$ pip install bashplotlib

这样你在控制台中就可以绘制图形了。

3、集合

Python 内置默认的数据类型,但有时它们的使用效果会不尽如人意。

幸运的是,Python 的标准库提供了 collections 模块,这个方便的附加库提供了更多的数据类型。

from collections import OrderedDict, Counter
x = OrderedDict(a=1, b=2, c=3)
y = Counter("Hello World!")

4、dir

你是否曾经有过深入 Python 对象内部并且观察它具备哪些属性的想法呢?

输入下述命令行:

以交互式运行 Python 时,这是一个非常实用的特征,并且可以动态地搜索正在使用的对象和模块。

5、emoji

Python 包含 emoji 模块,在这里!

$ pip install emoji

别以为我不知道你会偷偷下载...

6、原地交换两个数字

Python 提供了一个直观的在一行代码中赋值与交换(变量值)的方法,请参见下面的示例:

x,y= 10,20print(x,y)x,y= y,xprint(x,y)#1 (10, 20)#2 (20, 10)

赋值的右侧形成了一个新的元组,左侧立即解析(unpack)那个(未被引用的)元组到变量和 。

一旦赋值完成,新的元组变成了未被引用状态并且被标记为可被垃圾回收,最终也完成了变量的交换。

7、from _future_import

Python 流行的一个结果是新版本总是在开发中。新版本意味着新功能——除非版本已经过时

不过别担心。_future_module 允许用户通过函数导入新版本 Python 的功能。这就像是时间旅行,或是奇异魔法之类......

from __future__ import print_function
print("Hello World!")

为什么不导入花括号呢?

8、geopy

地理(Geography)对于程序员来说可能是一个具有挑战性的领域。但是 geopy 模块让它变得异常简单。

$ pip install geopy

它通过抽取一系列不同地理编码服务的 API 来工作,使用户获取一个地方的完整街道地址、纬度、经度,甚至海拔高度。

另外一个有用的功能是距离:它可以用你喜欢的度量单位计算出两个位置之间的距离。

9、链状比较操作符

比较操作符的聚合是另一个有时很方便的技巧:

n= 10result= 1< n< 20print(result)# Trueresult= 1> n<= 9print(result)# False

10、howdoi

受困于编程问题并且不记得之前看到过的解决方法?用户需要使用 StackOverflow ,但是不想离开终端?

那么需要使用这个非常使用的命令行工具 howdoi

$ pip install howdoi

无论你有什么问题,它都会帮你解答。

但是请注意,它会从 StackOverflow 的最高票答案中抓取代码,这意味着它的回答并不总是最有用的。

$ howdoi exit vim

11、inspect

Python 的 inspects 模块对于理解背后的原理是非常有帮助的。用户甚至可以在 inspect 模块上调用其方法!

下述代码示例使用

inspect.getsource()

来打印它的源代码。同时它也使用

inspect.getmodule()

来打印定义它的模块。

最后一行代码打印出自身的行号。

当然,除去这些简单的用途之外,inspect 模块对于理解代码的作用也非常有用。你也可以使用它来写自编文档代码。

12、交互环境下的 “_” 操作符

这是一个我们大多数人不知道的有用特性,在 Python 控制台,不论何时我们测试一个表达式或者调用一个方法,结果都会分配给一个临时变量: _(一个下划线)。

>>> 2+ 13>>> _3>>> print_3

13、List Comprehensions

关于 Python 编程,我最喜欢的事情之一是它的列表生成式(List Comprehensions),

这些表达式可以很容易编写出简洁的代码,读起来几乎就像自然语言一样。

14、Jedi

Jedi 库是一个自动完成和代码分析的库。它能够使编写代码更为快速、更为高效。

除非你正在开发自己的 IDE,否则你可能对使用 Jedi 作为编辑器插件最感兴趣。幸运的是,现在加载这个插件已经可以用了!不过,你可能已经用上Jedi 了。IPython 项目的代码自动完成功能就是使用Jedi来实现的。

15、map

Python 通过许多内置功能支持函数式编程。map() 函数是最有用的函数之一——特别是当它与 lambda 函数结合使用时。

在上面的例子中,map() 将一个简单的 lambda 函数应用于 x 中的每个元素。它返回一个 map 对象,该对象可以被转换成可迭代的对象,如列表或元组。

16、**kwargs

在学习任何语言的过程中,都会遇到许多里程碑。使用Python,理解神秘的 **kwargs 语法可能就是其中之一。

dictionary 对象前面的双星号允许您将该 dictionary 的内容作为命名参数传递给函数。

dictionary 的键是参数名,值是传递给函数的值。你甚至不需要叫它 kwargs!

当你想编写可以处理未预先定义的命名参数的函数时,这就非常有用了。

总结:

Python的小技巧还有很多,上面只是介绍了其中的一部分,入门容易精通难!在进阶的路上,有没有什么好的技巧和好的方法,就是不断总结,不断记笔记!尤其是好的用法,就像写作文一样,好的名言警句要多背诵一些,写作的时候,肚子里的墨水多了才能才思泉涌,写出更多的好代码。

欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ 群: 755431660

posted @ 2018-11-20 17:35 51testing 阅读(98) | 评论 (0) | 编辑 收藏
 
2018国内互联网公司薪资排行Top10!腾讯被逆袭,第一竟然是……

昨天,我的大学好友告诉了一个羡煞旁人的好消息,他成功入职了阿里巴巴,月薪20k,听到这个薪资我挤出了羡慕嫉妒恨的微笑,但接下来他又给了我一次深深的打击,他说:公司里90%以上的同事工资都比他高,他这只能算是倒数,当时我真的认为他在装X。

所以,为了满足我的好奇心,我四处搜寻资料:在互联网大公司工作到底能挣多少钱?最后,知道结果的我,才发现是贫穷限制了我的想象力……

好了,让我们来一起受下刺激,有刺激才有动力,有动力才能搞定 BAT!

第1名:阿里巴巴

近日一篇网文《阿里员工网络炫富:工作七年买了三套房》让阿里员工的薪资成了互联网人的热议焦点。

虽然不知道这篇网文的真假,但毋庸置疑阿里人的薪资是很高的。

从图中数据可以看出,阿里没有让广大网友失望,薪资排行第一,30K 以上的员工占比高达 63.3%。

一次偶然的机会,在知乎上看到了一篇帖子,是阿里内部员工“小A”的一天,让我们来羡慕羡慕:

总体上,阿里薪资结构还是令人羡慕的:12+1+3=16薪,年底的奖金为0-6个月薪资,90%人可拿到3个月。除了薪水,股票也是阿里人重要的收入之一,阿里的股票分年限行权,一般4年拿完(信息的真实性有待考证,但阿里的待遇确实让人羡慕)。

最后,让我们看一看马老师私人飞机,现在是不是更有动力努力拼搏了?

第2名:腾讯

以鹅厂著称的腾讯排名第二,平均月薪28770,其实腾讯不仅薪资高,员工福利也是出了名的好:

交通:腾讯是世界上除了公交运营集团以外最大的“公交”公司了。在深圳设有370条班车线路,1000多个站点,每天接送约1.3万人次上下班。

假期&活动:家属开放日、30天全薪病假、15天半薪事假、定期免费中医问诊、腾讯圣诞晚会……中秋月饼、端午粽子、元旦、圣诞庆祝活动,各种一线大腕,当红巨星皆来捧场。

住房:为了帮基层员工尽快拥有第一套住房,腾讯爸爸拿出了安居计划!简单来说就是在腾讯工作满3年、符合条件的员工,可以申请无息贷款购房,最高贷款额度50万元,并且无需任何担保!

重头戏:网上传得沸沸扬扬的王者荣耀100个月的年终奖。虽不确定其真实性,但各位给腾讯游戏充了多少钱,心里没点数嘛!30人的团队,瓜分一个亿的奖金啊……

知道真相的我眼泪落下来,得是多大的机遇才能享有如此丰厚的待遇……

第3名:滴滴

滴滴,可以说是打车行业的老大了,曾经与“快的”打车不相上下,后来发展为两家合并,也算是很狗血的剧情了。滴滴的薪资福利也是相当可观,平均月薪27540。

但前一阶段的“滴滴顺风车”事件,也让滴滴陷入了困境,安全风险是滴滴的一大挑战,后续发展,只能静观其变。

第4名:知乎

知乎可谓是高逼格实名制知识问答社区,只有你想不到的,没有你问不到的。

环境:公司在768创意园,藏在一栋三层楼房的顶楼。传说有一个迷人的阳台,除了露天烧烤,其他功能都被开发出来了。

比较轻松愉悦的工作环境,处处充满了工作的热情。同时知乎秉承海盗精神,会议室名字“掌舵室”“甲板”等。

网上关于知乎员工福利的消息较少,按照职友集的统计平均月薪24560。

第5名:搜狗

对于搜狗输入法和搜索引擎可谓是无人不知无人不晓,就我而言,身边有90%的人都在用搜狗输入法,微信内容和知乎问答也可以轻松在搜狗搜索引擎中找到,非常便利。

前景分析:搜狗有望成为仅次于百度的中文搜索工具,未来或将坐稳第二把交椅。

搜狗员工平均薪资23350,据说财报数据显示,搜狗2017年全年营收为9.084 亿美元,较2016年增长38%,难怪员工薪资高。

员工福利:知乎网友提供数据显示,15天带薪年假,一年15个月薪水,上下班可以弹性2小时,全年基本0加班。

这么好的福利待遇真的让人心动不已……

第6名:百度

说实话,我看到这个着实一惊,百度居然排行第六。平均员工月薪22030,据说百度每年招聘应届生技术产品人员1000人左右,技术岗位级别和阿里类似,分为T序列12级。

百度薪资结构为月薪×14.6(12+0.6+2),其他岗位月薪×14,T5以上为关键岗位,另外有股票。

福利待遇:公司内部一天有两次小推车送点心到工位,可谓是贴心至极。其特色设施当属太空舱和旋转滑梯,坐过滑梯的都表示极其刺激,一滑到底,让人心驰神往。

这办公环境设计的很刺激,真的有点迫不及待想去上班的冲动,但会给我机会吗?!

第7名:奇虎360

国内最著名的“流氓软件”,相信用过360产品的人都领教过他的“魅力”。但客观来说,痛恨它的特别痛恨,喜欢它的很喜欢。

技术上来说,他的杀毒能力还是数一数二的,安全十分有保障。从用户体验度考虑也是蛮良心的。

薪资待遇:奇虎360平均月薪21560,一般实行14~16薪(12薪+2-3个月奖金),P3以上有配股,P2~P4的薪水与阿里的P7~P9薪水相当。

而且据说360强调coding能力,即便是总监也要编程,选择候选人看重其解决问题的能力,对教育背景不是很关注,团队的技术能力不比百度差。

第8名:谷歌

谷歌虽说退出中国,但是在中国还是依然有办事处的,而且在2017年谷歌开发者大会上,谷歌云首席科学家李飞飞宣布成立谷歌AI中国中心,据说如今其数量已经扩展到了近150人。

职友集上显示谷歌平均月薪21430,说好的AI工程师年薪百万呢?

第9名:华为

最出乎我意料的还是,华为居然在前10名中垫底了,尽管月薪将近两万,但是和前8名比起来,确实稍显逊色。

尽管月薪不算最高,但是公司福利和环境在国内可谓是数一数二了,餐厅、图书馆、公寓、游泳池一应俱全。

不过,去年华为的年报显示2017年的雇员费用达到1068亿,假设如今员工总人数为18万人,那么平均员工年薪为58万,兴许真如传言对于华为的员工来说月薪只是零花钱,年终才是重头戏。

第10名:唯品会

前十名的最后一个唯品会,平均月薪19660。

Top10我们已经基本了解了,是不是有一些你认为高薪资好发展的没有上榜啊?

其实,优秀的企业还有很多,只是平均月薪水平比不过前10,下面为大家总结一下:

余下10家企业薪资排行如下:

以上薪资的数据来源大部分来源于职友集,可能与实际情况存在误差,但还是具有参考意义的。

其实高工资也意味着高付出,什么工作都不是好干的,你能拿到那么高的工资说明你一定付出了相应的努力。

​欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                     群:                    755431660

posted @ 2018-11-19 17:31 51testing 阅读(216) | 评论 (0) | 编辑 收藏
 
程序员,你碰到过的最难调的Bug是什么样的?

Bug无论是对于测试还是开发来说,应该都不陌生,虽然我们经历的大部分bug有的被其他人修复了并且在互联网分享出来了,这时候我们通过Stackoverflow、Baidu、Google等搜索引擎找到答案了。

 

但是我们在工作中也可能会遇到一些疑难的bug,这里bug我们在搜素引擎上找不到解决方案,可能好几天都不得其解,这些迟迟没有解决的bug往往搞得人焦头烂额。

那作为一个苦逼的程序员,究竟碰见过哪些高难度的bug呢?下面,我们来看看他们与bug的故事。

 ​

程序员小罗:

写JS,自己手机没电了,拿同事老张的安卓机调试,很简单的获取用户微信昵称,结果死活获取不到,一直显示为null。应该是跨平台问题,因为之前在自己iPhone上是没有bug的,拼命看api文档,但是都没提到这方面。急死我了。
......刚刚老张告诉我他的昵称就是null。......老张已被打死......前面夸张修辞,老张最后当然没死,腿打断了而已。

电商行业程序员小马哥:

也谈谈自己遇到的一个bug吧,我之前是做电商的,某较大的电商平台,突然有一天,C2C的店主反馈,看到的订单不是自己的,看到后台的商品列表也不是自己的。
当时在睡午觉,看到这个问题,立马吓醒了,平时5个投诉就是一个故障单,那还都是一点体验上的小问题,这种订单混乱,商品混乱的错误,真是要紧急死了
于是,主管,总监都来看这个问题,一群大佬在后面看着,赶紧找最近几天的发布,测试情况,一个个回退,一个个检查,最后都无法解决问题,要知道时间一分一秒过去,半个小时还解决不了就要出大事了
后续又有用户来投诉,直接电话联系,远程控制电脑,发现操作起来巨慢,于是顺口问了一下用户的网络是什么网络。
结果他说是:“某城宽带”,一瞬间,有点感觉了,继续问其他几个投诉的客户都是“某城宽带”,然后我们打电话到那个宽带的运营商,得到的回复是“年底了,为了省流量,他们做了一部分缓存”
他们做了缓存做了缓存……缓存……存……
可是为毛TM的动态请求还做缓存啊,修改商品和订单的时候,随机返回成功或者失败 ......
1.这个和时间戳也没关,我们都加了token的,他们也忽略了

2. 你没猜错,他们把POST和GET动态请求也缓存了,就是说你提交了一个POST修改商品的请求,他从环缓存里面随便丢个回复给用户,用户感觉修改成功了,其实请求根本没到我们这边,是的,就是这么丧心病狂。

系统管理员老王:
从前我是个系统管理员,平时去机房登录服务器时都是站着操作。有一次腰疼,搬了个凳子坐在了机器前面,完蛋,死活登录不进去,提示密码错误。于是我站了起来,重新输入了一次密码,进去了。
后来我觉得奇怪,于是抽时间做了测试,发现:只要一坐下,就密码错误,站起来就好了。
这个 Bug 在我的职业生涯中持续了好几年,一直以为是什么灵异事件。
直到有一天公司升级设备给我换了个键盘。原来是老键盘上有两个键装反了,站着打字是看着键盘,坐着盲打就错了,真的是很无语啊……

海外程序员Steven:

曾经听说过一个让人目瞪口呆的bug,分享给大家。该bug发生于麻省理工,当时其系统管理员接到统计系主任的求助电话,主任在电话中说:“咱们的邮件系统无法发送距离 500 英里以外的地方,准确地说好像是 520 英里。”

此时的系统管理员内心是“毫无波澜”的,嗯!

然后,他开始了漫长且苦逼的测试,最后发现邮件服务器操作系统(SunOS)被人更新了,因为操作系统发行版往往配备旧软件,因此邮件软件实际上是被降级了(Sendmail 8 -> Sendmail 5) ,最后的结果是:Sendmail5 试图解析Sendmail8 的配置文件。

所以,为什么一定是 500 英里呢?且看大神讲解:

原因是这样的,Sendmail 5面对陌生的配置文件,凡是不理解的部分都会忽略,凡是没设置过的配置项自动设置成0。这样其中有一个被设置成0,只一向就是(连接远端SMTP服务器的超时时间)timeout to connect to the remote SMTP server。后来经过实验,发现0秒的timeout会导致Sendmail在3毫秒后中断连接。

所以,你会问为啥是500miles?

在当年,MIT的校园网是没有那么多router的,也就没那么多网络延迟,所以连接一个远端主机的时间大概是光所需的时间。于是3毫秒,就意味着:

0.003*3*108 *0.001*0.621=558.9000000000001

558英里。也就是588英里以外的服务器,都无法连接到,而588以内的服务器,都可以正常通信。

面对这些各式各样难调的bug,那程序员如何快速高效的改 bug呢?

先根据情况试一下下面的步骤:
1. 换个环境试试
2. 换个用户试试
3. 换个操作方式试试
4. 换一下数据试试
5. 换个浏览器试试
6. 换个版本试试
根据上的情况搞清楚下面这几个问题:
1. 这个BUG什么情况下出现?什么情况下不出现?两种情况的区别在哪里?
2. 这个BUG之前没有,现在出现了,中间都动了什么?
3. 这个BUG生产环境出现测试环境不出现,两个环境区别是什么?
4. 同样的功能,这样操作没有BUG,那样有BUG,两个操作的区别是什么?
这些问题搞清楚了,先尝试采用代码回退、配置调整、环境替换等方式验证BUG是否会消失,然后再找其中的原因。
下面列出一些常见的疑难BUG类型以及每种BUG的诊断方法:
1. 输出结果与预期不符,这种BUG一般都是由于代码逻辑错误造成的,如果能在开发环境重现,最好解决方法就是单步调试,设定每一步代码的预期结果,然后跟踪判断实际结果是否与预期结果一致。
2. 系统异常报错,这种情况下需要提取日志,找出错误堆栈信息,这时候最重要的事情是要把堆栈信息看懂、看完整,而且往往堆栈信息是一个套一个输出的。
3. 系统Crash,这个问题常见的原因是负载过高、并发过高、或者配置错误。最常见的就是内存溢出。这时候要首先排除配置错误的原因,主要靠查看Crash Log来分析原因,再排查硬件、内存、网络等方面的设置,看是否有配置错误的地方。再找不到就在测试环境用开发模式进行压测和调试。
4. 系统响应缓慢,这种问题一般是存在资源竞争或者系统资源不足的情况,先检查服务器内容、CPU、网络情况,如果服务器压力过大,排查应用系统负载情况是否异常,如果这些数据都正常,就需要排查代码中的性能瓶颈。特别需要留意依赖第三方接口的情况,比如同步的方式发送邮件、发送短信、写文件等。

总结:

bug千奇百怪,不是每个bug都需要经历所有流程的。每个步骤都有它的难点。
有些bug难在事发点的定位,比如多线程,异步逻辑中的bug;
有些bug难在原因很难分析,多数是你看不懂代码;
有些bug难在你不敢改,那是你的修改方案没有做好充分的分析。

 欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                         群:                        755431660 


posted @ 2018-11-16 17:48 51testing 阅读(106) | 评论 (0) | 编辑 收藏
 
仅列出标题
共55页: First 13 14 15 16 17 18 19 20 21 Last