接口-超时处理

一、简介

  • 在接口自动化测试过程中,时长会碰到请求超时的场景。

  • A发送请求,等待B响应,同时开始超时计时,如果在超时时间内成功接收到响应,则结束等待和计时,本次通讯成功;如果超过超时时间还没有接收到响应,则结束等待和计时,本次通讯失败,这个过程叫做请求超时。

二、使用场景

  • 在网络延迟、服务器负载过高的情况下,对接口进行请求,那么可能会遇到请求超时报错,这时就需要使用timeout参数控制请求时间,否则会导致用例堵塞。

  • 如下图所示,用例2没有设置超时处理,遇到服务端阻塞,用例2一直处于等待的状态,后面的用例都不执行:

image

  • 如下图所示,如果用例2设置了3S的超时时间,遇到服务端阻塞时,用户2在3S后会抛出异常,用例3正常执行:
    image

三、实战演示

  • 编写三条用例,在用例2中设置超时时间为3秒,超过5秒还未响应则抛出异常,后面的用例正常执行。
import requests

class TestReq:
    def test_one(self):
        r = requests.post("https://httpbin.ceshiren.com/post")
        print(r)
        assert r.status_code  == 200

    def test_two(self):
        try:
            # 通过 timeout 参数设置超时时间,设置超时时间为 0.1S,模拟超时场景
            r = requests.post("https://github.com/post", timeout=0.1)
            assert r.status_code == 200
        except requests.exceptions.Timeout:
            print("请求超时")
            return

    def test_three(self):

        r = requests.post("https://httpbin.ceshiren.com/post")
        print(r)
        assert r.status_code == 200