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博客 | 首页 | 发新随笔 | 发新文章 | 联系 | 聚合 | 管理

玩转Linux的神操作:五分钟搞定Bash特性与使用技巧

一个完整计算机的体系结构包括:硬件与软件,而软件又分为系统软件与应用软件,负责对硬件仅需管理与操作的是系统软件的内核部分,用户是无法与硬件或内核打交道的,用户通过应用程序或部分系统软件发出指令(可能是通过浏览器发送一封邮件),这些指令会被翻译并传给内核,内核在得知用户的需求后调度硬件资源来完成操作(比如,使用网卡发送数据包)。


在Linux环境下,我们一般通过Shell来与内核交流,并最终实现我们想要使用计算机资源的目的。由于Linux的开放性特点,使得在Linux下对Shell的选择也很多,不同的Shell有不同的特点以及操作方式,我们这里了解下Linux技巧之一:Bash特性。

一、bash简介

①shell

bash的起源——shell。shell俗称壳,它是指UNIX系统下的一个命令解析器;主要用于用户和系统的交互。UNIX系统上有很多种Shell。首个shell,即Bourne Shell,于1978年在V7(AT&T的第7版)UNIX上推出。后来,又演变出C shell、bash等不同版本的shell。

广义shell包含:

1、GUI:Gnome、KDE、Xfce

2、CLI:sh,csh,ksh,bash

进程:在每个进程看来,当前主机上只存在内核和当前进程,进程是程序的副本,进程是程序执行实例。

②bashbash,全称为Bourne-Again Shell。它是一个为GNU项目编写的Unix shell。bash脚本功能非常强大,尤其是在处理自动循环或大的任务方面可节省大量的时间。bash是许多Linux平台的内定Shell,这也是我们介绍它主要的原因。

1、支持命令历史、命令补全

2、支持管道、重定向

3、支持命令别名

4、支持命令行编辑

5、支持命令行展开

6、支持文件名通配

7、支持变量

8、支持编程

二、bash的示例和书写流程

1、新建文件test.sh

$ touch test.sh

2、添加可执行权限

$ chmod +x test.sh

3、编辑test.sh,test.sh内容如下:

#!/bin/bash

echo "hello bash"

exit 0

说明:#!/bin/bash : 它是bash文件声明语句,表示是以/bin/bash程序执行该文件。它必须写在文件的第一行!echo "hello bash" : 表示在终端输出“hello bash”exit 0 : 表示返回0。在bash中,0表示执行成功,其他表示失败。4、执行bash脚本

$ ./bash

在终端输出“bash hello”

三、bash特性

1、命令历史:

history:

查看命令历史:history

-c:清空命令历史

-d OFFSET[n]:删除指定位置的命令

例1:history -d 500  #删除第500个历史命令

例2:history -d 500 3 #删除第500个命令起3个历史命令

-w:保存命令历史至历史文件(家目录下.bash_history)中

2、命令历史使用技巧:

!n:执行命令历史中的第N条命令

例:root@localhost /]# !44

!-n:执行命令历史中倒数第N条命令

例:[root@localhost /]# !-44

!!:重新执行上一次命令

!string:执行命令历史中最近一个已指定字符(string)串开头的命令

!$:引用前一个命令的最后一个参数

ESC,.:引用前一个命令的最后一个参数

Alt+.:引用前一个命令的最后一个参数

3、命令别名:

alias CMDALIAS=‘COMMAND [options] [arguments]’

例:[root@localhost /]# alias cls=clear

在shell中定义的别名仅在当前shell生命周期中有效:别名有效范围为当前shell进程

unalias:撤销别名

例:[root@localhost /]# unalias cls

\COMMAND:使用命令本身

4、命令替换:

$(COMMAND)

`COMMAND`:(反引号)

把命令中某个子命令替换为其执行结果的过程

例1:[root@localhost ~]# echo "The current directory is $(pwd)."

            The current directory is /root.

例2:[root@localhost ~]# touch ./file-$(date +%F-%H-%M-%S).txt

[root@localhost ~]# ls

anaconda-ks.cfg  file-2017-03-30-15-10-30.txt  install.log         sort.test

Desktop          hello                         install.log.syslog

5、bash支持的引号:

``:命令替换

"":弱引用,可以实现变量替换

‘’:强引用,不完成变量替换

6、文件名通配:globbing

# man 7 glob 可获得以下列表:

*:任意长度的任意字符

?:任意单个字符

[ ]:匹配指定范围内的任意单个字符  

[a-z], [A-Z], [0-9], [a-zA-Z]  

[[:space:]]:空白字符  

[[:punct:]]:标点符号  

[[:lower:]]:小写字母  

[[:upper:]]:大写字母  

[[:alpha:]]:大小写字母  

[[:digit:]]:数字  

[[:alnum:]]:数字和大小写字母  

[^]:匹配指定范围之外的任意单个字符  

[^0-9]:非数字  

[^[:alpha:]]:非字母

7、环境变量:

PATH:命令搜索路径

HISTSIZE:命令历史缓冲区大小(默认1000条):

例:[root@localhost ~]# echo $HISTSIZE

1000  

8、命令行编辑:

Bash准备了大量的快捷键为用户使用,熟练掌握这些快捷键的全部或部分会使你在工作中受益颇多,开始的时候你可能需要花费大量的时间来记忆这些快捷键,但一旦你记住了他们,你的工作效率会直线上升。下面列出了常用的快捷键及其功能描述。

光标跳转:

Ctrl+a:跳到命令行首部

Ctrl+e:跳到命令行尾

Ctrl+f:光标右移一个字符

Ctrl+b:光标左移一个字符

Ctrl+u:删除光标至命令行首的内容

Ctrl+k:删除光标至命令行尾的内容

Ctrl+l:清屏,等同于clear命令

Ctrl+c:终止进程

Ctrl+z:挂起进程(可以通过jobs命令查看挂起的进程)

Ctrl+w:删除光标前一个单词(以空格为分隔符)

Alt+d:删除光标后一个单词

9、命令行展开

在Linux bash中可以使用命令行展开特性一步完成需要分开成多步完成的操作,达到事半功倍的效果。在Linux指令参数位置使用{}将相应的参数括起来,括号中的参数以逗号分隔,然后bash在执行这一指令时会自动将括号中的内容进行展开。

例如:

/tmp/{x,y}    #生成/tmp/x和/tmp/y

mkdir {1..10}    #生成1-10为名的文件夹

mkdir -p  {1..10}/{1..10}    #在名为1-10的文件夹里再生成1-10为名的文件夹

总结:

Linux 新手往往对命令行心存畏惧,部分原因是因为需要记忆大量的命令,毕竟掌握命令是高效使用命令行的前提。

