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

评论排行榜

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

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

Python为啥这么牛?一行Python代码除了画图竟然还有这些功能!

在开始这个话题之前,我想问大家:什么是 Python?根据 Python 之父 Guido van Rossum 的话,Python是:一种高级程序语言,其核心设计哲学是代码可读性和语法,能够让程序员用很少的代码来表达自己的想法。

对于我来说,学习 Python 的首要原因是,Python 是一种可以优雅编程的语言。它能够简单自然地写出代码和实现我的想法。

另一个原因是我们可以将 Python 用在很多地方:python是真的火!它几乎可以做各个领域各个平台,包括Web开发,网络运维,科学计算,3D游戏开发,图形界面开发,人工智能等。

除了大家熟悉的知乎、豆瓣,已经有越来越多的公司开始用 Python 来快速搭建网站产品。相应的,也有越来越多的公司开设了Python Web的职位,那么让我们来学习一下 Python 吧。

Python基础

1. 变量

你可以把变量想象成一个用来存储值的单词。我们看个例子。

Python 中定义一个变量并为它赋值是很容易的。假如你想存储数字 1 到变量 “one” ,让我们试试看:

one = 1

超级简单吧?你只需要把值 1 分配给变量 “one” 。

two = 2

some_number = 10000

只要你想,你可以把任意的值赋给任何其他的变量。正如你从上面看到的那样,变量 “two” 存储整型变量 2 ,变量 “some_number” 存储 10000 。

除了整型,我们还可以使用布尔值(True/Flase)、字符串、浮点型和其他数据类型。

# booleanstrue_boolean = Truefalse_boolean = False# stringmy_name = "Leandro Tk"# floatbook_price = 15.80

2. 控制流程:条件语句

“If”使用一个表达式来判断一个语句是True 还是False ,如果是True,那么执行if内的代码,例子如下:

if True:

print("Hello Python If")if 2 > 1:

print("2 is greater than 1")

2 比 1 大,所以 print 代码被执行。

当“if”里面的表达式是 false 时,“else” 语句将会执行。

if 1 > 2:

print("1 is greater than 2")else:

print("1 is not greater than 2")

1 比 2 小,所以“else”里面的代码会执行。

你也可以使用“elif”语句:

if 1 > 2:

print("1 is greater than 2")elif 2 > 1:

print("1 is not greater than 2")else:

print("1 is equal to 2")

3. 循环和迭代

在 Python 中,我们可以用不同的形式进行迭代。我会说下 while 和 for。

While 循环:当语句是 True 时,while 内部的代码块会执行。所以下面这段代码会打印出 1 到 10 。

num = 1while num <= 10:

print(num)

num += 1

while 循环需要循环条件,如果条件一直是 True ,它将会一直迭代,当 num 的值为 11 时,循环条件为 false 。

另一段代码可以帮你更好的理解 while 语句的用法:

loop_condition = Truewhile loop_condition:

print("Loop Condition keeps: %s" %(loop_condition))

loop_condition = False

循环条件是 True 所以会一直迭代,直到为 False 。

For 循环:你可以在代码块上应用变量 “num” ,而 “for” 语句将为你迭代它。此代码将打印与 while 中相同的代码:从 1 到 10 。

for i in range(1, 11):

print(i)

瞧见没?这太简单了。i 的范围从 1 开始一直到第 11 个元素(10是第十个元素)

这么火的Python,只用一行,能够实现哪些好玩的功能呢?

1、一行代码启动一个Web服务

python -m SimpleHTTPServer 8080 # python2

python3 -m http.server 8080 # python3

2、一行代码实现变量值互换

a, b = 1, 2; a, b = b, a

3、一行代码解决FizzBuzz问题

FizzBuzz问题:打印数字1到100, 3的倍数打印“Fizz”, 5的倍数打印“Buzz”, 既是3又是5的倍数的打印“FizzBuzz”

print(' '.join(["fizz"[x % 3 * 4:]+"buzz"[x % 5 * 4:] or str(x) for x inrange(1, 101)]))

4、一行代码输出特定字符”Love”拼成的心形

print('\n'.join([''.join([('Love'[(x-y) % len('Love')] if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 <= 0 else ' ') for x in range(-30,30)]) for y in range(30, -30, -1)]))

5、一行代码输出Mandelbrot图像

Mandelbrot图像:图像中的每个位置都对应于公式N=x+y*i中的一个复数

