python 利用toapi库自动生成api


Posted in Python onOctober 19, 2020

在学习做接口测试自动化的时候,我们往往会自己动手写一些简单的API,比如写一个简单的TODO API之类。

不过自己写API的时候经常需要造一些假数据,以及处理分页逻辑,开始的时候还觉得比较有意思,但久而久之就显得比较乏味了。

这时候你可能会想,有没有什么工具可以自动将一个线上的网站转化成简单的API呢?

这样的工具确实是存在的,而且不少,其中python语言中比较受欢迎的实现是https://github.com/gaojiuli/toapi项目,项目名称是toapi。

我们来简单体验一下这个库。

安装

首先安装。

pip install toapi
pip install cssselect

将重定向科技的课程列表页转化成API

http://www.itest.info/courses,这是重定向科技的课程列表页面,里面包含了目前我们所开设的全部课程。

现在我们将这个页面转化成API,这个API 返回每门课程的名称以及url。

from flask import request
from htmlparsing import Attr, Text
from toapi import Api, Item

api = Api()

@api.site('http://www.itest.info')
@api.list('.col-md-3')
@api.route('/courses?page={page}', '/courses')
@api.route('/courses', '/courses')
class Course(Item):
  url = Attr('a', 'href')
  title = Text('h4')

api.run(debug=True, host='0.0.0.0', port=12306)

运行

python app.py

查看结果

curl localhost:12306/courses

返回结果

{
  "Course": [
    {
      "title": "全栈测试开发班",
      "url": "/courses/9"
    },
    {
      "title": "性能测试从入门到精通班",
      "url": "/courses/7"
    },
    {
      "title": "接口自动化测试开发--Python班",
      "url": "/courses/6"
    },
    {
      "title": "Selenium自动化测试--Python班",
      "url": "/courses/2"
    }
  ]
}

官方例子

将hacknews网站转成API

from flask import request
from htmlparsing import Attr, Text
from toapi import Api, Item

api = Api()


@api.site('https://news.ycombinator.com')
@api.list('.athing')
@api.route('/posts?page={page}', '/news?p={page}')
@api.route('/posts', '/news?p=1')
class Post(Item):
  url = Attr('.storylink', 'href')
  title = Text('.storylink')


@api.site('https://news.ycombinator.com')
@api.route('/posts?page={page}', '/news?p={page}')
@api.route('/posts', '/news?p=1')
class Page(Item):
  next_page = Attr('.morelink', 'href')

  def clean_next_page(self, value):
    return api.convert_string('/' + value, '/news?p={page}', request.host_url.strip('/') + '/posts?page={page}')


api.run(debug=True, host='0.0.0.0', port=5000)

结果

{
 "Page": {
  "next_page": "http://127.0.0.1:5000/posts?page=2"
 },
 "Post": [
  {
   "title": "Mathematicians Crack the Cursed Curve",
   "url": "https://www.quantamagazine.org/mathematicians-crack-the-cursed-curve-20171207/"
  },
  {
   "title": "Stuffing a Tesla Drivetrain into a 1981 Honda Accord",
   "url": "https://jalopnik.com/this-glorious-madman-stuffed-a-p85-tesla-drivetrain-int-1823461909"
  }
 ]
}

总结

  • toapi使用非常简单,实际上就是把api的创建和爬虫结合起来了
  • toapi提供了比较完备的缓存机制,非首次访问的速度会很快

有一定爬虫能力的测试同学可以用toapi来实现简单的mock server,但仅限于get接口

以上就是python 利用toapi库自动生成api的详细内容,更多关于python toapi库自动生成api的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
跟老齐学Python之集合(set)
Sep 24 Python
详解Python中的多线程编程
Apr 09 Python
基于循环神经网络(RNN)的古诗生成器
Mar 26 Python
替换python字典中的key值方法
Jul 06 Python
Python基于SMTP协议实现发送邮件功能详解
Aug 14 Python
python保存log日志,实现用log日志画图
Dec 24 Python
基于nexus3配置Python仓库过程详解
Jun 15 Python
Python实现画图软件功能方法详解
Jul 28 Python
一文读懂Python 枚举
Aug 25 Python
Python Pivot table透视表使用方法解析
Sep 11 Python
python 中[0]*2与0*2的区别说明
May 10 Python
Python利用capstone实现反汇编
Apr 06 Python
协程Python 中实现多任务耗资源最小的方式
Oct 19 #Python
python爬取音频下载的示例代码
Oct 19 #Python
Python爬虫教程知识点总结
Oct 19 #Python
自定义Django_rest_framework_jwt登陆错误返回的解决
Oct 18 #Python
如何利用python读取micaps文件详解
Oct 18 #Python
Python中Yield的基本用法
Oct 18 #Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
Oct 18 #Python
You might like
PHP 第二节 数据类型之数值型
2012/04/28 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
深入分析PHP引用(&)
2014/09/04 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
2017/08/01 PHP
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
js 操作select相关方法函数
2009/12/06 Javascript
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
基于jquery的跟随屏幕滚动代码
2012/07/24 Javascript
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
js改变透明度实现轮播图的算法
2020/08/24 Javascript
JavaScript实现经典排序算法之插入排序
2016/12/28 Javascript
Vue开发过程中遇到的疑惑知识点总结
2017/01/20 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
JavaScript原生数组Array常用方法
2017/04/06 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
2017/10/31 Javascript
少女风vue组件库的制作全过程
2019/05/15 Javascript
node中实现删除目录的几种方法
2019/06/24 Javascript
js实现抽奖的两种方法
2020/03/19 Javascript
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
Python守护进程用法实例分析
2015/06/04 Python
Python写入数据到MP3文件中的方法
2015/07/10 Python
Python机器学习logistic回归代码解析
2018/01/17 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
在python3.64中安装pyinstaller库的方法步骤
2020/06/02 Python
python如何删除列为空的行
2020/07/17 Python
python爬虫使用scrapy注意事项
2020/11/23 Python
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
项目开发计划书
2014/01/09 职场文书
美发店5.1活动方案
2014/01/24 职场文书
交通工程专业推荐信
2014/09/06 职场文书
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python
VUE之图片Base64编码使用ElementUI组件上传
2022/04/09 Vue.js
Three.js实现雪糕地球的使用示例详解
2022/07/07 Javascript