- 前言
======
现如今接口测试在软件品质行业中的位置,曾经越来越重要,绝对于下层的 UI 自动化测试和上层的单元测试,接口测试的“低”投入、“高”回报,也成了绝大多数品质保障实际的首选。
在发展接口测试时,往往很多时候都只在关注接口的功能性品质,而对于非功能性的品质保障验证,比方性能、平安,在理论工程利用或者设计用例时关注度显著有余(甚至很多压根没有这方面的测试实际)。
明天就以 Python 系下 requests 库(罕用于接口测试)和 Robot FrameWork 框架为例,和大家聊聊在接口测试过程中,和性能需要等同重要的性能测试查看项。
- 接口测试须要思考的性能查看项
==================
在接口测试过程中,除了要思考产品需要的失常、异样、数据正确性等显性功能需要品质外,还有很多隐性需要品质须要关注,以性能测试为例,常见须要关注的查看项包含,但不限于:
- 1、单用户登录的响应工夫是否小于 3 秒;
- 2、单用户登录时,后盾申请数量是否过多;
- 3、高并发场景下用户登录的响应工夫是否小于 5 秒;
- 4、高并发场景下服务端的监控指标是否合乎预期;
- 5、高集合点并发场景下,是否存在资源死锁和不合理的资源期待;
- 6、长时间大量用户间断登录和登出,服务器端是否存在内存透露。
本文重点以接口响应工夫为例,介绍如何在 requests 库和 Robot FrameWork 框架纳入性能测试项,其它性能查看项思路根本都是相通的。
- requests 库接口测试校验响应工夫
=======================
通常在联合 requests 库发展接口测试时,发送申请后,接口的响应工夫,也是咱们须要关注的一个重点,如果响应工夫太长,从产品业务或者用户角度也是不可承受的。那如何进行申请响应工夫校验,也成为了接口测试人员须要把握的一项小技能。
针对 requests 库校验申请响应工夫,给大家提供两种实现思路:
一、借助申请响应超时机制
具体实现:
#-*- coding:utf-8 -*-
import requests
from requests import exceptions
try:
req = requests.post(url=url, data=data, headers=headers, verify=False, timeout=3)
print r.json()
except exceptions.Timeout as e:
print("抛出异样")
在上述实现中,通过减少 timeout 参数,设置申请响应超时机制,当 timeout=3(可自在定义),当申请响应工夫超过 3 秒,则会抛出超时异样。
其中,额定补充的知识点:超时(默认单位:s),有两种设置超时办法:
- timeout=5:设置 5s 的超时工夫
- timeout=(5,10):设置区间工夫的期待
当申请呈现超时时,则会抛出此异样:requests.exceptions.ConnectTimeout: HTTPConnectionPool
2、获取响应工夫办法:req.elapsed.total_seconds()
二、借助 requests 接口响应返回值 elapsed
具体实现:
#-*- coding:utf-8 -*-
import requests
r = requests.post(url, data=data, headers=headers)
print(r.status_code)
print(r.elapsed)
print(r.elapsed.total_seconds())
print(r.elapsed.microseconds)
print(r.elapsed.seconds)
elapsed_time = r.elapsed.total_seconds() #获取理论的响应工夫
assert elapsed_time>3
上述代码实现中,通过获取申请返回的响应值来获取接口响应工夫,常见的几个获取响应工夫参数为:
- elapsed.total_seconds:获取响应工夫,单位 s (举荐)
- elapsed. microseconds:获取响应工夫,大于 1s 的时候,只截取了前面的小数局部
- elapsed.seconds:单位 s,响应工夫小于 1s 时,为 0
- Robot Framework 框架校验响应工夫
===========================
在上述咱们介绍了 requests 库在发展接口测试过程,校验申请响应工夫的实现思路。而通过 Robot Framework 框架发展接口测试,次要会依赖 RequestsLibray 库,而因而实现思路也是一样的。
具体实现,可参考下述示例:
上述校验申请响应工夫,外围就两句代码:
${elapsed_seconds}= set variable ${resp.elapsed.total_seconds()}
should be true ${elapsed_seconds}<3
补充知识点 :响应体 ${resp} 是一个类对象,源码可在 requests/models/Response 查看,能够查看找出该类的所有属性,第 6 行打印后果:
- 小结
======
作为测试工程师,你的指标是要保证系统在各种利用场景下的性能是合乎设计要求的,所以你须要思考的测试用例就须要更多、更全面。本文,通过接口测试如何交融接口性能查看项,给大家提供一点思路,心愿对你有所帮忙或启发。