print('\n'.join([''.join(['*'if abs((lambda a: lambda z, c, n: a(a, z, c, n))(lambda s, z, c, n: z

6、一行代码打印九九乘法表

print('\n'.join([' '.join(['%s*%s=%-2s' % (y, x, x*y) for y in range(1, x+1)])for x in range(1, 10)]))

7、一行代码计算出1-100之间的素数(两个版本)

print(' '.join([str(item) for item in filter(lambda x: not [x % i for i inrange(2, x) if x % i == 0], range(2, 101))]))

print(' '.join([str(item) for item in filter(lambda x: all(map(lambda p: x % p!= 0, range(2, x))), range(2, 101))]))

8、一行代码输出斐波那契数列

print([x[0] for x in [(a[i][0], a.append([a[i][1], a[i][0]+a[i][1]])) for a in([[1, 1]], ) for i in range(30)]])

9、一行代码实现快排算法

qsort = lambda arr: len(arr) > 1 and qsort(list(filter(lambda x: x <= arr[0],arr[1:]))) + arr[0:1] + qsort(list(filter(lambda x: x > arr[0], arr[1:]))) orarr

10、一行代码解决八皇后问题

[__import__('sys').stdout.write('\n'.join('.' * i + 'Q' + '.' * (8-i-1) for iin vec) + "\n========\n") for vec in__import__('itertools').permutations(range(8)) if 8 == len(set(vec[i]+i for iin range(8))) == len(set(vec[i]-i for i in range(8)))]

11、一行代码实现数组的flatten功能:将多维数组转化为一维

flatten = lambda x: [y for l in x for y in flatten(l)] if isinstance(x, list)else [x]

12、一行代码实现list, 有点类似与上个功能的反功能

array = lambda x: [x[i:i+3] for i in range(0, len(x), 3)]

13、一行代码实现求解2的1000次方的各位数之和

print(sum(map(int, str(2**1000))))

总结:

随着人工智能的发展与应用,Python编程语言受到世界各界人士的关注,编程圈金句从“人生苦短,我学Python”转变成了“学完 Python,可以上天”,Python工程师也成为一个热门职业,就业薪资高,发展前景广阔。

尽管我们都会调侃「又骗我Python」,但在编程语言排行榜中,因为人工智能的火热,也因其语言本身对新手友好、易于上手、功能强大、高效灵活,年轻Python 的「受欢迎度」就这样直线上升,甚至已经威胁到Java、C/C++多年打下的江山了。

Python俨然已经成为2018最火的编程语言,虽然Python不能让你找到对象,但是你决对可以成为有钱的单身狗。还有具有现实意义的一点,干Python的,薪资相对都不错,当然你需要花一段时间来学习Python。

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

posted @ 2018-09-25 17:47 51testing 阅读(190) | 评论 (0) | 编辑 收藏
 
新手如何快速发现软件的Bug?这9条测试原则要记牢!

“人无完人,金无足赤”,看起来再没有缺点的事物,都会有隐藏的漏洞。软件缺陷,顾名思义,是计算机软件或程序中存在的某种破坏正常运行能力的问题、错误或者隐藏的功能缺陷,也就是我们常常说的BUG!

对于软件测试的工作而言,找bug就是这个岗位本身立足的职责,那么对于很多新人和新入行的同学们来说,这个过程会有点苦逼,毕竟经历的项目经验不多,想快速的切入寻找bug往往会比较痛苦。那下面我就以自身的经验来普及下如何在工作快速的去定位找到bug。

以下从个人的测试经验和测试流程上说一下我的想法。

一、测试坚持的原则

1、测试前做好工作计划

俗话说不打无准备的仗,测试前做好工作计划,首先明白该版本如何开展测试,这个版本的测试重点在哪里,这个前期可以加强跟研发的沟通,弄明白测试的重点。然后根据重点规划测试工作。

2、尽早开展测试

版本提测后尽早展开测试工作,一方面缺陷越早的暴露后期研发的维护成本越低,另一方面根据自己的测试经验来看一个测试周期中发现bug的曲线图是一个不对称的抛物线,前期的工作效率是非常高的,这可能跟测试人员的求知欲有关,测试周期越长后期发现bug的概率越低,所以版本提测后尽快展开测试如果没有高优先级的任务不要中断测试,不然反过头来在进行测试时已找不到了当时灵敏的嗅觉了。

3、二八原则

软件中80%的bug存在于20%的代码中,这要求测试人员对产品的业务及内部逻辑比较了解,知道哪一块的代码容易出问题。

4、及时反馈

无论是软件开发还是软件测试沟通是必不可少的,测试发现bug后除了将bug的毕现的步骤及详细结果提交到缺陷管理库中还需要知会相关的研发人员,缩短bug的流转周期。实时将软件的质量情况上报到项目经理或产品经理,他们可以根据版本质量情况作出相应的调整。及时反馈客服、生产、用户的问题并将问题转化为需求或测试用例。

二、如何快速发现bug?

1、尽快熟悉公司的产品业务,根据产品的业务属性来熟悉产品的业务流程,这样才能迅速找出软件中存在的一些重要的缺陷,这样发现的软件的价值才是有价值的,否则即使你能找到一些软件缺陷,那也是纯软件的缺陷,价值不大。

2、把自己当成是用户,把自己当成用户去使用该软件,比如在试用软件的过程中,思考用户是这样操作的么

3、善于怀疑 ,世界上没有绝对正确的,总有错误的地方,具有叛逆心理,别人认为不可能发生的事,我却认为可能发生;别人认为是对的,我却认为是错的。假如一个水平很高的程序员编写的程序,不要有“他写的这个程序应该没有问题吧”这种想法,这样很容以遗漏软件中的Bug。

4、不用让程序开发员“用户不会这样操作”的观点说服自己,遇到这样的情况,你要坚持自己的正确的观点,把这种现象作为一个Bug。

5、在测试的过程中要跟踪一条数据的完整流程,比如“点击商品—收藏商品—加入购物车—订单结算—付款—消费二维码—消费—二维码失效”,如果在测试软件过程中业务流程逻辑都走不通的话,还么这个软件测试与不测试就没有什么区别的。

6、在测试的过程中要跟踪一条数据的完整程,要注意的事项 ,程序员提交新的版本后,作为测试人员应该立即与程序员沟通这个修改的功能,并了解这个新修改的功能影响那些功能。而被影响的功能,是在回归测试中优先重点测试的地方,而且也是最容易产生Bug的地方。

7、软件的边界值 ,众所周知软件最容易在边界值上出现问题,所以作为测试人员一定要在边界值上多测试,比如测试用户输入框中的数值的最大数和最小数,以及为空的情况;

8、非法容错性,比如在需要输入数字的地方输入字母,在需要输入字母的地方输入数字,在需要用户输入的文本框中拷贝字数很多的整编文章到这里测试看看软件是如何做处理的;

9、学习他人经验:三人行必有我师焉,人外有人,天外有天。

三、测试经验和流程

测试计划制定:测试计划的制定可以分为如下几步。

首先,按照测试类型依据的标准确定需要测试的特性,如登记测试需要考虑用户文档、常规要求、功能性、可靠性、易用性这个五个特征;

其次,确定需要测试的子特性,如功能性要求考虑安装性、适合性、正确性、一致性这四项;

然后,选择相应的测试策略,即对需要测试的几大特性该如何测试,如需要检查用户文档是否完整,需要验证功能是否正确等;

再次,需要配置测试的环境,确定测试需要的硬件和软件设备是否准备齐全;

最后,需要确定测试的人员及日程安排,为及时高质量的完成测试工作做准备,这一过程需要形成测试计划文档;

测试用例的设计:测试用例是测试工作的核心,如何设计出用最小的测试用例集找出软件中尽可能多的缺陷的测试用例,是一个很值得积累的经验;

在任何情况下,都应该使用边界值分析法,经验表明,这种方法发现错误的能力最强;

必要时使用等价类划分法补充测试用例;

必要时采用错误推测法补充测试用例;

如有输入条件的组合,就从输入条件极其组合开始测试

测试执行:手工执行功能化测试用例,并检查UI设计的Bug,在功能手工测试之后进行功能、性能、接口等自动化测试。

测试结果报告:根据不同的测试类型出具不同的测试报告,主要分析在测试中出现的问题,并对软件提出评估报告和结果建议。

总结:

当遇到bug时,不要胆怯,要对它深入分析,我们可以明白这个bug的机制:为什么会产生?如何去预防它?下一次我们如何更容易地发现它?只要花一点时间去理解我们的 bug,而不是仅仅是尽快修正它,我们就可以从中得到经验。

​

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

posted @ 2018-09-21 17:27 51testing 阅读(230) | 评论 (0) | 编辑 收藏
 
安全测试员必知!5大常见的Web安全漏洞及测试方法归纳!

一般来说,版本功能测试完成,对应的用例也实现了自动化,性能、兼容、稳定性测试也完成了以后,我们就需要考虑到系统的安全问题,特别是涉及到交易、支付、用户账户信息的模块,安全漏洞会带来极高的风险。

一、安全测试6项基本原则:

认证:对认证的用户的请求返回

访问控制:对未认证的用户的权限控制和数据保护

完整性:用户必须准确的收到服务器发送的信息

机密性:信息必须准确的传递给预期的用户

可靠性:失败的频率是多少?网络从失败中恢复需要多长时间?采取什么措施来应对灾难性的失败?(个人理解这个地方应该更偏向于容错容灾测试的范畴)

不可抵赖:用户应该能证明接收到的数据来自特定的服务器

二、常见的安全测试内容

权限控制

SQL注入

URL安全测试

XSS(跨站脚本攻击)

CSRF(跨站请求伪造)

URL跳转漏洞

其他安全方面的考量

三、Web应用程序中是什么导致安全性问题呢?一般有以下几个原因:

1、复杂应用系统代码量大、开发人员多、难免出现疏忽。

2、系统屡次升级、人员频繁变更,导致代码不一致。

3、历史遗留系统、试运行系统等多个Web系统共同运行于同一台服务器上。

4、开发人员未经过安全编码培训或者公司根本就没有统一的安全编码规范。

5、测试人员经验不足或者没经过专业的安全评估测试就发布上线。

6、没有对用户的输入进行验证,举几个例子:

1)永远不要信任用户的输入,要对用户的输入进行校验

2)数字型的输入必须是合法的数字

3)字符型的输入中对 编码符号要进行特殊处理

4)验证所有的输入点,包括Get,Post,Cookie以及其他HTTP头

四、安全性测试的常见漏洞及解决办法:

1、XSS跨站脚本攻击

SS与SQL注入相似,XSS是通过网页插入恶意脚本,主要用到的技术也是前端的HTML和JavaScript脚本。当用户浏览网页时,实现控制用户浏览器行为的攻击方式。

一次成功的XSS,可以获取到用户的cookie,利用该cookie盗取用户对该网站的操作权限;也可以获取到用户联系人列表,利用被攻击者的身份向特定的目标群发送大量的垃圾信息,等等。

XSS分为三类:存储型(持久性XSS)、反射型(非持久性XSS)、DOM型。

测试方法:

在数据输入界面,输入:<script>alert(/123/)</script>,保存成功后如果弹出对话框,表明此处存在一个XSS 漏洞。

或把url请求中参数改为<script>alert(/123/)</script>,如果页面弹出对话框,表明此处存在一个XSS 漏洞。

2、SQL注入

SQL注入是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符

串,最终达到欺骗服务器执行恶意的SQL命令。

SQL注入可能造成的危害有:网页、数据被篡改,核心数据被窃取,数据库所在的服务器被攻击,变成傀儡主机。

例如有些网站没有使用预编译sql,用户在界面上输入的一些字段被添加到sql中,很有可能这些字段包含一些恶意的sql命令。如:password = "1' OR '1'='1";即使不知道用户密码,也能正常登录。

测试方法:

在需要进行查询的页面,输入正确查询条件 and 1=1等简单sql语句,查看应答结果,如与输入正确查询条件返回结果一致,表明应用程序对用户输入未进行过滤,可以初步判断此处存在SQL注入漏洞

修改建议:

对用户的输入进行校验,可以通过正则表达式,或限制长度;对以下关键字进行转换等;

||alert|and|exec|execute|insert|select|delete|update|count|drop|chr|mid|master|truncate|declare|sitename|netuser|xp_cmdshell|or|+|,|like'|and|exec|execute|insert|create|drop|table|from|grant|group_concat|column_name|information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|chr|mid|master|truncate|declare|or|--|+|,|like|//

不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取;

不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接;

应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。

3、URL跳转漏洞

URL跳转漏洞,即未经验证的重定向漏洞,是指Web程序直接跳转到参数中的URL,或者在页面中引入了任意开发者的URL,将程序引导到不安全的第三方区域,从而导致安全问题。

测试方法:

1.使用抓包工具抓取请求。

2.抓取302的url,修改目标地址,查看是否能跳转。

ps:不过现在很多跳转都加了referer的校验导致攻击者跳转失败。

4、文件上传漏洞

文件上传攻击是指攻击者上传了一个可执行文件到服务器上,并执行。

这种攻击方式是最直接有效的。上传的文件可以是病毒、木马、恶意脚本或者是webshell等等。

Webshell是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以说是一种网页后门。攻击者在受影响系统防止或插入webshell后,可以通过webshell方便进入系统,达到控制网站服务器的目的。

测试方法:

对上传的文件类型、大小等进行严格校验,禁止上传恶意代码的文件。

对相关目录的执行权限进行校验,可以通过浏览器访问Web 服务器上的所有目录,检查是否返回目录结构,如果显示的是目录结构,则可能存在安全问题。

5、CSRF跨站伪造请求攻击

CSRF,利用已登录的用户身份,以用户的名义发送恶意请求,完成非法操作。

例如:用户如果浏览并信任了存在CSRF漏洞的网站A,浏览器产生了相应的cookie,用户在没有退出该网站的情况下,访问了危险网站B 。

危险网站B要求访问网站A,发出一个请求。浏览器带着用户的cookie信息访问了网站A,因为网站A不知道是用户自身发出的请求还是危险网站B发出的请求,所以就会处理危险网站B的请求,这样就完成了模拟用户操作的目的。这就是CSRF攻击的基本思想。

测试方法:

1. 同个浏览器打开两个页面,一个页面权限失效后,另一个页面是否可操作成功,如果仍然能操作成功即存在风险。

2.使用工具发送请求,在http请求头中不加入referer字段,检验返回消息的应答,应该重新定位到错误界面或者登录界面。

总结:

1、永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式或限制长度;对单引号和双"-"进行转换等。

2、永远不要使用动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取。

3、永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

4、不要把机密信息直接存放,加密或者Hash掉密码和敏感的信息。

5、应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。

6、SQL注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用SQL注入检测工具jsky、MDCSOFT SCAN等。采用MDCSOFT - IPS可以有效的防御SQL注入、XSS攻击等。

​

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

posted @ 2018-09-20 17:28 51testing 阅读(154) | 评论 (0) | 编辑 收藏
 
大佬谈接口自动化,我是这样做测试框架开发的……

当你打开这篇文章就说明你已经对接口测试产生了兴趣~不管你是刚接触还是没接触过,都不妨看一看,希望对你以后的职业生涯有帮助。

同时随着AI的发展,根据2017年数据表明,只会表面点点点的测试工程师即将被取代,掌握接口测试、开发语言、测试框架开发,可从事高级及以上测试岗位,年薪普遍可达25~50W。

首先,要了解接口自动化测试,你得知道什么是接口?

接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。

系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的,比如说咱们用的app、网址这些它在进行数据处理的时候都是通过接口来进行调用的。

程序内部的接口:方法与方法之间,模块与模块之间的交互,程序内部抛出的接口,比如bbs系统,有登录模块、发帖模块等等,那你要发帖就必须先登录,要发帖就得登录,那么这两个模块就得有交互,它就会抛出一个接口,供内部系统进行调用。

什么是接口测试?

其实我觉得接口测试很简单,比一般的功能测试还简单(这话我先这样说,以后可能会删O(∩_∩)O哈!),现在找工作好多公司都要求有接口测试经验,也有好多人问我(也就两三个人)什么是接口测试,本着不懂也要装懂的态度,我会说:所谓接口测试就是通过测试不同情况下的入参与之相应的出参信息来判断接口是否符合或满足相应的功能性、安全性要求。

我为啥说接口测试比功能测试简单呢,因为功能测试是从页面输入值,然后通过点击按钮或链接等传值给后端,而且功能测试还要测UI、前端交互等功能,但接口测试没有页面,它是通过接口规范文档上的调用地址、请求参数,拼接报文,然后发送请求,检查返回结果,所以它只需测入参和出参就行了,相对来说简单了不少。

为什么要做接口自动化测试?

大家都知道,接口其实就是前端页面或APP等调用与后端做交互用的,所以好多人都会问,我功能测试都测好了,为什么还要测接口呢?

OK,在回答这个问题之前,先举个例子:

比如测试用户注册功能,规定用户名为6~18个字符,包含字母(区分大小写)、数字、下划线。首先功能测试时肯定会对用户名规则进行测试时,比如输入20个字符、输入特殊字符等,但这些可能只是在前端做了校验,后端可能没做校验,如果有人通过抓包绕过前端校验直接发送到后端怎么办呢?

试想一下,如果用户名和密码未在后端做校验,而有人又绕过前端校验的话,那用户名和密码不就可以随便输了吗?如果是登录可能会通过SQL注入等手段来随意登录,甚至可以获取管理员权限,那这样不是很恐怖?

那么如何将接口测试框架集成到项目里,这也是个大的命题,包括深入的了解接口的原理,如何开发一个企业级的接口,以及如何用主流工具进行接口测试,如何自己搭建一套接口自动化测试框架,并且集成到企业级的项目中。如何模拟企业实际项目运作模式,这些我都有在博为峰网校有课程分享过经验,感兴趣可以了解一下。

所以,接口测试的必要性就体现出来了:

  ①、可以发现很多在页面上操作发现不了的bug

  ②、检查系统的异常处理能力

  ③、检查系统的安全性、稳定性

  ④、前端随便变,接口测好了,后端不用变

总结:

做好接口自动化测试并没有那么简单,当然只要找对方法和工具,一切都没有你想象中那么复杂!

什么样的自动化测试工具适合做接口?Jmeter?postman?

接口是怎么开发的呢?

如何将接口测试框架集成到项目里?  

跟着组团一起学习吧!!直播报名

<接口测试行业大佬带你从青铜上王者>

加微信,备注“试听”

申请试听(*名额有限)

​

点击查看详情>>http://h.atstudy.com/atstudy/live

posted @ 2018-09-19 16:17 51testing 阅读(337) | 评论 (0) | 编辑 收藏
 
测试菜鸟和老鸟的区别在哪里?这十张图道出了真相!

关于软件测试行业前景的问题,是很多在行业外观望的同学甚至是刚刚入行的朋友都密切关注的一个问题,毕竟这个问题关系到自己未来的收入,甚至是决定自己的职业发展方向。

但局外人只知道IT工作高薪,却不知各中艰辛,只有局中人才最有发言权,我采访了新老两位测试猿,结果十分扎心,测试菜鸟和老鸟的区别在哪里?下面让我们一同见证:

简直“没有对比,就没有伤害”,总结了上面那么多新老测试猿的区别,只想告诉你:如果你没有一颗发现缺陷之美的心态、没有一颗以提高质量为前提来投入工作中、那么就算你其他做得再好也不过是万千普通软件测试从业人员中的一枚,无法更好的提升自己。纵使你是五年、十年工作经验的测试人员,仅此一点“不学习就会落后”!!

下面是测试老鸟给新手的一些建议,希望可以给刚入门或者处于迷茫期的朋友们一些帮助!

1、作为测试人员,你必须熟悉软件开发流程

软件测试需熟悉软件开发流程,重点掌握软件测试本身部分过程以及测试与各个阶段的接口,有哪些文档需要编写,编写的内容是什么。其它方面不需要很多细节都了解,那是QA和EPG的事。

2、作为测试人员,你必须熟悉产品所涉及的业务

测试人员主要的测试还是功能测试,那怎么做好功能测试,在仔细、耐心的基础上还需要精通产品的业务。实际是往往项目组中的培训是不够的,我个人的经验是如果有条件能够参加需求调研的话是最好的。如果是产品化的产品有机会的最好去工程实施的一两次。

3、测试人员技术的要求

测试技术的要求我就不多说了,大家关心的可能是开发工具,我个人认为测试人员必须精通一门比较大众化语言,如C、或JAVA,否则在测试驱动化测试时,就需要开发人员协助。以前我碰到这么一个需求“在多个用户同时操作,一个用户插入十万条数据、一个用户UPDATE十万条数据,一个用户删除十万条数据”如果我们自己不能写点小程序,是很受制于人。还有必须对自己项目所使用的开发工具有所了解,要做到能安装、搭建、编译、调试问题(能找到错误点)。

4、测试人员对于测试工具

现在网上测试工具很多,我看了很多人天天在说,学哪种好。我是根据测试不同需求去选一种比较大众化,适合目前情况的工具,比如果我就划分三种:测试管理、功能测试、性能测试。根据这三种去找适合的工具,学习并应用到项目里。

5、测试人员基本素质

这点很重要,如果一个测试人员水平很高,但是他就是不做事,那有什么用。测试人员必须具备踏实、主动、仔细、钻研的素质。

踏实:追求好的待遇是每个人目标,但是必须对自己目前这个岗位的工作做好,要想工作时间省一些,晚上回去想个够。

主动:寻找BUG要拿出追女(男)友的气势出来。

总结:

说多了都是泪,说穿了都是痛,不想甘于人后,就要先人一步,所以还是需要掌握一门高薪热门技术,成为测试老司机,那么江湖便任你驰骋。

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

posted @ 2018-09-18 17:36 51testing 阅读(136) | 评论 (0) | 编辑 收藏
 
软件测试人员必备的60个测试工具清单,果断收藏了!

据统计,中国软件外包市场的潜力和机会已远远超过软件王国印度,不过由于软件人才的严重不足致使我国软件发展遭遇“瓶颈”。国家为了大力培养软件人才,不断采取积极有效的措施。我国对软件测试人才的需求数量还将持续增加,因此软件测试工程师也就成为了IT职业的亮点。在测试空间IT实训基地中究竟需要哪些主流的软件测试工具呢?

我们将常用的测试工具分为10类。

1. 测试管理工具

2. 接口测试工具

3. 性能测试工具

4. C/S自动化工具

5.白盒测试工具

6.代码扫描工具

7.持续集成工具

8.网络测试工具

9.app自动化工具

10.web安全测试工具

注:工具排名没有任何意义。

大多数初学者,或者某个领域知识的入行者,习惯性的去搜集各种看似无用的资料、视频、工具。其实,如果都去研读、理解、并应用之,还是有点用的。否则,只会占用磁盘空间,还浪费时间。然而,工具嘛。虽然不用全部搞懂。但,还是要懂一点的。

混在软件测试职业圈。至少要知道有哪些工具可用。什么时候该用什么工具,每个工具能解决什么问题。然后,深入应用几款工具,即可。

下面我为大家提供了一个丰富的软件测试工具列表。这些测试工具不仅可以减少测试工作,而且帮助更快地将你的软件/应用程序推向市场,并在保持速度的同时保证质量。

1.测试管理工具

1,TestDirector(大而全)

2,jira(简单好用)

3,Quality Center(复杂,收费)

4,禅道(简单好用)

5,bugzilla(功能简单)

6,svn(代码和文档管理工具)

7,vss类似svn

8,git,同svn,但是多分支管理比svn好

9,Note(大而全,费用太贵)

10,CQ(ClearQuest-IBM产品-大而全)

2.接口测试工具

1,Jmeter(开源)

2,postman

3,SoapUI

推荐使用 jmeter 和 postman

jmeter是一款100%纯Java编写的免费开源的工具,它主要用来做性能测试,相比loadrunner来说,它内存占用小,免费开源,轻巧方便、无需安装,越来越被大众所喜爱。

Postman是谷歌的一款接口测试插件,它使用简单,支持用例管理,支持get、post、文件上传、响应验证、变量管理、环境参数管理等功能,可以批量运行,并支持用例导出、导入。

3.性能测试工具

1,loadrunner,大而全,要学精通还是有点难度,重量级工具

2,jmeter 基于java平台的性能开源测试工具,其实也很强大,而且比较好用

3,Web bench 一个简单的web基准指标测试工具

4,Load UI,一款开源的压力测试工具,支持图形化

5,httperf 一款高性能的web性能测试工具

6,Siege 一款开源的压力和指标测试工具

7、Gatling

前两种是比较常用的

4.C/S自动化工具

1,qtp (录制回放和脚本编辑),用到的是vb语言

2,winrunner IBM产品类似qtp

3,autoit 在窗口定位上做到很不错

5.白盒测试工具

1,jtest java语言的单元测试框架

2,JUnit 验证java的工具

3,cppunit 跨平台的c++单元测试框架

4,gtest 跨平台的c++单元测试框架

5,PhpUnit Php

6,BoundsChecker C++,Delphi API和OLE错误检查、指针和泄露错误检查、内存错误检查

7,TrueTime C++,Java,Visual Basic 代码运行效率检查、组件性能的分析

6.代码扫描工具

1,Coverity源代码静态分析工具

2,cppcheck c++静态扫描工具

3,gcover代码覆盖率工具

4,findbugs:基于字节码分析,大量使用数据流分析技术,侧重运行时错误检测,如空指针引用等

5,SonarLint

6,TscanCode

7持续集成工具

1,jenkins

2,Hudson

8.网络测试工具

1,思博伦 目前流行的一款网络自动化测试商用平台了(而且能够完全顶替loadrunner),基本上能够满足所有的网络产品测试需求了,不过很贵

2,Ixia,也是对网络设备进行性能和压力测试工的平台

3,wireshark 数据包抓取分析和回放测试工具

4,tc 网络丢包和试验模拟工具,非常好用

5,iperf 用来测试tcp和udp的网络质量

6,tcpping工具工作在 TCP 层,通过发送伪造的 TCP SYN 包并侦听来自服务器或中间设备返回的 SYN/ACK 或 RST

9.app自动化工具

1,appium 这个应该算是目前最流行的基于app的自动化测试框架了

2,instruments ios平台下的自动化测试框架,用java语言写的

3,uiautomator安卓自动化测试框架,基本上支持安卓的所有事件操作

4,Monkey 安卓自带的测试工具

5,Monkey Runner Monkey改进版,支持自己编写脚本测试,用Python语言

6,Robotium 一款国外的Android自动化测试框架,用法比较简单

10.web安全测试工具

金融服务和银行业一直是安全漏洞的受害者,因为会破坏了大量敏感的用户数据。然而,金融服务是每个人的必备品。所以在这里我们列出了一些安全测试工具,用于构建一个健壮的应用程序。

1,appscan,算是用的非常多的一款工具了,扫描后能够将绝大部分的漏洞找出来。

2,Netsparker Community Edition 这个程序可以检测SQL注入和跨页脚本事件。牛逼的是还能提供解决方案

3,Websecurify 这是个简单易用的开源工具,此程序还有一些人插件支持,可以自动检测网页漏洞。运行后可生成多种格式的检测报告

4,Wapiti 这是一个用Python编写的开源的工具,可以检测网页应用程序,探测网页中存在的注入点。

5,N-Stalker Free Version 此工具可一次检测100个以上的页面,包括跨页脚本的检测。

6,skipfish 这是一个轻量级的安全测试工具,处理速度很快,每秒可处理2000个请求。

7,Scrawlr HP的一款免费软件,可检测SQL注入漏洞。

8,Watcher: 这个是Fiddler的插件,可在后台静默运行,可检测跨域提交等。。

9,WebScarab 这个实际上是一个代理软件,有很多功能,可以检测XSS跨站脚本漏洞、SQL注入漏洞等。。

10,抓包工具:fiddler

11、burpsuite:暴力破解、抓包工具

总结:

现在大热的敏捷模式,DevOps以及许多现代日常的软件开发方法/概念都在支持测试在整个SDLC过程中的相关性。

软件测试工具是催化剂,将决定市场带给测试的新时代挑战的速度。

“ 善于利用工具,能提高工作效率。但,勿太依赖工具,任何的工具,只可辅助。”


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


posted @ 2018-09-17 17:20 51testing 阅读(151) | 评论 (0) | 编辑 收藏
 
如何有效的维护软件测试用例?遵循原则4步走!

不管在传统软件公司还是互联网公司,测试用例的设计和编写一直是测试人员一个非常重要的基本工作。

开发一个软件产品,会发布多个版本,伴随着测试用例(Test case)的不断维护, 使测试用例不断完善并与产品功能、特性(features)的变化保持一致,所以测试用例是和产品版本相关联的。特别是对提供软件服务的软件产品,多个版本常常共存,为客户提供服务,这时多个版本的测试用例也是并存的,所以在新建、修改、删除测试用例时要十分小心,并有相应的规则。

一、为什么要使用测试用例

1、理清思路,避免遗漏

如果我们测试的项目大而复杂,我们可以把项目功能细分,根据每一个功能通过编写用例的方式来整理我们测试系统的思路,避免遗漏掉要测试的功能点。

2、跟踪测试进展

通过编写测试用例,执行测试用例,我们可以很清楚的知道我们的测试进度。

3、历史参考

在我们所做的项目中,也许会有很多功能是相同或相近的,我们对这类功能设计了测试用例,便于以后我们遇到类似功能的时候可以做参考依据。

4、重复性

我们测试一个系统不是一个人测一遍就算测完的,需要多人反复的进行测试,那么我们就需要测试用例来规范和指导我们的测试行为。

5、测试确认

在少数高风险的测试中,必须证明确实执行了计划执行的测试。

软件产品的版本是随着软件的升级而不断变化的,而每一次版本的变化都会对测试用例集产生影响,所以测试用例集也需要不断地变更和维护,使之与产品的变化保持一致。

根据产品特性和测试用例一致性,分下面几种情况分别处理:

1. 产品特性没变,只是根据Late Discovery Bug 或 Remedy Ticket 来完善 test case,只有这时候可以修改Test case,也就意味着当前修改的test case,对目前和以前的版本都有效。

2. 原有产品特性发生了变化,不是new feature, 而是enhanced features(功能增强), 这时候原有的 test case 只对先前版本有效,而对新的版本无效,这时绝不能修改 test case ,只能增加新的 test case,这一点很重要。原有的 test case 依然对原有版本有效。

3. 原有功能取消了,这时只要在新版本上使之对应的test case置为inactive(无效)。

4. 完全新增加的特性,大家比较清楚,增加对应的、新的测试用例。

这样,新旧版本的相同测试用例得到一致的维护,测试用例数也不会成几、十几倍的增加,可以真正保证 test case 的完整性、有效性!

以下原因可能导致测试用例变更:

1)软件需求变更:软件需求变更可能导致软件功能的增加、删除、修改等变化,应遵循需求变更控制管理方法,同样变更的测试用例也需要执行变更管理流程。

2)测试需求的遗漏和误解:由于测试需求分析不到位,可能导致测试需求遗漏或者误解,相应的测试用力也要进行变更。特别是对于软件隐性需求,在测试需求分析阶段容易遗漏,而在测试执行过程中被发现,这时需要补充测试用例。

3)测试用例遗漏:在测试过程中,发现测试用例未覆盖全部需求,需要补充相应的测试用例。

