加密是一种限制用户对网络上传输的数据拥有访问权的技术。将密文还原为原始明文的过程称为解密,它是加密的反向处理。在接口测试中我们使用加密、解密技术,可以防止机密数据被别人泄露或篡改。在接口自动化测试过程中,我们如果要验证加密接口响应值的正确性,就必须先对响应值进行解密,再进一步完成验证。
1.解决方案
通过加密算法
开发人员提供加密/解密 lib 包
提供远程解析服务
2.实战演示
接下我们演示对 httpbin 服务发起一个请求,httpbin 服务将返回加密后的响应信息。
我们获取到加密后的响应信息,对加密后的响应信息进行加密,然后对解密后的响应信息进行断言,实现的演示代码如下(Python 版和 Java 版)。
(1)Python 演示代码
import requests
import base64
# 加密
secrest_msg = base64.b64encode("霍格沃兹".encode('uft-8'))
def test_send():
url = "https://httpbin.ceshiren.com/post"
gata = {"msg":secrest_msg}
#发送接口请求
res = requests.post(url,data=data)
#获取加密的响应信息
mag = res.json()["from"]["msg"]
#对获取的加密的响应信息进行加密
encode_str = base64.b64decode(msg).decode('utf-8')
assert encode_str == "霍格沃兹"
复制代码
(2)Java 演示代码
import org.apache.commons.codec.binary.Base64;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.util.LinkedHashMap;
import static io.restassured.RestAssured.given;
public class SendTest{
//进行加密
String secretMag = Base64.encodeBace64String("hogwarts".getBytes());
@Test
void send() throws IOException{
//发起请求,并获取响应信息
LinkedHashMap<String,String> responseForm = given().
FormParam("msg",secretMsg).
when().
post("https://httpbin.ceshiren.com/post").
then().extract().path("form");
//获取加密后的响应信息(为二进制数组格式)
byte[] base64Msg = Base64.decodeBase64(secretMsg);
//将数组格式转码为String类型,即可得到正常的返回值
String msg= new String(base64Msg,"utf-8");
assert msg.equals("hogwarts");
}
}
复制代码
搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核
评论