zoukankan      html  css  js  c++  java
  • 【AMAD】betamax -- 一个ruby-VCR的模仿品,只支持requests

    简介

    betamax1会记录你的HTTP操作,可以让你在测试的时候不必重复进行真实的请求。

    动机

    如果你的代码需要和外部资源一起运作,那么测试这段代码的方法就叫做集成测试

    但是,其实你并没有办法确保外部资源总是如你所愿,因为它并不在你的控制之下。而你的测试,其实只需要针对你处理这个资源的部分代码就好了。

    一般测试外部的HTTP API有两个办法:

    1. 每次运行测试,都去请求这个资源。因为资源不在你的控制之下,访问外部资源有很多异常情况,而且访问很多接口会让你的测试运行非常的慢!
    2. 使用mock手段。mock是一个好办法,但是编写mock代码是非常啰嗦的。

    为什么我们不能记录下第一次访问资源时的response,之后就使用这个response来测试就好了。

    已经有人做过这件事了,就是Ruby的VCR2库。

    作用

    记录下第一次请求返回的response,保存到文件中。之后的请求,都会直接返回这个response的值。

    这个方式可以极大的加速测试案例的运行速度。

    并且,这个库还提供了pytest插件等方便的功能.

    但是,这个库只支持requests,如果你要记录其它的HTTP Client,请使用vcrpy3

    用法

    from betamax import Betamax
    from requests import Session
    from unittest import TestCase
    
    # 全局配置, 加入response记录的存放文件夹
    with Betamax.configure() as config:
        config.cassette_library_dir = 'tests/fixtures/cassettes'
    
    
    class TestGitHubAPI(TestCase):
        def setUp(self):
            self.session = Session()
            self.headers.update(...)
    
        # 可以通过Betamax instance的上下文管理器
        # 使用`.user_cassette()`方法来设置存放数据的名称
        def test_user(self):
            with Betamax(self.session) as vcr:
                vcr.use_cassette('user')
                resp = self.session.get('https://api.github.com/user',
                                        auth=('user', 'pass'))
                assert resp.json()['login'] is not None
    
        # `.user_cassette()` 本身,也支持上下文管理器协议
        def test_repo(self):
            with Betamax(self.session).use_cassette('repo'):
                resp = self.session.get(
                    'https://api.github.com/repos/sigmavirus24/github3.py'
                    )
                assert resp.json()['owner'] != {}
    

    个人评分

    类型评分
    实用性 ⭐️⭐️⭐️⭐️
    易用性 ⭐️⭐️⭐️
    有趣性 ⭐️⭐️⭐️⭐️
  • 相关阅读:
    Java 基础(六):循环
    Java基础(五):数组
    Java 基础(四):从面试题看String
    Java Grammar(二):运算符
    「每日五分钟,玩转JVM」:指针压缩
    一份让你效率翻倍的年终总结
    「每日五分钟,玩转 JVM」:GC 概览
    「每日五分钟,玩转JVM」:对象内存布局
    「每日五分钟,玩转JVM」:对象从哪来
    Azure Web App (二)使用部署槽切换部署环境代码
  • 原文地址:https://www.cnblogs.com/thomaszdxsn/p/AMADbetamax--yi-gerubyVCR-de-mo-fang-pin-dan-shi-z.html
Copyright © 2011-2022 走看看