4)软件发布后,用户反馈的缺陷:表明测试不全面,存在尚未发现的缺陷,需要补充或者修改测试用例。

对于提供软件服务的产品,其多个版本常常共存,而对应的测试用例也是共存的,而且测试用例需要专人定期维护。

并遵循以下原则:

1)及时删除过时的测试用例

需求变更可能导致原有部分测试用例不再适合新的需求要求。例如,删除了某个功能,那么针对该功能的测试用例也不再需要。所以随着需求的每一次变更,都要删除那些不再使用的测试用例。

2)及时删除冗余的测试用例

在设计测试用例时,可能存在两个或者多个用例测试相同内容,降低回归测试效率,所以要定期整理测试用例集,及时删除冗余的测试用例。

3)增加新的测试用例

由于需求变更、用例遗漏或者版本发布后发现缺陷等原因,原有的测试用例集没有完全覆盖软件需求,需要增加新的测试用例。

4)改进测试用例

随着开发工作进行,测试用例不断增加,某些用例随着系统输入和当前状态的变化而变得不再适用,这些用例难以重用,影响回归测试的效率,需要进行改进,使之可重用可控制。

总结:

测试用例的目的对新人来说,提高了新人的测试效率。假如一款产品停止维护了,那么所有的测试用例随之失效,到此测试用例的生命周期结束。而新起一款产品,新的生命周期又开始了。所以,测试用例伴随着整个产品的生命周期。

