测试流程与测试方法

1. 产品-开发-测试流程

测试流程图.png

需求分析
需求分析由产品人员制定,细化每一个功能的细节,每一个按钮的位置,对于稍大或复杂一点的需求进行建模。

需求评审
这里会叫上所有参与项目人员进行,开发人员、测试人员。测试人员提出需求,开发人员考虑功能实现的方案与可行性、当然开发负责也是要参与的。测试人员主要是对需求的理解提出疑问,以便才能根据需求写用例。

开发人员制定开发计划
开发人员需求根据需求功能点进行排期。然后将开计划转交给测试人员。

测试计划制定测试计划
测试人员根据开发计划,对测试具体测试时间,也就是开发功能完成后的时间,进行几轮测试等。然后,把项目的开发与测试计划提交到Teambiton进行任务管理。

编写测试用例
根据详细的需求文档,开始进行用例的编写。

用例评审
在用例进行评审之间,先以邮件形式将用例发送给相关人员,以便他们事先了解用例对哪些功能进行验证以及验证的细节。
然后,测试人员组进行用例评审,开发人员对用例与实际功能不符合有哪些,产品人员对会通过用例对功能的具体实现进行把握等等。

提交代码
开发人员完成所有功能后,会对自己的功能进行一个自测。自测完成后提交测试人员进行测试。

具体测试流程
开发人员对于提测的功能进行测式,发现的问题通过缺陷管理工具进行反馈,开发人员对问题进行修复,然后,准备第二轮测试。
测试人员完成第一轮测试后,需要写测试结论,发到相关人员。然后进行第二轮测试,并且对第一轮中发现的问题进行重点回归。

测试通过
经过两到三轮或四轮的测试后,直到没发现新的问题,或暂时无法解决,或不紧急的问题。通过上级确认,可以通过。编写测试报告与验收方案。

2. 测试方法与流程

执行测试时的流程图.png

冒烟测试
是指在对一个新版本进行系统大规模的测试之前,先验证一下软件的基本功能是否实现,是否具备可测性。
引入到软件测试中,就是指测试小组在正规测试一个新版本之前,先投入较少的人力和时间验证一个软件 的主要功能,如果主要功能都没有实现,则打回开发组重新开发。这样做的好处是可以节省大量的时间成本和人力成本。

功能测试
功能测试检查实际的功能是否符合用户的需求。测试的大部分工作也是围绕软件的功能进行,设计软件的目的也就是满足客户对其功能的需求。
功能测试又可可以细分为很多种:界面测试、逻辑功能测试、易用性测试、安装测试、兼容性测试等。

  • 界面测试:确保产品UI符合产品经理和设计师的界面设计,并且文案正确。
  • 逻辑功能测试:根据需求文档与测试用例,测试产品的逻辑,确保逻辑正确。
  • 兼容性测试:原有功能优化后在新旧版本上的兼容测试;服务号、PC Web、组织号与APP之间相互功能的交互与兼容测试。

回归测试
回归测试是指修改了旧代码后,重新实行测试以确认修改后没有引入新的错误或导致其他代码产生错误。

  • 原有功能在新版本上进行回归测试,保证运行准确。目前APP回归测试上测试主要基于底部导航Tab,对报名吧首页、通讯录、发布、发现、我四个tab下的主要功能进行回归测试。服务号和pc web会进行发布-报名-签到整一个业务流程进行回归测试。组织号是进行组织的申请-资料编辑-审核会员-审核组织的业务流程进行测试。
  • 第一轮功能测试中发现的bug得到修复后,对该功能进行第二轮测试。回归也是一个循环的过程,如果回归的问题通不过,则需要开发人员修改后再次进行回归,直到通过为止。

验收测试
验收测试是部署软件之前的最后一个测试操作。一般是对产品功能、用户界面、性能、业务关联性的全局测试,确保产品达到产品经理的需求,没有阻碍产品使用的大bug。

升级测试
从历史版本升级到当前新版本的测试,确保升级后,软件可以正常使用,重点对升级后的新功能进行测试。