不幸的是,学习这些命令并无捷径,然而在你开始学习命令之初,有些工具还是可以帮到你的。“学而时习之,不进则退”,只要不断地学习不断地摸索,你早晚有一天也会成为Linux大牛!

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

posted @ 2019-02-25 17:27 51testing 阅读(82) | 评论 (0) | 编辑 收藏
 
软件测试员必须编写代码吗?掌握多少编程能力才够?

我相信每一个刚入门软件测试的萌新都会琢磨一个问题:软件测试人员,要不要懂代码?其实这个问题同样困扰着已经在测试行业闯荡了几年的测试小司机们。

那今天,我就来给大家分析一下:

在软件测试初级阶段,不需要编程能力。

但是任何一个职业,都会追求长期发展,

想要可持续发展,变成能力还是很必要的!

软件测试的方法会因软件产品的需求、行业的不同而所有不同,而优秀的测试员在整个产品的测试过程中扮演着极其重要的角色。


软件测试员掌握多少编程技能才够?

一提到编程和调试,绝大部分人一定会说这是软件开发工程师的工作,那为什么软件测试工程师也必须掌握编程能力呢?

下面我们分析下原因:

做自动化测试时,你需要写代码

做白盒测试时,你需要读懂代码和写代码

做数据库操作时,你需要会sql的增删改查操作

在敏捷测试过程中,你需要会写自动化测试

做性能测试,你需要写代码

做安全测试时,你需要写代码

做数据测试时,你需要写代码

软件测试的基本测试策略:手工测试和自动化测试。又可能进一步划为黑盒测试、白盒测试、灰盒测试。不同的测试策略要求不同的测试技术。

你会发现:

从事黑盒测试,你可能不需要编程能力,测试人员只是通过输入数据来测试软件,然后检查输出。

从事白盒测试或基于代码驱动测试模式时,你必须具备编程能力,掌握例如python、java、c++、sql等等各种编程语言

从事自动化测试或代码检测时,你需要足够好的编程能力,因为你需要关注代码覆盖、语句覆盖。开发自动化测试框架等等,同样你也可能需要具备前端、数据库等等一些技术。

sql,你需要掌握各种数据库的增删改查操作,以便验证一些数据,甚至实现自动验证

sql-注入,“sql注入“是通过插入不必要的命令来进行数据库黑客攻击的技术之一。对.有很好的了解JavaScript和SQL使用命令可以避免这种软件安全威胁。

敏捷测试敏捷测试整个团队负责软件的质量。在整个敏捷过程中,测试人员将与一个或多个程序员一起编写测试。因此,为了创建一个自动测试,测试人员必须知道代码。

所以,作为一名想要可持续发展的软件测试员,会编程懂代码是非常有必要的!

整个项目阶段,测试员的工作过程

1、版本或者产品的规划阶段:作为一个测试人员,这个时候可以从一个更高的角度对产品的规划提出自己的想法,来更好的帮助产品取得成功。需要具备的能力或者知识:对于产品的商业理解以及整个行业和市场的理解都比较深入,实际上这个时候我们可以将自己看成是一个产品经理。2、版本的需求阶段:测试人员已经能够开始做需求阶段的缺陷预防,保证需求是能够满⾜足用户的原始需求,并且整个需求都是非常清晰和合理的,版本后期没有需求不合理或者需求不清晰的问题。需要具备的能力或者知识:对于客户的使用场景非常清楚,能够在客户角度上面思考问题;有自己的一套需求分析的方法,最好是模型或者checklist之类的;非常好的分析能力,能够通过需求文档分析到可能潜在的问题。3、设计阶段:测试人员开始做设计阶段的缺陷预防,能够对于研发的整个设计方案非常清楚,能够根据研发设计文档里面的业务逻辑图自己能够站在测试的角度来画出一份让测试人员更加容易理解的业务逻辑图,并且能够发现研发在设计方案上存在的一些问题,并且指导研发进行修改。需要具备的能力或者知识:比较深入的业务背景知识;熟悉开发使用的语言;业务分析和转换的能力;4、编码阶段:测试人员开始编写单元测试、接口测试用例、测试工具或者自动化测试用例,并且开始思考后面如何去更好的测试,并且帮助研发提前做好编码阶段的缺陷预防,甚至做得测试驱动开发。需要具备的能力或者技能:熟悉开发使用的编码语言、能够对开发的代码进行静态走读、熟悉开发使用的编码语言的单元或者接口测试方法和框架、具备测试工具开发的能力、具备自动化的能力,良好的代码分析能力和用例设计能力。5、测试阶段:

测试人员开始制定测试策略和测试计划、执行测试用例、发现和定位bug、跟踪和回归bug,质量分析,有效的探索性测试等等,目的是花更短的时间来更好的保证质量。具备的能力或者技能:制定策略和计划的能力、执行能力、分析和排查问题的能力,业务的理解能力,对代码的熟悉程度,模块的质量分析能力等等!

总结:

软件QA通常分为两类,

Qa测试人员:它不需要编码知识。

SDET:它需要编码知识

一个优秀的测试员应该具备什么?

良好领域知识

良好的逻辑思维

良好的编程知识。

测试人员在进行自动化测试时需要良好的编码知识。

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

posted @ 2019-02-22 17:38 51testing 阅读(124) | 评论 (0) | 编辑 收藏
 
这些神奇又搞笑的bug,真的让程序员万万没想到!

Bug是程序员不可避免出现的问题,真要说起来,大部分Bug会在测试阶段被查出,从而继续回炉重造。但是还有一部分Bug非常顽强,且不易被查出。其中有一些会带来严重的后果,然而有一些Bug却是无关紧要,相反却能博得大众一笑!


在开始神奇又搞笑的bug吐槽大会之前,我们先来细说下bug的等级划分。

致命bug:阻碍开发或测试工作的问题;造成系统崩溃、死机、死循环,导致数据库数据丢失,与数据库连接错误,主要功能丧失,基本模块缺失等问题

修改优先级为最高,该级别问题需要立即修改。

1.代码错误;

2.系统崩溃;

3.导致程序重启,死机或非法退出;  

4.重要的一级菜单功能不能使用;

5.死循环;  

6.数据丢失或异常;  

7.数据通讯错误;

8.硬件故障,系统悬挂。

严重bug:系统主要功能部分丧失、数据库保存调用错误、用户数据丢失,一级功能菜单不能使用但是不影响其他功能的测试。功能设计与需求严重不符,模块无法启动或调用,程序重启、自动退出,关联程序间调用冲突,安全问题、稳定性等。

修改优先级为高,该级别需要程序员尽快修改。

1.用户所要求的功能缺失;

2.数据计算统计错误;

3.业务流程错误;  