总之,测试用例的维护是一个长期的过程,也是一个不断改进和完善的过程。

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

posted @ 2018-09-14 17:13 51testing 阅读(150) | 评论 (0) | 编辑 收藏
 
想要年薪10万+,Java开发者必会这15个大数据工具和框架!

国内大多数大型互联网公司的程序员被称作研发工程师,但实际上国内几乎没有研发项目,只能叫做开发。

开发程序员的工作大多是重复性劳动,容易产生疲惫感,薪资在工作2-5年内就达到了一个峰值,再要提升就比较困难,这样就导致了很多程序员最终转行做了其他行业。

JAVA的精密、强大,拥有其它语言不可替代的性能和可维护性,早已经是成为受欢迎的编程语言之一,很多人想进入IT行业,选择的语言就是JAVA。

但是,在未来10年肯定是大数据的天下,人工智能的爆发,将会有大量企业会进入大数据领域,而从JAVA程序员转JAVA大数据就会有天然的优势,因为目前大数据的架构基本都是用JAVA语言完成,未来10年,JAVA大数据的需求量会越来越大。

现在学习JAVA的小伙伴,如果想以后不被淘汰,将来势必会进军大数据行列,根据目前的行业动态,JAVA程序员由于发展的局限性以及随着年龄增长,在竞争方面也越来越容易被年轻一代赶超,因为JAVA程序员的加班时间过长导致,所以大批JAVA工程师前辈已经先一步进军大数据了。

