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 相关文章推荐
通过mod_python配置运行在Apache上的Django框架
Jul 22 Python
在Django中限制已登录用户的访问的方法
Jul 23 Python
利用Python为iOS10生成图标和截屏
Sep 24 Python
python虚拟环境的安装配置图文教程
Oct 20 Python
python3.4爬虫demo
Jan 22 Python
django使用haystack调用Elasticsearch实现索引搜索
Jul 24 Python
python django生成迁移文件的实例
Aug 31 Python
wxpython绘制圆角窗体
Nov 18 Python
python itsdangerous模块的具体使用方法
Feb 17 Python
Django form表单与请求的生命周期步骤详解
Jun 07 Python
python用什么编辑器进行项目开发
Jun 17 Python
Python如何解除一个装饰器
Aug 07 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 读取文件内容代码(txt,js等)
2009/12/06 PHP
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
thinkPHP中分页用法实例分析
2015/12/26 PHP
php实现计算百度地图坐标之间距离的方法
2016/05/05 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
xmlHTTP实例
2006/10/24 Javascript
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
JS实现一个按钮的方法
2015/02/05 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
JS实现禁止高频率连续点击的方法【基于ES6语法】
2017/04/25 Javascript
Nodejs调用Dll模块的方法
2018/09/17 NodeJs
JS实现电脑虚拟键盘的操作
2020/06/24 Javascript
浅谈flask中的before_request与after_request
2018/01/20 Python
Python中交换两个元素的实现方法
2018/06/29 Python
python无限生成不重复(字母,数字,字符)组合的方法
2018/12/04 Python
Python之时间和日期使用小结
2019/02/14 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
python实现淘宝购物系统
2019/10/25 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
基于pandas中expand的作用详解
2019/12/17 Python
用python制作个音乐下载器
2021/01/30 Python
html5自定义video标签的海报与播放按钮功能
2019/12/04 HTML / CSS
6号汽车旅馆预订:Motel 6
2018/02/11 全球购物
门卫岗位职责
2013/11/15 职场文书
讲文明树新风公益广告宣传方案
2014/02/25 职场文书
综合办公室主任岗位职责
2014/04/13 职场文书
纪律教育月活动总结
2014/08/26 职场文书
爱祖国爱家乡演讲稿
2014/09/02 职场文书
2015政治思想表现评语
2015/03/25 职场文书
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python