前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >接口测试平台代码实现156:私有client证书设置

接口测试平台代码实现156:私有client证书设置

作者头像
我去热饭
发布2022-05-19 10:20:00
3260
发布2022-05-19 10:20:00
举报
文章被收录于专栏:测试开发干货

在很多公司的具体接口测试业务中,内部的接口都不是随随便便写个脚本就可以请求通的。

很多时候需要client证书,跟着请求一起发出去,服务器那边检测通过,才可以正常给处理和返回。

当然,可能很多粉丝都说自己公司目前并没有需要这种证书,如果这种情况,那么建议也还是看一看本章节,起码混个眼熟。以后跳槽的新公司万一要用,自己也不至于大脑空白。

这个client证书从哪来呢?当然是从你们公司的开发手里要。那么要怎么使用呢?

在charles中,我们是打开后这样做:

(图中点击顶部菜单-Proxy-SSL_Proxying_Settings....)

这里就是上传证书的地方了。注意首次使用这个地方,还需要你设置密码才可以。

点击Add。

这里我们除了写*,代表所有请求都使用。

然后还要选择导入一个PEM 或者 P12, 这俩个就是证书了。俩个格式,任选其一,主要看开发给你的证书后缀是什么,是.p12就直接导入。是.pem,就先用pycharm打开,然后复制粘贴即可,导入后一路ok即可。

不过本教程中,如何使用charles并不是我们要研究的重点,而是要在平台上如何安装这个证书才是我们要做的事。

平台的底层,目前用的requests进行请求的,所以,我们得先来研究,request如何夹带证书。

按照官方说法,在reuqests里直接加上cert参数,值为证书的路径即可。

代码语言:javascript
复制
req = requests.get(url,headers = headers, cert='./Imapp/static/client.pem')

比如上面这句中,cert 的值 就是一个证书,注意这里的后缀是.pem的,经过作者亲测和落地,.pem格式证书才能使用在请求中。

如果开发给你的是.p12证书,那么你就需要去百度搜个转换算法,把这个.p12改成.pem了。(如果.p12可以用,欢迎小伙伴留言反馈,必有重谢。)

所以我们现在的设计就很明确了。

在每个项目内增加一个属性,就是证书的【名字】和【是否启用】选项。

不同项目的证书完全隔离,每个接口都可选是否启用证书。在项目设置里,设置上传证书功能。

好,那我们说干就干。

打开我们的用例设置html:P_project_set.html:

找到地方,设置一个上传文件的功能。

代码如下:

代码语言:javascript
复制
<form  style="" id="upload_file" action="/cert_upload/{{ project.id }}/" method="post" enctype="multipart/form-data">
    <input type="file" name="fileUpload" style="width: 20%;margin-left: 40%;border:1px solid #fcbfbf;"/>
         <br>
    <button type="submit" style="width: 20%;" class="btn" > 上传证书 </button>
    </form>

效果如下:

注意代码中我的input的name是 fileUpload 之后我们在后台取的时候 要用这个。

然后去写urls.py吧:

注意,我们要带上这个项目id,以便后台使用。

然后去后台写好这个函数,views.py:

在开始写之前,我们要先设计好这个函数。

这个函数要做的是首先是把上传的证书 拿出来。

拿出来后,我们要进行保存到指定目录下。但是避免名称重复,所以我们在存的时候,会给原始的名字前面加上”项目id“ 来保存,而这种静态资源当然是保存到static目录下了。

选中一个.pem证书文件,点击上传按钮。

打印结果:

我在前面加上了CERT_13_作为前缀。这样用来区分我们后续的不同项目内的证书。

然后继续 写存储代码:

代码语言:javascript
复制
# 上传证书文件
def cert_upload(request,pid):
    file = request.FILES.get("fileUpload", None)  # 靠name获取上传的文件,如果没有,避免报错,设置成None
    if not file:
        return HttpResponseRedirect('/project_set/%s/'%pid)  # 如果没有则返回
    new_name = 'CERT_'+pid+'_'+str(file) # 设置好这个证书的名字
    destination = open("MyApp/static/" + new_name, 'wb+')  # 打开特定的文件进行二进制的写操作
    for chunk in file.chunks():  # 分块写入文件
        destination.write(chunk)
    destination.close()
    return HttpResponseRedirect('/project_set/%s/' % pid)  # 正常返回

测试结果,成功:

本节内容到此结束。

下一节:我们在数据库中设置 端的 一个新属性:绑定的证书名。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发干货 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档