接口自动化测试之桩服务设计与开发(七)

1,397 阅读4分钟

1.桩的由来

做过接口自动化数据驱动和框架设计以及框架的拓展之后就会发现自动化测试框架并不是特别难,但是大家可能会遇到一个情况,当项目特别大或者开发的是app,这个时候你们很多情况下你们的接口没有开发完,你们端上,也就是app没有办法进行一个开发,也就是联调没有办法进行,因为很多时候都需要你的数据去支持,那这样的一个情况我们应该怎么去解决呢,这就需要用到我们接口测试的–桩,这个桩呢,不单单只是在接口测试里边的,它是在所有的无论是在开发还是测试都会用到,在公司内部,产品都会用到,那么这个桩到底是个什么东西呢?

2.桩的介绍?

可以理解为是一种更加高级的数据模拟,数据模拟在前边使用fiddler时候应该都使用过,我们可以通过本地的fiddler去模拟一个接口返回数据,我们自己在测试接口的时候可以这么做,但是如果说开发也就是android或者是ios需要做的时候,他在链接到你的代理吗?然后在让你去配置数据吗?肯定是否定的,显而易见不是特别好,所以呢,我们就应该自己整个公司内部有一个桩服务器,这个服务器就是用来模拟我们所有接口的各种各样的数据,我们需要什么样的服务去,自己去配置就可以了,这就是我们桩的由来,那么知道什么是桩了,那么解耦开发过程中,桩是如何运用的呢?

3.解耦开发过程中桩的运用

桩不仅仅用于开发测试可能运用于产品运营,都可以运用,只要我们桩设计的比较健全,所有情况都可以去运用,当然只是在公司内部,必须运用于局域网,前边我们无论是产品开发这些东西都给大家去运用了之后,那么在开发过程中,如果说我们服务端的接口规则出来之后,我们自己就可以通过我们的桩服务去定义我们的返回数据然后进行一个开发,这也就是我们在解耦过程中,桩的运用,看起来非常的高大上,那么怎么去操作呢?

4.环境搭建

在python中有一个很好的库 pip install mitmproxy

5.mitmproxy介绍

  • mitmproxy有如下几项功能。

    • 拦截HTTP和HTTPS请求和响应。
    • 保存HTTP会话并进行分析。
    • 模拟客户端发起请求,模拟服务端返回响应。
    • 利用反向代理将流量转发给指定的服务器。
    • 支持Mac和Linux上的透明代理。
    • 利用Python对HTTP请求和响应进行实时处理。
  • 启动 命令窗口输入

    mitmweb

  • 抓包设置模拟器代理设置8080端口

  • 配置整数 打开浏览器,提前启动mitweb

安装完毕,抓取https就可以了

7.mitmproxy与Python结合

官方文档:docs.mitmproxy.org/archive/v4/…

from mitmproxy import http
from Util.handle_json import get_value
import json

class GetData:

    def request(self,flow): # flow是必须写的,文件运行方式按照官方的运行,在最后有运行方式
        """flow官方规定写法,上下文"""
        # 拿到了所有的对象
        request_data = flow.request 
        self.request_url = request_data.url 
        request_pr = request_data.query
        request_form = request_data.urlencoded_form
        # 查看结构
        print("url:-------->",self.request_url)
        #print("request_pr:------------->",request_pr)
        #print("request_form:---------->",request_form)

    def response(self,flow):
            '''
            # 处理乱码和响应数据
            response_header = response_data.headers
            conten_type = response_header['Content-Type']
            # 判断文件类型
            print("========>",conten_type)
            if conten_type == 'image/jpeg':
                # 不打印乱码信息
                print("这个返回的是图片")
            elif  'json' in conten_type:
                print("code=========>",response_data.status_code)
                print("response=======>",response_data.text)
            else:
                print("格式不是我们预期的")
            '''
        if 'caichen' in self.request_url or 'caichenwang' in self.request_url:
            response_data = flow.response
            host = self.request_url.split(".com")
            base_url = host[0]
            url = host[1]
            #/api3/getbanneradvertver2
            #api3/getbanneradvertver2?aaa=sss
            if "?" in host[1]:
                url = url.split("?")[0]
            print("====>",url)
            data = json.dumps(get_value(url))
            print("----->data:",data)
            response_data.set_text(data)

            
            
addons = [
    GetData()
]

# 运行
1.cd 到本py文件目录
2.mitweb -s py文件  

8.抓取PC端接口及数据过滤

  • 设计浏览器的端口

  • 启动本地脚本 mitmdump -s py文件

  • https显示不安全,浏览器输入mitm.it 选择windows

  • 证书下载安装,当前用户--下一步--密码不输入空的即可--下一步--完成--重启浏览器--输入抓取网址

好了各位,以上就是这篇文章的全部内容了,能看到这里人啊,都是人才。

如果这个文章写得还不错,觉得「王采臣」我有点东西的话 求点赞👍求关注❤️求分享👥 对耿男我来说真的非常有用!!!

白嫖不好,创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!

王采臣 | 文  【原创】

如果本篇博客有任何错误,请批评指教,不胜感激 !

更多精彩关注微信公众号,第一时间更新~