3. issue管理

issue处理流程

issue处理流程图.png

issue优先级(priority)
当题开发测试人员在面对许多issue需要处理进,就需要进行优先级排序。
优先级的划分:
低(4)——>中(3)——>高(2)——>紧急(1)
延迟处理——>正常排队——>优先处理——>紧急处理
issue 的严重程度和优先级是含义不同但相互联系密切的两个概念,它们从不同的侧面描述了软件缺陷对软件质量和最终用户的影响程序和处理方式。
一般地,严重程序高的软件缺陷具有较高的优先级。严重程度高说明缺陷对软件造成的危害性大,需要优先处理,而来严重程序低的缺陷可能只是软件不太尽善尽美,可以稍后处理。
严重程度高优先级不一定高:
如果某个严重的软件缺陷只在非常极端的条件下产生,则没有必要马上处理。
如果某一个软件缺陷,需要重新修改软件的整体架构,可能会产生更多的潜在缺陷,此时即使缺陷的严重性很高,是否需要修正,需要全盘考虑。
严重程度低优先级不一定低:
如果是软件名称错误或版本号错误,虽然说其属于界面错误,严重程度不高,但其关系到软件和公司的市场,必须尽快修正。

4. 测试中用到的工具

任务分配及管理平台:Teambition
需求文档、UI设计、测试文档管理平台:Teambition
issue管理平台:gitlab
数据库:bmbtest
打包工具:Xcode、Android Studio
内测APP上传和下载地址:
Android: fir.im/luyi
iOS: fir.im/bmbtest

原网址:http://www.jianshu.com/p/543855d30556

总结:通过这篇文章我更加清楚的了解了测试的一个整个流程以及测试方法,以及bug的处理方式。对于我最近的工作模式,我也进行了一些反思。对于测试的主流程以及测试方法我自身的欠缺是比较大的。对于一个任务,没有一条清晰的主线,盲目的测试,反复的重复前一天的操作,这是非常不应该的。希望在以后的工作中,我能有一个明确的规划,更好的完成自己的任务。

 

Python初学之流程控制小游戏

初学Python,小游戏分享,系统和人互动,猜系统未知答案,每猜一次,猜错给出提示,直到猜对。如下:

from random import randint

num=randint(2,10)

print ‘Who do you think i am ?’

bingo=False

while bingo==False:

answer=input()

if answer>num:

print “too large!”

if answer<num:

print “too small!”

if answer==num:

print ‘you are best!’

bingo=True

解释:首先,答案是一个random随机函数,在2到9的随机函数,如果没有使用while语句进行流程控制,那么上面的小游戏,不管对错,每次只能猜一次,所以引入while语句:
同if一样,while也是一种控制流语句,另外它也被称作循环语句。继续来看渣画质手绘流程图:

 

程序执行到while处,“当”条件为True时,就去执行while内部的代码,“当”条件为False时,就跳过。

语法为:

while 条件:
循环执行的语句
 

 

 

实现过程为:先定义bool变量bingo为False,那么当这个变量一直是Flase时,执行下面的循环语句,猜错了就不会输出bingo为True的结果。循环一直执行,我们可以一直回答,直到猜对了,输出bingo变量为True的值,才会导致while条件不再成立。游戏结束。

后来学到了,函数

我们希望有这样一个函数,它比较两个数的大小。

如果第一个数小了,就输出“too small”

如果第一个数大了,就输出“too big”

如果相等,就输出“bingo”

函数还有个返回值,当两数相等的时候返回True,不等就返回False

于是我们来定义这个函数:

def isEqual(num1, num2):

if num1<num2:

print ‘too small’

return False;

if num1>num2:

print ‘too big’

return False;

if num1==num2:

print ‘bingo’

return True

return是函数的结束语句,return后面的值被作为这个函数的返回值。函数中任何地方的return被执行到的时候,这个函数就会结束。

 

然后在我们的小游戏里使用这个函数:

from random import randint

num = randint(1, 100)