4.程序接口错误; 

5.因错误操作迫使程序中断;

6.系统可被执行,但操作功能无法执行(含指令);

7.功能项的某些项目(选项)使用无效(对系统非致命的);

8.功能实现不完整,如删除时没有考虑数据关联;

9.功能的实现不正确,如在系统实现的界面上,一些可接受输入的控件点击后无作用,对数据库的操作不能正确实现。

建议:(该等级问题出现在不影响其他功能测试的情况下可以继续该版本测试)。

一般bug:功能没有完全实现但是不影响使用,功能菜单存在缺陷但不会影响系统稳定性。

修改优先级为中,该级别需要程序员修改。

1.数据长度不一致;

2.内容或格式错误;

3.操作时间长;

4.查询时间长;

5.响应时间较慢;  

6.功能性建议; 

7.提示信息不太准确; 

8.操作界面错误(包括数据窗口内列名定义、含义是否一致); 

9.简单的输入限制未放在前台进行控制; 

10.虽然正确性不受影响,但系统性能和响应时间受到影响; 

11.不能定位焦点或定位有误,影响功能实现; 

12.增删改功能,在本界面不能实现,但在另一界面可以补充实现;

13.数据库表中字段过多。

建议:(该问题实际测试中存在最多,合理安排解决BUG,解决率关系版本的优化程度)

低级bug:界面、性能缺陷,建议类问题,不影响操作功能的执行,可以优化性能的方案等。

修改优先级为低,该级别需要程序员修改或不修改。

1.错别字;

2.界面不规范;

3.辅助说明描述不清楚;

4.页面显示重叠;

5.不该显示的要隐藏;

6.描述不清楚;

7.输入输出不规范;

8.长时间操作未给用户提示;

9.提示窗口文字未采用行业术语;

10.文字排列不整齐;

11.光标位置不正确;

12.可输入区域和只读区域没有明显的区分标志;

13.必填项与非必填项应加以区别;

14.滚动条无效;

15.键盘支持不好,如在可输入多行的字段中,不支持回车换行;

16.界面不能及时刷新,影响功能实现;

17.用户体验感受不好。  

建议:(此类问题在测试初期较多,优先程度较低;在测试后期出现较少,应及时处理)

软件测试开发人员工作过程中会遇到各种各样的Bug,了解了bug的等级划分,我们再来聊一聊你所遇到过意想不到的那些bug。

@小博

想起前几天遇到的bug,严格来讲不太算,就是好笑。一个文本框,输入about、banner等词,提交后再看单词就变成了aout、anner,找开发,开发答复:屏蔽敏感字母b。

@小为

做底层测试的,遇到过日志回滚配置把rotate写成rotare,然后日志没回滚成功,不久磁盘满了,机器挂了。

@小峰

都没有我们开发牛逼,查始发机场为深圳的航班信息,他就返回一个始发机场为深圳的字段,其他信息都不给,我找他,他说“你就查了始发机场,我就给你始发机场有啥问题?”你去百度输入刘德华,百度返回给你三个字:“刘德华”,没毛病啊,我感觉这逻辑很牛X。

@小软

测试提一个bug需要一分钟,某些前端开发把bug指回来只用了28秒,不自测也就算了,还改一个送你两个bug。

@小件

拖动上下端模块可进行排序,结果保存的时候不按拖动的顺序保存,程序员理直气壮的跟我说:你要先退出,然后重新进入,排序就是正确的哦。

@小测

前一阵遇到的bug。系统超级用户可以对自己降级。降级完毕以后再也无法提升为超级用户。解决办法,只能服务器端的系统软件重新安装。

@小试

前段时间不是年会嘛,相信大家都领到了公司发的年货,有一些大型的公司或者企业还会举行一些抽奖活动。然而,抽奖环节要是有bug就会让人很尴尬,巧了,我就遇到了,看到“Null”这四个大字,估计每个程序员都会非常尴尬,“Null”这个单词的意思为“空”,在代码中是一个常用词汇。不过感觉用代码抽奖的公司老板心有点大啊,要是有人在代码中动手脚,那还不是想中就中?

一句话总结今天的吐槽大会:bug千万条,细心第一条,编码不规范,测试两行泪!

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

posted @ 2019-02-18 16:45 51testing 阅读(112) | 评论 (0) | 编辑 收藏
 
《流浪地球》——程序员的悲哀

任何一个傻瓜都会写让机器理解的代码,只有好的程序员才能写出让人类可以理解的代码——Martin Fowler


我不是个单纯的码农,但我是一个纯粹的IT工程师——我

抱着对中国科幻的向往和崇敬,走进了电影院观看了《流浪地球》。

都是骗子,大骗子,什么真正意义上得科幻片,开启了中国科幻元年,这明明就是部魔幻片,或者仙侠片。


在我这个影视外行人看来其中的情节有很多的创新,特效一看就是投入颇多,各种科技设定听说请教了中科院的院士,尽力做到符合物理定律。但是唯独对于程序员李的表达,还是停留在过去的模式,“随手几行代码,就搞定了全世界”。人们对于软件工程师认识还是停留在20年以前,三舅姥爷的话仿佛还在我耳边回想:“你不是搞电脑的嘛?为啥一台电脑都修不好?”和电影里的表达如出一辙,区别仅仅是“李长条”搞定了整个地球,而我搞不定一台已经烧掉主板的电脑。


电影里(这里有剧透,不喜勿喷)我们的程序员李一一,因为编写过让整个城市同时放烟花的程序,就有勇气去修改运行整个地球上万个“行星”发动机的程序。理想是美好的,现实是骨感的,编剧脑洞是巨大的。


中科院的院士肯定没告诉导演,几分钟只能写几行代码,而这几行代码在不提供接口的情况下是调用不了发动机程序的。几分钟也看不完几千万行代码,然后去修改发动机转向参数的,看完这些代码一个人至少得300年。放烟火的程序也不能替代发动机驱动程序,这就好比拿抓娃娃机的驱动程序去运行挖掘机。这个和程序员多天才没关系,这个违背事物发展规律。

当然这些都是“小细节”,情节发展需要嘛。但是如果是我,我会问电影里的程序员李一一,一个没有经过测试就上线运行的东西,你就不怕炸了吗?没有运行起来是出错的最好结果,最坏结果也没什么,无非发动机炸了而已。


电影再一次神话了程序员,几行代码搞定一切,甚至电影也刻画了一个“程序员”老实木讷,看上去有点宅,甚至是有点交流障碍。外面很多自媒体也在吹嘘电影中的程序员拯救了地球。

电影越火,我想我在修电脑的路上也会越来越远……不过我相信随着中国电影的深入发展,人们对我们的认识会越来越深,毕竟听到电影院里人们小声议论:“程序员那么牛X”心中的自豪感也是悠然而生的。

