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编写网页爬虫脚本并实现APScheduler调度
Jul 28 Python
Python数据拟合与广义线性回归算法学习
Dec 22 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
Dec 15 Python
Django使用AJAX调用自己写的API接口的方法
Mar 06 Python
python3 线性回归验证方法
Jul 09 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
Oct 23 Python
适合Python初学者的一些编程技巧
Feb 12 Python
keras实现VGG16 CIFAR10数据集方式
Jul 07 Python
Python txt文件如何转换成字典
Nov 03 Python
Python Selenium库的基本使用教程
Jan 04 Python
如何使用Python提取Chrome浏览器保存的密码
Jun 09 Python
Python基本数据类型之字符串str
Jul 21 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之COOKIE支持详解
2010/09/20 PHP
php二维数组排序方法(array_multisort usort)
2013/12/25 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
2016/10/10 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
firefox插件Firebug的使用教程
2010/01/02 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
JS 实现Json查询的方法实例
2013/04/12 Javascript
JavaScript中setInterval的用法总结
2013/11/20 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
jquery根据锚点offset值实现动画切换
2014/09/11 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
2015/06/15 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
2019/09/06 Javascript
如何在wxml中直接写js代码(wxs)
2019/11/14 Javascript
element 动态合并表格的步骤
2020/12/31 Javascript
原生JavaScript实现换肤
2021/02/19 Javascript
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python uuid模块使用实例
2015/04/08 Python
使用Python下的XSLT API进行web开发的简单教程
2015/04/15 Python
Python实现身份证号码解析
2015/09/01 Python
Python编程中对文件和存储器的读写示例
2016/01/25 Python
Django的HttpRequest和HttpResponse对象详解
2018/01/26 Python
python实现简单遗传算法
2018/03/19 Python
关于Tensorflow中的tf.train.batch函数的使用
2018/04/24 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
2018/06/22 Python
Python多进程池 multiprocessing Pool用法示例
2018/09/07 Python
python word转pdf代码实例
2019/08/16 Python
python编写实现抽奖器
2020/09/10 Python
大学生表扬信范文
2014/01/09 职场文书
常务副县长“四风”个人对照检查材料思想汇报
2014/10/02 职场文书
党的群众路线教育实践活动个人整改措施
2014/10/27 职场文书
优秀员工事迹材料
2014/12/20 职场文书
退休教师追悼词
2015/06/23 职场文书
每日六道java新手入门面试题,通往自由的道路
2021/06/30 Java/Android