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实现多线程下载文件的代码实例
Jun 01 Python
Python的内存泄漏及gc模块的使用分析
Jul 16 Python
python新手经常遇到的17个错误分析
Jul 30 Python
Python字典操作简明总结
Apr 13 Python
python深度优先搜索和广度优先搜索
Feb 07 Python
python清除函数占用的内存方法
Jun 25 Python
Python使用Turtle库绘制一棵西兰花
Nov 23 Python
Django3.0 异步通信初体验(小结)
Dec 04 Python
详解Python的爬虫框架 Scrapy
Aug 03 Python
python给list排序的简单方法
Dec 10 Python
python之随机数函数的实现示例
Dec 30 Python
详解pytorch创建tensor函数
Mar 22 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
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
浅析php插件 HTMLPurifier HTML解析器
2013/07/01 PHP
服务器上配置PHP运行环境教程
2015/02/12 PHP
php抽象类用法实例分析
2015/07/07 PHP
php实现的简单美国商品税计算函数
2015/07/13 PHP
php实现登陆模块功能示例
2016/10/20 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
详解cookie验证的php应用的一种SSO解决办法
2017/10/20 PHP
php实现微信发红包功能
2018/07/13 PHP
Laravel 错误提示本地化的实现
2019/10/22 PHP
JQuery为textarea添加maxlength属性并且兼容IE
2013/04/25 Javascript
JS获取URL中的参数数据
2013/12/05 Javascript
jQuery中prepend()方法用法实例
2014/12/25 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
jQuery Ajax请求后台数据并在前台接收
2016/12/10 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
2017/01/10 Javascript
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
2017/06/14 Javascript
[01:08:44]NB vs VP 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python得到windows自启动列表的方法
2018/10/14 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
python实现简单五子棋游戏
2019/06/18 Python
Python 写入训练日志文件并控制台输出解析
2019/08/13 Python
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
英国知名奢侈品包包品牌:Milli Millu
2016/12/22 全球购物
英国袜子店:Sock Shop
2017/01/11 全球购物
linux面试题参考答案(4)
2013/01/28 面试题
生物专业个人自荐信范文
2013/11/29 职场文书
企划主管岗位职责
2013/12/12 职场文书
捐款倡议书范文
2014/02/02 职场文书
党支部四风整改方案
2014/10/25 职场文书
营销经理工作检讨书
2014/11/03 职场文书
陪护人员误工证明
2015/06/24 职场文书
2015初中政教处工作总结
2015/07/21 职场文书
详解MySQL主从复制及读写分离
2021/05/07 MySQL
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
2021/06/07 Python
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android