——某程序员投稿,不代表官方立场!

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

posted @ 2019-02-15 17:36 51testing 阅读(100) | 评论 (0) | 编辑 收藏
 
软件测试员必备基础:3分钟带你入门自动化测试!

目前自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论已经层出不穷,但是,能够明白自动化测试并很好落地实施的团队还不是非常多,我们接下来用通俗的方式来介绍自动化测试……


首先我们从招聘岗位需求说起。看近期的职业机会,提到“软件测试工程师”,基本上都有关于自动化测试的要求。例如:

了解 selenium、appium或者其他自动化测试框架

至少熟悉一门面向对象开发语言,有一定的代码功底优先

熟悉Java或者python,有一定的测试自动化经验和代码阅读能力

了解接口集成测试,会使用JMeter、Postman、SoapUI等接口测试工具

等等,上述内容不再一一列举。突然自动化测试遍地开花,好像测试工程师的自动化测试能力成为了标配一般。

下面我就从自动化测试的要求入手,简单的进行自动化测试扫盲,争取让各位在一分钟之内了解自动化测试。

那么我们就从“自动化测试”五个字来剖析。

测试

测试:这个我们熟悉。最经典的一个解释“程序测试是为了发现错误而执行的过程。”这个来自于G.J.Myers的经典著作《软件测试的艺术》的定义,给我们展示了测试的本质:过程。

测试是为了发现软件的错误,而执行的过程,这个过程可以是以下内容:

运行被测试的软件,执行软件的功能

运行其他工具,去检查软件的内部和外部

总而言之,是一个过程,执行的过程。接下来就一张最常见的测试示意图:


把软件的所有功能遍历一遍,该测试工程师通过鼠标、键盘、麦克风、手机屏幕触控等,把软件所有的功能,全部遍历了,这个叫做什么?熟悉测试的童鞋明白,这就是传说的“手工目测”呀,这是“人肉测试”。

我们好好的画这张图,实际上是这样的。


自动化

到这里,结合上面的说法,自动化测试就是让被测试的软件自己运行起来,执行软件的功能;或者就是让其他的工具自己运行起来,去检查软件的内部和外部。

既然测试是一个过程,那么自动化测试,就是自动的执行的过程。

接下来我们探讨的一个核心的问题:自动。什么叫做自动呢?让机器自己动,就是自动。让机器按照人类的要求,把软件的所有功能遍历一遍,这是自动化。。这样说会不会清晰一点?

重点来了,机器。让机器去动,这可不是“吃鸡”哦,这是人类命令机器去操作。不知道童鞋们有没有思考过,机器怎么知道人类的要求?上面的例子,测试主管只要告诉测试工程师,命令传达就完成了。可是人类直接的沟通,远比人机沟通容易啊。

首先,机器听不懂“人话”,无论中文,英文……

其次,机器默认会的“汇编语言”,应该是绝大部分的童鞋不会,并且短期掌握不来吧。

好吧,用“编程语言”。是时候拿出我们的另一张图了:


机器学习一个编程语言,轻松和简单到令人发指的地步:安装上去,机器就学会了。好在人类学习编程语言也不是特别难的的事情。看来这个可行。

有了编程语言,就有了人机交流的桥梁,剩下的事情,是帮机器挑选工具。做对应的测试,就需要找到对应的工具,这样自动化就自动起来了。能到这里,我希望各位童鞋了解了基本的“自动”原理。

同样,好好的画这张自动化测试的示意图:


然后我们介绍各种常见的工具,来继续讨论自动化测试。进一步探讨之前,我们先看看测试的常用分类。这里不同的分类维度下,我们可以分为不同的测试,这里我们认真分析一下。

从软件测试的实践过程看:单元测试、集成测试、确认测试、系统测试、验收测试……

从软件测试的方法策略看:白盒测试、黑盒测试、灰盒测试……

从软件测试的测试视角看:功能测试、性能测试、兼容性测试、安全测试、探索性测试……

从软件测试的技术程度看:手工测试、自动化测试、测试开发……

以上这些维度下的分类,只有一部分测试可以通过“人肉测试”的“手工目测”完成,剩下的其实从广义概念上,都是需要机器来完成的。我们把这一部分测试抽取出来:系统测试-黑盒测试-功能测试-手工测试。不可否认的讲,这条线是目前软件测试从业者的重点覆盖范围,该范围之外的地方,便是自动化测试的用武之地。

自动化测试

接下来我们探讨一下主流的自动化测试方案,无一例外,都有人机沟通的编程语言,加上机器操作的工具来组成。

功能自动化测试

VBScript + QTP(HP UFT),商用功能自动化测试方案

Python/PHP/Java/C#/JavaScprit/Ruby + Selenium/Appium + 单元测试框架,开源功能自动化测试方案

这里我们多介绍一点,Selenium/Appium 本身不能算是测试工具,而只是机器用来操作浏览器的工具,并且这个工具能听懂多种语言:

Java,C# 这两个重 (zhòng) 语言

Python,Ruby 这两个脚本轻语言

PHP,JavaScript 这两个专门处理 Web 的语言

工具外加指定的语言,可以让机器来操作浏览器,但是到此时还无法做到测试,于是才需要每个语言自己的单元测试框架,来一起完成这个功能自动化测试方案的构建。此外,业界还一种暂时临时的方案,就是 Python 2 + Robot Framework + Selenium Library 插件 + 单元测试框架 构成的一种测试方案,这个方案笔者不是非常推荐,主要基于两点:

理念:这是一种基于关键字的方案,那么关键字是 QTP(HP UFT)的特长,并不是Selenium的本意

技术:Python 2 终究是要退出历史舞台的,如果从零开始做自动化测试,还是直接入手 Python 3 吧,然而 Robot Framework 不支持 Python 3……

Python/Java/C#/JavaScprit/Ruby + Gauge,又一款开源的功能自动化测试方案

Thoughtworks 的基于BDD理念的自动化测试工具

Gauge 本身就是完整的测试方案

Gauge 是从需求分析师(BA)到测试工程师(QA)都覆盖的测试方案

Java/Python + Macaca,阿里巴巴的功能自动化测试方案,缺点是文档少

JavaScript + TestCafe,DevExpress 的开源功能自动化测试方案

pure node.js - TestCafe不使用Selenium,并且不需要插件来在实际浏览器中运行测试。 它建立在node.js的顶部,因此它与现代开发工具集成和工作良好

无需额外的设置或配置- TestCafe是所有设置后立即运行测试npm install

完整的测试工具 - 使用单个启动命令,TestCafe启动浏览器,运行测试,收集结果并生成报告

JavaScript + Postman,免费的Web接口功能自动化测试方案

