测试第六节课
一、复习
1.测试基础
1.1测试流程:
计划,用例,执行,报告
1.2测试阶段
单元、集成、系统、验收
1.3产品的生命周期
软件的产生直到报废或停止使用的生命周期。软件生命周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,也有将以上阶段的活动组合在内的迭代阶段,即迭代作为生命周期的阶段。
例如:瀑布模型
1.4测试用例设计:
等价类划分:先按需求(需求规格说明书)分为有效,无效。有效再细分;无效再分,一样一个。(空格,空,特殊字符单独提出来)可以组合
边界值:除了需求中,明显边界以外还有隐藏边界。
输入域:补充前面
输出域:补充前面(按结果划分等价类)
错误猜测:以经验和直觉进行设计测试用例(中间值、特殊值、极值、)
决策表:测试有关系时用
2.接口测试
requests、协议、fiddler(发修改请求,收响应并修改、中断)
2.1、按什么顺序执行?
在unittest中,测试用例的执行顺序与测试用例的名称有关,按照名称的ascii码进行的,并不是按照用户写的顺序执行的。
如果你的测试方法间也有顺序,那么就按照他的执行顺序编写方法名(通过命名改变执行顺序)
2.2、传文件,传多个参数怎么办?
``
from ddt import ddt,data,file_data,unpack
import unittest
import yaml
@ddt
class TestDdt(unittest.TestCase):
@data({'haha':1,'sfa':1})
def test_1(self,velus1):
print(velus1)
@data((1,2),(3,4),('linda','hhh'))
@unpack
def test_2(self,valus2,valus3):
print(valus2,valus3)
@data({1,2},{3,4},{'lalala','xxx'})
def test_2(self, valus2,):
for i in valus2:
print(i)
@file_data('regsiter\\test_data.yaml')
def test_file(self,**valus):
print(valus)
``
testcasr:
Name: linda
Age: 18
testcasr1:
Name: linda1
Age: 188
2.3、requests 库的作用
收响应,查看响应内容:status_code,解析响应方法:text,content
2.4、token,session,cookie
COOKIE 是什么 COOKIE 本身是由服务器产生的,生成之后发送给浏览器,并保存在浏览器 COOKIE 就是浏览器存储在本地目录的一小段文本 COOKIE 是以 key-value 形式存储的 COOKIE 有大小限制,为了保证 COOKIE 不占用太多的磁盘空间,每个 COOKIE 大小一般不超过 4KB COOKIE 默认在会话结束后直接销毁,此种 COOKIE 称之为会话 COOKIE COOKIE 可以设置过期时间,此种 COOKIE 称之为持久 COOKIE COOKIE 的不足 每个 COOKIE 的容量有限 因为 cookie 由浏览器存储在本地目录,所以不方便记录敏感信息,如密码等 cookie 不支持跨域访问 cookie 不支持手机端方案
什么是 SESSION SESSION 是由服务器产生的,存储在服务端 SESSION 的存储形式多种多样,可以是文档、数据库、缓存等,这需要靠进程如何设计 SESSION 也是以 key-value 形式存储的 SESSION 是没有大小限制的,这比 cookie 灵活很多,不过将过多的东西放在其中也并不是明智的做法 SESSION 也有过期时间的概念,默认为 30 分钟,可以通过 tomcat、web.xml 等方式进行配置 SESSION 可以主动通过 invalidate() 方法进行销毁 SESSION 通过 session_id 识别,如果请求持有正确的 session_id,则服务器认为此请求处于 session_id 代表的会话中 SESSION 的不足 SESSION 大小不限制,存储在服务端,本身是对资源的一种负担 如何保证 session 的高可用、准确性,优势对整体架构的一种负担 频繁的创建、查询、验证 session,会对服务器造成很大的压力 SESSION 是有状态的
什么是 TOKEN TOKEN 是一种轻量级的用户验证方式 TOKEN 是无状态的 TOKEN 允许跨域访问 TOKEN 是服务端生成的一个字符串,保存在客户端(可以放在 cookie 中),作为请求服务的验证令牌 TOKEN 无需存放在服务端,这样服务端无需存放用户信息 TOKEN 对服务端压力极小`,因为服务端只需存储秘钥,并支持生成 token 的算法,无需存储 token TOKEN 最简单的构造:用户唯一的身份标识 (辨识用户) + 时间戳 (用于过期校验) + 签名 (防止第三方恶意冒充) TOKEN 无法主动过期,只能等待它达到过期时间后才会失效 TOKEN 的产生:首次请求时,服务器对请求参数(如账号、密码)验证通过,则根据用户标识,加上服务的密钥,通过生成算法,生成 token TOKEN 的验证:再次请求时,携带此 token,则服务端再次根据用户标识,生成 token,根据两个 token 是否一致且未过期来判定用户是否已授权 TOKEN 的不足 TOKEN 无法主动过期,只能等待它达到过期时间后才会失效 TOKEN 本身比 session_id 要大,会消耗更多的流量与带宽
2.5、测试:
用例设计—执行多条数据(用例)— 数据驱动技术(参数化技术)
2.6、单元测试框架:
(执行用例、先后顺序、跳过、准备数据、销毁数据—干净环境、报告)+数据驱动
3.接口层框架:unittest
3.1、unittest框架有初始话方法和销毁方法,规定默认执行顺序
``
import unittest
class TestClass(unittest.TestCase):
@classmethod
def setUpClass(cls):
print('连接数据库')
@classmethod
def tearDownClass(cls):
print('关闭数据库')
def setUp(self):
print('初始化这个数据,比如从文件中读回要测试数据')
def tearDown(self):
print('')
def test_add_data(self):
assert 'hello' == 'hello'
assert 'hello' in 'hello world'
assert {'name':'linda','age':'18'} == {'name':'linda','age':'88'}
if __name__ == '__main__':
unittest.main()
3.2、测试试方法失败 -断言失败返回什么样?
? 返回 AssertionError
3.3、跳过测试方法
? 无条件跳过
``
@unittest.skip(reason='不执行')
def test_aad_data(self):
print('111')
assert 'hello' == 'hello'
assert 'hello' in 'hello world'
条件跳过
``
@unittest.skipIf(sys.version> str(3.8),reason='python版本小于3.8')
def test_aad_data(self):
print('111')
assert 'hello' == 'hello'
assert 'hello' in 'hello world'
def skipIf(condition, reason):
if condition:
return skip(reason)
return _id
3.4、修改结果
不管执行什么都显示错误(开发这个模块没改完或者没写完)
``
@unittest.expectedFailure
def test_aad_data(self):
print('111')
assert 'hello' == 'hello'
assert 'hello' in 'hello world'
运行结果
Failure Test should not succeed since it's marked with @unittest.expectedFailure
3.5、建立一个文件把运行后的结果存入到文件中(html)—— text默认
``
if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addTest(unittest.TestLoader().loadTestsFromTestCase(TestClass))
suite.addTest(unittest.TestLoader().loadTestsFromName('TestClass.test_aad_data'))
with open('resl.html','wb') as f :
runner = HTMLTestRunner(stream=f,title='测试报告',description='测试框架显示')
runner.run(suite)
|