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 相关文章推荐
Windows下安装python2和python3多版本教程
Mar 30 Python
动态规划之矩阵连乘问题Python实现方法
Nov 27 Python
python并发编程之线程实例解析
Dec 27 Python
Python实现获取前100组勾股数的方法示例
May 04 Python
Python实现钉钉发送报警消息的方法
Feb 20 Python
Python scrapy增量爬取实例及实现过程解析
Dec 24 Python
Python qrcode 生成一个二维码的实例详解
Feb 12 Python
python绘制玫瑰的实现代码
Mar 02 Python
Pandas读取csv时如何设置列名
Jun 02 Python
Python中Selenium模块的使用详解
Oct 09 Python
Python中BeautifulSoup通过查找Id获取元素信息
Dec 07 Python
python中xlutils库用法浅析
Dec 29 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作为Shell脚本语言使用
2006/10/09 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
2017/02/25 PHP
什么是PHP文件?如何打开PHP文件?
2017/06/27 PHP
jQuery对表单元素的取值和赋值操作代码
2011/05/19 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
javascript中的nextSibling使用陷(da)阱(keng)
2014/05/05 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
AngularJS Phonecat实例讲解
2016/11/21 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
js使用highlight.js高亮你的代码
2017/08/18 Javascript
jQuery实现菜单的显示和隐藏功能示例
2018/07/24 jQuery
Vue源码探究之状态初始化
2018/11/14 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
Python的爬虫包Beautiful Soup中用正则表达式来搜索
2016/01/20 Python
python 基本数据类型占用内存空间大小的实例
2018/06/12 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
命令行运行Python脚本时传入参数的三种方式详解
2019/10/11 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
2020/05/26 Python
英国女性时尚鞋类的潮流制造者:Koi Footwear
2018/10/19 全球购物
手工制作的男士奢华英国鞋和服装之家:Goodwin Smith
2019/06/21 全球购物
Smilodox官方运动服装店:从运动服到健身配件
2020/08/27 全球购物
10条PHP编程习惯
2014/05/26 面试题
初中地理教学反思
2014/01/11 职场文书
高中语文教学反思
2014/01/16 职场文书
简单的大学生自我鉴定
2014/02/18 职场文书
《乡下孩子》教学反思
2014/04/17 职场文书
三年级小学生评语
2014/04/22 职场文书
教师廉洁自律承诺书
2014/05/26 职场文书
教师国庆节演讲稿范文2014
2014/09/21 职场文书
沈阳故宫导游词
2015/01/31 职场文书
民事二审代理词
2015/05/25 职场文书
课程设计感想范文
2015/08/11 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python