当今IT开发人员面对的最大挑战就是复杂性,硬件越来越复杂,OS越来越复杂,编程语言和API越来越复杂,我们构建的应用也越来越复杂。根据外媒的一项调查报告,专家列出了Java程序员在过去12个月内一直使用的一些工具或框架,或许会对你有意义。

1、MongoDB——最受欢迎的,跨平台的,面向文档的数据库。

MongoDB是一个基于分布式文件存储的数据库,使用C++语言编写。旨在为Web应用提供可扩展的高性能数据存储解决方案。应用性能高低依赖于数据库性能,MongoDB则是非关系数据库中功能最丰富,最像关系数据库的,随着MongDB 3.4版本发布,其应用场景适用能力得到了进一步拓展。

MongoDB的核心优势就是灵活的文档模型、高可用复制集、可扩展分片集群。你可以试着从几大方面了解MongoDB,如实时监控MongoDB工具、内存使用量和页面错误、连接数、数据库操作、复制集等。

2、Elasticsearch ——为云构建的分布式RESTful搜索引擎。

ElasticSearch是基于Lucene的搜索服务器。它提供了分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是比较流行的企业级搜索引擎。

ElasticSearch不仅是一个全文本搜索引擎,还是一个分布式实时文档存储,其中每个field均是被索引的数据且可被搜索;也是一个带实时分析功能的分布式搜索引擎,并且能够扩展至数以百计的服务器存储及处理PB级的数据。ElasticSearch在底层利用Lucene完成其索引功能,因此其许多基本概念源于Lucene。