Groovy + SoapUI,开源的Web接口功能自动化测试方案

性能自动化测试

Java/C + HP LoadRunner,商业版性能测试方案

Java + JMeter,开源版性能测试方案

Python + locust,开源版性能测试方案

这里,我们借用一张别人的图,Martin Fowler,敏捷开发方法的创始人之一,他借用金字塔的概念来展示测试的层次。


事实上,自动化测试覆盖了从UI(功能测试)到契约(接口测试)以及底层代码方法(单元测试)的整个过程,要想很好的掌握自动化测试,那么的确需要以下三种领域的经验积累:

编程语言,面向对象编程优先,因为大量的开源技术方案,都是基于面向对象的编程方式

第三方测试工具和测试框架,这些主要通过官网的文档学习

测试的理念与设计,工具和语言,只是测试的手段,如何准备测试数据,如何设置测试的检查点与测试步骤,这些决定了测试的成败

此外综合的前端与服务器后端技术,是测试执行的保障。加油吧童鞋们,那么你现在了解到自动化测试了么?

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

posted @ 2019-02-02 17:52 51testing 阅读(100) | 评论 (0) | 编辑 收藏
 
给你一个网站,你该如何测试?你需要记住这4条法则!

我想大多数开始进行web端页面测试的人,一开始会的都是在页面上点点点,然后一看到页面上有什么图片失效啊,页面遮挡就觉得是找到了大bug;一开始我也是这样,尽管我很谨慎,很仔细,把页面上的每一个角落都看了几十遍,依然没有把页面上的点点点测好,当时真的是每天都过得提心吊胆。那给你一个网站,究竟应该如何测试呢?

首先,查找需求说明、网站设计等相关文档,分析测试需求。

制定测试计划,确定测试范围和测试策略。

一般包括以下几个部分:功能性测试;界面测试;性能测试;数据库测试;安全性测试;兼容性测试。


设计测试用例:

功能性测试可以包括,但不限于以下几个方面:

1.链接测试。链接是否正确跳转,是否存在空页面和无效页面,是否有不正确的出错信息返回。

2.提交功能的测试。

3.多媒体元素是否可以正确加载和显示。

4.多语言支持是否能够正确显示选择的语言等。

界面测试可以包括但不限于一下几个方面:

1.页面是否风格统一,美观

2.页面布局是否合理,重点内容和热点内容是否突出

3.控件是否正常使用

4.对于必须但未安装的控件,是否提供自动下载并安装的功能

5.文字检查

性能测试:

负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。

压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。应用在客户端性能测试的目的是考察客户端应用的性能,测试的入口是客户端。

数据库测试要具体决定是否需要开展。数据库一般需要考虑连结性,对数据的存取操作,数据内容的验证等方面。

比如:数据库系统测试关注重点:

1、数据库是否符合范式

2、数据库设计是否和数据库相同

3、数据库设计是否合理

4、数据库安装测试

5、数据库配置测试

安全性测试:

1.基本的登录功能的检查

2.是否存在溢出错误,导致系统崩溃或者权限泄露

3.相关开发语言的常见安全性问题检查,例如SQL注入等

4.如果需要高级的安全性测试,确定获得专业安全公司的帮助,外包测试,或者获取支持

5.兼容性测试,根据需求说明的内容,确定支持的平台组合:

浏览器的兼容性;

操作系统的兼容性;

软件平台的兼容性;

数据库的兼容性

旅游景点树自行车分割线

总结:

开展测试,并记录缺陷。合理的安排调整测试进度,提前获取测试所需的资源,建立管理体系(例如,需求变更、风险、配置、测试文档、缺陷报告、人力资源等内容)。

定期评审,对测试进行评估和总结,调整测试的内容。

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

posted @ 2019-02-01 17:34 51testing 阅读(148) | 评论 (0) | 编辑 收藏
 
如果这10道关于数据库的测试题你都会,面试必过!

一、什么是数据库测试?

数据库测试也称为后端测试。数据库测试分为四个不同的类别。

[if !supportLists]· [endif]数据完整性测试

[if !supportLists]· [endif]数据有效性测试

[if !supportLists]· [endif]数据库相关的性能

[if !supportLists]· [endif]测试功能,程序和触发器


二、数据库中数据的基本结构

定义一:数据元素集合(也可称数据对象)中各元素的关系。

定义二:相互之间存在特定关系的数据元素集合。

一个表(数据库),我们就称它为一个数据结构,它由很多记录(数据元素)组成,每个元素又包括很多 字段(数据项)组成数据库测试分类系统测试、集成测试、单元测试、功能测试、性能测试、安全测试系统测试、数据库在初期设计中需要进行分析测试。

三、数据库测试分类

从测试过程的角度来说我们也可以把数据库测试分为

系统测试

数据库在初期设计中需要对需求覆盖进行分析,测试..另一方面需要确认数据库设计文档和最终的数据库相同,当设计文档变化时我们同样要验证改修改是否落实到数据库上。

这个阶段我们的测试主要通过数据库设计评审来实现。

集成测试

集成测试是主要针对接口进行的测试工作,数据库需要考虑的是

数据项的修改操作

数据项的增加操作

数据项的删除操作

数据表增加满

数据表删除空

删除空表中的记录

数据表的并发操作

针对存储过程的接口测试

结合业务逻辑做关联表的接口测试

同样我们需要对这些接口考虑采用等价类、边界值、错误猜测等方法进行测试

单元测试

单元测试侧重于逻辑覆盖,数据库开发的单元测试相对简单些,可以通过语句覆盖和走读的方式完成。

而我们也可以从测试关注点的角度对数据库进行分类

功能测试

对数据库功能的测试我们可以依赖与工具进行

DBunit

一款开源的数据库功能测试框架,可以对数据库的基本操作进行白盒的单元测试,对输入输出进行校验

QTP

通过对对象的捕捉识别,我们可以通过QTP来模拟用户的操作流程,通过其中的校验方法或者结合数据库后台的监控对整个数据库中的数据进行测试。比较偏向灰盒。

DataFactory

一款优秀的数据库数据自动生成工具,通过它你可以轻松的生成任意结构数据库,对数据库进行填充,帮助你生成所需要的大量数据从而验证我们数据库中的功能是否正确。属于黑盒测试。

数据库性能

性能优化分4部分

1.物理存储方面

2.逻辑设计方面

3.数据库的参数调整

4.SQL语句优化.

数据库性能测试工具:

Loadrunner

可以通过对协议的编程来对数据库做压力测试

Swingbench(这是一个重量级别的feature,类似LR,而且非常强大,只不过专门针对oracle而已)

安全测试