print ‘Guess what I think?’

bingo = False

while bingo == False:

answer = input()

bingo = isEqual(answer, num)

 

在isEqual函数内部,会输出answer和num的比较结果,如果相等的话,bingo会得到返回值True,否则bingo得到False,循环继续。

 

 

函数可以把某个功能的代码分离出来,在需要的时候重复使用,就像拼装积木一样,这会让程序结构更清晰。

 

 

 

 

jenkins的简单学习笔记(一)

Jenkins学习:
一、Jenkins是什么?
    Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。Jenkins是一种软件允许持续集成。
Jenkins 安装在一台服务上也中央构建发生的地方。伴随着Jenkins,有时人们还可能看到它与Hudson关联。Hudson是由Sun Microsystems 开发的一个非常流行的开源,基于Java 的持续集成工具,后来被Oracle收购。Sun被Oracle收购之后,一个从 Hudson 源代码的分支由 Jenkins 创建出台。
二、什么是持续集成?
    持续集成是一个开发的实践,需要开发人员定期集成代码到共享存储库。这个概念是为了消除发现的问题,后来出现在构建生命周期的问题。持续集成要求开发人员有频繁的构建。最常见的做法是,每当一个代码提交时,构建应该被触发。
三、Jenkins设置安装
1、Jenkins与Tomcat安装设置
2、Jenkins与Git安装设置(重点+难点)
3、Jenkins与Maven安装设置
四、Jenkins的配置
Jenkins主目录
Jenkins需要一定的磁盘空间来进行构建和保持档案。人们可以从 Jenkins 配置屏幕查看该路径。默认情况下,它被设
置到 ~/.jenkins,而这个位置将首先在用户配置文件的位置存储起来。在正确的环境中,需要更改此位置,适当的位置来
存储所有相关的建立和档案。可以通过以下方式做到这一点
1、启动 Servlet 容器之前,设置“JENKINS_HOME”环境变量设置为新的主目录。
2、设置 “JENKINS_HOME” 系统属性 到 servlet 容器。
3、设置JNDI环境条目“JENKINS_HOME”到新目录。
下面的例子将使用“JENKINS_HOME”环境变量设置的第一个选项。
首先创建一个新的文件夹:D:\worksp\yiibai.com\tomcat7\webapps\jenkins。复制所有内容从现有的 ?/.jenkins 到这个新的目录。
设置 JENKINS_HOME 环境变量指向到安装在机器上 Java 的基本目录位置。 例如,
OS 输出
Windows 设置环境变量 JENKINS_HOME 到你想要的位置。举个例子,可以将其设置为E:\ APPS \詹金斯 E:\Apps\Jenkins
Linux export JENKINS_HOME =/usr/local/Jenkins 或所希望的位置。
在 Jenkins 的仪表板,请在左侧菜单中选择管理 Jenkins。然后从右侧单击“Configure System”。
在主目录中,将看到已经配置了新的目录。
Jenkins Home Directory
1、# of executors
这是指并发的作业的执行,可以发生在 Jenkins 机上的总数。这可以根据要求改变。有时建议是保持这个数目相同CPU数量的
机器上实现性能更好。
2、Environment variables
这被用于添加将适用于所有作业定制的环境变量。这些是键 – 值对,并可以访问和用于在任何需要的地方构建。
3、Jenkins URL
默认情况下,Jenkins URL指向本地主机:localhost。 如果为您的机器设置一个域名,将其设置为域名别的覆盖本地主机与计算机
的IP地址。这将有助于建立从站和在使用电子邮件作为使用环境变量 JENKINS_URL 可以用于直接访问Jenkins URL发送链接为:
${JENKINS_URL}。
4、Email Notification
在电子邮件通知区域,可以向用户发送电子邮件配置SMTP设置。Jenkins连接到SMTP邮件服务器发送电子邮件到收件人列表,这是必需的。
五、URL执行jenkins关闭和重启
http://localhost:8080/jenkins/exit 关闭jenkins
http://localhost:8080/jenkins/restart 重启jenkins
http://localhost:8080/jenkins/reload 重新加载配置

