接口测试 Http 接口测试框架之拉取接口

Heyniu · 2016年07月26日 · 最后由 Heyniu 回复于 2016年07月27日 · 2973 次阅读

Http 接口测试框架

接口拉取已经实现

  • 通过 url 拉取 html 然后匹配接口
  • 去除无效的接口和过期的接口
  • 接口列表写入文件

代码

说明:url 涉及公司数据,所以我会用假的数据代替

#!/usr/bin/evn python
# -*- coding:utf-8 -*-

# FileName GetApi.py
# Author: HeyNiu
# Created Time: 20160726

import urllib.request
import re
import datetime


class GetApi(object):

    def __init__(self, url, path):
        print("正在连接指定网址......")
        self.startData = datetime.datetime.now()
        self.Url = url
        self.path = path

    def __get_html(self):
        """
        获得指定url的html
        :return: 返回一个byte流html
        """
        return urllib.request.urlopen(self.Url).read()

    def __get_api(self):
        """
        通过正则表达式匹配相应的接口
        :return: 返回一个匹配后的接口列表
        """
        html = self.__get_html()
        print("接口拉取成功")
        reg = re.compile(r'<a href="(.+?)" title="(.+?)">(.+?)</a>')
        return re.findall(reg, html.decode('utf-8'))

    def __remove_deprecated_api(self):
        """
        移除一些过期的接口
        :return: 返回一个客户端正在使用的接口列表
        """
        api = self.__clear_api()
        print("移除过期接口......")
        return (index for index in api if index[1].find("已取消") == -1 and index[0].find("已取消") == -1
                and index[1].find("XMPP") == -1 and index[0].find("已不用") == -1 and index[0].find("已失效") == -1
                and index[1].find("废弃") == -1)

    def __clear_api(self):
        """
        去除部分匹配出来是非接口的数据
        /b/说明:/b/是辨别真正接口与无效接口的桥梁
        e.g.
        真正接口
        /b/System/GetToken
        无效接口(网页中存在使用的标签与接口的标签一致,所以匹配时匹配进来了)
        abcabc
        :return: 返回一个真正的接口列表,里面包含过期接口,需要进一步移除
        """
        api = self.__get_api()
        print("接口清洗中......")
        return (index for index in api if index[0].startswith("/b/"))

    def __write_file(self, path):
        """
        接口数据写入文件
        :return:
        """
        api = self.__remove_deprecated_api()
        print("接口数据写入文件中......")
        with open(path, 'w') as f:
            for i in api:
                f.write(i[-1])
                f.write("\n")
        print("接口数据写入成功")

    def get_api_data(self):
        print("接口拉取中......")
        self.__write_file(self.path)


if __name__ == "__main__":
    api1 = GetApi("http://apihelper.a.com/Home/API/b", "D:\\Fiddler Sessions\\api.txt")
    api1.get_api_data()
    d2 = datetime.datetime.now()
    time = d2 - api1.startData
    print("%s %s%s" % ("耗时:", time.seconds, "s"))

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 12 条回复 时间 点赞
Heyniu [该话题已被删除] 中提及了此贴 07月26日 15:43

什么版本的 python 开发的

#2 楼 @jphtmt python 3.5.0

这是公开的 api 么

#4 楼 @mads 你指这个 python 文件还是 python 里面用的 url 的 api

  • url 的 api 是我公司的

#5 楼 @heyniu 我说你写的这些 python 代码

#7 楼 @mads 思路都写好了啊,你估计还没理解里面的意思吧,如果你理解了就知道怎么用了

#8 楼 @heyniu 是的😋 我抽空先看看你第一篇

期待更新

Heyniu #11 · 2016年07月27日 Author

#10 楼 @lose 更新了移除录制的接口
https://testerhome.com/topics/5529

#11 楼 @heyniu 谢谢分享,对你的思路很敬佩,我看你总结了很多,可以出个类似的合集。有没有托管代码到 github😬

Heyniu #13 · 2016年07月27日 Author

#12 楼 @lose 等我完成了就上传 github,目前只是零散的代码贴在 testerhome

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册