自从SQL 注入攻击被发现,冒失万无一失的数据库一下从后台变为了前台,而一旦数据库被攻破,整个系统也会暴露在黑客的手下,通过数据库强大的存储过程,黑客可以轻松的获得整个系统的权限。而SQL的注入看似简单缺很难防范,对于安全测试来说,如何防范系统被注入是测试的难点。

四、在数据库测试中,我们需要正常检查什么?

通常,我们在DB Testing中检查的内容是:

[if !supportLists]· [endif]约束检查

[if !supportLists]· [endif]验证字段大小

[if !supportLists]· [endif]存储过程

[if !supportLists]· [endif]将应用程序字段大小与数据库匹配

[if !supportLists]· [endif]基于绩效的问题的索引

五、解释什么是数据驱动测试?

在数据表中,为了测试多个数据,使用数据驱动的测试。通过使用它,它可以很容易地从不同位置同时替换参数。

六、什么是连接并提及不同类型的连接?

Join用于显示两个或两个以上的表,连接类型为:

[if !supportLists]· [endif]自然加入

[if !supportLists]· [endif]内部联接

[if !supportLists]· [endif]外加入

[if !supportLists]· [endif]交叉加入

外部联接又分为两部分:

[if !supportLists]· [endif]左外连接

[if !supportLists]· [endif]右外连接

七、什么是索引并提及不同类型的索引?

索引是数据库对象,它们是在列上创建的。为了快速获取数据,经常访问它们。不同类型的索引是:

[if !supportLists]· [endif]B树索引

[if !supportLists]· [endif]位图索引

[if !supportLists]· [endif]聚集索引

[if !supportLists]· [endif]覆盖指数

[if !supportLists]· [endif]非唯一索引

[if !supportLists]· [endif]独特的指数

八、在数据库测试中,测试数据加载的步骤是什么?

以下步骤需要遵循测试数据加载

[if !supportLists]· [endif]应该知道源数据

[if !supportLists]· [endif]目标数据应该是已知的

[if !supportLists]· [endif]应检查源和目标的兼容性

[if !supportLists]· [endif]在SQLEnterprise管理器中,打开相应的DTS包后运行DTS包

[if !supportLists]· [endif]您必须比较目标和数据源的列

[if !supportLists]· [endif]应检查目标和源的行数

[if !supportLists]· [endif]更新源中的数据后,检查更改是否显示在目标中。

[if !supportLists]· [endif]检查NULL和垃圾字符

九、为数据库测试编写测试用例的方法是什么?

编写测试用例就像功能测试一样。首先,您必须了解应用程序的功能要求。然后你必须决定编写测试用例的参数

[if !supportLists]· [endif]目标:写出您想要测试的目标

[if !supportLists]· [endif]输入法:编写要执行的操作方法或输入

[if !supportLists]· [endif]预期:它应该如何出现在数据库中

十、要管理和操作测试表,您在数据库测试中使用了哪些SQL语句?

SELECT,INSERT,UPDATE,DELETE等语句用于操作表,而ALTER TABLE,CREATE TABLE和DELETE TABLE用于管理表。

总结:

数据库的健壮性,容错性和恢复能力也是我们测试的要点,我们也可以发现功能测试,性能测试,安全测试,是一个由简到繁的过程,也是数据库测试人员需要逐步掌握的技能,这也是以后公司对数据库测试人员的基本要求。

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

posted @ 2019-01-30 17:23 51testing 阅读(98) | 评论 (0) | 编辑 收藏
 
你的能力比学历更重要,Python成各年龄段开发者最爱!

随着科技的不断发展,工作对技能的要求也在不断变化。

掌握编程技能的重要性正在不断提升,包括AI在内的各行各业都对开发者有着巨大的需求,更别提编程还能锻炼大脑的思维能力。

应该怎么学编程?学习哪种编程语言?从何时开始学编程?

据最新调查报告显示,平均而言,开发者们掌握了4种语言,而且还想再多学4种。对学习的渴望程度因人而异,18-24岁的年轻开发者想学6种语言,而35岁以上这个数字降低为3种。

即使新语言经常出现,但掌握核心的传统语言对开发者来说非常重要。总体来说,现在雇主最常见的语言要求是:JavaScript、Java、Python、C++和C。


那开发者最喜欢哪种语言?

注:语言偏好图是基于爱恨指数(Love-Dislike Index),这个指数 = (喜欢某语言的开发者的百分比) – (不喜欢相同语言的开发者的百分比)。这有助于我们确定给定编程语言或框架的正面或负面情绪。

100%的成绩=最喜欢的成绩,-100%的成绩 = 最不喜欢的成绩。

所有年龄段的开发者

Python

C

C++ 和 Java

JavaScript


注:

比例分数为负数的,标题不喜欢该语言的,远大于喜欢该语言的。

下面图表,仅展示开发者喜欢的语言。

18~24 岁的开发者

Python

C++

C

JavaScript

Java


25~34 岁开发者

Python

C

Go

JavaScript

TypeScript


35~44 岁开发者

Python

C

Go

TypeScript

C#


45~54 岁开发者

Python

Go

C

TypeScript

C++

Erlang (这个群体学习 Erlang 意愿好高)


55 岁以上开发者

Swift

C

Python

Java

C++


Python是增长最快的编程语言

JavaScript已经连续六年高居榜首,是目前最常用的编程语言。而Python,随着人工智能的发展,其排名也在不断上升,去年超过了PHP,今年超过了C#,是这两年来增长最快的编程语言。


连续三年,Rust是我们调查中开发者最喜欢的编程语言。我们首次在调查中询问到Kotlin语言,出人意料的是该语言的受欢迎程度高达75.1%,紧随Rust。


有趣的是,Visual Basic 6 也连续三年当选了最可怕的编程语言冠军,而且使用Visual Basic 6 的开发者表示不想再继续使用了。

Python除了以68%的高比例占据了喜爱榜的第三名,还以25.1%的比例夺下了开发者最想要学习的编程语言榜冠军。这说明,很多未使用Python的开发者想要入坑。


在对库、框架和工具的调查中,Node.js和AngularJS仍然是最常用的。Google的机器学习开源软件库TensorFlow,是Stack Overflow社区增长最快的开源软件库之一。以73.5%的认同度,成为此次调查中最受欢迎的开源库。

Python 以其简单性,可读性和诸多科学计算库而闻名。它也是计算机科学入门课程的一部分。

在新语言中有一种不同寻常的趋势:相比年老开发者,年轻开发者更喜欢较新的语言。

年轻开发者对知识有天生的渴望,他们更有可能全面学习语言,甚至是那些他们不喜欢的语言。年老开发者会根据自己的经验,选择他们认为经得起时间考验的语言。

总结:

无论使用哪种语言,你的能力比学历更重要