流程分析法

流程分析法主要针对测试场景类型属于流程测试场景的测试项下的测试子项进行设计,是从白盒测试设计方法中的路径覆盖分析法借鉴过来的一种很重要的方法。在白盒测试中,路径就是指函数代码的某个分支组合,路径覆盖法需要构造足够的用例覆盖函数的所有代码路径。在黑盒测试中,若将软件系统的某个流程看成路径的话,则可以针对该路径使用路径分析的方法设计测试用例。

  采用路径分析的方法设计测试用例的好处:

1、降低测试用例设计的难度。即只要清楚程序流程、看懂程序流程图,就可以设计出质量较高的测试用例;

2、是在测试资源紧张的情况下,可以据此有选择的执行测试用例,而非全部依靠经验做取舍。

使用流程分析法的具体实施步骤:

步骤1:画出业务流程图;

步骤2:定义状态节点和条件分支;

步骤3:确定测试路径;

步骤4:选取测试数据,构造测试用例。

  例子:

  一、需求:使用ATM机取款

  二、分析:

1、测试需求分析:

a)用户向ATM取款机中插入银行卡,若银行卡合法,取款机提示用户输入密码;

若插入无效银行卡,取款机提示用户“银行卡无效”,并自动退卡。

b)用户输入银行卡密码,取款机将密码传至银行主机进行校验。若密码正确,取款机提示用户输入取款金额,

提示信息:“请输入取款金额:”若密码错误,取款机提示用户:“密码错误!”,并退回输入密码界面。

当三次输入密码错误时,自动退卡,锁卡。提示:“密码错误,密码输入次数超限!”。

c)用户输入取款金额,系统校验金额正确。即取款机余款大于用户取款金额。提示:“请确认取款金额为XX!”。

用户按下确认键,确认取款XX。若用户输入取款金额不正确,提示:“输入错误!”。

此处为分析方便忽略输入取款金额错误的各种情况下的异常流程处理,降低分析的复杂度。

d)系统同步银行主机,点钞票,输出给用户并减去用户卡中相应数目的存款金额。

若卡内余额小于用户取款金额,则提示:“余额不足!”,并退回输入取款金额界面。

若取款机与银行主机通信超时、通信中断、传输错误等情况,提示:“连接超时,本次操作取消”。

若主机已经做了数据库操作,减去了用户存款余额,则要做回退操作。

e)用户取款,银行卡退卡。用户拔出银行卡。取款机恢复初始界面。正常取款操作结束。

若用户未按时拿走取出的钱款、用户未按时拔出银行卡,则取款机做相应异常处理操作。

2、测试设计方法分析(流程分析法):

根据需求,画出业务流程图,如下:

  定义状态节点和条件分支:

  上面的业务流程图中,只描述正常流程-取款成功的情况。异常流程未做描述,是为了分析方便,实际中异常流程必须在业务流程图中描述清楚状态、分支等。

  3、用例设计(确定测试路径):

  需求描述及流程图中,ATM取款机的提示信息对应于测试用例中的预期输出部分,用户的操作对应测试用例中的测试步骤部分。原则是一条有效路径使用一个测试用例覆盖。

  依据业务流程图确定测试路径,即需要测试的业务流程。其主要包含三个方面:

  a)正常流程,取款成功(基本流程):对应一次性取款成功;

  b)异常流程,取款失败(分支流程):对应取款失败,包括退卡、吞卡;

  c)异常流程,取款成功(循环流程):对应取款中间出现意外,比如密码输入错误,但是最终成功取钱的情况。

           不要只是为了证明程序能够正确运行而去测试程序。相反,应该一开始就假设程序中隐藏着错误(这种假设几乎对所有的程序都成立),然后测试程序,发现尽可能多的错误事实上,如果把测试目标定位于要证明程序中没有缺陷,那么就会在潜意识中倾向于实现这个目标。也就是说,测试人员会倾向于挑选那些使程序失效的可能性较小的测试数据。另一方面,如果把测试目标定位于要证明程序中存在缺陷,那么就会选择一些容易发现程序缺陷的测试数据。而后一种态度会比前者给程序增加更多的价值。

  三、用例详细(选取测试数据,构造测试用例):

  根据上一步确定的测试路径,写出用例详细。

  流程分析法适用于有先后顺序的测试。常用于业务流程测试、安装流程测试等。

  流程分析法重点在于测试流程。因此,一般每个流程用一个测试用例验证。但是,流程测试没有问题并不能说明系统功能没有问题,还需要针对单步功能进行测试。对于包含复杂流程的系统,只有功能点和处理流程都进行测试覆盖,才算是比较充分的测试。

