文章目录
软件测试
在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程
软件测试流程
需求分析 - 测试文档的编写(计划,用例,报告等) - 接口测试 - web测试 - app测试 - bug管理
测试模型
瀑布流,V型,W型,敏捷型
TDD (Test Driven Development)测试驱动编程----敏捷开发的一种方法论
- 测试在先、编码在后.
还有DDD领域驱动编程
测试文档的编写
理解需求分析
提取测试点
编写测试计划
编写测试方案
编写测试用例
管理bug
编写测试总结报告
测试用例
从用户的角度来设计测试用例:从用户的角度来说,一个产品,首先关注的当然是它的功能,其次是性能和稳定性,最后是容错能力等。
翻译成测试用语就是,首先写功能测试用例、然后写性能测试用例,接着是稳定性测试用例,最后想想产品使用过程中可能会遇到哪些异常,针对这些异常设计一些用例,用以检查产品的容错能力。
编写测试用例的常用方法:
- 等价类划分法(类似取样):等价类是输入的集合,比如在注册时,手机号规定为系统内不存在的手机号,那么所有已存在的手机号是一个等价类,所有不存在的手机号是另一个等价类。在每个等价类中选取一定数目的值作为代表。等价类分为有效等价类和无效等价类,输入符合条件的值对功能进行检验,输入无效等价类中的值可以找出程序错误的地方。
- 边界值分析法:对输入的边界值或稍大(小)于边界值的值进行分析。比如系统要求密码至少为6-16位。那么密码位数边界值就是 5,6,7,15,16,17 。
- 场景法:通过运用场景来对系统的功能点或业务流程的描述,从而提升测试效果。场景法一般分为基本流和备用流,覆盖所有的场景。
- 错误猜测法:通过直觉和经验对结果进行分析。
测试用例所包含的内容:用例编号、用例名称、测试背景、前置条件、优先级、重要级、测试数据、测试步骤、预期结果、实际结果、备注等。
JUnit单元测试
src目录 - hello.java
test目录 - helloTest.java
JUnit把带有@Test的方法识别为测试方法。在测试方法内部,我们用assertEquals(1, Factorial.fact(1))表示,期望Factorial.fact(1)返回1
运行:Run - Run As - JUnit Test,Eclipse会自动运行这个JUnit测试,并显示结果
public class FactorialTest {
@Test
void testFact() {
assertEquals(1, Factorial.fact(1));
assertTrue();// 期待结果为true
}
}
单元测试可以确保单个方法按照正确预期运行,如果修改了某个方法的代码,只需确保其对应的单元测试通过,即可认为改动正确。此外,测试代码本身就可以作为示例代码,用来演示如何调用该方法。
在编写单元测试的时候,我们要遵循一定的规范:
一是单元测试代码本身必须非常简单,能一下看明白,决不能再为测试代码编写测试;
二是每个单元测试应当互相独立,不依赖运行的顺序;
三是测试时不但要覆盖常用测试用例,还要特别注意测试边界条件,例如输入为0,null,空字符串""等情况。
Requests:Python HTTP 库
>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
u'{"type":"User"...'
>>> r.json()
{u'private_gists': 419, u'total_private_repos': 77, ...}
Requests 允许你发送纯天然,植物饲养的 HTTP/1.1 请求,无需手工劳动。你不需要手动为 URL 添加查询字串,也不需要对 POST 数据进行表单编码。Keep-alive 和 HTTP 连接池的功能是 100% 自动化的,一切动力都来自于根植在 Requests 内部的 urllib3。
Python Flask Web 框架
Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务
在server.py中加入以下内容:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
运行server.py:
$ python3 server.py
* Running on http://127.0.0.1:5000/
打开浏览器访问http://127.0.0.1:5000/,浏览页面上将出现Hello World!。
终端里会显示下面的信息:
127.0.0.1 - - [16/May/2014 10:29:08] "GET / HTTP/1.1" 200 -
变量app是一个Flask实例,通过下面的方式:
@app.route('/')
def hello_world():
return 'Hello World!'
当客户端访问/时,将响应hello_world()函数返回的内容。注意,这不是返回Hello World!这么简单,Hello World!只是HTTP响应报文的实体部分,状态码等信息既可以由Flask自动处理,也可以通过编程来制定。
TestNG 搭建测试框架 自动化测试
Testng被选为测试框架的优点
灵活的测试配置
测试用例可以更容易地进行分组
可以使用TestNG实现测试并行
支持数据驱动测试
内置的报告
注释可以帮助我们来组织使测试更容易
TestNG的核心文件是?
Testng的使用
- Eclipse安装testng插件,便可支持testng语法
1.启动Eclipse,选择“Install New Software”。
2.输入网址为“http://beust.com/eclipse”,然后单击“Add”。
3.打开添加存储库对话框输入名称为“TestNG”,然后点击“OK”
4.点击“全Select All”和“TestNG”将被选择
5.检查被选中项目,然后单击“Next”,一直点击next,知道finish,安装好重启eclipse即可
- IntelliJ IDEA自带testng插件
数据驱动及数据脚本分离
数据驱动测试:从数据文件(如Excel文件、文本文件、XML文件或数据库等)中读取测试数据,然后通过变量传入事先编写或录制好的测试脚本中,这些变量既可传递测试输入数据也可传递测试输出的验证数据。测试数据只出现在数据文件中,测试脚本负责测试逻辑业务过程、测试状态以及数据文件读取。
因此,测试数据和测试脚本是分开存放的。数据文件中的每一行表示一组测试数据,通过循环遍历数据文件中的每一行,将数据逐一注入到相同的测试流程进行反复的测试验证。
数据驱动的核心:从数据文件中读取输入数据,将数据与测试脚本分离,从而可以在不修改测试脚本的情况下通过更新测试数据完成对测试用例的增加、更改和删除。通过变量的参数化,将测试数据传入测试脚本,不同的数据文件对应不同的测试用例。
数据驱动及数据脚本分离案例:
对象封装及共享使用
公共基础类,对象封装及共享使用
编写和执行自动化测试脚本
查看和分析自动化测试报告
Testng生成的测试报告目录,默认启动页是target/surefire-reports/index.html
查看和分析自动化测试报告
使用reportng优化后的报告如图
常用API接口协议介绍
HTTP协议 --超文本传输协议
它是用来在Internet上传送超文本的传送协议,运行在TCP/IP协议族之上,它可以使浏览器更加高效,使网络传输减少。
任何服务器除了包括HTML文件以外,还有一个HTTP驻留程序,用于响应用用户请求。
浏览器是HTTP客户,向服务器发送请求,当浏览器中输入了一个开始文件或点击了一个超级链接时,浏览器就向服务器发送了HTTP请求,此请求被送往由IP地址指定的URL。驻留程序接收到请求,在进行必要的操作后回送所要求的文件。
Http协议接口请求的介绍
一个http请求报文由请求行(request line)、消息头部(header)、空行、请求正文四部分组成;
1、请求行
请求行由请求方法字段、URL字段和HTTP协议版本字段,组成,它们用空格分隔,例如:GET /index.html HTTP/1.1
HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。这里介绍最常用的GET和POST方法;
GET:当client要从server中读取文档时,使用GET方法。GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给client。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制,例如: /index.jsp?id=100&op=bind
POST:当client给服务器提供信息较多时, 使用POST方法。POST方法将请求参数封装在HTTP请求数据中,以key/value的形式出现,可以传递大量数据,可用来传递文件。
2、消息头部
请求头部由key/value键值对组成,每行一对,key和value用冒号":"分隔,请求头部通知服务器有关于client端的请求信息,典型的请求头:
User-Agent:产生请求的浏览器类型
Accept:client端可识别的内容类型列表
Host:请求的主机名,允许多个域名同处一个ip地址,即虚拟主机
3、空行
最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器请求头结束。对于一个完整的http请求来说空行是必须的,否则服务器会任务本次请求的数据尚未完全发送到server,处于等待状态
4、请求正文
请求数据不在GET方法中使用,而是在POST中使用。POST方法适用于需要client填写表单的场合,与请求数据相关的最常用的请求头是Content-Type 和Content-Length
Http协议接口返回状态代码介绍
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后,可能恢复正常
Http协议接口实体报头介绍
请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文(eg:有无实体正文)和请求所标识的资源的元信息。
Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型
如:Content-Type:text/html;charset=ISO-8859-1 ,
Content-Type:application/json;
Content-Type:application/soap+xml;
Content-Type:application/x-www-form-urlencoded
HTTPS协议- 超文本传输安全协议
它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。
HTTPS实际上应用了Netscape的完全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。
SOAP协议- 简单对象访问协议
它是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息,SOAP使用基于XML的数据结构和超文本传输协议(HTTP)的组合定义了一个标准的方法来使用Internet上各种不同操作环境中的分布式对象。
SMTP协议- 简单邮件传送协议
它是由源地址到目的地址传送邮件的一组规则,用来控制信件中转方式的一种协议。
SMTP使用的TCP端口号是25,接收端在TCP的25号端口等待发送端来的E-mail,发送端向接收方(即服务器)发出连接要求,一旦连接成功,即进行邮件信息交换,邮件传递结束后释放连接。
SNMP协议- 简单网络管理协议
它是专门设计用于在 IP 网络管理网络节点(服务器、工作站、路由器、交换机及HUBS等)的一种标准协议。
SNMP,由一组网络管理的标准组成,包含一个应用层协议(application layer protocol)、数据库模型(database schema)和一组资源对象。该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。
FTP协议- 文件传输协议
它是一个标准协议,是在计算机和网络之间交换文件的最简单的方法,像传送可显示文件的HTTP和电子邮件的SMTP一样,FTP也是应用TCP/IP协议的应用协议标准。
FTP通常用于将网页从创作者上传到服务器上供人使用,而从服务器上下传文件也是一种非常普遍的使用方式。作为用户,您可以用非常简单的DOS界面来使用FTP,也可以使用由第三方提供的图形界面的FTP来更新(删除,重命名,移动和复制)服务器上的文件。
API 接口自动化测试的基本原理
对被测系统输入消息-- 检查输出消息
接口文档:接口消息的构成
接口工具:构造接口消息,并发送接收
根据测试用例
- 构造出响应的HTTP请求,发送给服务端
- 内置库 httplib,urllib2
- 第三方库 urllib3,requests,pyCurl
- 接受并检查响应消息
基于HTTP协议的自动化测试基本原理
1.模拟请求url和报文,准备测试数据
2.模拟客户端发送HTTP请求
3.模拟客户端从服务器接收返回报文
4.验证返回结果是否符合预期
注
pip 是 Python 包管理工具