可以做试卷的网站,表白网站制作源代码,莱西网站制作,遵义在线遵义晚报接口测试仅仅掌握 Requests 或者其他一些功能强大的库的用法#xff0c;是远远不够的#xff0c;还需要具备能根据公司的业务流程以及需求去定制化一个接口自动化测试框架的能力。所以#xff0c;接下来#xff0c;我们主要介绍下接口测试用例分析以及通用的流程封装是如何…接口测试仅仅掌握 Requests 或者其他一些功能强大的库的用法是远远不够的还需要具备能根据公司的业务流程以及需求去定制化一个接口自动化测试框架的能力。所以接下来我们主要介绍下接口测试用例分析以及通用的流程封装是如何完成的。
接口测试用例分析
首先在做用例分析之前可以通过追查公司一年来所有的故障原因定位问题起因或者通过与 CTO、产品经理、研发、运维、测试调查得到质量痛点还可以分析业务架构、流程调用以及监控系统了解到业务的使用数据从而得到质量需求。
得到质量需求之后通过与产品经理、项目经理、研发总监等对接后得知待测业务范围、业务场景用例、业务接口分析从而确定公司的测试计划。将测试计划与质量需求结合进行分析就可以开始进行业务用例的设计而接口测试用例分析也在其内。
质量需求样例测试痛点公司的接口一直不稳定影响用户的使用质量反馈最近半年来出现了几次大的故障回归测试每次升级都会影响老的功能测试策略目前公司没有可靠的测试体系重构测试微服务话改造需要有良好的测试体系保证
接口测试封装思想
接口封装思想主要分为 3 个大维度配置、接口封装、业务流程。其中
配置主要用作根据配置文件获取初始配置和依赖接口封装遵循 APIObject 设计模式对接口的调用进行抽象封装业务流程则负责数据初始化、业务用例设计包含有多个 API 形成的流程定义不要再包含任何接口实现细节、以及断言。
下面将会与实战案例结合进行详细的介绍。
基于加密接口的测试用例设计
由于信息安全原因许多接口在传输的时候会对请求与响应进行加密处理如果直接对这部分数据做断言显然是行不通的。还需要对这部分接口额外进行解密的处理之后才可以对已解密的接口进行断言。
环境准备
在进行实战之前需要先准备一个对响应加密的接口。对它发起一个 get 请求后得到一个加密过后的响应信息。
先准备一个 JSON 格式 demo
{topics:
{
orange:movie,
shool:testing-studio,
president:seveniruby
}
}
使用 base64 对其做加密得到一个加密后的文件 demo64.txt
base64 demo.json demo64.txt使用 Python 命令在 “demo64.txt” 所在目录启动一个服务
python -m http.server 10000启动后的样子如图 使用curl命令对这个服务进行get请求
curl http://127.0.0.1:10000/demo64.txt如果请求成功的话就代表环境已经准备成功
实战练习
调用 base64直接对返回的请求做解密即可得到解密后的响应将解密后的响应转为 JSON 格式此时就可以对这个返回值做断言且不会报错了。
import base64
import json
import requests
class TestEncode:url http://127.0.0.1:10000/demo64.txtdef test_encode(self):r requests.get(self.url)encode json.loads(base64.b64decode(r.content))assert encode[topics][president] seveniruby这样的写法显然不够优雅如果被测接口的协议发生变化Requests 库无法支持改变后的协议需要调用别的第三库发送请求信息则还是需要修改底层的源码。碰到这种情况可以增加一层封装构造一层更加通用的发送方法。
首先需要通过一个字典的结构体保存所有的请求信息包括发送的协议、解码方式、请求 method 等等而这种字典形式的结构体也为后面的数据驱动改造做好了一个重要的铺垫。 req_data{schema: http,method: get,url: http://127.0.0.1:10000/demo64.txt,headers: None}通过请求信息的结构体中的schema添加判断条件去选择不同的请求协议。举个例子如果 schema 为“http”的话就选择调用被封装的 requests 库。 class ApiRequest:#构造send方法通过def send(self, data: dict):if http data[schema] :res requests.request(data[method],data[url],headerdata[headers])return json.loads(base64.decode(res.content))elif dubbo data[schema]:passelif websocket data[schema]:passelse:pass 调用在ApiRequest类中的send方法发送请求并进行断言
class TestEncode:def test_api(self):req_data{schema: http,encoding: base64,method: get,url: http://127.0.0.1:10000/demo64.txt,headers: None}re ApiRequest()data re.send(req_data)assert data[topics][president] seveniruby如果面对不同的算法还需要修改底层的源码所以需要把算法封装。需要使用哪个算法就使用哪个。封装的思想与上面相同。首先在字典结构体中添加一个 encoding 字段用来判断选择的不同的加密条件。 req_data{schema: http,method: get,url: http://127.0.0.1:10000/demo64.txt,headers: None,encoding: base64}TEXT 复制 全屏
还是通过请求信息的结构体中的 encoding添加判断条件去选择不同的解密方式。
class ApiRequest:def send(self, data: dict):if http data[schema] :res requests.request(data[method],data[url],headersdata[headers])return json.loads(base64.b64decode(res.content))#通过请求信息的结构体中的encoding去选择不同的解密方式。if data[encoding] base64:return json.loads(base64.b64decode(res.content))elif data[encoding] private:return json.loads(requests.post(url, datares.content).content)else:return json.loads(res.content)TEXT 复制 全屏
总结
首先需要明确在面对一个加密的响应结果可以使用什么样的处理方式
如果知道使用的是哪个通用加密算法的话可以自行解决。如果不了解对应的加密算法的话可以让研发提供加解密的 lib。如果既不是通用加密算法、研发也无法提供加解密的 lib 的话可以让加密方提供远程解析服务这样算法仍然是保密的。 Python接口自动化测试零基础入门到精通2023最新版