testng简单介绍

1.打开Eclipse   Help ->Install New Software ,   然后Add   “http://beust.com/eclipse
1
2.TestNG最简单的测试

下面是TestNG的最简单的一个例子

package TankLearn2.Learn;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.testng.annotations.Test;

public class TestNGLearn1 {

@BeforeClass
public void beforeClass() {
System.out.println(“this is before class”);
}

@Test
public void TestNgLearn() {
System.out.println(“this is TestNG test case”);
}

@AfterClass
public void afterClass() {
System.out.println(“this is after class”);
}
}

3.testng如何执行

直接执行:右键要执行的方法,  点Run As ->TestNG Test

2

4.testng异常测试
测试中,有时候我们期望某些代码抛出异常。

TestNG通过@Test(expectedExceptions) 来判断期待的异常, 并且判断Error Message
package TankLearn2.Learn;

import org.testng.annotations.Test;

public class ExceptionTest {

@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp=”NullPoint”)
public void testException(){
throw new IllegalArgumentException(“NullPoint”);
}
}

5.testng组测试
testNG中可以把测试用例分组,这样可以按组来执行测试用例比如:
package TankLearn2.Learn;

import org.testng.annotations.Test;

public class GroupTest {

@Test(groups = {“systemtest”})
public void testLogin(){
System.out.println(“this is test login”);
}

@Test(groups = {“functiontest”})
public void testOpenPage(){
System.out.println(“this is test Open Page”);
}
}
然后在testng.xml中 按组执行测试用例










6.testng参数测试
通过DataProvider传递参数
package TankLearn2.Learn;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class DataProviderLearn {

@DataProvider(name=”user”)
public Object[][] Users(){
return new Object[][]{
{“root”,”passowrd”},
{“cnblogs.com”, “tankxiao”},
{“tank”,”xiao”}
};
}

@Test(dataProvider=”user”)
public void verifyUser(String userName, String password){
System.out.println(“Username: “+ userName + ” Password: “+ password);
}
}

7.testng测试报告
测试报告是测试非常重要的部分.

TestNG默认情况下,会生产两种类型的测试报告HTML的和XML的。 测试报告位于 “test-output” 目录下.
2

也可以设置测试报告的内容级别.

verbose=”2″ 标识的就是记录的日志级别,共有0-10的级别,其中0表示无,10表示最详细








Web安全测试

1、用户权限测试

(1) 用户权限控制

1) 用户权限控制主要是对一些有权限控制的功能进行验证

2) 用户A才能进行的操作,B是否能够进行操作(可通过窜session,将在下面绍)

3)只能有A条件的用户才能查看的页面,是否B能够查看(可直接敲URL访问)

(2) 页面权限控制

1) 必须有登陆权限的页面,是否能够在不登陆情况下进行访问

2)必须经过A——B——C的页面,是否能够直接由A——C?

  2、URL安全测试

(1)适用范围: URL中含有参数,也就是通过GET方式传递的HTTP请求

(2)什么叫GET方式?

HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。

GET方式在客户端通过URL提交数据,数据在URL中可以看到,例如在日常中订购服务:

http://pay.daily.taobao.net/mysub/subdeal/order_sub_deal.htm?servId=2

POST方式,数据放置在HTML HEADER内提交,数据在URL中看不到

