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和OpenCV库将URL转换为OpenCV格式的方法
Mar 27 Python
PyCharm使用教程之搭建Python开发环境
Jun 07 Python
Python3如何解决字符编码问题详解
Apr 23 Python
python的文件操作方法汇总
Nov 10 Python
python使用tensorflow保存、加载和使用模型的方法
Jan 31 Python
在python下读取并展示raw格式的图片实例
Jan 24 Python
python求最大值最小值方法总结
Jun 25 Python
python安装scipy的方法步骤
Jun 26 Python
python用类实现文章敏感词的过滤方法示例
Oct 27 Python
Python图像处理库PIL中图像格式转换的实现
Feb 26 Python
python中列表的含义及用法
May 26 Python
Pycharm的Available Packages为空的解决方法
Sep 18 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 和 MYSQL
2006/10/09 PHP
使用PHPMailer实现邮件发送代码分享
2014/10/23 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
2017/08/04 PHP
JavaScript常用对象的方法和属性小结
2012/01/24 Javascript
javascript中局部变量和全局变量的区别详解
2015/02/27 Javascript
jQuery实现表格颜色交替显示的方法
2015/03/09 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
jquery.validate使用时遇到的问题
2015/05/25 Javascript
AngularJS中如何使用$http对MongoLab数据表进行增删改查
2016/01/23 Javascript
基于JS实现9种不同的面包屑和分布式多步骤导航效果
2017/02/21 Javascript
AngularJS中下拉框的基本用法示例
2017/10/11 Javascript
spirngmvc js传递复杂json参数到controller的实例
2018/03/29 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
初探TensorFLow从文件读取图片的四种方式
2018/02/06 Python
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
Django Rest framework之认证的实现代码
2018/12/17 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
如何快速一次性卸载所有python包(第三方库)呢
2020/10/20 Python
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
RentCars.com巴西:汽车租赁网站
2016/08/22 全球购物
意大利时尚精品店:Nugnes 1920
2020/02/10 全球购物
酒店总经理助理职责
2014/02/12 职场文书
学习标兵获奖感言
2014/02/20 职场文书
项目合作意向书范本
2014/04/01 职场文书
研发工程师岗位职责
2014/04/28 职场文书
1000字打架检讨书
2014/11/03 职场文书
大型强子对撞机再次重启探索“第五种自然力”
2022/04/29 数码科技
Win11右下角图标点了没反应怎么办?Win11点击右下角图标无反应解决方法汇总
2022/07/07 数码科技