3、Cassandra——开源分布式数据库管理系统,最初是由Facebook开发的,旨在处理许多商品服务器上的大量数据,提供高可用性,没有单点故障。

Apache Cassandra是一套开源分布式NoSQL数据库系统。集Google BigTable的数据模型与Amazon Dynamo的完全分布式架构于一身。于2008开源,此后,由于Cassandra良好的可扩展性,被Digg、Twitter等Web 2.0网站所采纳,成为了一种流行的分布式结构化数据存储方案。

因Cassandra是用Java编写的,所以理论上在具有JDK6及以上版本的机器中都可以运行,官方测试的JDK还有OpenJDK 及Sun的JDK。 Cassandra的操作命令,类似于我们平时操作的关系数据库,对于熟悉MySQL的朋友来说,操作会很容易上手。

4、Redis ——开源(BSD许可)内存数据结构存储,用作数据库,缓存和消息代理。

Redis是一个开源的使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis 有三个主要使其有别于其它很多竞争对手的特点:Redis是完全在内存中保存数据的数据库,使用磁盘只是为了持久性目的; Redis相比许多键值数据存储系统有相对丰富的数据类型; Redis可以将数据复制到任意数

5、Hazelcast ——基于Java的开源内存数据网格。

Hazelcast 是一种内存数据网格 in-memory data grid,提供Java程序员关键任务交易和万亿级内存应用。虽然Hazelcast没有所谓的“Master”,但是仍然有一个Leader节点(the oldest member),这个概念与ZooKeeper中的Leader类似,但是实现原理却完全不同。同时,Hazelcast中的数据是分布式的,每一个member持有部分数据和相应的backup数据,这点也与ZooKeeper不同。