GET只能传输比较少的数据,安全性较低,POST传输数据较多,安全性也比GET高

(3)测试关注点:

1) URL 参数检查:

A:  对URL中参数信息检查是否正确

如:URL中的订单号、金额允许显示出来的话,需要验证其是否正确

B:  对于一些重要的参数信息,不应该在URL中显示出来

如:用户登陆时登录名、密码是否被显示出来了 ,

2) URL参数值篡改

修改URL中的数据,看程序是否能识别:

如:对于以下URL,修改其中planId,看是程序是否可以识别:

http://pay.daily.taobao.net/mysub/plan/subplan/confirmSubPlanInfo.htm?planId=878

又如:对于URL中包含金额参数的,修改金额看是否能够提交成功(可能导致用户把2元金额改成1元金额能提交),还有修改订单号等重要信息看是否会报错

3) URL中参数修改进行XSS注入:

什么是XSS?

XSS的全称是Cross Site Script(跨站点脚本)

XSS的原理很简单,即进行脚本注入,URL执行时即把此脚本进行了执行,一般都是JavaScript脚本。

如“http://demo.aa.org/index_Article_Class.asp?fID_ArticleClass=2&ArticleClassName=abc”

改成“http://demo.aa.org/index_Article_Class.asp?fID_ArticleClass=2&ArticleClassName=abc<script>alert(“hello”);</script>”

看看有没弹出对话框显示hello,有的话就有跨站漏洞。

在URL中进行XSS注入,也就是把URL中的参数改成JS脚本。

4) URL参数中进行SQL 注入

什么是SQL注入?

SQL注入全称是SQL Injection ,当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击,如查询、插入数据时。

测试方法: URL中写入SQL注入语句,看是否被执行,

   如:http://demo.testfire.net这个网站中,选择sign in

设置用户名为 admin ‘ or ‘1’=’1   密码为任意数字  ,点击登录就可以登陆。

  一般情况下要进行SQL注入攻击,需要对数据库类型、表名、判断逻辑、查询语句等比较清楚才能够写出有效的SQL注入语句。

  3、表单提交安全测试

适用范围:有表单提交的地方、有HTTP请求的地方(包括GET、POST请求)

测试关注点:

1) 表单中注入XSS脚本

URL中需要检测XSS注入,表单中更需要验证

测试方法:即在表单填写框中直接注入JS脚本

如在表单中输入XSS脚本,程序是不应该让脚本执行的

2) 表单中注入SQL 脚本

与URL中参数进行SQL注入类似,就是在表单中写入SQL注入脚本提交看是否会有问题

  4、Session测试

(1)Session是客户端与服务器端建立的会话,总是放在服务器上的,服务器会为每次会话建立一个sessionId,每个客户会跟一个sessionID对应。

并不是关闭浏览器就结束了本次会话,通常是用户执行“退出”操作或者会话超时时才会结束。

(2)测试关注点:

1)Session互窜

Session互窜即是用户A的操作被用户B执行了。

验证Session互窜,其原理还是基于权限控制,如某笔订单只能是A进行操作,或者只能是A才能看到的页面,但是B的session窜进来却能够获得A的订单详情等。

Session互窜方法:

多TAB浏览器,在两个TAB页中都保留的是用户A的session记录,然后在其中一个TAB页执行退出操作,登陆用户B,此时两个TAB页都是B的session,然后在另一个A的页面执行操作,查看是否能成功。预期结果:有权限控制的操作,B不能执行A页面的操作,应该报错,没有权限控制的操作,B执行了A页面操作后,数据记录是B的而不是A的。

2)Session超时

基于Session原理,需要验证系统session是否有超时机制,还需要验证session超时后功能是否还能继续走下去。

测试方法:

1、打开一个页面,等着10分钟session超时时间到了,然后对页面进行操作,查看效果。

2、多TAB浏览器,在两个TAB页中都保留的是用户A的session记录,然后在其中一个TAB页执行退出操作,马上在另外一个页面进行要验证的操作,查看是能继续到下一步还是到登录页面。