普遍的观点认为,招聘人员有意招聘那些获得名牌大学CS学位的人。但事实证明,他们实际上关心的是你的能力,而不是你的学历。绝大多数的招聘经理表示,他们更关心简历中的技能证明,如以前的工作、多年的项目经验和 GitHub 等等。无论公司规模如何,10 个招聘经理中有 9 个都认为,以前的工作和多年的经验这两个技能指标是最受欢迎的资格证明。

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

posted @ 2019-01-29 17:38 51testing 阅读(99) | 评论 (0) | 编辑 收藏
 
新人必看,测试大佬私藏的入门性能测试五步走,果断收藏!

分享一个江湖小辈如何参透性能测试这本武功秘籍的心路历程,适用于刚踏入性能测试江湖里的小白,一起来一探究竟。


【开幕】武林秘籍惊现江湖在庞大的性能测试面前,我还是一个江湖小辈。然而在被YW大神领进门之后,性能测试中的变化莫测、十面埋伏、刚柔并济、九九归一,仿佛让自己窥见了一门武林绝学,继而心生敬畏之心。

LongLongAgo,听过YW大神对性能测试方面的分享。那个时候就感觉眼前的这个男人不明觉厉,练就了一身武林绝学,是自己以后发展的榜样。当时他还给我们展示了他的武林秘籍,是这样的:


【第一幕】该不该预测一个初始值?

第一次真正接触性能测试是在邮箱大师组,当时是要去对“邮件撤回”的接口进行性能测试,2017年6月25日接到任务,二话不说开始准备了起来。对jmeter速成之后,拿着wzprecall的脚本就开始开压。

那么第一个问题来了:

我:我应该怎么压?我是说有没有一个初始的值可以入手去压?...

我:YW大神经验丰富,是否可以预测出这个初始值?

YW大神:不能。

我:...

YW大神:如果我都预测出来了,那还需要性能测试做什么?

我:哦...

YW大神:两个方法:要么和产品交流拿到实际的用户量数据,要么自己想办法。

我:好嘞。

屁颠屁颠跑去找产品同学,在我的三寸不烂之舌以及一箩筐解释下,产品同学终于听懂了,但是回答是:我不知道,我真的不知道,我真的真的不知道。。。怀着复杂的心情我翻开了YW大神的武林秘籍第一页,当时有这么一张图:


看着这本高深的武功秘籍开始发散性思维:

性能测试就像过山车,开始的慢速起步让你紧张,中途的起起伏伏让感觉很爽,最后戛然而止回到起点。

所以,性能测试中:

起步阶段一定不要立马就开始,而是需要一个逐步缓冲阶段,这个时候就需要调整“Ramp-upPeriod”;这里普及一下【Ramp-upPeriod】:Ramp-upPeriod用于告知JMeter要在多长时间内建立全部的线程。该数据默认值是0,表示JMeter将立即建立所有线程如上图图一。假设Ramp-upPeriod设置成T秒,全部线程数设置成N个,JMeter将每隔T/N秒建立一个线程。如上图图二。

这个车不知道能坐多少人的情况下,你不能无限制添加人员,否则造成事故就坏了。记录你被“甩”的最爽的那段时光,因为那段时光是过山车最大的意义,随后一切都是满脸激动的泪水。在性能测试中可以将90%Line作为一个重要的参考数据。


经过初探武林秘籍形成练法心得之后,开始了自己的第一层修炼,数据如下:


看到图中显示的这么多Error,发现第一次在没有高人点拨的时候,很难参悟其中奥义。但是也习得一些武功心法:

1、在以上用户量的情况下,这个性能是很差的;

2、知道了报告里面字段的意义:

1)#sample:这次测试任务中,一共发出了多少个请求

2)Average:单个request的平均响应时间

3)Median:50%用户的响应时间

4)90%Line:90%的用户一个请求的响应时间

还有Error和Throughtput以及最大、最小响应时间等。

我们这次脚本中设置的超时时间也是8000ms,所以可以看到还是有一部分请求超时,才会导致最后请求失败。

根据武侠小说的经验得出,再这样练下去肯定会走火入魔,当务之急需要YW大神指点一二,必能得其真传。

【第二幕】从单线程开始

拿着上面粗糙的数据,我又去找了YW大神。

当时大神只问了一个问题,我立马打道回府干劲十足:“单线程的响应时间是多少?”

开始参悟:当没有人坐过山车时,过山车肯定是不会开的。但是就算只有一个人坐过山车,一段时间内,也必须开车。(当然在国内不可能)。而本文的第一张图可以看到,用户量也是从0开始增长,而单线程(1个用户)可以作为一个参考的基准。


上图可以看到一个用户的执行一次的响应时间,然后可以慢慢递增。然后我将线程数逐渐增加的同时,有了以下的测试数据:


拿着上图手中的测试数据,说不出来的感觉,早晨测试出用户量在20~25之间似乎接近饱和,但是下午的数据基本是在30~40之间,带着疑问我又来咨询YW大神。

【第三幕】用命令行形式跑性能测试,然后观察机器性能。

YW大神:你是在哪里跑的?机器的cpu如何?内存怎样?

我:...这些我有看的啊,在我本地机器跑的(顺便随手拿出了我的电脑内存和cpu数据)

YW大神:要在服务器用jmeter命令行跑。

我:哦...

认真回去看了Jmeter官方文档,第一页赫然写到:欲练此功,必先...使用命令行!         

Forloadtesting,youmustrunJMeterinthismode(WithouttheGUI)togettheoptimalresultsfromit.这里对命令行格式的使用记录如下:

例1:测试计划与结果,都在%JMeter_Home%\bin目录

>jmeter-n-t../scripts/wzprecall.jmx-lresult.jtl

例2:指定日志路径的:

>./jmeter-n-t../scripts/wzprecall.jmx-lreport-output\01-result.csv-jreport-output\01-result.log

【拓展】:

例3:默认分布式执行:

>jmeter-n-t../scripts/wzprecall.jmx-r-lreport-output\01-result.csv-jreport-output\01-result.log

例4:指定IP分布式执行:

>jmeter-n-t../scripts/wzprecall.jmx-R192.168.10.25:1036-lreport-output\01-result.csv-jreport-output\01-result.log

测试数据以及分析:


数据中看到:用户量在30到40之间基本饱和,withdrawQuery请求吞吐量基本在16.5/s。

测试数据看起来已经有点样子也得到了结果,拿着数据我找了YW大神。

【第四幕】控制吞吐!控制吞吐!控制吞吐!

YW大神:吞吐20都不到,这个是不可能的。

我:...

YW大神:注意控制吞吐!