Hazelcast的应用便捷性深受开发者喜欢,但如果要投入使用,还需要慎重考虑。

6、EHCache——广泛使用的开源Java分布式缓存。主要面向通用缓存、Java EE和轻量级容器。

EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是hibernate中默认的CacheProvider。主要特性有:快速简单,具有多种缓存策略;缓存数据有两级,内存和磁盘,因此无需担心容量问题;缓存数据会在虚拟机重启的过程中写入磁盘;可以通过RMI、可插入API等方式进行分布式缓存;具有缓存和缓存管理器的侦听接口;支持多缓存管理器实例,以及一个实例的多个缓存区域;提供Hibernate的缓存实现。

7、Hadoop ——用Java编写的开源软件框架,用于分布式存储,并对非常大的数据用户可以在不了解分布式底层细节的情况下,开发分布式程序。

充分利用集群进行高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,MapReduce则为海量的数据提供了计算。

8、Solr ——开源企业搜索平台,用Java编写,来自Apache Lucene项目。

Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。

与ElasticSearch一样,同样是基于Lucene,但它对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化。

9、Spark ——Apache Software Foundation中最活跃的项目,是一个开源集群计算框架。

Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。

Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松。

10、Memcached ——通用分布式内存缓存系统。

Memcached是一套分布式快取系统,当初是Danga Interactive为了LiveJournal所发展的,但被许多软件(如MediaWiki)所使用。Memcached作为高速运行的分布式缓存服务器,具有以下的特点:协议简单,基于libevent的事件处理,内置内存存储方式。

11、Apache Hive --在Hadoop之上提供类似SQL的层。

Hive是一个基于Hadoop的数据仓库平台。通过hive,可以方便地进行ETL工作。hive定义了一个类似于SQL的查询语言,能够将用户编写的SQL转化为相应的Mapreduce程序基于Hadoop执行。目前,已经发布了Apache Hive 2.1.1 版本。

12、Apache Kafka --最初是由LinkedIn开发的高吞吐量,分布式订阅消息系统。

Apache Kafka是一个开源消息系统项目,由Scala写成。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。Kafka维护按类区分的消息,称为主题(topic)。生产者(producer)向kafka的主题发布消息,消费者(consumer)向主题注册,并且接收发布到这些主题的消息。

13、Akka --用于在JVM上构建高并发,分布式和弹性消息驱动应用程序的工具包。

Akka 是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java 和 Scala 的 Actor 模型应用。它已经成功运用在电信行业,系统几乎不会宕机。

14、HBase --开放源代码,非关系型,分布式数据库,采用Google的BigTable建模,用Java编写,并在HDFS上运行。

与FUJITSU Cliq等商用大数据产品不同,HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。

15、Neo4j --在Java中实现的开源图形数据库。

Neo4j是一个高性能的NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全事务特性的Java持久化引擎。

总结:

Java受到全球百万计开发者的追捧,已经演变为一门出色的编程语言。最终,这门语言随着技术的变化,不断的被改善以迎合变化的市场需求。

无论你是否拥有一家科技公司,软件已经成为几乎每一个企业不可或缺的一部分,为了吸引你潜在的顾客,你应该交付给客户一个技术上有创新的产品。那么,Java能提供这样的平台帮你实现这一技术创新。Java贡献者们一直保持着大幅度的更新,以提供最新最强大的功能。

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

posted @ 2018-09-13 17:46 51testing 阅读(200) | 评论 (0) | 编辑 收藏
 
从小白变高手,这7个超实用的Python自动化测试框架请收好!

随着技术的进步和自动化技术的出现,市面上出现了一些自动化测试框架。只需要进行一些适用性和效率参数的调整,这些自动化测试框架就能够开箱即用,大大节省了开发时间。而且由于这些框架被广泛使用,他们具有很好的健壮性,并且具有广泛多样的用例集和技术来轻易发现微小的缺陷。今天,我们将看一看常见的 Python 自动化测试框架。

常见的测试框架

1、Unittest

unittest是Python内置的标准类库。它的API跟Java的JUnit、.net的NUnit,C++的CppUnit很相似。

通过继承unittest.TestCase来创建一个测试用例。

举个例:

import unittest

def fun(x):
return x + 1

class MyTest(unittest.TestCase):
def test(self):
self.assertEqual(fun(3), 4)

执行后成功。

但是,如果将期望的结果改成5,则执行的结果如下图所示:

2、 Doctest

doctest 模块会搜索那些看起来像交互式会话的 Python 代码片段,然后尝试执行并验证结果.即使从没接触过 doctest,我们也可以从这个名字中窥到一丝端倪。“它看起来就像代码里的文档字符串(docstring)一样” 如果你这么想的话,就已经对了一半了。

举个例子:

def square(x):
"""Squares x.

>>> square(2)
4
>>> square(-2)
4
>>> square(5)
25
"""

return x * x

if __name__ == '__main__':
import doctest
doctest.testmod()

当执行该代码后,会执行文档内>>> 后面的测试代码,并与下一行的结果进行比对。执行的结果如下:

但是,如果我们把结果改一下,square(2)的结果改成5,测试代码如下:

def square(x):
"""Squares x.

>>> square(2)
5
>>> square(-2)
4
>>> square(5)
25
"""

return x * x

if __name__ == '__main__':
import doctest
doctest.testmod()

执行的测试结果如下所示:

3、py.test

pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它具有如下特点: 
①非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考 
②能够支持简单的单元测试和复杂的功能测试 
③支持参数化 
④执行测试过程中可以将某些测试跳过,或者对某些预期失败的case标记成失败 
⑤支持重复执行失败的case 
⑥支持运行由nose, unittest编写的测试case 
⑦具有很多第三方插件,并且可以自定义扩展 
⑧方便的和持续集成工具集成

编写pytest测试样例

编写pytest测试样例非常简单,只需要按照下面的规则(和nose类似): 
测试文件以test_开头(以_test结尾也可以) 
测试类以Test开头,并且不能带有 init 方法 
测试函数以test_开头 
断言使用基本的assert即可

example.py

setup_class/teardown_class 在当前测试类的开始与结束执行。

setup/treadown 在每个测试方法开始与结束执行。

setup_method/teardown_method 在每个测试方法开始与结束执行,与setup/treadown级别相同。

执行pytest测试样例

执行测试样例的方法很多种,上面第一个实例是直接执行py.test,第二个实例是传递了测试文件给py.test。其实py.test有好多种方法执行测试:

4、Nose

Nose是对unittest的扩展,使得python的测试更加简单。nose自动发现测试代码并执行,nose提供了大量的插件,比如测试输出的xUnitcompatible,覆盖报表等等。

nose的详细文档: https://nose.readthedocs.org/en/latest/

nose不是python自带模块,需要用pip安装

nose相关执行命令:

1、 nosetests –h查看所有nose相关命令

2、 nosetests –s执行并捕获输出

3、 nosetests –with-xunit输出xml结果报告

4、 nosetests -v: 查看nose的运行信息和调试信息

5、 nosetests -w 目录:指定一个目录运行测试

nose 特点:

a) 自动发现测试用例(包含[Tt]est文件以及文件包中包含test的函数)

b) 以test开头的文件

c) 以test开头的函数或方法

d) 以Test开头的类

经过研究发现,nose会自动识别[Tt]est的类、函数、文件或目录,以及TestCase的子类,匹配成功的包、任何python的源文件都会被当做测试用例。

5、tox

最大的特色,是自动最测试环境的管理以及使用多个解析器配置进行测试。

tox的详细文档: http://testrun.org/tox/latest/

6、Unittest2

是unitest的升级版。对API进行了改善以及更好的诊断语法。

unittest2的详细文档:https://pypi.python.org/pypi/unittest2

首先,安装

pip install unittest2
为了以后能在unittest与unittest2之间进行切换,最好的代码编写方式如下:

import unittest2 as unittest

class MyTest(unittest.TestCase):
...

7、mock unittest.

mock是用来测试python的库。在python3.3版本以后,这个是一个标准库。对老版本来说,使用pip install mock进行安装。

mock的精髓在于,你可以使用模拟的对象来替代你的系统的一部分,然后验证后续的执行是否正确。
mock的详细文档:http://www.voidspace.org.uk/python/mock/

总结:

我这篇文章,主要是讲基于 python 语言的自动化测试框架的一些设计思想和基本使用示例。其实工具的使用方法很简单,但是如何利用好这些工具来进行软件生产,则需要其它的计算机技能了。

“软件的自动化测试是有成本的,而且成本不低,基本上相当于在原有的功能开发工程 的基础上再建立一个平行的 测试开发工程 ”。

也就是说,如果你对自动化测试有你的期望值,那么就肯定是要付出相应的代价和精力的。好的东西也是需要优秀的人花大量的时间去完成的。在正式进入到自动化测试的领域之前,先要建立这样的价值观才能在软件测试这条路上走的更远。


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


posted @ 2018-09-12 17:31 51testing 阅读(216) | 评论 (0) | 编辑 收藏
 
软件测试员如何完全掌握Jmeter?这13种不同的断言了解一下!
     摘要: 在jmeter进行测试的时候,有时我们需要确定Jmeter是否正确工作。因为个别情况下,我们利用监听器查看时,监听器返回的结果是正确的,但实际上我们发送的请求中的有些参数可能是错误的,系统并没有按照我们预期的方式进行响应,例如典型的web应用一般都会有如下2种情况:1.有一个登录页,它是整个应用的入口。当用户登录之后,应用会将用户相关的安全信息放到session中。2.有一个filter,它拦截请...  阅读全文
posted @ 2018-09-11 17:34 51testing 阅读(162) | 评论 (0) | 编辑 收藏
 
仅列出标题
共55页: First 17 18 19 20 21 22 23 24 25 Last