测了这么多的数据,发现很多时候的步骤都是自己不断尝试不同的线程数,在有很多未知的情况下去试探,这种方法耗时耗力,而且最后得到的数据并不能说明问题。那么另一种方法就是完全通过定时器来控制QPS,这就类似于控制变量法,将吞吐控制之后,如果实际的吞吐达到限制的吞吐表示现在性能合理,且有上升空间,如果随着线程数的增加限制的吞吐和实际吞吐差别很大,那么恭喜你,你找到了这个接口性能的天花板中的一板。Jmeter提供了一个非常有用的定时器,称为ConstantThroughputTimer(常数吞吐量定时器),该定时器可以方便地控制给定的取样器发送请求的吞吐量。

Targetthroughput(insamplesperminute):目标吞吐量。注意这里是每分钟发送的请求数。20QPS,这里的值应该是1200。

CalculateThroughputbasedon:有5个选项,分别是:

Thisthreadonly:控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的targetThroughput乘以该线程的数量。

Allactivethreads:设置的targetThroughput将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理的时间后再次运行。活跃线程指同一时刻同时运行的线程。

Allactivethreadsincurrentthreadgroup:设置的targetThroughput将分配在当前线程组的每一个活跃线程上,当测试计划中只有一个线程组时,该选项和Allactivethreads选项的效果完全相同。

Allactivethreads(shared):与Allactivethreads的选项基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程上一次运行结束后等待合理的时间后再次运行。

Allcativethreadsincurrentthreadgroup(shared):与Allactivethreadsincurrentthreadgroup基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程的上一次运行结束后等待合理的时间后再次运行。

在控制吞吐之后,得到的数据有模有样:


【第五幕】武林秘籍重现江湖!

手捧着数据,回到了YW大神身边,YW大神语重心长的说:在我的武功秘籍里,不对,在我的ppt里有一张performancecurve。

你的结果能对的上performancecurve,你就能明白一些结果了。

一切仿佛又回到了起点,只是世界变得安静了。静静地翻看这本秘籍,我想我有点懂了。



总结:

用户量为40的时候,平均响应时间基本在400ms左右,此时吞吐量在1500/min(25/s),吞吐量还在上升阶段。

用户量到55~65阶段,吞吐量基本达到峰值2076/min(34.6/s),用户量在65的时候,响应时间开始快速上升。

用户量在70+以后,吞吐量急速下降,相应的响应时间也在75的时候达到了1000ms+左右。

通过以上评估,压力<=40阶段,为lightload阶段,压力在40~50之间比较理想饱和阶段,50~65之间服务器heavyload阶段。

当用户>70的时候,为buckleZone阶段。

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

posted @ 2019-01-28 17:50 51testing 阅读(153) | 评论 (0) | 编辑 收藏
 
Fiddler抓包工具入门:软件测试员必知的抓取https协议的方法

首先给大家分享一个抓包的小故事:

小T在测试APP时,打开某个页面展示异常,于是就跑到客户端开发小A那里说:“你这个页面做的有问题,页面展示异常”;

小A说:“这哪是我的问题,你去找后台吧,后台接口返回数据有问题”;

小T就屁颠屁颠的跑到后台接口开发小M那里说:“你接口返回数据有问题,改下吧”;

小M看了看服务器日志说:“没找到报错啊,我这里服务正常,你抓个包看下吧”;

小T郁闷了,屁颠屁颠的回去了想:“抓包?抓啥包?”;

以上故事,在实在的测试工作中应该会有不少初入职场的测试人员遇到,如果你对fiddler抓包还不熟悉,那么接下来这篇文章可能对你有所帮助,废话不多说,下面开始介绍。


我们使用浏览器或者客户端软件都要与外界进行通信,就必然会有数据的发送和接收,有时候需要对这些传递的数据进行分析,因此需要截获这些传递的数据。

其中对这些数据进行截获、重发、编辑、转存的过程叫做抓包。

Fiddler是一款常见的抓包分析工具,可以详细地对HTTP请求进行分析,并模拟对应的HTTP请求。

为什么选择Fiddler ?

1、本地化的工具,是一个使用本地 127.0.0.1:8888 的 HTTP 代理

(任何能够设置 HTTP 代理为 127.0.0.1:8888 的浏览器和应用程序都可以使用 Fiddler)

2、Fiddler本身对http协议支持较好,且操作简单容易上手

3、具有抓包和分析功能,省去了安装其他工具的必要

4、工具本身功能强大,如劫包、篡改数据、限速等

Fiddler工作原理


Fiddler是以代理WEB服务器的形式工作的,浏览器与服务器之间通过建立TCP连接以HTTP协议进行通信,浏览器默认通过自己发送HTTP请求到服务器,它使用代理地址:127.0.0.1, 端口:8888.

当Fiddler开启会自动设置代理, 退出的时候它会自动注销代理,这样就不会影响别的程序。不过如果Fiddler非正常退出,这时候因为Fiddler没有自动注销,会造成网页无法访问。解决的办法是重新启动下Fiddler。

下面就总结下使用抓取https协议的方法:

使用方法

1、fiddler的安装

先下载好安装包,环境准备好后开始安装:


操作步骤:I Agree>Install>OK  这个工具有一个反人类的东西就是安装完成没有自动在桌面生成快捷键,所以还需要在安装的时候注意安装路径并找到目录去手动创建快捷键。

工具主页面:


2、设置fiddler

打开fiddler,进入Tools-Fiddler Options,打开HTTPS页卡。勾选Capture HTTPS CONNECTs、Decrypt HTTPS traffic和ignore server certificate errors


配置完成后重启fiddler

3、安装证书

1)下载fiddler HTTPS证书后保存到电脑,打开Internet选项-内容页卡


2)点击证书,然后导入之前下载的fiddler证书即可


4、手机端安装证书

1)Android端安装证书

将证书导入到存储盘中,进入系统设置-安全页面,点击从存储盘安装fiddler证书。安装完成后再将手机代理到fiddler即可抓取https包。



部分手机在代理访问https协议的时候会自动弹出安装证书的界面,可直接安装(大部分都要手动安装)

2)iOS端安装证书

iOS较麻烦,我也是参考网上的方法,将fiddler证书使用附件发送到邮箱。用Safari打开邮箱,下载证书后安装。如果有好的方法,再分享出来。

3)在网上看到一个安装证书较简单的方法

手机连上fiddler代理后,如代理服务器为:30.30.30.30,端口为8888。使用手机浏览器访问30.30.30.30:8888,会自动跳转到fiddler证书下载页面,如图


点击FiddlerRoot certificate即可安装

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

posted @ 2019-01-25 17:24 51testing 阅读(110) | 评论 (0) | 编辑 收藏
 
仅列出标题
共55页: First 9 10 11 12 13 14 15 16 17 Last